OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "chrome/browser/ui/views/toolbar/chevron_menu_button.h" | 5 #include "chrome/browser/ui/views/toolbar/chevron_menu_button.h" |
6 | 6 |
7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/extensions/extension_action.h" | 10 #include "chrome/browser/extensions/extension_action.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 class IconUpdater : public ExtensionActionIconFactory::Observer { | 36 class IconUpdater : public ExtensionActionIconFactory::Observer { |
37 public: | 37 public: |
38 IconUpdater(views::MenuItemView* menu_item_view, | 38 IconUpdater(views::MenuItemView* menu_item_view, |
39 ExtensionActionViewController* view_controller) | 39 ExtensionActionViewController* view_controller) |
40 : menu_item_view_(menu_item_view), | 40 : menu_item_view_(menu_item_view), |
41 view_controller_(view_controller) { | 41 view_controller_(view_controller) { |
42 DCHECK(menu_item_view); | 42 DCHECK(menu_item_view); |
43 DCHECK(view_controller); | 43 DCHECK(view_controller); |
44 view_controller->set_icon_observer(this); | 44 view_controller->set_icon_observer(this); |
45 } | 45 } |
46 virtual ~IconUpdater() { | 46 ~IconUpdater() override { view_controller_->set_icon_observer(NULL); } |
47 view_controller_->set_icon_observer(NULL); | |
48 } | |
49 | 47 |
50 // BrowserActionView::IconObserver: | 48 // BrowserActionView::IconObserver: |
51 virtual void OnIconUpdated() override { | 49 void OnIconUpdated() override { |
52 menu_item_view_->SetIcon(view_controller_->GetIconWithBadge()); | 50 menu_item_view_->SetIcon(view_controller_->GetIconWithBadge()); |
53 } | 51 } |
54 | 52 |
55 private: | 53 private: |
56 // The menu item view whose icon might be updated. | 54 // The menu item view whose icon might be updated. |
57 views::MenuItemView* menu_item_view_; | 55 views::MenuItemView* menu_item_view_; |
58 | 56 |
59 // The view controller to be observed. When its icon changes, update the | 57 // The view controller to be observed. When its icon changes, update the |
60 // corresponding menu item view's icon. | 58 // corresponding menu item view's icon. |
61 ExtensionActionViewController* view_controller_; | 59 ExtensionActionViewController* view_controller_; |
62 | 60 |
63 DISALLOW_COPY_AND_ASSIGN(IconUpdater); | 61 DISALLOW_COPY_AND_ASSIGN(IconUpdater); |
64 }; | 62 }; |
65 | 63 |
66 } // namespace | 64 } // namespace |
67 | 65 |
68 // This class handles the overflow menu for browser actions. | 66 // This class handles the overflow menu for browser actions. |
69 class ChevronMenuButton::MenuController : public views::MenuDelegate { | 67 class ChevronMenuButton::MenuController : public views::MenuDelegate { |
70 public: | 68 public: |
71 MenuController(ChevronMenuButton* owner, | 69 MenuController(ChevronMenuButton* owner, |
72 BrowserActionsContainer* browser_actions_container, | 70 BrowserActionsContainer* browser_actions_container, |
73 bool for_drop); | 71 bool for_drop); |
74 virtual ~MenuController(); | 72 ~MenuController() override; |
75 | 73 |
76 // Shows the overflow menu. | 74 // Shows the overflow menu. |
77 void RunMenu(views::Widget* widget); | 75 void RunMenu(views::Widget* widget); |
78 | 76 |
79 // Closes the overflow menu (and its context menu if open as well). | 77 // Closes the overflow menu (and its context menu if open as well). |
80 void CloseMenu(); | 78 void CloseMenu(); |
81 | 79 |
82 private: | 80 private: |
83 // views::MenuDelegate: | 81 // views::MenuDelegate: |
84 virtual bool IsCommandEnabled(int id) const override; | 82 bool IsCommandEnabled(int id) const override; |
85 virtual void ExecuteCommand(int id) override; | 83 void ExecuteCommand(int id) override; |
86 virtual bool ShowContextMenu(views::MenuItemView* source, | 84 bool ShowContextMenu(views::MenuItemView* source, |
87 int id, | 85 int id, |
88 const gfx::Point& p, | 86 const gfx::Point& p, |
89 ui::MenuSourceType source_type) override; | 87 ui::MenuSourceType source_type) override; |
90 virtual void DropMenuClosed(views::MenuItemView* menu) override; | 88 void DropMenuClosed(views::MenuItemView* menu) override; |
91 // These drag functions offer support for dragging icons into the overflow | 89 // These drag functions offer support for dragging icons into the overflow |
92 // menu. | 90 // menu. |
93 virtual bool GetDropFormats( | 91 bool GetDropFormats( |
94 views::MenuItemView* menu, | 92 views::MenuItemView* menu, |
95 int* formats, | 93 int* formats, |
96 std::set<ui::OSExchangeData::CustomFormat>* custom_formats) override; | 94 std::set<ui::OSExchangeData::CustomFormat>* custom_formats) override; |
97 virtual bool AreDropTypesRequired(views::MenuItemView* menu) override; | 95 bool AreDropTypesRequired(views::MenuItemView* menu) override; |
98 virtual bool CanDrop(views::MenuItemView* menu, | 96 bool CanDrop(views::MenuItemView* menu, |
99 const ui::OSExchangeData& data) override; | 97 const ui::OSExchangeData& data) override; |
100 virtual int GetDropOperation(views::MenuItemView* item, | 98 int GetDropOperation(views::MenuItemView* item, |
101 const ui::DropTargetEvent& event, | 99 const ui::DropTargetEvent& event, |
102 DropPosition* position) override; | 100 DropPosition* position) override; |
103 virtual int OnPerformDrop(views::MenuItemView* menu, | 101 int OnPerformDrop(views::MenuItemView* menu, |
104 DropPosition position, | 102 DropPosition position, |
105 const ui::DropTargetEvent& event) override; | 103 const ui::DropTargetEvent& event) override; |
106 // These three drag functions offer support for dragging icons out of the | 104 // These three drag functions offer support for dragging icons out of the |
107 // overflow menu. | 105 // overflow menu. |
108 virtual bool CanDrag(views::MenuItemView* menu) override; | 106 bool CanDrag(views::MenuItemView* menu) override; |
109 virtual void WriteDragData(views::MenuItemView* sender, | 107 void WriteDragData(views::MenuItemView* sender, |
110 ui::OSExchangeData* data) override; | 108 ui::OSExchangeData* data) override; |
111 virtual int GetDragOperations(views::MenuItemView* sender) override; | 109 int GetDragOperations(views::MenuItemView* sender) override; |
112 | 110 |
113 // Returns the offset into |views_| for the given |id|. | 111 // Returns the offset into |views_| for the given |id|. |
114 size_t IndexForId(int id) const; | 112 size_t IndexForId(int id) const; |
115 | 113 |
116 // The owning ChevronMenuButton. | 114 // The owning ChevronMenuButton. |
117 ChevronMenuButton* owner_; | 115 ChevronMenuButton* owner_; |
118 | 116 |
119 // A pointer to the browser action container. | 117 // A pointer to the browser action container. |
120 BrowserActionsContainer* browser_actions_container_; | 118 BrowserActionsContainer* browser_actions_container_; |
121 | 119 |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 void ChevronMenuButton::ShowOverflowMenu(bool for_drop) { | 428 void ChevronMenuButton::ShowOverflowMenu(bool for_drop) { |
431 DCHECK(!menu_controller_); | 429 DCHECK(!menu_controller_); |
432 menu_controller_.reset(new MenuController( | 430 menu_controller_.reset(new MenuController( |
433 this, browser_actions_container_, for_drop)); | 431 this, browser_actions_container_, for_drop)); |
434 menu_controller_->RunMenu(GetWidget()); | 432 menu_controller_->RunMenu(GetWidget()); |
435 } | 433 } |
436 | 434 |
437 void ChevronMenuButton::MenuDone() { | 435 void ChevronMenuButton::MenuDone() { |
438 menu_controller_.reset(); | 436 menu_controller_.reset(); |
439 } | 437 } |
OLD | NEW |