Index: views/controls/menu/menu_item_view.h |
diff --git a/views/controls/menu/menu_item_view.h b/views/controls/menu/menu_item_view.h |
index af8f0f02b62855283a14b828855193df59a83390..6b91c8d3c78bc021a15c6d42d65c21f619578d36 100644 |
--- a/views/controls/menu/menu_item_view.h |
+++ b/views/controls/menu/menu_item_view.h |
@@ -33,13 +33,16 @@ class MenuModel; |
namespace views { |
+namespace internal { |
+class MenuRunnerImpl; |
+} |
+ |
class MenuButton; |
+struct MenuConfig; |
class MenuController; |
class MenuDelegate; |
class SubmenuView; |
-struct MenuConfig; |
- |
// MenuItemView -------------------------------------------------------------- |
// MenuItemView represents a single menu item with a label and optional icon. |
@@ -59,12 +62,8 @@ struct MenuConfig; |
// focus from the hosting window child views do not actually get focus. Instead |
// |SetHotTracked| is used as the user navigates around. |
// |
-// There are two ways to show a MenuItemView: |
-// 1. Use RunMenuAt. This blocks the caller, executing the selected command |
-// on success. |
-// 2. Use RunMenuForDropAt. This is intended for use during a drop session |
-// and does NOT block the caller. Instead the delegate is notified when the |
-// menu closes via the DropMenuClosed method. |
+// To show the menu use MenuRunner. See MenuRunner for details on how to run |
+// (show) the menu as well as for details on the life time of the menu. |
class VIEWS_EXPORT MenuItemView : public View { |
public: |
@@ -111,8 +110,6 @@ class VIEWS_EXPORT MenuItemView : public View { |
// shown to the user, rather its use as the parent for all menu items. |
explicit MenuItemView(MenuDelegate* delegate); |
- virtual ~MenuItemView(); |
- |
// Overridden from View: |
virtual bool GetTooltipText(const gfx::Point& p, |
std::wstring* tooltip) OVERRIDE; |
@@ -130,20 +127,6 @@ class VIEWS_EXPORT MenuItemView : public View { |
static string16 GetAccessibleNameForMenuItem( |
const string16& item_text, const string16& accelerator_text); |
- // Run methods. See description above class for details. Both Run methods take |
- // a rectangle, which is used to position the menu. |has_mnemonics| indicates |
- // whether the items have mnemonics. Mnemonics are identified by way of the |
- // character following the '&'. The anchor position is specified for non-RTL |
- // languages; the opposite value will be used for RTL. |
- void RunMenuAt(Widget* parent, |
- MenuButton* button, |
- const gfx::Rect& bounds, |
- AnchorPosition anchor, |
- bool has_mnemonics); |
- void RunMenuForDropAt(Widget* parent, |
- const gfx::Rect& bounds, |
- AnchorPosition anchor); |
- |
// Hides and cancels the menu. This does nothing if the menu is not open. |
void Cancel(); |
@@ -288,6 +271,7 @@ class VIEWS_EXPORT MenuItemView : public View { |
// Returns the delegate. This returns the delegate of the root menu item. |
MenuDelegate* GetDelegate(); |
+ void set_delegate(MenuDelegate* delegate) { delegate_ = delegate; } |
// Returns the root parent, or this if this has no parent. |
MenuItemView* GetRootMenuItem(); |
@@ -334,11 +318,16 @@ class VIEWS_EXPORT MenuItemView : public View { |
// Creates a MenuItemView. This is used by the various AddXXX methods. |
MenuItemView(MenuItemView* parent, int command, Type type); |
+ // MenuRunner owns MenuItemView and should be the only one deleting it. |
+ virtual ~MenuItemView(); |
+ |
virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; |
virtual std::string GetClassName() const OVERRIDE; |
private: |
+ friend class internal::MenuRunnerImpl; // For access to ~MenuItemView. |
+ |
// Calculates all sizes that we can from the OS. |
// |
// This is invoked prior to Running a menu. |
@@ -350,10 +339,6 @@ class VIEWS_EXPORT MenuItemView : public View { |
MenuItemView::Type type, |
MenuDelegate* delegate); |
- // Invoked by the MenuController when the menu closes as the result of |
- // drag and drop run. |
- void DropMenuClosed(bool notify_delegate); |
- |
// The RunXXX methods call into this to set up the necessary state before |
// running. |
void PrepareForRun(bool has_mnemonics, bool show_mnemonics); |
@@ -418,13 +403,14 @@ class VIEWS_EXPORT MenuItemView : public View { |
actual_menu_position_ = actual_menu_position; |
} |
+ void set_controller(MenuController* controller) { controller_ = controller; } |
+ |
// The delegate. This is only valid for the root menu item. You shouldn't |
// use this directly, instead use GetDelegate() which walks the tree as |
// as necessary. |
MenuDelegate* delegate_; |
- // Returns the controller for the run operation, or NULL if the menu isn't |
- // showing. |
+ // The controller for the run operation, or NULL if the menu isn't showing. |
MenuController* controller_; |
// Used to detect when Cancel was invoked. |