OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_ | 5 #ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_ |
6 #define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_ | 6 #define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | |
10 #include <set> | 9 #include <set> |
11 | 10 |
12 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h" | 11 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h" |
13 #include "chrome/browser/bookmarks/bookmark_node_data.h" | 12 #include "chrome/browser/bookmarks/bookmark_node_data.h" |
14 #include "chrome/browser/ui/views/bookmarks/bookmark_context_menu.h" | |
15 #include "ui/gfx/native_widget_types.h" | 13 #include "ui/gfx/native_widget_types.h" |
16 #include "views/controls/menu/menu_delegate.h" | 14 #include "views/controls/menu/menu_delegate.h" |
17 #include "views/controls/menu/menu_item_view.h" | 15 #include "views/controls/menu/menu_item_view.h" |
18 | 16 |
19 class BookmarkBarView; | 17 class BookmarkBarView; |
| 18 class BookmarkMenuDelegate; |
20 class BookmarkNode; | 19 class BookmarkNode; |
21 class Browser; | |
22 class PageNavigator; | 20 class PageNavigator; |
23 class Profile; | 21 class Profile; |
24 | 22 |
25 namespace gfx { | 23 namespace gfx { |
26 class Rect; | 24 class Rect; |
27 } // namespace gfx | 25 } // namespace gfx |
28 | 26 |
29 namespace ui { | 27 namespace ui { |
30 class OSExchangeData; | 28 class OSExchangeData; |
31 } // namespace ui | 29 } // namespace ui |
32 | 30 |
33 namespace views { | 31 namespace views { |
34 class MenuButton; | 32 class MenuButton; |
35 } // namespace views | 33 } // namespace views |
36 | 34 |
37 // BookmarkMenuController is responsible for showing a menu of bookmarks, | 35 // BookmarkMenuController is responsible for showing a menu of bookmarks, |
38 // each item in the menu represents a bookmark. | 36 // each item in the menu represents a bookmark. |
39 // BookmarkMenuController deletes itself as necessary, although the menu can | 37 // BookmarkMenuController deletes itself as necessary, although the menu can |
40 // be explicitly hidden by way of the Cancel method. | 38 // be explicitly hidden by way of the Cancel method. |
41 class BookmarkMenuController : public BaseBookmarkModelObserver, | 39 class BookmarkMenuController : public BaseBookmarkModelObserver, |
42 public views::MenuDelegate, | 40 public views::MenuDelegate { |
43 public BookmarkContextMenuObserver { | |
44 public: | 41 public: |
45 // The observer is notified prior to the menu being deleted. | 42 // The observer is notified prior to the menu being deleted. |
46 class Observer { | 43 class Observer { |
47 public: | 44 public: |
48 virtual void BookmarkMenuDeleted(BookmarkMenuController* controller) = 0; | 45 virtual void BookmarkMenuDeleted(BookmarkMenuController* controller) = 0; |
49 | 46 |
50 protected: | 47 protected: |
51 virtual ~Observer() {} | 48 virtual ~Observer() {} |
52 }; | 49 }; |
53 | 50 |
54 // Creates a BookmarkMenuController showing the children of |node| starting | 51 // Creates a BookmarkMenuController showing the children of |node| starting |
55 // at index |start_child_index|. | 52 // at |start_child_index|. |
56 BookmarkMenuController(Browser* browser, | 53 BookmarkMenuController(Profile* profile, |
57 Profile* profile, | |
58 PageNavigator* page_navigator, | 54 PageNavigator* page_navigator, |
59 gfx::NativeWindow parent, | 55 gfx::NativeWindow parent, |
60 const BookmarkNode* node, | 56 const BookmarkNode* node, |
61 int start_child_index); | 57 int start_child_index); |
62 | 58 |
63 void RunMenuAt(BookmarkBarView* bookmark_bar, bool for_drop); | 59 void RunMenuAt(BookmarkBarView* bookmark_bar, bool for_drop); |
64 | 60 |
65 // Shows the menu. | 61 // Shows the menu. |
66 void RunMenuAt(views::MenuButton* button, | 62 void RunMenuAt(views::MenuButton* button, |
67 views::MenuItemView::AnchorPosition position, | 63 views::MenuItemView::AnchorPosition position, |
68 bool for_drop); | 64 bool for_drop); |
69 | 65 |
70 // Hides the menu. | 66 // Hides the menu. |
71 void Cancel(); | 67 void Cancel(); |
72 | 68 |
73 // Returns the node the menu is showing for. | 69 // Returns the node the menu is showing for. |
74 const BookmarkNode* node() const { return node_; } | 70 const BookmarkNode* node() const { return node_; } |
75 | 71 |
76 // Returns the menu. | 72 // Returns the menu. |
77 views::MenuItemView* menu() const { return menu_; } | 73 views::MenuItemView* menu() const; |
78 | 74 |
79 // Returns the context menu, or NULL if the context menu isn't showing. | 75 // Returns the context menu, or NULL if the context menu isn't showing. |
80 views::MenuItemView* context_menu() const { | 76 views::MenuItemView* context_menu() const; |
81 return context_menu_.get() ? context_menu_->menu() : NULL; | |
82 } | |
83 | 77 |
84 void set_observer(Observer* observer) { observer_ = observer; } | 78 void set_observer(Observer* observer) { observer_ = observer; } |
85 | 79 |
86 // MenuDelegate methods. | 80 // MenuDelegate methods. |
87 virtual std::wstring GetTooltipText(int id, const gfx::Point& p); | 81 virtual std::wstring GetTooltipText(int id, const gfx::Point& p); |
88 virtual bool IsTriggerableEvent(views::MenuItemView* view, | 82 virtual bool IsTriggerableEvent(views::MenuItemView* view, |
89 const views::MouseEvent& e); | 83 const views::MouseEvent& e); |
90 virtual void ExecuteCommand(int id, int mouse_event_flags); | 84 virtual void ExecuteCommand(int id, int mouse_event_flags); |
91 virtual bool GetDropFormats( | 85 virtual bool GetDropFormats( |
92 views::MenuItemView* menu, | 86 views::MenuItemView* menu, |
(...skipping 20 matching lines...) Expand all Loading... |
113 virtual views::MenuItemView* GetSiblingMenu( | 107 virtual views::MenuItemView* GetSiblingMenu( |
114 views::MenuItemView* menu, | 108 views::MenuItemView* menu, |
115 const gfx::Point& screen_point, | 109 const gfx::Point& screen_point, |
116 views::MenuItemView::AnchorPosition* anchor, | 110 views::MenuItemView::AnchorPosition* anchor, |
117 bool* has_mnemonics, | 111 bool* has_mnemonics, |
118 views::MenuButton** button); | 112 views::MenuButton** button); |
119 virtual int GetMaxWidthForMenu(views::MenuItemView* view); | 113 virtual int GetMaxWidthForMenu(views::MenuItemView* view); |
120 | 114 |
121 // BookmarkModelObserver methods. | 115 // BookmarkModelObserver methods. |
122 virtual void BookmarkModelChanged(); | 116 virtual void BookmarkModelChanged(); |
123 virtual void BookmarkNodeFaviconLoaded(BookmarkModel* model, | |
124 const BookmarkNode* node); | |
125 | |
126 // BookmarkContextMenu::Observer methods. | |
127 virtual void WillRemoveBookmarks( | |
128 const std::vector<const BookmarkNode*>& bookmarks); | |
129 virtual void DidRemoveBookmarks(); | |
130 | 117 |
131 private: | 118 private: |
132 typedef std::map<const BookmarkNode*, int> NodeToMenuIDMap; | |
133 | |
134 // BookmarkMenuController deletes itself as necessary. | 119 // BookmarkMenuController deletes itself as necessary. |
135 virtual ~BookmarkMenuController(); | 120 virtual ~BookmarkMenuController(); |
136 | 121 |
137 // Creates a menu and adds it to node_to_menu_id_map_. This uses | 122 scoped_ptr<BookmarkMenuDelegate> menu_delegate_; |
138 // BuildMenu to recursively populate the menu. | |
139 views::MenuItemView* CreateMenu(const BookmarkNode* parent, | |
140 int start_child_index); | |
141 | |
142 // Creates an entry in menu for each child node of |parent| starting at | |
143 // |start_child_index|. | |
144 void BuildMenu(const BookmarkNode* parent, | |
145 int start_child_index, | |
146 views::MenuItemView* menu, | |
147 int* next_menu_id); | |
148 | |
149 // Returns the menu whose id is |id|. | |
150 views::MenuItemView* GetMenuByID(int id); | |
151 | |
152 // Does the work of processing WillRemoveBookmarks. On exit the set of removed | |
153 // menus is added to |removed_menus|. It's up to the caller to delete the | |
154 // the menus added to |removed_menus|. | |
155 void WillRemoveBookmarksImpl( | |
156 const std::vector<const BookmarkNode*>& bookmarks, | |
157 std::set<views::MenuItemView*>* removed_menus); | |
158 | |
159 Browser* browser_; | |
160 | |
161 Profile* profile_; | |
162 | |
163 PageNavigator* page_navigator_; | |
164 | |
165 // Parent of menus. | |
166 gfx::NativeWindow parent_; | |
167 | 123 |
168 // The node we're showing the contents of. | 124 // The node we're showing the contents of. |
169 const BookmarkNode* node_; | 125 const BookmarkNode* node_; |
170 | 126 |
171 // Maps from menu id to BookmarkNode. | |
172 std::map<int, const BookmarkNode*> menu_id_to_node_map_; | |
173 | |
174 // Mapping from node to menu id. This only contains entries for nodes of type | |
175 // URL. | |
176 NodeToMenuIDMap node_to_menu_id_map_; | |
177 | |
178 // Current menu. | |
179 views::MenuItemView* menu_; | |
180 | |
181 // Data for the drop. | 127 // Data for the drop. |
182 BookmarkNodeData drop_data_; | 128 BookmarkNodeData drop_data_; |
183 | 129 |
184 // Used when a context menu is shown. | |
185 scoped_ptr<BookmarkContextMenu> context_menu_; | |
186 | |
187 // The observer, may be null. | 130 // The observer, may be null. |
188 Observer* observer_; | 131 Observer* observer_; |
189 | 132 |
190 // Is the menu being shown for a drop? | 133 // Is the menu being shown for a drop? |
191 bool for_drop_; | 134 bool for_drop_; |
192 | 135 |
193 // The bookmark bar. This is only non-null if we're showing a menu item | 136 // The bookmark bar. This is only non-null if we're showing a menu item |
194 // for a folder on the bookmark bar and not for drop. | 137 // for a folder on the bookmark bar and not for drop. |
195 BookmarkBarView* bookmark_bar_; | 138 BookmarkBarView* bookmark_bar_; |
196 | 139 |
197 typedef std::map<const BookmarkNode*, views::MenuItemView*> NodeToMenuMap; | |
198 NodeToMenuMap node_to_menu_map_; | |
199 | |
200 // ID of the next menu item. | |
201 int next_menu_id_; | |
202 | |
203 DISALLOW_COPY_AND_ASSIGN(BookmarkMenuController); | 140 DISALLOW_COPY_AND_ASSIGN(BookmarkMenuController); |
204 }; | 141 }; |
205 | 142 |
206 #endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_ | 143 #endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_ |
OLD | NEW |