| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controlle
r.h" | 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controlle
r.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "chrome/app/chrome_command_ids.h" | 9 #include "chrome/app/chrome_command_ids.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_model.h" | 10 #include "chrome/browser/bookmarks/bookmark_model.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 } | 55 } |
| 56 | 56 |
| 57 // Re-creates |bookmarkContextMenuController_| and |menuController_| based on | 57 // Re-creates |bookmarkContextMenuController_| and |menuController_| based on |
| 58 // |bookmarkModel| and the current value of |bookmarkNode_|. | 58 // |bookmarkModel| and the current value of |bookmarkNode_|. |
| 59 - (void)createMenuControllers:(BookmarkModel*)bookmarkModel { | 59 - (void)createMenuControllers:(BookmarkModel*)bookmarkModel { |
| 60 const BookmarkNode* parent = NULL; | 60 const BookmarkNode* parent = NULL; |
| 61 std::vector<const BookmarkNode*> nodes; | 61 std::vector<const BookmarkNode*> nodes; |
| 62 if (bookmarkNode_ == bookmarkModel->other_node()) { | 62 if (bookmarkNode_ == bookmarkModel->other_node()) { |
| 63 nodes.push_back(bookmarkNode_); | 63 nodes.push_back(bookmarkNode_); |
| 64 parent = bookmarkModel->bookmark_bar_node(); | 64 parent = bookmarkModel->bookmark_bar_node(); |
| 65 } else if (bookmarkNode_ != bookmarkModel->bookmark_bar_node()) { | 65 } else if (bookmarkNode_ == bookmarkModel->bookmark_bar_node()) { |
| 66 parent = bookmarkModel->bookmark_bar_node(); |
| 67 nodes.push_back(parent); |
| 68 } else if (bookmarkNode_) { |
| 66 nodes.push_back(bookmarkNode_); | 69 nodes.push_back(bookmarkNode_); |
| 67 parent = bookmarkNode_->parent(); | 70 parent = bookmarkNode_->parent(); |
| 68 } else { | |
| 69 parent = bookmarkModel->bookmark_bar_node(); | |
| 70 nodes.push_back(parent); | |
| 71 } | 71 } |
| 72 | 72 |
| 73 Browser* browser = [bookmarkBarController_ browser]; | 73 Browser* browser = [bookmarkBarController_ browser]; |
| 74 bookmarkContextMenuController_.reset( | 74 bookmarkContextMenuController_.reset( |
| 75 new BookmarkContextMenuController([bookmarkBarController_ browserWindow], | 75 new BookmarkContextMenuController([bookmarkBarController_ browserWindow], |
| 76 bridge_.get(), browser, | 76 bridge_.get(), browser, |
| 77 browser->profile(), browser, parent, | 77 browser->profile(), browser, parent, |
| 78 nodes)); | 78 nodes)); |
| 79 ui::SimpleMenuModel* menuModel = | 79 ui::SimpleMenuModel* menuModel = |
| 80 bookmarkContextMenuController_->menu_model(); | 80 bookmarkContextMenuController_->menu_model(); |
| 81 menuController_.reset([[MenuController alloc] initWithModel:menuModel | 81 menuController_.reset([[MenuController alloc] initWithModel:menuModel |
| 82 useWithPopUpButtonCell:NO]); | 82 useWithPopUpButtonCell:NO]); |
| 83 } | 83 } |
| 84 | 84 |
| 85 - (NSMenu*)menuForBookmarkNode:(const BookmarkNode*)node { | 85 - (BookmarkModel*)bookmarkModel { |
| 86 // Depending on timing, the model may not yet have been loaded. | 86 // Depending on timing, the model may not yet have been loaded. |
| 87 BookmarkModel* bookmarkModel = [bookmarkBarController_ bookmarkModel]; | 87 BookmarkModel* bookmarkModel = [bookmarkBarController_ bookmarkModel]; |
| 88 if (!bookmarkModel || !bookmarkModel->loaded()) | 88 if (!bookmarkModel || !bookmarkModel->loaded()) |
| 89 return nil; | 89 return nil; |
| 90 return bookmarkModel; |
| 91 } |
| 92 |
| 93 - (NSMenu*)menuForBookmarkNode:(const BookmarkNode*)node { |
| 94 BookmarkModel* bookmarkModel = [self bookmarkModel]; |
| 90 | 95 |
| 91 // This may be called before the BMB view has been added to the window. In | 96 // This may be called before the BMB view has been added to the window. In |
| 92 // that case, simply return nil so that BookmarkContextMenuController doesn't | 97 // that case, simply return nil so that BookmarkContextMenuController doesn't |
| 93 // get created with a nil window. | 98 // get created with a nil window. |
| 94 if (![bookmarkBarController_ browserWindow]) | 99 if (!bookmarkModel || ![bookmarkBarController_ browserWindow]) |
| 95 return nil; | 100 return nil; |
| 96 | 101 |
| 97 if (!node) | |
| 98 node = bookmarkModel->bookmark_bar_node(); | |
| 99 | |
| 100 // Rebuild the menu if it's for a different node than the last request. | 102 // Rebuild the menu if it's for a different node than the last request. |
| 101 if (!menuController_ || node != bookmarkNode_) { | 103 if (!menuController_ || node != bookmarkNode_) { |
| 102 bookmarkNode_ = node; | 104 bookmarkNode_ = node; |
| 103 [self createMenuControllers:bookmarkModel]; | 105 [self createMenuControllers:bookmarkModel]; |
| 104 } | 106 } |
| 105 return [menuController_ menu]; | 107 return [menuController_ menu]; |
| 106 } | 108 } |
| 107 | 109 |
| 110 - (NSMenu*)menuForBookmarkBar { |
| 111 BookmarkModel* bookmarkModel = [self bookmarkModel]; |
| 112 if (!bookmarkModel) |
| 113 return nil; |
| 114 |
| 115 return [self menuForBookmarkNode:bookmarkModel->bookmark_bar_node()]; |
| 116 } |
| 117 |
| 108 - (void)willExecuteCommand:(int)command { | 118 - (void)willExecuteCommand:(int)command { |
| 109 // Some items should not close currently-open sub-folder menus. | 119 // Some items should not close currently-open sub-folder menus. |
| 110 switch (command) { | 120 switch (command) { |
| 111 case IDC_CUT: | 121 case IDC_CUT: |
| 112 case IDC_COPY: | 122 case IDC_COPY: |
| 113 case IDC_PASTE: | 123 case IDC_PASTE: |
| 114 case IDC_BOOKMARK_BAR_REMOVE: | 124 case IDC_BOOKMARK_BAR_REMOVE: |
| 115 return; | 125 return; |
| 116 } | 126 } |
| 117 | 127 |
| 118 [bookmarkBarController_ closeFolderAndStopTrackingMenus]; | 128 [bookmarkBarController_ closeFolderAndStopTrackingMenus]; |
| 119 [bookmarkBarController_ unhighlightBookmark:bookmarkNode_]; | 129 [bookmarkBarController_ unhighlightBookmark:bookmarkNode_]; |
| 120 } | 130 } |
| 121 | 131 |
| 122 - (void)cancelTracking { | 132 - (void)cancelTracking { |
| 123 [[menuController_ menu] cancelTracking]; | 133 [[menuController_ menu] cancelTracking]; |
| 124 } | 134 } |
| 125 | 135 |
| 126 @end | 136 @end |
| OLD | NEW |