1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.h" 6 7 #include "base/string16.h" 8 #include "base/sys_string_conversions.h" 9 #include "chrome/browser/bookmarks/bookmark_model.h" 10 #include "chrome/browser/tabs/tab_strip_model.h" 11 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser_list.h" 13 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 14 #include "content/browser/tab_contents/tab_contents.h" 15 #include "grit/generated_resources.h" 16 #include "ui/base/l10n/l10n_util_mac.h" 17 18 @implementation BookmarkAllTabsController 19 20 - (id)initWithParentWindow:(NSWindow*)parentWindow 21 profile:(Profile*)profile 22 parent:(const BookmarkNode*)parent 23 configuration:(BookmarkEditor::Configuration)configuration { 24 NSString* nibName = @"BookmarkAllTabs"; 25 if ((self = [super initWithParentWindow:parentWindow 26 nibName:nibName 27 profile:profile 28 parent:parent 29 configuration:configuration])) { 30 } 31 return self; 32 } 33 34 - (void)awakeFromNib { 35 [self setInitialName: 36 l10n_util::GetNSStringWithFixup(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME)]; 37 [super awakeFromNib]; 38 } 39 40 #pragma mark Bookmark Editing 41 42 - (void)UpdateActiveTabPairs { 43 activeTabPairsVector_.clear(); 44 Browser* browser = BrowserList::GetLastActive(); 45 TabStripModel* tabstrip_model = browser->tabstrip_model(); 46 const int tabCount = tabstrip_model->count(); 47 for (int i = 0; i < tabCount; ++i) { 48 TabContents* tc = tabstrip_model->GetTabContentsAt(i)->tab_contents(); 49 const string16 tabTitle = tc->GetTitle(); 50 const GURL& tabURL(tc->GetURL()); 51 ActiveTabNameURLPair tabPair(tabTitle, tabURL); 52 activeTabPairsVector_.push_back(tabPair); 53 } 54 } 55 56 // Called by -[BookmarkEditorBaseController ok:]. Creates the container 57 // folder for the tabs and then the bookmarks in that new folder. 58 // Returns a BOOL as an NSNumber indicating that the commit may proceed. 59 - (NSNumber*)didCommit { 60 NSString* name = [[self displayName] stringByTrimmingCharactersInSet: 61 [NSCharacterSet newlineCharacterSet]]; 62 std::wstring newTitle = base::SysNSStringToWide(name); 63 const BookmarkNode* newParentNode = [self selectedNode]; 64 if (!newParentNode) 65 return [NSNumber numberWithBool:NO]; 66 int newIndex = newParentNode->child_count(); 67 // Create the new folder which will contain all of the tab URLs. 68 NSString* newFolderName = [self displayName]; 69 string16 newFolderString = base::SysNSStringToUTF16(newFolderName); 70 BookmarkModel* model = [self bookmarkModel]; 71 const BookmarkNode* newFolder = model->AddFolder(newParentNode, newIndex, 72 newFolderString); 73 // Get a list of all open tabs, create nodes for them, and add 74 // to the new folder node. 75 [self UpdateActiveTabPairs]; 76 int i = 0; 77 for (ActiveTabsNameURLPairVector::const_iterator it = 78 activeTabPairsVector_.begin(); 79 it != activeTabPairsVector_.end(); ++it, ++i) { 80 model->AddURL(newFolder, i, it->first, it->second); 81 } 82 return [NSNumber numberWithBool:YES]; 83 } 84 85 - (ActiveTabsNameURLPairVector*)activeTabPairsVector { 86 return &activeTabPairsVector_; 87 } 88 89 @end // BookmarkAllTabsController 90 91