menu_delegate.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright (c) 2014 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_BROWSER_UI_VIEWS_MENU_DELEGATE_H_
  5. #define ATOM_BROWSER_UI_VIEWS_MENU_DELEGATE_H_
  6. #include <memory>
  7. #include "atom/browser/ui/atom_menu_model.h"
  8. #include "base/observer_list.h"
  9. #include "ui/views/controls/menu/menu_delegate.h"
  10. namespace views {
  11. class MenuRunner;
  12. class Button;
  13. } // namespace views
  14. namespace atom {
  15. class MenuBar;
  16. class MenuDelegate : public views::MenuDelegate {
  17. public:
  18. explicit MenuDelegate(MenuBar* menu_bar);
  19. ~MenuDelegate() override;
  20. void RunMenu(AtomMenuModel* model,
  21. views::Button* button,
  22. ui::MenuSourceType source_type);
  23. class Observer {
  24. public:
  25. virtual void OnBeforeExecuteCommand() = 0;
  26. virtual void OnMenuClosed() = 0;
  27. };
  28. void AddObserver(Observer* obs) { observers_.AddObserver(obs); }
  29. void RemoveObserver(const Observer* obs) { observers_.RemoveObserver(obs); }
  30. protected:
  31. // views::MenuDelegate:
  32. void ExecuteCommand(int id) override;
  33. void ExecuteCommand(int id, int mouse_event_flags) override;
  34. bool IsTriggerableEvent(views::MenuItemView* source,
  35. const ui::Event& e) override;
  36. bool GetAccelerator(int id, ui::Accelerator* accelerator) const override;
  37. base::string16 GetLabel(int id) const override;
  38. void GetLabelStyle(int id, LabelStyle* style) const override;
  39. bool IsCommandEnabled(int id) const override;
  40. bool IsCommandVisible(int id) const override;
  41. bool IsItemChecked(int id) const override;
  42. void WillShowMenu(views::MenuItemView* menu) override;
  43. void WillHideMenu(views::MenuItemView* menu) override;
  44. void OnMenuClosed(views::MenuItemView* menu) override;
  45. views::MenuItemView* GetSiblingMenu(views::MenuItemView* menu,
  46. const gfx::Point& screen_point,
  47. views::MenuAnchorPosition* anchor,
  48. bool* has_mnemonics,
  49. views::MenuButton** button) override;
  50. private:
  51. MenuBar* menu_bar_;
  52. int id_;
  53. std::unique_ptr<views::MenuDelegate> adapter_;
  54. std::unique_ptr<views::MenuRunner> menu_runner_;
  55. // The menu button to switch to.
  56. views::MenuButton* button_to_open_ = nullptr;
  57. bool hold_first_switch_;
  58. base::ObserverList<Observer>::Unchecked observers_;
  59. DISALLOW_COPY_AND_ASSIGN(MenuDelegate);
  60. };
  61. } // namespace atom
  62. #endif // ATOM_BROWSER_UI_VIEWS_MENU_DELEGATE_H_