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

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

Issue 12039058: content: convert zoom notifications to observer usage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
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/mac/mac_util.h" 9 #include "base/mac/mac_util.h"
10 #include "base/string16.h" 10 #include "base/string16.h"
11 #include "base/sys_string_conversions.h" 11 #include "base/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/encoding_menu_controller_delegate_mac.h" 19 #import "chrome/browser/ui/cocoa/encoding_menu_controller_delegate_mac.h"
20 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" 20 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
21 #import "chrome/browser/ui/cocoa/wrench_menu/menu_tracked_root_view.h" 21 #import "chrome/browser/ui/cocoa/wrench_menu/menu_tracked_root_view.h"
22 #import "chrome/browser/ui/cocoa/wrench_menu/recent_tabs_menu_model_delegate.h" 22 #import "chrome/browser/ui/cocoa/wrench_menu/recent_tabs_menu_model_delegate.h"
23 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" 23 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h"
24 #include "chrome/browser/ui/toolbar/wrench_menu_model.h" 24 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
25 #include "content/public/browser/host_zoom_map.h"
26 #include "content/public/browser/notification_observer.h"
27 #include "content/public/browser/notification_service.h"
28 #include "content/public/browser/notification_source.h"
29 #include "content/public/browser/notification_types.h"
30 #include "content/public/browser/user_metrics.h" 25 #include "content/public/browser/user_metrics.h"
31 #include "grit/chromium_strings.h" 26 #include "grit/chromium_strings.h"
32 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
33 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
34 #include "ui/base/models/menu_model.h" 29 #include "ui/base/models/menu_model.h"
35 30
36 using content::HostZoomMap; 31 using content::HostZoomMap;
37 using content::UserMetricsAction; 32 using content::UserMetricsAction;
38 33
39 @interface WrenchMenuController (Private) 34 @interface WrenchMenuController (Private)
(...skipping 17 matching lines...) Expand all
57 AcceleratorsCocoa* keymap = AcceleratorsCocoa::GetInstance(); 52 AcceleratorsCocoa* keymap = AcceleratorsCocoa::GetInstance();
58 const ui::Accelerator* accelerator = 53 const ui::Accelerator* accelerator =
59 keymap->GetAcceleratorForCommand(command_id); 54 keymap->GetAcceleratorForCommand(command_id);
60 if (!accelerator) 55 if (!accelerator)
61 return false; 56 return false;
62 *out_accelerator = *accelerator; 57 *out_accelerator = *accelerator;
63 return true; 58 return true;
64 } 59 }
65 }; 60 };
66 61
67 class ZoomLevelObserver : public content::NotificationObserver { 62 class ZoomLevelObserver {
68 public: 63 public:
69 explicit ZoomLevelObserver(WrenchMenuController* controller) 64 ZoomLevelObserver(WrenchMenuController* controller,
70 : controller_(controller) { 65 content::HostZoomMap* map)
71 registrar_.Add( 66 : callback_(base::Bind(&ZoomLevelObserver::OnZoomLevelChanged,
72 this, content::NOTIFICATION_ZOOM_LEVEL_CHANGED, 67 base::Unretained(this))),
73 content::NotificationService::AllBrowserContextsAndSources()); 68 controller_(controller),
69 map_(map) {
70 map_->AddZoomLevelChangedCallback(callback_);
74 } 71 }
75 72
76 void Observe(int type, 73 ~ZoomLevelObserver() {
77 const content::NotificationSource& source, 74 map_->RemoveZoomLevelChangedCallback(callback_);
78 const content::NotificationDetails& details) { 75 }
79 DCHECK_EQ(type, content::NOTIFICATION_ZOOM_LEVEL_CHANGED); 76
77 private:
78 void OnZoomLevelChanged(const std::string& host) {
80 WrenchMenuModel* wrenchMenuModel = [controller_ wrenchMenuModel]; 79 WrenchMenuModel* wrenchMenuModel = [controller_ wrenchMenuModel];
81 if (HostZoomMap::GetForBrowserContext(
82 wrenchMenuModel->browser()->profile()) !=
83 content::Source<HostZoomMap>(source).ptr()) {
84 return;
85 }
86
87 wrenchMenuModel->UpdateZoomControls(); 80 wrenchMenuModel->UpdateZoomControls();
88 const string16 level = 81 const string16 level =
89 wrenchMenuModel->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY); 82 wrenchMenuModel->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY);
90 [[controller_ zoomDisplay] setTitle:SysUTF16ToNSString(level)]; 83 [[controller_ zoomDisplay] setTitle:SysUTF16ToNSString(level)];
91 } 84 }
92 85
93 private: 86 content::HostZoomMap::ZoomLevelChangedCallback callback_;
94 content::NotificationRegistrar registrar_; 87
95 WrenchMenuController* controller_; // Weak; owns this. 88 WrenchMenuController* controller_; // Weak; owns this.
89 content::HostZoomMap* map_; // Weak.
90
91 DISALLOW_COPY_AND_ASSIGN(ZoomLevelObserver);
96 }; 92 };
97 93
98 } // namespace WrenchMenuControllerInternal 94 } // namespace WrenchMenuControllerInternal
99 95
100 @implementation WrenchMenuController 96 @implementation WrenchMenuController
101 97
102 - (id)initWithBrowser:(Browser*)browser { 98 - (id)initWithBrowser:(Browser*)browser {
103 if ((self = [super init])) { 99 if ((self = [super init])) {
104 browser_ = browser; 100 browser_ = browser;
105 observer_.reset(new WrenchMenuControllerInternal::ZoomLevelObserver(self)); 101 observer_.reset(new WrenchMenuControllerInternal::ZoomLevelObserver(
102 self, content::HostZoomMap::GetForBrowserContext(browser->profile())));
106 acceleratorDelegate_.reset( 103 acceleratorDelegate_.reset(
107 new WrenchMenuControllerInternal::AcceleratorDelegate()); 104 new WrenchMenuControllerInternal::AcceleratorDelegate());
108 [self createModel]; 105 [self createModel];
109 } 106 }
110 return self; 107 return self;
111 } 108 }
112 109
113 - (void)addItemToMenu:(NSMenu*)menu 110 - (void)addItemToMenu:(NSMenu*)menu
114 atIndex:(NSInteger)index 111 atIndex:(NSInteger)index
115 fromModel:(ui::MenuModel*)model { 112 fromModel:(ui::MenuModel*)model {
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 controller_ = controller; 356 controller_ = controller;
360 } 357 }
361 return self; 358 return self;
362 } 359 }
363 360
364 - (IBAction)dispatchWrenchMenuCommand:(id)sender { 361 - (IBAction)dispatchWrenchMenuCommand:(id)sender {
365 [controller_ dispatchWrenchMenuCommand:sender]; 362 [controller_ dispatchWrenchMenuCommand:sender];
366 } 363 }
367 364
368 @end // @implementation WrenchMenuButtonViewController 365 @end // @implementation WrenchMenuButtonViewController
OLDNEW
« no previous file with comments | « chrome/browser/ui/browser_browsertest.cc ('k') | chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698