| 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 #import "chrome/browser/cocoa/wrench_menu_controller.h" | 5 #import "chrome/browser/cocoa/wrench_menu_controller.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" |
| 7 #include "app/menus/menu_model.h" | 8 #include "app/menus/menu_model.h" |
| 8 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 9 #include "chrome/app/chrome_dll_resource.h" | 10 #include "chrome/app/chrome_dll_resource.h" |
| 10 #include "chrome/browser/browser.h" | 11 #include "chrome/browser/browser.h" |
| 11 #include "chrome/browser/browser_window.h" | 12 #include "chrome/browser/browser_window.h" |
| 12 #import "chrome/browser/cocoa/toolbar_controller.h" | 13 #import "chrome/browser/cocoa/toolbar_controller.h" |
| 13 #include "chrome/browser/wrench_menu_model.h" | 14 #include "chrome/browser/wrench_menu_model.h" |
| 15 #include "grit/chromium_strings.h" |
| 16 #include "grit/generated_resources.h" |
| 14 | 17 |
| 15 @interface WrenchMenuController (Private) | 18 @interface WrenchMenuController (Private) |
| 16 - (WrenchMenuModel*)wrenchMenuModel; | 19 - (WrenchMenuModel*)wrenchMenuModel; |
| 17 - (void)adjustPositioning; | 20 - (void)adjustPositioning; |
| 18 @end | 21 @end |
| 19 | 22 |
| 20 @implementation WrenchMenuController | 23 @implementation WrenchMenuController |
| 21 | 24 |
| 22 - (id)init { | 25 - (id)init { |
| 23 self = [super init]; | 26 self = [super init]; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 // TODO(rsesek): It'd be great if the zoom buttons didn't have to close the | 106 // TODO(rsesek): It'd be great if the zoom buttons didn't have to close the |
| 104 // menu. See http://crbug.com/48679 for more info. | 107 // menu. See http://crbug.com/48679 for more info. |
| 105 [menu_ cancelTracking]; | 108 [menu_ cancelTracking]; |
| 106 [self wrenchMenuModel]->ExecuteCommand(tag); | 109 [self wrenchMenuModel]->ExecuteCommand(tag); |
| 107 } | 110 } |
| 108 | 111 |
| 109 - (WrenchMenuModel*)wrenchMenuModel { | 112 - (WrenchMenuModel*)wrenchMenuModel { |
| 110 return static_cast<WrenchMenuModel*>(model_); | 113 return static_cast<WrenchMenuModel*>(model_); |
| 111 } | 114 } |
| 112 | 115 |
| 116 // Inserts the update available notification menu item. |
| 117 - (void)insertUpdateAvailableItem { |
| 118 WrenchMenuModel* model = [self wrenchMenuModel]; |
| 119 // Don't insert the item multiple times. |
| 120 if (!model || model->GetIndexOfCommandId(IDC_ABOUT) != -1) |
| 121 return; |
| 122 |
| 123 // Update the model manually because the model is static because other |
| 124 // platforms always have an About item. |
| 125 int index = model->GetIndexOfCommandId(IDC_OPTIONS) + 1; |
| 126 model->InsertItemAt(index, IDC_ABOUT, |
| 127 l10n_util::GetStringFUTF16(IDS_ABOUT, |
| 128 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); |
| 129 |
| 130 // The model does not broadcast change notifications to its delegate, so |
| 131 // insert the actual menu item ourselves. |
| 132 NSInteger menuIndex = [[self menu] indexOfItemWithTag:index]; |
| 133 [self addItemToMenu:[self menu] |
| 134 atIndex:menuIndex |
| 135 fromModel:model |
| 136 modelIndex:index]; |
| 137 |
| 138 // Since the tag of each menu item is the index within the model, they need |
| 139 // to be adjusted after insertion. |
| 140 for (NSInteger i = menuIndex + 1; i < [[self menu] numberOfItems]; ++i) { |
| 141 NSMenuItem* item = [[self menu] itemAtIndex:i]; |
| 142 [item setTag:[item tag] + 1]; |
| 143 } |
| 144 } |
| 145 |
| 113 // Fit the localized strings into the Cut/Copy/Paste control, then resize the | 146 // Fit the localized strings into the Cut/Copy/Paste control, then resize the |
| 114 // whole menu item accordingly. | 147 // whole menu item accordingly. |
| 115 - (void)adjustPositioning { | 148 - (void)adjustPositioning { |
| 116 NSRect itemFrame = [editItem_ frame]; | 149 NSRect itemFrame = [editItem_ frame]; |
| 117 NSRect controlFrame = [editControl_ frame]; | 150 NSRect controlFrame = [editControl_ frame]; |
| 118 | 151 |
| 119 CGFloat originalControlWidth = NSWidth(controlFrame); | 152 CGFloat originalControlWidth = NSWidth(controlFrame); |
| 120 // Maintain the carefully pixel-pushed gap between the edge of the menu and | 153 // Maintain the carefully pixel-pushed gap between the edge of the menu and |
| 121 // the rightmost control. | 154 // the rightmost control. |
| 122 CGFloat edge = NSWidth(itemFrame) - | 155 CGFloat edge = NSWidth(itemFrame) - |
| 123 (controlFrame.origin.x + originalControlWidth); | 156 (controlFrame.origin.x + originalControlWidth); |
| 124 | 157 |
| 125 // Resize the edit segmented control to fit the localized strings. | 158 // Resize the edit segmented control to fit the localized strings. |
| 126 [editControl_ sizeToFit]; | 159 [editControl_ sizeToFit]; |
| 127 controlFrame = [editControl_ frame]; | 160 controlFrame = [editControl_ frame]; |
| 128 CGFloat resizeAmount = NSWidth(controlFrame) - originalControlWidth; | 161 CGFloat resizeAmount = NSWidth(controlFrame) - originalControlWidth; |
| 129 | 162 |
| 130 // Adjust the size of the entire menu item to account for changes in the size | 163 // Adjust the size of the entire menu item to account for changes in the size |
| 131 // of the segmented control. | 164 // of the segmented control. |
| 132 itemFrame.size.width += resizeAmount; | 165 itemFrame.size.width += resizeAmount; |
| 133 [editItem_ setFrame:itemFrame]; | 166 [editItem_ setFrame:itemFrame]; |
| 134 | 167 |
| 135 // Keep the spacing between the right edges of the menu and the control. | 168 // Keep the spacing between the right edges of the menu and the control. |
| 136 controlFrame.origin.x = NSWidth(itemFrame) - edge - NSWidth(controlFrame); | 169 controlFrame.origin.x = NSWidth(itemFrame) - edge - NSWidth(controlFrame); |
| 137 [editControl_ setFrame:controlFrame]; | 170 [editControl_ setFrame:controlFrame]; |
| 138 } | 171 } |
| 139 | 172 |
| 140 @end // @implementation WrenchMenuController | 173 @end // @implementation WrenchMenuController |
| OLD | NEW |