| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "base/mac_util.h" | 5 #include "base/mac_util.h" | 
| 6 #include "base/sys_string_conversions.h" | 6 #include "base/sys_string_conversions.h" | 
| 7 #include "chrome/browser/bookmarks/bookmark_editor.h" | 7 #include "chrome/browser/bookmarks/bookmark_editor.h" | 
| 8 #include "chrome/browser/bookmarks/bookmark_model.h" | 8 #include "chrome/browser/bookmarks/bookmark_model.h" | 
| 9 #include "chrome/browser/browser.h" | 9 #include "chrome/browser/browser.h" | 
| 10 #include "chrome/browser/browser_list.h" | 10 #include "chrome/browser/browser_list.h" | 
| 11 #import "chrome/browser/cocoa/bookmark_bar_bridge.h" | 11 #import "chrome/browser/cocoa/bookmark_bar_bridge.h" | 
| 12 #import "chrome/browser/cocoa/bookmark_bar_controller.h" | 12 #import "chrome/browser/cocoa/bookmark_bar_controller.h" | 
| 13 #import "chrome/browser/cocoa/bookmark_button_cell.h" | 13 #import "chrome/browser/cocoa/bookmark_button_cell.h" | 
| 14 #import "chrome/browser/cocoa/bookmark_editor_controller.h" | 14 #import "chrome/browser/cocoa/bookmark_editor_controller.h" | 
| 15 #import "chrome/browser/cocoa/bookmark_name_folder_controller.h" | 15 #import "chrome/browser/cocoa/bookmark_name_folder_controller.h" | 
| 16 #import "chrome/browser/cocoa/bookmark_menu_cocoa_controller.h" | 16 #import "chrome/browser/cocoa/bookmark_menu_cocoa_controller.h" | 
|  | 17 #import "chrome/browser/cocoa/view_resizer.h" | 
| 17 #include "chrome/browser/cocoa/nsimage_cache.h" | 18 #include "chrome/browser/cocoa/nsimage_cache.h" | 
| 18 #include "chrome/browser/profile.h" | 19 #include "chrome/browser/profile.h" | 
| 19 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" | 
| 20 #include "chrome/common/pref_service.h" | 21 #include "chrome/common/pref_service.h" | 
| 21 #include "skia/ext/skia_utils_mac.h" | 22 #include "skia/ext/skia_utils_mac.h" | 
| 22 | 23 | 
| 23 @interface BookmarkBarController(Private) | 24 @interface BookmarkBarController(Private) | 
| 24 - (void)applyContentAreaOffset:(BOOL)apply immediately:(BOOL)immediately; | 25 - (void)applyContentAreaOffset:(BOOL)apply immediately:(BOOL)immediately; | 
| 25 - (void)showBookmarkBar:(BOOL)enable immediately:(BOOL)immediately; | 26 - (void)showBookmarkBar:(BOOL)enable immediately:(BOOL)immediately; | 
| 26 - (void)addNode:(const BookmarkNode*)child toMenu:(NSMenu*)menu; | 27 - (void)addNode:(const BookmarkNode*)child toMenu:(NSMenu*)menu; | 
| 27 - (void)addFolderNode:(const BookmarkNode*)node toMenu:(NSMenu*)menu; | 28 - (void)addFolderNode:(const BookmarkNode*)node toMenu:(NSMenu*)menu; | 
| 28 - (void)tagEmptyMenu:(NSMenu*)menu; | 29 - (void)tagEmptyMenu:(NSMenu*)menu; | 
| 29 - (void)clearMenuTagMap; | 30 - (void)clearMenuTagMap; | 
| 30 @end | 31 @end | 
| 31 | 32 | 
| 32 namespace { | 33 namespace { | 
| 33 | 34 | 
| 34 // TODO(jrg): this is the right proportional height but overlaps the |  | 
| 35 // "blue outline" of the omnibox.  Fix. |  | 
| 36 |  | 
| 37 // Our height, when opened. | 35 // Our height, when opened. | 
| 38 const int kBookmarkBarHeight = 30; | 36 const int kBookmarkBarHeight = 30; | 
| 39 // How much to adjust our parent view. |  | 
| 40 const int kBookmarkBarSuperviewHeightAdjustment = 25; |  | 
| 41 // How much to adjust the web frame. |  | 
| 42 const int kBookmarkBarWebframeHeightAdjustment = 25; |  | 
| 43 | 37 | 
| 44 // Magic numbers from Cole | 38 // Magic numbers from Cole | 
| 45 const CGFloat kDefaultBookmarkWidth = 150.0; | 39 const CGFloat kDefaultBookmarkWidth = 150.0; | 
| 46 const CGFloat kBookmarkVerticalPadding = 2.0; | 40 const CGFloat kBookmarkVerticalPadding = 2.0; | 
| 47 const CGFloat kBookmarkHorizontalPadding = 1.0; | 41 const CGFloat kBookmarkHorizontalPadding = 1.0; | 
| 48 }; | 42 }; | 
| 49 | 43 | 
| 50 @implementation BookmarkBarController | 44 @implementation BookmarkBarController | 
| 51 | 45 | 
| 52 - (id)initWithProfile:(Profile*)profile | 46 - (id)initWithProfile:(Profile*)profile | 
| 53            parentView:(NSView*)parentView | 47          initialWidth:(float)initialWidth | 
| 54        webContentView:(NSView*)webContentView | 48        resizeDelegate:(id<ViewResizer>)resizeDelegate | 
| 55          infoBarsView:(NSView*)infoBarsView | 49           urlDelegate:(id<BookmarkURLOpener>)urlDelegate { | 
| 56              delegate:(id<BookmarkURLOpener>)delegate { |  | 
| 57   if ((self = [super initWithNibName:@"BookmarkBar" | 50   if ((self = [super initWithNibName:@"BookmarkBar" | 
| 58                               bundle:mac_util::MainAppBundle()])) { | 51                               bundle:mac_util::MainAppBundle()])) { | 
| 59     profile_ = profile; | 52     profile_ = profile; | 
|  | 53     initialWidth_ = initialWidth; | 
| 60     bookmarkModel_ = profile->GetBookmarkModel(); | 54     bookmarkModel_ = profile->GetBookmarkModel(); | 
| 61     parentView_ = parentView; |  | 
| 62     webContentView_ = webContentView; |  | 
| 63     infoBarsView_ = infoBarsView; |  | 
| 64     buttons_.reset([[NSMutableArray alloc] init]); | 55     buttons_.reset([[NSMutableArray alloc] init]); | 
| 65     delegate_ = delegate; | 56     resizeDelegate_ = resizeDelegate; | 
|  | 57     urlDelegate_ = urlDelegate; | 
| 66   } | 58   } | 
| 67   return self; | 59   return self; | 
| 68 } | 60 } | 
| 69 | 61 | 
| 70 - (void)dealloc { | 62 - (void)dealloc { | 
| 71   [[NSNotificationCenter defaultCenter] removeObserver:self]; | 63   [[NSNotificationCenter defaultCenter] removeObserver:self]; | 
| 72   [super dealloc]; | 64   [super dealloc]; | 
| 73 } | 65 } | 
| 74 | 66 | 
| 75 - (void)awakeFromNib { | 67 - (void)awakeFromNib { | 
| 76   // We default to NOT open, which means height=0. | 68   // We default to NOT open, which means height=0. | 
| 77   DCHECK([[self view] isHidden]);  // Hidden so it's OK to change. | 69   DCHECK([[self view] isHidden]);  // Hidden so it's OK to change. | 
| 78   NSRect frame = [[self view] frame]; |  | 
| 79   frame.size.height = 0; |  | 
| 80   frame.size.width = [parentView_ frame].size.width; |  | 
| 81   [[self view] setFrame:frame]; |  | 
| 82 | 70 | 
| 83   // Make sure the nodes stay bottom-aligned. | 71   // Set our initial height to zero, since that is what the superview | 
| 84   [[self view] setAutoresizingMask:(NSViewWidthSizable | | 72   // expects.  We will resize ourselves open later if needed. | 
| 85                                          NSViewMinYMargin)]; | 73   [[self view] setFrame:NSMakeRect(0, 0, initialWidth_, 0)]; | 
|  | 74 | 
| 86   // Be sure to enable the bar before trying to show it... | 75   // Be sure to enable the bar before trying to show it... | 
| 87   barIsEnabled_ = YES; | 76   barIsEnabled_ = YES; | 
| 88   if (profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar)) | 77   if (profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar)) | 
| 89     [self showBookmarkBar:YES immediately:YES]; | 78     [self showBookmarkBar:YES immediately:YES]; | 
| 90 | 79 | 
| 91   // Don't pass ourself along (as 'self') until our init is completely | 80   // Don't pass ourself along (as 'self') until our init is completely | 
| 92   // done.  Thus, this call is (almost) last. | 81   // done.  Thus, this call is (almost) last. | 
| 93   bridge_.reset(new BookmarkBarBridge(self, bookmarkModel_)); | 82   bridge_.reset(new BookmarkBarBridge(self, bookmarkModel_)); | 
| 94 | 83 | 
| 95   // When resized we may need to add new buttons, or remove them (if | 84   // When resized we may need to add new buttons, or remove them (if | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 128 } | 117 } | 
| 129 | 118 | 
| 130 // Show or hide the bar based on the value of |show|. Handles | 119 // Show or hide the bar based on the value of |show|. Handles | 
| 131 // animating the resize of the content view.  if |immediately| is YES, | 120 // animating the resize of the content view.  if |immediately| is YES, | 
| 132 // make changes immediately instead of using an animator.  If the bar | 121 // make changes immediately instead of using an animator.  If the bar | 
| 133 // is disabled, do absolutely nothing.  The routine which enables the | 122 // is disabled, do absolutely nothing.  The routine which enables the | 
| 134 // bar will show it if relevant using other mechanisms (the pref) to | 123 // bar will show it if relevant using other mechanisms (the pref) to | 
| 135 // determine desired state. | 124 // determine desired state. | 
| 136 - (void)showBookmarkBar:(BOOL)show immediately:(BOOL)immediately { | 125 - (void)showBookmarkBar:(BOOL)show immediately:(BOOL)immediately { | 
| 137   if (barIsEnabled_ && (barShouldBeShown_ != show)) { | 126   if (barIsEnabled_ && (barShouldBeShown_ != show)) { | 
| 138     contentViewHasOffset_ = show; | 127     if ([self view]) { | 
| 139     [[self view] setHidden:show ? NO : YES]; | 128       [[self view] setHidden:show ? NO : YES]; | 
|  | 129       [resizeDelegate_ resizeView:[self view] | 
|  | 130                        newHeight:(show ? kBookmarkBarHeight : 0)]; | 
|  | 131     } | 
| 140     barShouldBeShown_ = show; | 132     barShouldBeShown_ = show; | 
| 141     if (show) { | 133     if (show) { | 
| 142       [self loaded:bookmarkModel_]; | 134       [self loaded:bookmarkModel_]; | 
| 143     } | 135     } | 
| 144     [self applyContentAreaOffset:show immediately:immediately]; |  | 
| 145   } | 136   } | 
| 146 } | 137 } | 
| 147 | 138 | 
| 148 // Apply a contents box offset to make (or remove) room for the |  | 
| 149 // bookmark bar.  If apply==YES, always make room (the contentView_ is |  | 
| 150 // "full size").  If apply==NO we are trying to undo an offset.  If no |  | 
| 151 // offset there is nothing to undo. |  | 
| 152 // |  | 
| 153 // TODO(jrg): it is awkward we change the sizes of views for our |  | 
| 154 // parent and siblings; ideally they change their own sizes. |  | 
| 155 // |  | 
| 156 // TODO(jrg): unlike windows, we process events while an animator is |  | 
| 157 // running.  Thus, if you resize the window while the bookmark bar is |  | 
| 158 // animating, you'll mess things up.  Fix. |  | 
| 159 - (void)applyContentAreaOffset:(BOOL)apply immediately:(BOOL)immediately { |  | 
| 160   if ([self view] == nil) { |  | 
| 161     // We're too early, but awakeFromNib will call me again. |  | 
| 162     return; |  | 
| 163   } |  | 
| 164   if (!contentViewHasOffset_ && apply) { |  | 
| 165     // There is no offset to unconditionally apply. |  | 
| 166     return; |  | 
| 167   } |  | 
| 168 |  | 
| 169   // None of these locals are members of the Hall of Justice. |  | 
| 170   NSRect superframe = [parentView_ frame]; |  | 
| 171   NSRect frame = [[self view] frame]; |  | 
| 172   NSRect webframe = [webContentView_ frame]; |  | 
| 173   NSRect infoframe = [infoBarsView_ frame]; |  | 
| 174   if (apply) { |  | 
| 175     superframe.size.height += kBookmarkBarSuperviewHeightAdjustment; |  | 
| 176     // TODO(jrg): y=0 if we add the bookmark bar before the parent |  | 
| 177     // view (toolbar) is placed in the view hierarchy.  A different |  | 
| 178     // CL, where the bookmark bar is extracted from the toolbar nib, |  | 
| 179     // may fix this awkwardness. |  | 
| 180     if (superframe.origin.y > 0) { |  | 
| 181       superframe.origin.y -= kBookmarkBarSuperviewHeightAdjustment; |  | 
| 182       webframe.size.height -= kBookmarkBarWebframeHeightAdjustment; |  | 
| 183     } |  | 
| 184     frame.size.height += kBookmarkBarHeight; |  | 
| 185     infoframe.origin.y -= kBookmarkBarWebframeHeightAdjustment; |  | 
| 186   } else { |  | 
| 187     superframe.size.height -= kBookmarkBarSuperviewHeightAdjustment; |  | 
| 188     superframe.origin.y += kBookmarkBarSuperviewHeightAdjustment; |  | 
| 189     frame.size.height -= kBookmarkBarHeight; |  | 
| 190     webframe.size.height += kBookmarkBarWebframeHeightAdjustment; |  | 
| 191     infoframe.origin.y += kBookmarkBarWebframeHeightAdjustment; |  | 
| 192   } |  | 
| 193 |  | 
| 194   // TODO(jrg): Animators can be a little fussy.  Setting these three |  | 
| 195   // off can sometimes causes races where the finish isn't as |  | 
| 196   // expected.  Fix, or clean out the animators as an option. |  | 
| 197   // Odd racing is FAR worse than a lack of an animator. |  | 
| 198   if (1 /* immediately */) { |  | 
| 199     [parentView_ setFrame:superframe]; |  | 
| 200     [webContentView_ setFrame:webframe]; |  | 
| 201     [infoBarsView_ setFrame:infoframe]; |  | 
| 202     [[self view] setFrame:frame]; |  | 
| 203   } else { |  | 
| 204     [[parentView_ animator] setFrame:superframe]; |  | 
| 205     [[webContentView_ animator] setFrame:webframe]; |  | 
| 206     [[infoBarsView_ animator] setFrame:infoframe]; |  | 
| 207     [[[self view] animator] setFrame:frame]; |  | 
| 208   } |  | 
| 209 |  | 
| 210   [[self view] setNeedsDisplay:YES]; |  | 
| 211   [parentView_ setNeedsDisplay:YES]; |  | 
| 212   [webContentView_ setNeedsDisplay:YES]; |  | 
| 213   [infoBarsView_ setNeedsDisplay:YES]; |  | 
| 214 } |  | 
| 215 |  | 
| 216 - (BOOL)isBookmarkBarVisible { | 139 - (BOOL)isBookmarkBarVisible { | 
| 217   return barShouldBeShown_; | 140   return barShouldBeShown_; | 
| 218 } | 141 } | 
| 219 | 142 | 
| 220 // We don't change a preference; we only change visibility. | 143 // We don't change a preference; we only change visibility. | 
| 221 // Preference changing (global state) is handled in | 144 // Preference changing (global state) is handled in | 
| 222 // BrowserWindowCocoa::ToggleBookmarkBar(). | 145 // BrowserWindowCocoa::ToggleBookmarkBar(). | 
| 223 - (void)toggleBookmarkBar { | 146 - (void)toggleBookmarkBar { | 
| 224   [self showBookmarkBar:!barShouldBeShown_ immediately:YES]; | 147   [self showBookmarkBar:!barShouldBeShown_ immediately:YES]; | 
| 225 } | 148 } | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 252 - (BookmarkNode*)nodeFromButton:(id)button { | 175 - (BookmarkNode*)nodeFromButton:(id)button { | 
| 253   NSCell* cell = [button cell]; | 176   NSCell* cell = [button cell]; | 
| 254   BookmarkNode* node = static_cast<BookmarkNode*>( | 177   BookmarkNode* node = static_cast<BookmarkNode*>( | 
| 255       [[cell representedObject] pointerValue]); | 178       [[cell representedObject] pointerValue]); | 
| 256   DCHECK(node); | 179   DCHECK(node); | 
| 257   return node; | 180   return node; | 
| 258 } | 181 } | 
| 259 | 182 | 
| 260 - (IBAction)openBookmark:(id)sender { | 183 - (IBAction)openBookmark:(id)sender { | 
| 261   BookmarkNode* node = [self nodeFromButton:sender]; | 184   BookmarkNode* node = [self nodeFromButton:sender]; | 
| 262   [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; | 185   [urlDelegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; | 
| 263 } | 186 } | 
| 264 | 187 | 
| 265 // Given a NSMenuItem tag, return the appropriate bookmark node id. | 188 // Given a NSMenuItem tag, return the appropriate bookmark node id. | 
| 266 - (int64)nodeIdFromMenuTag:(int32)tag { | 189 - (int64)nodeIdFromMenuTag:(int32)tag { | 
| 267   return menuTagMap_[tag]; | 190   return menuTagMap_[tag]; | 
| 268 } | 191 } | 
| 269 | 192 | 
| 270 // Create and return a new tag for the given node id. | 193 // Create and return a new tag for the given node id. | 
| 271 - (int32)menuTagFromNodeId:(int64)menuid { | 194 - (int32)menuTagFromNodeId:(int64)menuid { | 
| 272   int tag = seedId_++; | 195   int tag = seedId_++; | 
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 375                  withEvent:[NSApp currentEvent] | 298                  withEvent:[NSApp currentEvent] | 
| 376                    forView:sender]; | 299                    forView:sender]; | 
| 377 } | 300 } | 
| 378 | 301 | 
| 379 // As a convention we set the menu's delegate to be the button's cell | 302 // As a convention we set the menu's delegate to be the button's cell | 
| 380 // so we can easily obtain bookmark info.  Convention applied in | 303 // so we can easily obtain bookmark info.  Convention applied in | 
| 381 // -[BookmarkButtonCell menu]. | 304 // -[BookmarkButtonCell menu]. | 
| 382 | 305 | 
| 383 - (IBAction)openBookmarkInNewForegroundTab:(id)sender { | 306 - (IBAction)openBookmarkInNewForegroundTab:(id)sender { | 
| 384   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 307   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 
| 385   [delegate_ openBookmarkURL:node->GetURL() disposition:NEW_FOREGROUND_TAB]; | 308   [urlDelegate_ openBookmarkURL:node->GetURL() disposition:NEW_FOREGROUND_TAB]; | 
| 386 } | 309 } | 
| 387 | 310 | 
| 388 - (IBAction)openBookmarkInNewWindow:(id)sender { | 311 - (IBAction)openBookmarkInNewWindow:(id)sender { | 
| 389   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 312   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 
| 390   [delegate_ openBookmarkURL:node->GetURL() disposition:NEW_WINDOW]; | 313   [urlDelegate_ openBookmarkURL:node->GetURL() disposition:NEW_WINDOW]; | 
| 391 } | 314 } | 
| 392 | 315 | 
| 393 - (IBAction)openBookmarkInIncognitoWindow:(id)sender { | 316 - (IBAction)openBookmarkInIncognitoWindow:(id)sender { | 
| 394   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 317   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 
| 395   [delegate_ openBookmarkURL:node->GetURL() disposition:OFF_THE_RECORD]; | 318   [urlDelegate_ openBookmarkURL:node->GetURL() disposition:OFF_THE_RECORD]; | 
| 396 } | 319 } | 
| 397 | 320 | 
| 398 - (IBAction)editBookmark:(id)sender { | 321 - (IBAction)editBookmark:(id)sender { | 
| 399   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 322   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 
| 400 | 323 | 
| 401   // TODO(jrg): on windows, folder "buttons" use the bar's context | 324   // TODO(jrg): on windows, folder "buttons" use the bar's context | 
| 402   // menu (but with extra items enabled, like Rename).  For now we do | 325   // menu (but with extra items enabled, like Rename).  For now we do | 
| 403   // a cheat and redirect so we have the functionality available. | 326   // a cheat and redirect so we have the functionality available. | 
| 404   if (node->is_folder()) { | 327   if (node->is_folder()) { | 
| 405     [self addOrRenameFolder:sender]; | 328     [self addOrRenameFolder:sender]; | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 424 - (IBAction)deleteBookmark:(id)sender { | 347 - (IBAction)deleteBookmark:(id)sender { | 
| 425   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 348   BookmarkNode* node = [self nodeFromMenuItem:sender]; | 
| 426   bookmarkModel_->Remove(node->GetParent(), | 349   bookmarkModel_->Remove(node->GetParent(), | 
| 427                          node->GetParent()->IndexOfChild(node)); | 350                          node->GetParent()->IndexOfChild(node)); | 
| 428 } | 351 } | 
| 429 | 352 | 
| 430 - (void)openBookmarkNodesRecursive:(BookmarkNode*)node { | 353 - (void)openBookmarkNodesRecursive:(BookmarkNode*)node { | 
| 431   for (int i = 0; i < node->GetChildCount(); i++) { | 354   for (int i = 0; i < node->GetChildCount(); i++) { | 
| 432     BookmarkNode* child = node->GetChild(i); | 355     BookmarkNode* child = node->GetChild(i); | 
| 433     if (child->is_url()) | 356     if (child->is_url()) | 
| 434       [delegate_ openBookmarkURL:child->GetURL() | 357       [urlDelegate_ openBookmarkURL:child->GetURL() | 
| 435                      disposition:NEW_BACKGROUND_TAB]; | 358                      disposition:NEW_BACKGROUND_TAB]; | 
| 436     else | 359     else | 
| 437       [self openBookmarkNodesRecursive:child]; | 360       [self openBookmarkNodesRecursive:child]; | 
| 438   } | 361   } | 
| 439 } | 362 } | 
| 440 | 363 | 
| 441 - (IBAction)openAllBookmarks:(id)sender { | 364 - (IBAction)openAllBookmarks:(id)sender { | 
| 442   // TODO(jrg): | 365   // TODO(jrg): | 
| 443   // Is there an easier way to get a non-const root node for the bookmark bar? | 366   // Is there an easier way to get a non-const root node for the bookmark bar? | 
| 444   // I can't iterate over them unless it's non-const. | 367   // I can't iterate over them unless it's non-const. | 
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 565         each_frame.origin.x += delta; | 488         each_frame.origin.x += delta; | 
| 566         [each_button setFrame:each_frame]; | 489         [each_button setFrame:each_frame]; | 
| 567       } | 490       } | 
| 568     } | 491     } | 
| 569   } | 492   } | 
| 570 } | 493 } | 
| 571 | 494 | 
| 572 - (IBAction)openBookmarkMenuItem:(id)sender { | 495 - (IBAction)openBookmarkMenuItem:(id)sender { | 
| 573   int64 tag = [self nodeIdFromMenuTag:[sender tag]]; | 496   int64 tag = [self nodeIdFromMenuTag:[sender tag]]; | 
| 574   const BookmarkNode* node = bookmarkModel_->GetNodeByID(tag); | 497   const BookmarkNode* node = bookmarkModel_->GetNodeByID(tag); | 
| 575   [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; | 498   [urlDelegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; | 
| 576 } | 499 } | 
| 577 | 500 | 
| 578 // Add all items from the given model to our bookmark bar. | 501 // Add all items from the given model to our bookmark bar. | 
| 579 // TODO(jrg): lots of things! | 502 // TODO(jrg): lots of things! | 
| 580 //  - bookmark folders (e.g. menu from the button) | 503 //  - bookmark folders (e.g. menu from the button) | 
| 581 //  - button and menu on the right for when bookmarks don't all fit on the | 504 //  - button and menu on the right for when bookmarks don't all fit on the | 
| 582 //    screen | 505 //    screen | 
| 583 //  - ... | 506 //  - ... | 
| 584 // | 507 // | 
| 585 // TODO(jrg): write a "build bar" so there is a nice spot for things | 508 // TODO(jrg): write a "build bar" so there is a nice spot for things | 
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 693     } | 616     } | 
| 694   } | 617   } | 
| 695 } | 618 } | 
| 696 | 619 | 
| 697 // TODO(jrg): for now this is brute force. | 620 // TODO(jrg): for now this is brute force. | 
| 698 - (void)nodeChildrenReordered:(BookmarkModel*)model | 621 - (void)nodeChildrenReordered:(BookmarkModel*)model | 
| 699                          node:(const BookmarkNode*)node { | 622                          node:(const BookmarkNode*)node { | 
| 700   [self loaded:model]; | 623   [self loaded:model]; | 
| 701 } | 624 } | 
| 702 | 625 | 
| 703 - (void)setDelegate:(id<BookmarkURLOpener>)delegate { | 626 - (void)setUrlDelegate:(id<BookmarkURLOpener>)urlDelegate { | 
| 704   delegate_ = delegate; | 627   urlDelegate_ = urlDelegate; | 
| 705 } | 628 } | 
| 706 | 629 | 
| 707 - (NSArray*)buttons { | 630 - (NSArray*)buttons { | 
| 708   return buttons_.get(); | 631   return buttons_.get(); | 
| 709 } | 632 } | 
| 710 | 633 | 
| 711 @end | 634 @end | 
| OLD | NEW | 
|---|