Home | History | Annotate | Download | only in menu
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_VIEWS_CONTROLS_MENU_MENU_WRAPPER_H_
      6 #define UI_VIEWS_CONTROLS_MENU_MENU_WRAPPER_H_
      7 
      8 #include "ui/gfx/native_widget_types.h"
      9 #include "ui/views/views_export.h"
     10 
     11 namespace gfx {
     12 class Point;
     13 }
     14 
     15 namespace ui {
     16 class MenuModel;
     17 }
     18 
     19 namespace views {
     20 
     21 class MenuInsertionDelegateWin;
     22 class MenuListener;
     23 
     24 // An interface that wraps an object that implements a menu.
     25 class VIEWS_EXPORT MenuWrapper {
     26  public:
     27   // All of the possible actions that can result from RunMenuAt.
     28   enum MenuAction {
     29     MENU_ACTION_NONE,      // Menu cancelled, or never opened.
     30     MENU_ACTION_SELECTED,  // An item was selected.
     31     MENU_ACTION_PREVIOUS,  // User wants to navigate to the previous menu.
     32     MENU_ACTION_NEXT,      // User wants to navigate to the next menu.
     33   };
     34 
     35   virtual ~MenuWrapper() {}
     36 
     37   // Creates the appropriate instance of this wrapper for the current platform.
     38   static MenuWrapper* CreateWrapper(ui::MenuModel* model);
     39 
     40   // Runs the menu at the specified point. This blocks until done.
     41   virtual void RunMenuAt(const gfx::Point& point, int alignment) = 0;
     42 
     43   // Cancels the active menu.
     44   virtual void CancelMenu() = 0;
     45 
     46   // Called when the model supplying data to this menu has changed, and the menu
     47   // must be rebuilt.
     48   virtual void Rebuild(MenuInsertionDelegateWin* delegate) = 0;
     49 
     50   // Called when the states of the items in the menu must be updated from the
     51   // model.
     52   virtual void UpdateStates() = 0;
     53 
     54   // Retrieve a native menu handle.
     55   virtual HMENU GetNativeMenu() const = 0;
     56 
     57   // Get the result of the last call to RunMenuAt to determine whether an
     58   // item was selected, the user navigated to a next or previous menu, or
     59   // nothing.
     60   virtual MenuAction GetMenuAction() const = 0;
     61 
     62   // Add a listener to receive a callback when the menu opens.
     63   virtual void AddMenuListener(MenuListener* listener) = 0;
     64 
     65   // Remove a menu listener.
     66   virtual void RemoveMenuListener(MenuListener* listener) = 0;
     67 
     68   // Sets the minimum width of the menu.
     69   virtual void SetMinimumWidth(int width) = 0;
     70 };
     71 
     72 }  // namespace views
     73 
     74 #endif  // UI_VIEWS_CONTROLS_MENU_MENU_WRAPPER_H_
     75