Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7893)

Unified Diff: chrome/browser/ui/cocoa/wrench_menu_controller.mm

Issue 6283005: [Mac] Move all the related files for the Wrench menu into a subdir of c/b/u/c... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/wrench_menu_controller.mm
===================================================================
--- chrome/browser/ui/cocoa/wrench_menu_controller.mm (revision 71447)
+++ chrome/browser/ui/cocoa/wrench_menu_controller.mm (working copy)
@@ -1,222 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "chrome/browser/ui/cocoa/wrench_menu_controller.h"
-
-#include "app/l10n_util.h"
-#include "base/sys_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/background_page_tracker.h"
-#include "chrome/browser/metrics/user_metrics.h"
-#import "chrome/browser/ui/cocoa/menu_tracked_root_view.h"
-#import "chrome/browser/ui/cocoa/toolbar_controller.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/toolbar/wrench_menu_model.h"
-#include "chrome/common/notification_observer.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/common/notification_source.h"
-#include "chrome/common/notification_type.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
-#include "ui/base/models/menu_model.h"
-
-@interface WrenchMenuController (Private)
-- (void)adjustPositioning;
-- (void)performCommandDispatch:(NSNumber*)tag;
-- (NSButton*)zoomDisplay;
-@end
-
-namespace WrenchMenuControllerInternal {
-
-class ZoomLevelObserver : public NotificationObserver {
- public:
- explicit ZoomLevelObserver(WrenchMenuController* controller)
- : controller_(controller) {
- registrar_.Add(this, NotificationType::ZOOM_LEVEL_CHANGED,
- NotificationService::AllSources());
- }
-
- void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK_EQ(type.value, NotificationType::ZOOM_LEVEL_CHANGED);
- WrenchMenuModel* wrenchMenuModel = [controller_ wrenchMenuModel];
- wrenchMenuModel->UpdateZoomControls();
- const string16 level =
- wrenchMenuModel->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY);
- [[controller_ zoomDisplay] setTitle:SysUTF16ToNSString(level)];
- }
-
- private:
- NotificationRegistrar registrar_;
- WrenchMenuController* controller_; // Weak; owns this.
-};
-
-} // namespace WrenchMenuControllerInternal
-
-@implementation WrenchMenuController
-
-- (id)init {
- if ((self = [super init])) {
- observer_.reset(new WrenchMenuControllerInternal::ZoomLevelObserver(self));
- }
- return self;
-}
-
-- (void)addItemToMenu:(NSMenu*)menu
- atIndex:(NSInteger)index
- fromModel:(ui::MenuModel*)model
- modelIndex:(int)modelIndex {
- // Non-button item types should be built as normal items.
- ui::MenuModel::ItemType type = model->GetTypeAt(modelIndex);
- if (type != ui::MenuModel::TYPE_BUTTON_ITEM) {
- [super addItemToMenu:menu
- atIndex:index
- fromModel:model
- modelIndex:modelIndex];
- return;
- }
-
- // Handle the special-cased menu items.
- int command_id = model->GetCommandIdAt(modelIndex);
- scoped_nsobject<NSMenuItem> customItem(
- [[NSMenuItem alloc] initWithTitle:@""
- action:nil
- keyEquivalent:@""]);
- switch (command_id) {
- case IDC_EDIT_MENU:
- DCHECK(editItem_);
- [customItem setView:editItem_];
- [editItem_ setMenuItem:customItem];
- break;
- case IDC_ZOOM_MENU:
- DCHECK(zoomItem_);
- [customItem setView:zoomItem_];
- [zoomItem_ setMenuItem:customItem];
- break;
- default:
- NOTREACHED();
- break;
- }
- [self adjustPositioning];
- [menu insertItem:customItem.get() atIndex:index];
-}
-
-- (NSMenu*)menu {
- NSMenu* menu = [super menu];
- if (![menu delegate]) {
- [menu setDelegate:self];
- }
- return menu;
-}
-
-- (void)menuWillOpen:(NSMenu*)menu {
- NSString* title = base::SysUTF16ToNSString(
- [self wrenchMenuModel]->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY));
- [[zoomItem_ viewWithTag:IDC_ZOOM_PERCENT_DISPLAY] setTitle:title];
- UserMetrics::RecordAction(UserMetricsAction("ShowAppMenu"));
-
- NSImage* icon = [self wrenchMenuModel]->browser()->window()->IsFullscreen() ?
- [NSImage imageNamed:NSImageNameExitFullScreenTemplate] :
- [NSImage imageNamed:NSImageNameEnterFullScreenTemplate];
- [zoomFullScreen_ setImage:icon];
-}
-
-- (void)menuDidClose:(NSMenu*)menu {
- // When the menu is closed, acknowledge the background pages so the badges go
- // away.
- BackgroundPageTracker::GetInstance()->AcknowledgeBackgroundPages();
-}
-
-// Used to dispatch commands from the Wrench menu. The custom items within the
-// menu cannot be hooked up directly to First Responder because the window in
-// which the controls reside is not the BrowserWindowController, but a
-// NSCarbonMenuWindow; this screws up the typical |-commandDispatch:| system.
-- (IBAction)dispatchWrenchMenuCommand:(id)sender {
- NSInteger tag = [sender tag];
- if (sender == zoomPlus_ || sender == zoomMinus_) {
- // Do a direct dispatch rather than scheduling on the outermost run loop,
- // which would not get hit until after the menu had closed.
- [self performCommandDispatch:[NSNumber numberWithInt:tag]];
-
- // The zoom buttons should not close the menu if opened sticky.
- if ([sender respondsToSelector:@selector(isTracking)] &&
- [sender performSelector:@selector(isTracking)]) {
- [menu_ cancelTracking];
- }
- } else {
- // The custom views within the Wrench menu are abnormal and keep the menu
- // open after a target-action. Close the menu manually.
- [menu_ cancelTracking];
- [self dispatchCommandInternal:tag];
- }
-}
-
-- (void)dispatchCommandInternal:(NSInteger)tag {
- // Executing certain commands from the nested run loop of the menu can lead
- // to wonky behavior (e.g. http://crbug.com/49716). To avoid this, schedule
- // the dispatch on the outermost run loop.
- [self performSelector:@selector(performCommandDispatch:)
- withObject:[NSNumber numberWithInt:tag]
- afterDelay:0.0];
-}
-
-// Used to perform the actual dispatch on the outermost runloop.
-- (void)performCommandDispatch:(NSNumber*)tag {
- [self wrenchMenuModel]->ExecuteCommand([tag intValue]);
-}
-
-- (WrenchMenuModel*)wrenchMenuModel {
- return static_cast<WrenchMenuModel*>(model_);
-}
-
-// Fit the localized strings into the Cut/Copy/Paste control, then resize the
-// whole menu item accordingly.
-- (void)adjustPositioning {
- const CGFloat kButtonPadding = 12;
- CGFloat delta = 0;
-
- // Go through the three buttons from right-to-left, adjusting the size to fit
- // the localized strings while keeping them all aligned on their horizontal
- // edges.
- const size_t kAdjustViewCount = 3;
- NSButton* views[kAdjustViewCount] = { editPaste_, editCopy_, editCut_ };
- for (size_t i = 0; i < kAdjustViewCount; ++i) {
- NSButton* button = views[i];
- CGFloat originalWidth = NSWidth([button frame]);
-
- // Do not let |-sizeToFit| change the height of the button.
- NSSize size = [button frame].size;
- [button sizeToFit];
- size.width = [button frame].size.width + kButtonPadding;
- [button setFrameSize:size];
-
- CGFloat newWidth = size.width;
- delta += newWidth - originalWidth;
-
- NSRect frame = [button frame];
- frame.origin.x -= delta;
- [button setFrame:frame];
- }
-
- // Resize the menu item by the total amound the buttons changed so that the
- // spacing between the buttons and the title remains the same.
- NSRect itemFrame = [editItem_ frame];
- itemFrame.size.width += delta;
- [editItem_ setFrame:itemFrame];
-
- // Also resize the superview of the buttons, which is an NSView used to slide
- // when the item title is too big and GTM resizes it.
- NSRect parentFrame = [[editCut_ superview] frame];
- parentFrame.size.width += delta;
- parentFrame.origin.x -= delta;
- [[editCut_ superview] setFrame:parentFrame];
-}
-
-- (NSButton*)zoomDisplay {
- return zoomDisplay_;
-}
-
-@end // @implementation WrenchMenuController

Powered by Google App Engine
This is Rietveld 408576698