| 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 |