| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2010 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 CHROME_BROWSER_WRENCH_MENU_MODEL_H_ | |
| 6 #define CHROME_BROWSER_WRENCH_MENU_MODEL_H_ | |
| 7 #pragma once | |
| 8 | |
| 9 #include "app/menus/accelerator.h" | |
| 10 #include "app/menus/button_menu_item_model.h" | |
| 11 #include "app/menus/simple_menu_model.h" | |
| 12 #include "base/scoped_ptr.h" | |
| 13 #include "chrome/browser/tabs/tab_strip_model_observer.h" | |
| 14 #include "chrome/common/notification_observer.h" | |
| 15 #include "chrome/common/notification_registrar.h" | |
| 16 | |
| 17 class Browser; | |
| 18 class TabStripModel; | |
| 19 | |
| 20 namespace { | |
| 21 class MockWrenchMenuModel; | |
| 22 } // namespace | |
| 23 | |
| 24 // A menu model that builds the contents of an encoding menu. | |
| 25 class EncodingMenuModel : public menus::SimpleMenuModel, | |
| 26 public menus::SimpleMenuModel::Delegate { | |
| 27 public: | |
| 28 explicit EncodingMenuModel(Browser* browser); | |
| 29 virtual ~EncodingMenuModel(); | |
| 30 | |
| 31 // Overridden from menus::SimpleMenuModel::Delegate: | |
| 32 virtual bool IsCommandIdChecked(int command_id) const; | |
| 33 virtual bool IsCommandIdEnabled(int command_id) const; | |
| 34 virtual bool GetAcceleratorForCommandId(int command_id, | |
| 35 menus::Accelerator* accelerator); | |
| 36 virtual void ExecuteCommand(int command_id); | |
| 37 | |
| 38 private: | |
| 39 void Build(); | |
| 40 | |
| 41 Browser* browser_; // weak | |
| 42 | |
| 43 DISALLOW_COPY_AND_ASSIGN(EncodingMenuModel); | |
| 44 }; | |
| 45 | |
| 46 // A menu model that builds the contents of the zoom menu. | |
| 47 class ZoomMenuModel : public menus::SimpleMenuModel { | |
| 48 public: | |
| 49 explicit ZoomMenuModel(menus::SimpleMenuModel::Delegate* delegate); | |
| 50 virtual ~ZoomMenuModel(); | |
| 51 | |
| 52 private: | |
| 53 void Build(); | |
| 54 | |
| 55 DISALLOW_COPY_AND_ASSIGN(ZoomMenuModel); | |
| 56 }; | |
| 57 | |
| 58 class ToolsMenuModel : public menus::SimpleMenuModel { | |
| 59 public: | |
| 60 ToolsMenuModel(menus::SimpleMenuModel::Delegate* delegate, Browser* browser); | |
| 61 virtual ~ToolsMenuModel(); | |
| 62 | |
| 63 private: | |
| 64 void Build(Browser* browser); | |
| 65 | |
| 66 scoped_ptr<EncodingMenuModel> encoding_menu_model_; | |
| 67 | |
| 68 DISALLOW_COPY_AND_ASSIGN(ToolsMenuModel); | |
| 69 }; | |
| 70 | |
| 71 // A menu model that builds the contents of the wrench menu. | |
| 72 class WrenchMenuModel : public menus::SimpleMenuModel, | |
| 73 public menus::SimpleMenuModel::Delegate, | |
| 74 public menus::ButtonMenuItemModel::Delegate, | |
| 75 public TabStripModelObserver, | |
| 76 public NotificationObserver { | |
| 77 public: | |
| 78 WrenchMenuModel(menus::AcceleratorProvider* provider, Browser* browser); | |
| 79 virtual ~WrenchMenuModel(); | |
| 80 | |
| 81 // Overridden for ButtonMenuItemModel::Delegate: | |
| 82 virtual bool DoesCommandIdDismissMenu(int command_id) const; | |
| 83 | |
| 84 // Overridden for both ButtonMenuItemModel::Delegate and SimpleMenuModel: | |
| 85 virtual bool IsLabelForCommandIdDynamic(int command_id) const; | |
| 86 virtual string16 GetLabelForCommandId(int command_id) const; | |
| 87 virtual void ExecuteCommand(int command_id); | |
| 88 virtual bool IsCommandIdChecked(int command_id) const; | |
| 89 virtual bool IsCommandIdEnabled(int command_id) const; | |
| 90 virtual bool IsCommandIdVisible(int command_id) const; | |
| 91 virtual bool GetAcceleratorForCommandId( | |
| 92 int command_id, | |
| 93 menus::Accelerator* accelerator); | |
| 94 | |
| 95 // Overridden from TabStripModelObserver: | |
| 96 virtual void TabSelectedAt(TabContentsWrapper* old_contents, | |
| 97 TabContentsWrapper* new_contents, | |
| 98 int index, | |
| 99 bool user_gesture); | |
| 100 virtual void TabReplacedAt(TabContentsWrapper* old_contents, | |
| 101 TabContentsWrapper* new_contents, int index); | |
| 102 virtual void TabStripModelDeleted(); | |
| 103 | |
| 104 // Overridden from NotificationObserver: | |
| 105 virtual void Observe(NotificationType type, | |
| 106 const NotificationSource& source, | |
| 107 const NotificationDetails& details); | |
| 108 | |
| 109 // Getters. | |
| 110 Browser* browser() const { return browser_; } | |
| 111 | |
| 112 // Calculates |zoom_label_| in response to a zoom change. | |
| 113 void UpdateZoomControls(); | |
| 114 | |
| 115 private: | |
| 116 // Testing constructor used for mocking. | |
| 117 friend class ::MockWrenchMenuModel; | |
| 118 WrenchMenuModel(); | |
| 119 | |
| 120 void Build(); | |
| 121 | |
| 122 // Adds custom items to the menu. Deprecated in favor of a cross platform | |
| 123 // model for button items. | |
| 124 void CreateCutCopyPaste(); | |
| 125 void CreateZoomFullscreen(); | |
| 126 | |
| 127 string16 GetSyncMenuLabel() const; | |
| 128 | |
| 129 // Models for the special menu items with buttons. | |
| 130 scoped_ptr<menus::ButtonMenuItemModel> edit_menu_item_model_; | |
| 131 scoped_ptr<menus::ButtonMenuItemModel> zoom_menu_item_model_; | |
| 132 | |
| 133 // Label of the zoom label in the zoom menu item. | |
| 134 string16 zoom_label_; | |
| 135 | |
| 136 // Tools menu. | |
| 137 scoped_ptr<ToolsMenuModel> tools_menu_model_; | |
| 138 | |
| 139 menus::AcceleratorProvider* provider_; // weak | |
| 140 | |
| 141 Browser* browser_; // weak | |
| 142 TabStripModel* tabstrip_model_; // weak | |
| 143 | |
| 144 NotificationRegistrar registrar_; | |
| 145 | |
| 146 DISALLOW_COPY_AND_ASSIGN(WrenchMenuModel); | |
| 147 }; | |
| 148 | |
| 149 #endif // CHROME_BROWSER_WRENCH_MENU_MODEL_H_ | |
| OLD | NEW |