Home | History | Annotate | Download | only in touchui
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_VIEWS_TOUCHUI_TOUCH_EDITING_MENU_H_
      6 #define UI_VIEWS_TOUCHUI_TOUCH_EDITING_MENU_H_
      7 
      8 #include "ui/gfx/point.h"
      9 #include "ui/views/bubble/bubble_delegate.h"
     10 #include "ui/views/controls/button/button.h"
     11 #include "ui/views/views_export.h"
     12 
     13 namespace gfx {
     14 class Canvas;
     15 }
     16 
     17 namespace views {
     18 class TouchEditingMenuView;
     19 class Widget;
     20 
     21 class VIEWS_EXPORT TouchEditingMenuController {
     22  public:
     23   // Checks if the specified menu command is supported.
     24   virtual bool IsCommandIdEnabled(int command_id) const = 0;
     25 
     26   // Send a context menu command to the controller.
     27   virtual void ExecuteCommand(int command_id, int event_flags) = 0;
     28 
     29   // Tell the controller that user has selected the context menu button.
     30   virtual void OpenContextMenu() = 0;
     31 
     32   // Called when the menu is closed.
     33   virtual void OnMenuClosed(TouchEditingMenuView* menu) = 0;
     34 
     35  protected:
     36   virtual ~TouchEditingMenuController() {}
     37 };
     38 
     39 // A View that displays the touch context menu.
     40 class VIEWS_EXPORT TouchEditingMenuView : public BubbleDelegateView,
     41                                           public ButtonListener {
     42  public:
     43   virtual ~TouchEditingMenuView();
     44 
     45   // If there are no actions available for the menu, returns NULL. Otherwise,
     46   // returns a new instance of TouchEditingMenuView.
     47   static TouchEditingMenuView* Create(TouchEditingMenuController* controller,
     48                                       gfx::Rect anchor_rect,
     49                                       gfx::NativeView context);
     50 
     51   void Close();
     52 
     53  private:
     54   TouchEditingMenuView(TouchEditingMenuController* controller,
     55                        gfx::Rect anchor_rect,
     56                        gfx::NativeView context);
     57 
     58   // views::WidgetDelegate overrides:
     59   virtual void WindowClosing() OVERRIDE;
     60 
     61   // Overridden from ButtonListener.
     62   virtual void ButtonPressed(Button* sender, const ui::Event& event) OVERRIDE;
     63 
     64   // Overridden from BubbleDelegateView.
     65   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
     66 
     67   // Queries the |controller_| for what elements to show in the menu and sizes
     68   // the menu appropriately.
     69   void CreateButtons();
     70 
     71   // Helper method to create a single button.
     72   Button* CreateButton(const string16& title, int tag);
     73 
     74   TouchEditingMenuController* controller_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(TouchEditingMenuView);
     77 };
     78 
     79 }  // namespace views
     80 
     81 #endif  // UI_VIEWS_TOUCHUI_TOUCH_SELECTION_CONTROLLER_IMPL_H_
     82