| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 CHROME_BROWSER_UI_VIEWS_TOOLBAR_APP_MENU_BUTTON_H_ | 5 #ifndef CHROME_BROWSER_UI_VIEWS_TOOLBAR_APP_MENU_BUTTON_H_ |
| 6 #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_APP_MENU_BUTTON_H_ | 6 #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_APP_MENU_BUTTON_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| 11 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
| 12 #include "chrome/browser/ui/toolbar/app_menu_icon_controller.h" | 12 #include "chrome/browser/ui/toolbar/app_menu_icon_controller.h" |
| 13 #include "chrome/browser/ui/toolbar/app_menu_icon_painter.h" | |
| 14 #include "ui/views/controls/button/menu_button.h" | 13 #include "ui/views/controls/button/menu_button.h" |
| 15 #include "ui/views/controls/button/menu_button_listener.h" | 14 #include "ui/views/controls/button/menu_button_listener.h" |
| 16 #include "ui/views/view.h" | 15 #include "ui/views/view.h" |
| 17 | 16 |
| 18 class AppMenu; | 17 class AppMenu; |
| 19 class AppMenuModel; | 18 class AppMenuModel; |
| 20 | 19 |
| 21 namespace views { | 20 namespace views { |
| 22 class LabelButtonBorder; | 21 class LabelButtonBorder; |
| 23 class MenuListener; | 22 class MenuListener; |
| 24 } | 23 } |
| 25 | 24 |
| 26 class ToolbarView; | 25 class ToolbarView; |
| 27 | 26 |
| 28 class AppMenuButton : public views::MenuButton, | 27 class AppMenuButton : public views::MenuButton { |
| 29 public AppMenuIconPainter::Delegate { | |
| 30 public: | 28 public: |
| 31 explicit AppMenuButton(ToolbarView* toolbar_view); | 29 explicit AppMenuButton(ToolbarView* toolbar_view); |
| 32 ~AppMenuButton() override; | 30 ~AppMenuButton() override; |
| 33 | 31 |
| 34 void SetSeverity(AppMenuIconController::IconType type, | 32 void SetSeverity(AppMenuIconController::IconType type, |
| 35 AppMenuIconPainter::Severity severity, | 33 AppMenuIconController::Severity severity, |
| 36 bool animate); | 34 bool animate); |
| 37 | 35 |
| 38 // Shows the app menu. |for_drop| indicates whether the menu is opened for a | 36 // Shows the app menu. |for_drop| indicates whether the menu is opened for a |
| 39 // drag-and-drop operation. | 37 // drag-and-drop operation. |
| 40 void ShowMenu(bool for_drop); | 38 void ShowMenu(bool for_drop); |
| 41 | 39 |
| 42 // Closes the app menu, if it's open. | 40 // Closes the app menu, if it's open. |
| 43 void CloseMenu(); | 41 void CloseMenu(); |
| 44 | 42 |
| 45 AppMenu* app_menu_for_testing() { return menu_.get(); } | 43 AppMenu* app_menu_for_testing() { return menu_.get(); } |
| 46 | 44 |
| 47 // Whether the app/hotdogs menu is currently showing. | 45 // Whether the app/hotdogs menu is currently showing. |
| 48 bool IsMenuShowing() const; | 46 bool IsMenuShowing() const; |
| 49 | 47 |
| 50 // Adds a listener to receive a callback when the menu opens. | 48 // Adds a listener to receive a callback when the menu opens. |
| 51 void AddMenuListener(views::MenuListener* listener); | 49 void AddMenuListener(views::MenuListener* listener); |
| 52 | 50 |
| 53 // Removes a menu listener. | 51 // Removes a menu listener. |
| 54 void RemoveMenuListener(views::MenuListener* listener); | 52 void RemoveMenuListener(views::MenuListener* listener); |
| 55 | 53 |
| 56 // views::MenuButton: | 54 // views::MenuButton: |
| 57 gfx::Size GetPreferredSize() const override; | 55 gfx::Size GetPreferredSize() const override; |
| 58 | 56 |
| 59 // AppMenuIconPainter::Delegate: | |
| 60 void ScheduleAppMenuIconPaint() override; | |
| 61 | |
| 62 // Updates the presentation according to |severity_| and the theme provider. | 57 // Updates the presentation according to |severity_| and the theme provider. |
| 63 // Only used in MD. | |
| 64 void UpdateIcon(); | 58 void UpdateIcon(); |
| 65 | 59 |
| 66 // Sets |margin_trailing_| when the browser is maximized and updates layout | 60 // Sets |margin_trailing_| when the browser is maximized and updates layout |
| 67 // to make the focus rectangle centered. | 61 // to make the focus rectangle centered. |
| 68 void SetTrailingMargin(int margin); | 62 void SetTrailingMargin(int margin); |
| 69 | 63 |
| 70 // Opens the app menu immediately during a drag-and-drop operation. | 64 // Opens the app menu immediately during a drag-and-drop operation. |
| 71 // Used only in testing. | 65 // Used only in testing. |
| 72 static bool g_open_app_immediately_for_testing; | 66 static bool g_open_app_immediately_for_testing; |
| 73 | 67 |
| 74 private: | 68 private: |
| 75 // views::MenuButton: | 69 // views::MenuButton: |
| 76 const char* GetClassName() const override; | 70 const char* GetClassName() const override; |
| 77 std::unique_ptr<views::LabelButtonBorder> CreateDefaultBorder() | 71 std::unique_ptr<views::LabelButtonBorder> CreateDefaultBorder() |
| 78 const override; | 72 const override; |
| 79 gfx::Rect GetThemePaintRect() const override; | 73 gfx::Rect GetThemePaintRect() const override; |
| 80 bool GetDropFormats( | 74 bool GetDropFormats( |
| 81 int* formats, | 75 int* formats, |
| 82 std::set<ui::Clipboard::FormatType>* format_types) override; | 76 std::set<ui::Clipboard::FormatType>* format_types) override; |
| 83 bool AreDropTypesRequired() override; | 77 bool AreDropTypesRequired() override; |
| 84 bool CanDrop(const ui::OSExchangeData& data) override; | 78 bool CanDrop(const ui::OSExchangeData& data) override; |
| 85 void OnDragEntered(const ui::DropTargetEvent& event) override; | 79 void OnDragEntered(const ui::DropTargetEvent& event) override; |
| 86 int OnDragUpdated(const ui::DropTargetEvent& event) override; | 80 int OnDragUpdated(const ui::DropTargetEvent& event) override; |
| 87 void OnDragExited() override; | 81 void OnDragExited() override; |
| 88 int OnPerformDrop(const ui::DropTargetEvent& event) override; | 82 int OnPerformDrop(const ui::DropTargetEvent& event) override; |
| 89 void OnPaint(gfx::Canvas* canvas) override; | |
| 90 | 83 |
| 91 // Only used in pre-MD. | 84 AppMenuIconController::Severity severity_; |
| 92 std::unique_ptr<AppMenuIconPainter> icon_painter_; | |
| 93 | |
| 94 // Only used in MD. | |
| 95 AppMenuIconPainter::Severity severity_; | |
| 96 AppMenuIconController::IconType type_; | 85 AppMenuIconController::IconType type_; |
| 97 | 86 |
| 98 // Our owning toolbar view. | 87 // Our owning toolbar view. |
| 99 ToolbarView* toolbar_view_; | 88 ToolbarView* toolbar_view_; |
| 100 | 89 |
| 101 // Whether or not we should allow dragging extension icons onto this button | 90 // Whether or not we should allow dragging extension icons onto this button |
| 102 // (in order to open the overflow in the app menu). | 91 // (in order to open the overflow in the app menu). |
| 103 bool allow_extension_dragging_; | 92 bool allow_extension_dragging_; |
| 104 | 93 |
| 105 // Listeners to call when the menu opens. | 94 // Listeners to call when the menu opens. |
| 106 base::ObserverList<views::MenuListener> menu_listeners_; | 95 base::ObserverList<views::MenuListener> menu_listeners_; |
| 107 | 96 |
| 108 // App model and menu. | 97 // App model and menu. |
| 109 // Note that the menu should be destroyed before the model it uses, so the | 98 // Note that the menu should be destroyed before the model it uses, so the |
| 110 // menu should be listed later. | 99 // menu should be listed later. |
| 111 std::unique_ptr<AppMenuModel> menu_model_; | 100 std::unique_ptr<AppMenuModel> menu_model_; |
| 112 std::unique_ptr<AppMenu> menu_; | 101 std::unique_ptr<AppMenu> menu_; |
| 113 | 102 |
| 114 // Any trailing margin to be applied. Used when the browser is in | 103 // Any trailing margin to be applied. Used when the browser is in |
| 115 // a maximized state to extend to the full window width. | 104 // a maximized state to extend to the full window width. |
| 116 int margin_trailing_; | 105 int margin_trailing_; |
| 117 | 106 |
| 118 // Used to spawn weak pointers for delayed tasks to open the overflow menu. | 107 // Used to spawn weak pointers for delayed tasks to open the overflow menu. |
| 119 base::WeakPtrFactory<AppMenuButton> weak_factory_; | 108 base::WeakPtrFactory<AppMenuButton> weak_factory_; |
| 120 | 109 |
| 121 DISALLOW_COPY_AND_ASSIGN(AppMenuButton); | 110 DISALLOW_COPY_AND_ASSIGN(AppMenuButton); |
| 122 }; | 111 }; |
| 123 | 112 |
| 124 #endif // CHROME_BROWSER_UI_VIEWS_TOOLBAR_APP_MENU_BUTTON_H_ | 113 #endif // CHROME_BROWSER_UI_VIEWS_TOOLBAR_APP_MENU_BUTTON_H_ |
| OLD | NEW |