OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 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 "app/l10n_util_mac.h" | 5 #include "app/l10n_util_mac.h" |
6 #include "base/mac_util.h" | 6 #include "base/mac_util.h" |
7 #import "chrome/browser/browser_theme_provider.h" | 7 #import "chrome/browser/browser_theme_provider.h" |
8 #import "chrome/browser/cocoa/menu_controller.h" | 8 #import "chrome/browser/cocoa/menu_controller.h" |
9 #import "chrome/browser/cocoa/tab_controller.h" | 9 #import "chrome/browser/cocoa/tab_controller.h" |
10 #import "chrome/browser/cocoa/tab_controller_target.h" | 10 #import "chrome/browser/cocoa/tab_controller_target.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 @synthesize action = action_; | 21 @synthesize action = action_; |
22 | 22 |
23 namespace TabControllerInternal { | 23 namespace TabControllerInternal { |
24 | 24 |
25 // A C++ delegate that handles enabling/disabling menu items and handling when | 25 // A C++ delegate that handles enabling/disabling menu items and handling when |
26 // a menu command is chosen. Also fixes up the menu item label for "pin/unpin | 26 // a menu command is chosen. Also fixes up the menu item label for "pin/unpin |
27 // tab". | 27 // tab". |
28 class MenuDelegate : public menus::SimpleMenuModel::Delegate { | 28 class MenuDelegate : public menus::SimpleMenuModel::Delegate { |
29 public: | 29 public: |
30 explicit MenuDelegate(id<TabControllerTarget> target, TabController* owner) | 30 explicit MenuDelegate(id<TabControllerTarget> target, TabController* owner) |
31 : target_(target), owner_(owner) { } | 31 : target_(target), |
| 32 owner_(owner) {} |
32 | 33 |
33 // Overridden from menus::SimpleMenuModel::Delegate | 34 // Overridden from menus::SimpleMenuModel::Delegate |
34 virtual bool IsCommandIdChecked(int command_id) const { return false; } | 35 virtual bool IsCommandIdChecked(int command_id) const { return false; } |
35 virtual bool IsCommandIdEnabled(int command_id) const { | 36 virtual bool IsCommandIdEnabled(int command_id) const { |
36 TabStripModel::ContextMenuCommand command = | 37 TabStripModel::ContextMenuCommand command = |
37 static_cast<TabStripModel::ContextMenuCommand>(command_id); | 38 static_cast<TabStripModel::ContextMenuCommand>(command_id); |
38 return [target_ isCommandEnabled:command forController:owner_]; | 39 return [target_ isCommandEnabled:command forController:owner_]; |
39 } | 40 } |
40 virtual bool GetAcceleratorForCommandId( | 41 virtual bool GetAcceleratorForCommandId( |
41 int command_id, | 42 int command_id, |
42 menus::Accelerator* accelerator) { return false; } | 43 menus::Accelerator* accelerator) { return false; } |
43 virtual void ExecuteCommand(int command_id) { | 44 virtual void ExecuteCommand(int command_id) { |
44 TabStripModel::ContextMenuCommand command = | 45 TabStripModel::ContextMenuCommand command = |
45 static_cast<TabStripModel::ContextMenuCommand>(command_id); | 46 static_cast<TabStripModel::ContextMenuCommand>(command_id); |
46 [target_ commandDispatch:command forController:owner_]; | 47 [target_ commandDispatch:command forController:owner_]; |
47 } | 48 } |
48 | 49 |
49 virtual bool IsLabelForCommandIdDynamic(int command_id) const { | |
50 return command_id == TabStripModel::CommandTogglePinned; | |
51 } | |
52 virtual string16 GetLabelForCommandId(int command_id) const { | |
53 // Display "Pin Tab" when the tab is not pinned and "Unpin Tab" when it is | |
54 // (this is not a checkmark menu item, per Apple's HIG). | |
55 if (command_id == TabStripModel::CommandTogglePinned) { | |
56 return l10n_util::GetStringUTF16( | |
57 [owner_ mini] ? IDS_TAB_CXMENU_UNPIN_TAB_MAC | |
58 : IDS_TAB_CXMENU_PIN_TAB_MAC); | |
59 } | |
60 return string16(); | |
61 } | |
62 | |
63 private: | 50 private: |
64 id<TabControllerTarget> target_; // weak | 51 id<TabControllerTarget> target_; // weak |
65 TabController* owner_; // weak, owns me | 52 TabController* owner_; // weak, owns me |
66 }; | 53 }; |
67 | 54 |
68 } // TabControllerInternal namespace | 55 } // TabControllerInternal namespace |
69 | 56 |
70 // The min widths match the windows values and are sums of left + right | 57 // The min widths match the windows values and are sums of left + right |
71 // padding, of which we have no comparable constants (we draw using paths, not | 58 // padding, of which we have no comparable constants (we draw using paths, not |
72 // images). The selected tab width includes the close button width. | 59 // images). The selected tab width includes the close button width. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 | 118 |
132 [self internalSetSelected:selected_]; | 119 [self internalSetSelected:selected_]; |
133 } | 120 } |
134 | 121 |
135 // Called when Cocoa wants to display the context menu. Lazily instantiate | 122 // Called when Cocoa wants to display the context menu. Lazily instantiate |
136 // the menu based off of the cross-platform model. Re-create the menu and | 123 // the menu based off of the cross-platform model. Re-create the menu and |
137 // model every time to get the correct labels and enabling. | 124 // model every time to get the correct labels and enabling. |
138 - (NSMenu*)menu { | 125 - (NSMenu*)menu { |
139 contextMenuDelegate_.reset( | 126 contextMenuDelegate_.reset( |
140 new TabControllerInternal::MenuDelegate(target_, self)); | 127 new TabControllerInternal::MenuDelegate(target_, self)); |
141 contextMenuModel_.reset(new TabMenuModel(contextMenuDelegate_.get())); | 128 // TODO(42339): this is wrong, it should use pinned, not mini. |
| 129 contextMenuModel_.reset(new TabMenuModel(contextMenuDelegate_.get(), |
| 130 [self mini])); |
142 contextMenuController_.reset( | 131 contextMenuController_.reset( |
143 [[MenuController alloc] initWithModel:contextMenuModel_.get() | 132 [[MenuController alloc] initWithModel:contextMenuModel_.get() |
144 useWithPopUpButtonCell:NO]); | 133 useWithPopUpButtonCell:NO]); |
145 return [contextMenuController_ menu]; | 134 return [contextMenuController_ menu]; |
146 } | 135 } |
147 | 136 |
148 - (IBAction)closeTab:(id)sender { | 137 - (IBAction)closeTab:(id)sender { |
149 if ([[self target] respondsToSelector:@selector(closeTab:)]) { | 138 if ([[self target] respondsToSelector:@selector(closeTab:)]) { |
150 [[self target] performSelector:@selector(closeTab:) | 139 [[self target] performSelector:@selector(closeTab:) |
151 withObject:[self view]]; | 140 withObject:[self view]]; |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 // Called by the tabs to determine whether we are in rapid (tab) closure mode. | 294 // Called by the tabs to determine whether we are in rapid (tab) closure mode. |
306 - (BOOL)inRapidClosureMode { | 295 - (BOOL)inRapidClosureMode { |
307 if ([[self target] respondsToSelector:@selector(inRapidClosureMode)]) { | 296 if ([[self target] respondsToSelector:@selector(inRapidClosureMode)]) { |
308 return [[self target] performSelector:@selector(inRapidClosureMode)] ? | 297 return [[self target] performSelector:@selector(inRapidClosureMode)] ? |
309 YES : NO; | 298 YES : NO; |
310 } | 299 } |
311 return NO; | 300 return NO; |
312 } | 301 } |
313 | 302 |
314 @end | 303 @end |
OLD | NEW |