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

Side by Side Diff: chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm

Issue 1417423003: chrome: Rename WrenchMenuModel to AppMenuModel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ui/cocoa/wrench_menu/wrench_menu_controller.h" 5 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/mac/bundle_locations.h" 8 #include "base/mac/bundle_locations.h"
9 #include "base/scoped_observer.h" 9 #include "base/scoped_observer.h"
10 #include "base/strings/string16.h" 10 #include "base/strings/string16.h"
11 #include "base/strings/sys_string_conversions.h" 11 #include "base/strings/sys_string_conversions.h"
12 #include "chrome/app/chrome_command_ids.h" 12 #include "chrome/app/chrome_command_ids.h"
13 #import "chrome/browser/app_controller_mac.h" 13 #import "chrome/browser/app_controller_mac.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_window.h" 16 #include "chrome/browser/ui/browser_window.h"
17 #import "chrome/browser/ui/cocoa/accelerators_cocoa.h" 17 #import "chrome/browser/ui/cocoa/accelerators_cocoa.h"
18 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h" 18 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h"
19 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h" 19 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h"
20 #import "chrome/browser/ui/cocoa/browser_window_controller.h" 20 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
21 #import "chrome/browser/ui/cocoa/encoding_menu_controller_delegate_mac.h" 21 #import "chrome/browser/ui/cocoa/encoding_menu_controller_delegate_mac.h"
22 #import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h" 22 #import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h"
23 #import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h" 23 #import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h"
24 #import "chrome/browser/ui/cocoa/l10n_util.h" 24 #import "chrome/browser/ui/cocoa/l10n_util.h"
25 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" 25 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
26 #import "chrome/browser/ui/cocoa/wrench_menu/menu_tracked_root_view.h" 26 #import "chrome/browser/ui/cocoa/wrench_menu/menu_tracked_root_view.h"
27 #import "chrome/browser/ui/cocoa/wrench_menu/recent_tabs_menu_model_delegate.h" 27 #import "chrome/browser/ui/cocoa/wrench_menu/recent_tabs_menu_model_delegate.h"
28 #include "chrome/browser/ui/toolbar/app_menu_model.h"
28 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" 29 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h"
29 #include "chrome/browser/ui/toolbar/toolbar_actions_bar.h" 30 #include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
30 #include "chrome/browser/ui/toolbar/toolbar_actions_bar_observer.h" 31 #include "chrome/browser/ui/toolbar/toolbar_actions_bar_observer.h"
31 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
32 #include "chrome/grit/generated_resources.h" 32 #include "chrome/grit/generated_resources.h"
33 #include "components/ui/zoom/zoom_event_manager.h" 33 #include "components/ui/zoom/zoom_event_manager.h"
34 #include "content/public/browser/user_metrics.h" 34 #include "content/public/browser/user_metrics.h"
35 #include "ui/base/l10n/l10n_util.h" 35 #include "ui/base/l10n/l10n_util.h"
36 #include "ui/base/models/menu_model.h" 36 #include "ui/base/models/menu_model.h"
37 #include "ui/gfx/geometry/size.h" 37 #include "ui/gfx/geometry/size.h"
38 38
39 namespace { 39 namespace {
40 // Padding amounts on the left/right of a custom menu item (like the browser 40 // Padding amounts on the left/right of a custom menu item (like the browser
41 // actions overflow container). 41 // actions overflow container).
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 : controller_(controller) { 93 : controller_(controller) {
94 subscription_ = manager->AddZoomLevelChangedCallback( 94 subscription_ = manager->AddZoomLevelChangedCallback(
95 base::Bind(&ZoomLevelObserver::OnZoomLevelChanged, 95 base::Bind(&ZoomLevelObserver::OnZoomLevelChanged,
96 base::Unretained(this))); 96 base::Unretained(this)));
97 } 97 }
98 98
99 ~ZoomLevelObserver() {} 99 ~ZoomLevelObserver() {}
100 100
101 private: 101 private:
102 void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change) { 102 void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change) {
103 WrenchMenuModel* wrenchMenuModel = [controller_ wrenchMenuModel]; 103 AppMenuModel* appMenuModel = [controller_ appMenuModel];
104 wrenchMenuModel->UpdateZoomControls(); 104 appMenuModel->UpdateZoomControls();
105 const base::string16 level = 105 const base::string16 level =
106 wrenchMenuModel->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY); 106 appMenuModel->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY);
107 [[controller_ zoomDisplay] setTitle:SysUTF16ToNSString(level)]; 107 [[controller_ zoomDisplay] setTitle:SysUTF16ToNSString(level)];
108 } 108 }
109 109
110 scoped_ptr<content::HostZoomMap::Subscription> subscription_; 110 scoped_ptr<content::HostZoomMap::Subscription> subscription_;
111 111
112 WrenchMenuController* controller_; // Weak; owns this. 112 WrenchMenuController* controller_; // Weak; owns this.
113 113
114 DISALLOW_COPY_AND_ASSIGN(ZoomLevelObserver); 114 DISALLOW_COPY_AND_ASSIGN(ZoomLevelObserver);
115 }; 115 };
116 116
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 - (void)dealloc { 156 - (void)dealloc {
157 [self browserWillBeDestroyed]; 157 [self browserWillBeDestroyed];
158 [super dealloc]; 158 [super dealloc];
159 } 159 }
160 160
161 - (void)browserWillBeDestroyed { 161 - (void)browserWillBeDestroyed {
162 // This method indicates imminent destruction. Destroy owned objects that hold 162 // This method indicates imminent destruction. Destroy owned objects that hold
163 // a weak Browser*, or pass this call onto reference counted objects. 163 // a weak Browser*, or pass this call onto reference counted objects.
164 recentTabsMenuModelDelegate_.reset(); 164 recentTabsMenuModelDelegate_.reset();
165 [self setModel:nullptr]; 165 [self setModel:nullptr];
166 wrenchMenuModel_.reset(); 166 appMenuModel_.reset();
167 buttonViewController_.reset(); 167 buttonViewController_.reset();
168 168
169 // The observers should most likely already be destroyed (since they're reset 169 // The observers should most likely already be destroyed (since they're reset
170 // in -menuDidClose:), but sometimes shutdown can be funny, so make sure to 170 // in -menuDidClose:), but sometimes shutdown can be funny, so make sure to
171 // not leave any dangling observers. 171 // not leave any dangling observers.
172 zoom_level_observer_.reset(); 172 zoom_level_observer_.reset();
173 toolbar_actions_bar_observer_.reset(); 173 toolbar_actions_bar_observer_.reset();
174 174
175 [browserActionsController_ browserWillBeDestroyed]; 175 [browserActionsController_ browserWillBeDestroyed];
176 176
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 - (NSMenu*)bookmarkSubMenu { 281 - (NSMenu*)bookmarkSubMenu {
282 NSString* title = l10n_util::GetNSStringWithFixup(IDS_BOOKMARKS_MENU); 282 NSString* title = l10n_util::GetNSStringWithFixup(IDS_BOOKMARKS_MENU);
283 return [[[self menu] itemWithTitle:title] submenu]; 283 return [[[self menu] itemWithTitle:title] submenu];
284 } 284 }
285 285
286 - (void)updateBookmarkSubMenu { 286 - (void)updateBookmarkSubMenu {
287 NSMenu* bookmarkMenu = [self bookmarkSubMenu]; 287 NSMenu* bookmarkMenu = [self bookmarkSubMenu];
288 DCHECK(bookmarkMenu); 288 DCHECK(bookmarkMenu);
289 289
290 bookmarkMenuBridge_.reset( 290 bookmarkMenuBridge_.reset(new BookmarkMenuBridge(
291 new BookmarkMenuBridge([self wrenchMenuModel]->browser()->profile(), 291 [self appMenuModel]->browser()->profile(), bookmarkMenu));
292 bookmarkMenu));
293 } 292 }
294 293
295 - (void)updateBrowserActionsSubmenu { 294 - (void)updateBrowserActionsSubmenu {
296 MenuTrackedRootView* view = 295 MenuTrackedRootView* view =
297 [buttonViewController_ toolbarActionsOverflowItem]; 296 [buttonViewController_ toolbarActionsOverflowItem];
298 BrowserActionsContainerView* containerView = 297 BrowserActionsContainerView* containerView =
299 [buttonViewController_ overflowActionsContainerView]; 298 [buttonViewController_ overflowActionsContainerView];
300 299
301 // Find the preferred container size for the menu width. 300 // Find the preferred container size for the menu width.
302 int menuWidth = [[self menu] size].width; 301 int menuWidth = [[self menu] size].width;
(...skipping 29 matching lines...) Expand all
332 331
333 - (void)menuWillOpen:(NSMenu*)menu { 332 - (void)menuWillOpen:(NSMenu*)menu {
334 [super menuWillOpen:menu]; 333 [super menuWillOpen:menu];
335 334
336 zoom_level_observer_.reset( 335 zoom_level_observer_.reset(
337 new WrenchMenuControllerInternal::ZoomLevelObserver( 336 new WrenchMenuControllerInternal::ZoomLevelObserver(
338 self, 337 self,
339 ui_zoom::ZoomEventManager::GetForBrowserContext( 338 ui_zoom::ZoomEventManager::GetForBrowserContext(
340 browser_->profile()))); 339 browser_->profile())));
341 NSString* title = base::SysUTF16ToNSString( 340 NSString* title = base::SysUTF16ToNSString(
342 [self wrenchMenuModel]->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY)); 341 [self appMenuModel]->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY));
343 [[[buttonViewController_ zoomItem] viewWithTag:IDC_ZOOM_PERCENT_DISPLAY] 342 [[[buttonViewController_ zoomItem] viewWithTag:IDC_ZOOM_PERCENT_DISPLAY]
344 setTitle:title]; 343 setTitle:title];
345 content::RecordAction(UserMetricsAction("ShowAppMenu")); 344 content::RecordAction(UserMetricsAction("ShowAppMenu"));
346 345
347 NSImage* icon = [self wrenchMenuModel]->browser()->window()->IsFullscreen() ? 346 NSImage* icon = [self appMenuModel]->browser()->window()->IsFullscreen()
348 [NSImage imageNamed:NSImageNameExitFullScreenTemplate] : 347 ? [NSImage imageNamed:NSImageNameExitFullScreenTemplate]
349 [NSImage imageNamed:NSImageNameEnterFullScreenTemplate]; 348 : [NSImage imageNamed:NSImageNameEnterFullScreenTemplate];
350 [[buttonViewController_ zoomFullScreen] setImage:icon]; 349 [[buttonViewController_ zoomFullScreen] setImage:icon];
351 } 350 }
352 351
353 - (void)menuDidClose:(NSMenu*)menu { 352 - (void)menuDidClose:(NSMenu*)menu {
354 [super menuDidClose:menu]; 353 [super menuDidClose:menu];
355 // We don't need to observe changes to zoom or toolbar size when the menu is 354 // We don't need to observe changes to zoom or toolbar size when the menu is
356 // closed, since we instantiate it with the proper value and recreate the menu 355 // closed, since we instantiate it with the proper value and recreate the menu
357 // on each show. (We do this in -menuNeedsUpdate:, which is called when the 356 // on each show. (We do this in -menuNeedsUpdate:, which is called when the
358 // menu is about to be displayed at the start of a tracking session.) 357 // menu is about to be displayed at the start of a tracking session.)
359 zoom_level_observer_.reset(); 358 zoom_level_observer_.reset();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 // to wonky behavior (e.g. http://crbug.com/49716). To avoid this, schedule 405 // to wonky behavior (e.g. http://crbug.com/49716). To avoid this, schedule
407 // the dispatch on the outermost run loop. 406 // the dispatch on the outermost run loop.
408 [self performSelector:@selector(performCommandDispatch:) 407 [self performSelector:@selector(performCommandDispatch:)
409 withObject:[NSNumber numberWithInt:tag] 408 withObject:[NSNumber numberWithInt:tag]
410 afterDelay:0.0]; 409 afterDelay:0.0];
411 } 410 }
412 } 411 }
413 412
414 // Used to perform the actual dispatch on the outermost runloop. 413 // Used to perform the actual dispatch on the outermost runloop.
415 - (void)performCommandDispatch:(NSNumber*)tag { 414 - (void)performCommandDispatch:(NSNumber*)tag {
416 [self wrenchMenuModel]->ExecuteCommand([tag intValue], 0); 415 [self appMenuModel]->ExecuteCommand([tag intValue], 0);
417 } 416 }
418 417
419 - (WrenchMenuModel*)wrenchMenuModel { 418 - (AppMenuModel*)appMenuModel {
420 // Don't use |wrenchMenuModel_| so that a test can override the generic one. 419 // Don't use |appMenuModel_| so that a test can override the generic one.
421 return static_cast<WrenchMenuModel*>(model_); 420 return static_cast<AppMenuModel*>(model_);
422 } 421 }
423 422
424 - (void)updateRecentTabsSubmenu { 423 - (void)updateRecentTabsSubmenu {
425 ui::MenuModel* model = [self recentTabsMenuModel]; 424 ui::MenuModel* model = [self recentTabsMenuModel];
426 if (model) { 425 if (model) {
427 recentTabsMenuModelDelegate_.reset( 426 recentTabsMenuModelDelegate_.reset(
428 new RecentTabsMenuModelDelegate(model, [self recentTabsSubmenu])); 427 new RecentTabsMenuModelDelegate(model, [self recentTabsSubmenu]));
429 } 428 }
430 } 429 }
431 430
432 - (BrowserActionsController*)browserActionsController { 431 - (BrowserActionsController*)browserActionsController {
433 return browserActionsController_.get(); 432 return browserActionsController_.get();
434 } 433 }
435 434
436 - (void)createModel { 435 - (void)createModel {
437 DCHECK(browser_); 436 DCHECK(browser_);
438 recentTabsMenuModelDelegate_.reset(); 437 recentTabsMenuModelDelegate_.reset();
439 wrenchMenuModel_.reset( 438 appMenuModel_.reset(new AppMenuModel(acceleratorDelegate_.get(), browser_));
440 new WrenchMenuModel(acceleratorDelegate_.get(), browser_)); 439 [self setModel:appMenuModel_.get()];
441 [self setModel:wrenchMenuModel_.get()];
442 440
443 buttonViewController_.reset( 441 buttonViewController_.reset(
444 [[WrenchMenuButtonViewController alloc] initWithController:self]); 442 [[WrenchMenuButtonViewController alloc] initWithController:self]);
445 [buttonViewController_ view]; 443 [buttonViewController_ view];
446 444
447 // See comment in containerSuperviewFrameChanged:. 445 // See comment in containerSuperviewFrameChanged:.
448 NSView* containerSuperview = 446 NSView* containerSuperview =
449 [[buttonViewController_ overflowActionsContainerView] superview]; 447 [[buttonViewController_ overflowActionsContainerView] superview];
450 [containerSuperview setPostsFrameChangedNotifications:YES]; 448 [containerSuperview setPostsFrameChangedNotifications:YES];
451 } 449 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 NSString* title = l10n_util::GetNSStringWithFixup(IDS_RECENT_TABS_MENU); 516 NSString* title = l10n_util::GetNSStringWithFixup(IDS_RECENT_TABS_MENU);
519 return [[[self menu] itemWithTitle:title] submenu]; 517 return [[[self menu] itemWithTitle:title] submenu];
520 } 518 }
521 519
522 // The recent tabs menu model is recognized by the existence of either the 520 // The recent tabs menu model is recognized by the existence of either the
523 // kRecentlyClosedHeaderCommandId or the kDisabledRecentlyClosedHeaderCommandId. 521 // kRecentlyClosedHeaderCommandId or the kDisabledRecentlyClosedHeaderCommandId.
524 - (RecentTabsSubMenuModel*)recentTabsMenuModel { 522 - (RecentTabsSubMenuModel*)recentTabsMenuModel {
525 int index = 0; 523 int index = 0;
526 // Start searching at the wrench menu model level, |model| will be updated 524 // Start searching at the wrench menu model level, |model| will be updated
527 // only if the command we're looking for is found in one of the [sub]menus. 525 // only if the command we're looking for is found in one of the [sub]menus.
528 ui::MenuModel* model = [self wrenchMenuModel]; 526 ui::MenuModel* model = [self appMenuModel];
529 if (ui::MenuModel::GetModelAndIndexForCommandId( 527 if (ui::MenuModel::GetModelAndIndexForCommandId(
530 RecentTabsSubMenuModel::kRecentlyClosedHeaderCommandId, &model, 528 RecentTabsSubMenuModel::kRecentlyClosedHeaderCommandId, &model,
531 &index)) { 529 &index)) {
532 return static_cast<RecentTabsSubMenuModel*>(model); 530 return static_cast<RecentTabsSubMenuModel*>(model);
533 } 531 }
534 if (ui::MenuModel::GetModelAndIndexForCommandId( 532 if (ui::MenuModel::GetModelAndIndexForCommandId(
535 RecentTabsSubMenuModel::kDisabledRecentlyClosedHeaderCommandId, 533 RecentTabsSubMenuModel::kDisabledRecentlyClosedHeaderCommandId,
536 &model, &index)) { 534 &model, &index)) {
537 return static_cast<RecentTabsSubMenuModel*>(model); 535 return static_cast<RecentTabsSubMenuModel*>(model);
538 } 536 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 // (and thus, after all our ability to adjust it normally). Throw in the 600 // (and thus, after all our ability to adjust it normally). Throw in the
603 // towel, and simply don't let the frame move from where it's supposed to be. 601 // towel, and simply don't let the frame move from where it's supposed to be.
604 // TODO(devlin): Yet another Cocoa hack. It'd be good to find a workaround, 602 // TODO(devlin): Yet another Cocoa hack. It'd be good to find a workaround,
605 // but unlikely unless we replace the Cocoa menu implementation. 603 // but unlikely unless we replace the Cocoa menu implementation.
606 NSView* containerSuperview = [overflowActionsContainerView_ superview]; 604 NSView* containerSuperview = [overflowActionsContainerView_ superview];
607 if (NSMinX([containerSuperview frame]) != 0) 605 if (NSMinX([containerSuperview frame]) != 0)
608 [containerSuperview setFrameOrigin:NSZeroPoint]; 606 [containerSuperview setFrameOrigin:NSZeroPoint];
609 } 607 }
610 608
611 @end // @implementation WrenchMenuButtonViewController 609 @end // @implementation WrenchMenuButtonViewController
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698