Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Side by Side Diff: views/controls/menu/menu_item_view.h

Issue 7520037: [cros] Network dropdown button in WebUI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move handle click Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 VIEWS_CONTROLS_MENU_MENU_ITEM_VIEW_H_ 5 #ifndef VIEWS_CONTROLS_MENU_MENU_ITEM_VIEW_H_
6 #define VIEWS_CONTROLS_MENU_MENU_ITEM_VIEW_H_ 6 #define VIEWS_CONTROLS_MENU_MENU_ITEM_VIEW_H_
7 #pragma once 7 #pragma once
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 22 matching lines...) Expand all
33 33
34 namespace views { 34 namespace views {
35 35
36 class MenuButton; 36 class MenuButton;
37 class MenuController; 37 class MenuController;
38 class MenuDelegate; 38 class MenuDelegate;
39 class SubmenuView; 39 class SubmenuView;
40 40
41 struct MenuConfig; 41 struct MenuConfig;
42 42
43 // MenuItemInterface -----------------------------------------------------------
44
45 // Interface class for the menu items.
46 class MenuItemInterface {
47 public:
rhashimoto 2011/07/29 17:17:13 virtual destructor?
Nikita (slow) 2011/08/05 23:40:26 Obsolete, using ui::MenuModel now.
48 // Append a sub-menu to this menu.
49 // The returned pointer is owned by this menu.
50 virtual MenuItemInterface* AppendSubMenu(int item_id,
51 const std::wstring& label) = 0;
rhashimoto 2011/07/29 17:17:13 nit: wrapped indentation needs to be adjusted in t
Nikita (slow) 2011/08/05 23:40:26 Obsolete, using ui::MenuModel now.
52
53 // Append a sub-menu with an icon to this menu.
54 // The returned pointer is owned by this menu.
55 virtual MenuItemInterface* AppendSubMenuWithIcon(int item_id,
56 const std::wstring& label,
57 const SkBitmap& icon) = 0;
58
59 // This is a convenience for standard text label menu items where the label
60 // is provided with this call.
61 virtual MenuItemInterface* AppendMenuItemWithLabel(int item_id,
62 const std::wstring& label) = 0;
63
64
65 // Appends a menu item with an icon. This is for the menu item which
66 // needs an icon. Calling this function forces the Menu class to draw
67 // the menu, instead of relying on Windows.
68 virtual MenuItemInterface* AppendMenuItemWithIcon(int item_id,
69 const std::wstring& label,
70 const SkBitmap& icon) = 0;
71
72 // Adds a separator to this menu
73 virtual void AppendSeparator() = 0;
74
75 // Clears the sub-menu.
76 virtual void ClearSubmenu() = 0;
77
78 // Called when update is done.
79 virtual void ChildrenChanged() = 0;
80
81 // Hides and cancels the menu. This does nothing if the menu is not open.
82 virtual void Cancel() = 0;
83
84 virtual void set_margins(int top_margin, int bottom_margin) = 0;
85 };
86
43 // MenuItemView -------------------------------------------------------------- 87 // MenuItemView --------------------------------------------------------------
44 88
45 // MenuItemView represents a single menu item with a label and optional icon. 89 // MenuItemView represents a single menu item with a label and optional icon.
46 // Each MenuItemView may also contain a submenu, which in turn may contain 90 // Each MenuItemView may also contain a submenu, which in turn may contain
47 // any number of child MenuItemViews. 91 // any number of child MenuItemViews.
48 // 92 //
49 // To use a menu create an initial MenuItemView using the constructor that 93 // To use a menu create an initial MenuItemView using the constructor that
50 // takes a MenuDelegate, then create any number of child menu items by way 94 // takes a MenuDelegate, then create any number of child menu items by way
51 // of the various AddXXX methods. 95 // of the various AddXXX methods.
52 // 96 //
53 // MenuItemView is itself a View, which means you can add Views to each 97 // MenuItemView is itself a View, which means you can add Views to each
54 // MenuItemView. This is normally NOT want you want, rather add other child 98 // MenuItemView. This is normally NOT want you want, rather add other child
55 // Views to the submenu of the MenuItemView. Any child views of the MenuItemView 99 // Views to the submenu of the MenuItemView. Any child views of the MenuItemView
56 // that are focusable can be navigated to by way of the up/down arrow and can be 100 // that are focusable can be navigated to by way of the up/down arrow and can be
57 // activated by way of space/return keys. Activating a focusable child results 101 // activated by way of space/return keys. Activating a focusable child results
58 // in |AcceleratorPressed| being invoked. Note, that as menus try not to steal 102 // in |AcceleratorPressed| being invoked. Note, that as menus try not to steal
59 // focus from the hosting window child views do not actually get focus. Instead 103 // focus from the hosting window child views do not actually get focus. Instead
60 // |SetHotTracked| is used as the user navigates around. 104 // |SetHotTracked| is used as the user navigates around.
61 // 105 //
62 // There are two ways to show a MenuItemView: 106 // There are two ways to show a MenuItemView:
63 // 1. Use RunMenuAt. This blocks the caller, executing the selected command 107 // 1. Use RunMenuAt. This blocks the caller, executing the selected command
64 // on success. 108 // on success.
65 // 2. Use RunMenuForDropAt. This is intended for use during a drop session 109 // 2. Use RunMenuForDropAt. This is intended for use during a drop session
66 // and does NOT block the caller. Instead the delegate is notified when the 110 // and does NOT block the caller. Instead the delegate is notified when the
67 // menu closes via the DropMenuClosed method. 111 // menu closes via the DropMenuClosed method.
68 112
69 class VIEWS_API MenuItemView : public View { 113 class VIEWS_API MenuItemView : public MenuItemInterface, public View {
70 public: 114 public:
71 friend class MenuController; 115 friend class MenuController;
72 116
73 // The menu item view's class name. 117 // The menu item view's class name.
74 static const char kViewClassName[]; 118 static const char kViewClassName[];
75 119
76 // ID used to identify menu items. 120 // ID used to identify menu items.
77 static const int kMenuItemViewID; 121 static const int kMenuItemViewID;
78 122
79 // ID used to identify empty menu items. 123 // ID used to identify empty menu items.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 void RunMenuAt(Widget* parent, 182 void RunMenuAt(Widget* parent,
139 MenuButton* button, 183 MenuButton* button,
140 const gfx::Rect& bounds, 184 const gfx::Rect& bounds,
141 AnchorPosition anchor, 185 AnchorPosition anchor,
142 bool has_mnemonics); 186 bool has_mnemonics);
143 void RunMenuForDropAt(Widget* parent, 187 void RunMenuForDropAt(Widget* parent,
144 const gfx::Rect& bounds, 188 const gfx::Rect& bounds,
145 AnchorPosition anchor); 189 AnchorPosition anchor);
146 190
147 // Hides and cancels the menu. This does nothing if the menu is not open. 191 // Hides and cancels the menu. This does nothing if the menu is not open.
148 void Cancel(); 192 virtual void Cancel();
rhashimoto 2011/07/29 17:17:13 group overridden methods, add OVERRIDE
Nikita (slow) 2011/08/05 23:40:26 Obsolete, using ui::MenuModel now.
149 193
150 // Add an item to the menu at a specified index. ChildrenChanged() should 194 // Add an item to the menu at a specified index. ChildrenChanged() should
151 // called after adding menu items if the menu may be active. 195 // called after adding menu items if the menu may be active.
152 MenuItemView* AddMenuItemAt(int index, 196 MenuItemView* AddMenuItemAt(int index,
153 int item_id, 197 int item_id,
154 const std::wstring& label, 198 const std::wstring& label,
155 const SkBitmap& icon, 199 const SkBitmap& icon,
156 Type type); 200 Type type);
157 201
158 // Remove an item from the menu at a specified index. 202 // Remove an item from the menu at a specified index.
(...skipping 10 matching lines...) Expand all
169 // label The text label shown. 213 // label The text label shown.
170 // type The type of item. 214 // type The type of item.
171 MenuItemView* AppendMenuItem(int item_id, 215 MenuItemView* AppendMenuItem(int item_id,
172 const std::wstring& label, 216 const std::wstring& label,
173 Type type) { 217 Type type) {
174 return AppendMenuItemImpl(item_id, label, SkBitmap(), type); 218 return AppendMenuItemImpl(item_id, label, SkBitmap(), type);
175 } 219 }
176 220
177 // Append a submenu to this menu. 221 // Append a submenu to this menu.
178 // The returned pointer is owned by this menu. 222 // The returned pointer is owned by this menu.
179 MenuItemView* AppendSubMenu(int item_id, 223 virtual MenuItemInterface* AppendSubMenu(int item_id,
180 const std::wstring& label) { 224 const std::wstring& label) {
181 return AppendMenuItemImpl(item_id, label, SkBitmap(), SUBMENU); 225 return AppendMenuItemImpl(item_id, label, SkBitmap(), SUBMENU);
182 } 226 }
183 227
184 // Append a submenu with an icon to this menu. 228 // Append a submenu with an icon to this menu.
185 // The returned pointer is owned by this menu. 229 // The returned pointer is owned by this menu.
186 MenuItemView* AppendSubMenuWithIcon(int item_id, 230 virtual MenuItemInterface* AppendSubMenuWithIcon(int item_id,
187 const std::wstring& label, 231 const std::wstring& label,
188 const SkBitmap& icon) { 232 const SkBitmap& icon) {
189 return AppendMenuItemImpl(item_id, label, icon, SUBMENU); 233 return AppendMenuItemImpl(item_id, label, icon, SUBMENU);
190 } 234 }
191 235
192 // This is a convenience for standard text label menu items where the label 236 // This is a convenience for standard text label menu items where the label
193 // is provided with this call. 237 // is provided with this call.
194 MenuItemView* AppendMenuItemWithLabel(int item_id, 238 virtual MenuItemInterface* AppendMenuItemWithLabel(int item_id,
195 const std::wstring& label) { 239 const std::wstring& label) {
196 return AppendMenuItem(item_id, label, NORMAL); 240 return AppendMenuItem(item_id, label, NORMAL);
197 } 241 }
198 242
199 // This is a convenience for text label menu items where the label is 243 // This is a convenience for text label menu items where the label is
200 // provided by the delegate. 244 // provided by the delegate.
201 MenuItemView* AppendDelegateMenuItem(int item_id) { 245 MenuItemView* AppendDelegateMenuItem(int item_id) {
202 return AppendMenuItem(item_id, std::wstring(), NORMAL); 246 return AppendMenuItem(item_id, std::wstring(), NORMAL);
203 } 247 }
204 248
205 // Adds a separator to this menu 249 // Adds a separator to this menu
206 void AppendSeparator() { 250 virtual void AppendSeparator() {
207 AppendMenuItemImpl(0, std::wstring(), SkBitmap(), SEPARATOR); 251 AppendMenuItemImpl(0, std::wstring(), SkBitmap(), SEPARATOR);
208 } 252 }
209 253
210 // Appends a menu item with an icon. This is for the menu item which 254 // Appends a menu item with an icon. This is for the menu item which
211 // needs an icon. Calling this function forces the Menu class to draw 255 // needs an icon. Calling this function forces the Menu class to draw
212 // the menu, instead of relying on Windows. 256 // the menu, instead of relying on Windows.
213 MenuItemView* AppendMenuItemWithIcon(int item_id, 257 virtual MenuItemInterface* AppendMenuItemWithIcon(int item_id,
214 const std::wstring& label, 258 const std::wstring& label,
215 const SkBitmap& icon) { 259 const SkBitmap& icon) {
216 return AppendMenuItemImpl(item_id, label, icon, NORMAL); 260 return AppendMenuItemImpl(item_id, label, icon, NORMAL);
217 } 261 }
218 262
219 // Creates a menu item for the specified entry in the model and appends it as 263 // Creates a menu item for the specified entry in the model and appends it as
220 // a child. |index| should be offset by GetFirstItemIndex() before calling 264 // a child. |index| should be offset by GetFirstItemIndex() before calling
221 // this function. 265 // this function.
222 MenuItemView* AppendMenuItemFromModel(ui::MenuModel* model, 266 MenuItemView* AppendMenuItemFromModel(ui::MenuModel* model,
223 int index, 267 int index,
224 int id); 268 int id);
225 269
226 // All the AppendXXX methods funnel into this. 270 // All the AppendXXX methods funnel into this.
227 MenuItemView* AppendMenuItemImpl(int item_id, 271 MenuItemView* AppendMenuItemImpl(int item_id,
228 const std::wstring& label, 272 const std::wstring& label,
229 const SkBitmap& icon, 273 const SkBitmap& icon,
230 Type type); 274 Type type);
231 275
232 // Returns the view that contains child menu items. If the submenu has 276 // Returns the view that contains child menu items. If the submenu has
233 // not been creates, this creates it. 277 // not been creates, this creates it.
234 virtual SubmenuView* CreateSubmenu(); 278 virtual SubmenuView* CreateSubmenu();
235 279
236 // Returns true if this menu item has a submenu. 280 // Returns true if this menu item has a submenu.
237 virtual bool HasSubmenu() const; 281 virtual bool HasSubmenu() const;
238 282
283 virtual void ClearSubmenu();
284
239 // Returns the view containing child menu items. 285 // Returns the view containing child menu items.
240 virtual SubmenuView* GetSubmenu() const; 286 virtual SubmenuView* GetSubmenu() const;
241 287
242 // Returns the parent menu item. 288 // Returns the parent menu item.
243 MenuItemView* GetParentMenuItem() const { return parent_menu_item_; } 289 MenuItemView* GetParentMenuItem() const { return parent_menu_item_; }
244 290
245 // Sets the title 291 // Sets the title
246 void SetTitle(const std::wstring& title); 292 void SetTitle(const std::wstring& title);
247 293
248 // Returns the title. 294 // Returns the title.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 // makes the menus slightly wider and taller. 346 // makes the menus slightly wider and taller.
301 void set_has_icons(bool has_icons) { 347 void set_has_icons(bool has_icons) {
302 has_icons_ = has_icons; 348 has_icons_ = has_icons;
303 } 349 }
304 350
305 // Returns the descendant with the specified command. 351 // Returns the descendant with the specified command.
306 MenuItemView* GetMenuItemByID(int id); 352 MenuItemView* GetMenuItemByID(int id);
307 353
308 // Invoke if you remove/add children to the menu while it's showing. This 354 // Invoke if you remove/add children to the menu while it's showing. This
309 // recalculates the bounds. 355 // recalculates the bounds.
310 void ChildrenChanged(); 356 virtual void ChildrenChanged();
311 357
312 // Sizes any child views. 358 // Sizes any child views.
313 virtual void Layout(); 359 virtual void Layout();
314 360
315 // Returns the amount of space needed to accomodate the accelerator. The 361 // Returns the amount of space needed to accomodate the accelerator. The
316 // space needed for the accelerator is NOT included in the preferred width. 362 // space needed for the accelerator is NOT included in the preferred width.
317 int GetAcceleratorTextWidth(); 363 int GetAcceleratorTextWidth();
318 364
319 // Returns true if the menu has mnemonics. This only useful on the root menu 365 // Returns true if the menu has mnemonics. This only useful on the root menu
320 // item. 366 // item.
321 bool has_mnemonics() const { return has_mnemonics_; } 367 bool has_mnemonics() const { return has_mnemonics_; }
322 368
323 // Set top and bottom margins in pixels. If no margin is set or a 369 // Set top and bottom margins in pixels. If no margin is set or a
324 // negative margin is specified then MenuConfig values are used. 370 // negative margin is specified then MenuConfig values are used.
325 void set_margins(int top_margin, int bottom_margin) { 371 virtual void set_margins(int top_margin, int bottom_margin) {
326 top_margin_ = top_margin; 372 top_margin_ = top_margin;
327 bottom_margin_ = bottom_margin; 373 bottom_margin_ = bottom_margin;
328 } 374 }
329 375
330 // Set the position of the menu with respect to the bounds (top 376 // Set the position of the menu with respect to the bounds (top
331 // level only). 377 // level only).
332 void set_menu_position(MenuPosition menu_position) { 378 void set_menu_position(MenuPosition menu_position) {
333 requested_menu_position_ = menu_position; 379 requested_menu_position_ = menu_position;
334 } 380 }
335 381
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 // position of the menu being shown. 539 // position of the menu being shown.
494 MenuPosition requested_menu_position_; 540 MenuPosition requested_menu_position_;
495 MenuPosition actual_menu_position_; 541 MenuPosition actual_menu_position_;
496 542
497 DISALLOW_COPY_AND_ASSIGN(MenuItemView); 543 DISALLOW_COPY_AND_ASSIGN(MenuItemView);
498 }; 544 };
499 545
500 } // namespace views 546 } // namespace views
501 547
502 #endif // VIEWS_CONTROLS_MENU_MENU_ITEM_VIEW_H_ 548 #endif // VIEWS_CONTROLS_MENU_MENU_ITEM_VIEW_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698