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

Side by Side Diff: chrome/browser/chromeos/status/input_method_menu_button.cc

Issue 8438064: Separate StatusAreaView from StatusAreaViewChromeos (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 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 | 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 #include "chrome/browser/chromeos/status/input_method_menu_button.h" 5 #include "chrome/browser/chromeos/status/input_method_menu_button.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/chromeos/input_method/input_method_manager.h" 10 #include "chrome/browser/chromeos/input_method/input_method_manager.h"
11 #include "chrome/browser/chromeos/input_method/input_method_util.h" 11 #include "chrome/browser/chromeos/input_method/input_method_util.h"
12 #include "chrome/browser/chromeos/status/status_area_host.h"
13 #include "chrome/browser/prefs/pref_service.h" 12 #include "chrome/browser/prefs/pref_service.h"
14 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile_manager.h"
15 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_list.h" 15 #include "chrome/browser/ui/browser_list.h"
17 #include "chrome/browser/ui/browser_window.h" 16 #include "chrome/browser/ui/browser_window.h"
18 #include "views/widget/widget.h" 17 #include "views/widget/widget.h"
19 18
20 namespace { 19 namespace {
21 20
22 // Returns PrefService object associated with |host|. Returns NULL if we are NOT 21 PrefService* GetPrefService() {
23 // within a browser. 22 Profile* profile = ProfileManager::GetDefaultProfile();
24 PrefService* GetPrefService(chromeos::StatusAreaHost* host) { 23 if (profile)
25 if (host->GetProfile()) { 24 return profile->GetPrefs();
26 return host->GetProfile()->GetPrefs();
27 }
28 return NULL; 25 return NULL;
29 } 26 }
30 27
31 // A class which implements interfaces of chromeos::InputMethodMenu. This class 28 // A class which implements interfaces of chromeos::InputMethodMenu. This class
32 // is just for avoiding multiple inheritance. 29 // is just for avoiding multiple inheritance.
33 class MenuImpl : public chromeos::InputMethodMenu { 30 class MenuImpl : public chromeos::InputMethodMenu {
34 public: 31 public:
35 MenuImpl(chromeos::InputMethodMenuButton* button, 32 MenuImpl(chromeos::InputMethodMenuButton* button,
36 PrefService* pref_service, 33 PrefService* pref_service,
37 chromeos::StatusAreaHost::ScreenMode screen_mode) 34 chromeos::StatusAreaViewChromeos::ScreenMode screen_mode)
38 : InputMethodMenu(pref_service, screen_mode, false), button_(button) {} 35 : InputMethodMenu(pref_service, screen_mode, false), button_(button) {}
39 36
40 private: 37 private:
41 // InputMethodMenu implementation. 38 // InputMethodMenu implementation.
42 virtual void UpdateUI(const std::string& input_method_id, 39 virtual void UpdateUI(const std::string& input_method_id,
43 const string16& name, 40 const string16& name,
44 const string16& tooltip, 41 const string16& tooltip,
45 size_t num_active_input_methods) { 42 size_t num_active_input_methods) {
46 button_->UpdateUI(input_method_id, name, tooltip, num_active_input_methods); 43 button_->UpdateUI(input_method_id, name, tooltip, num_active_input_methods);
47 } 44 }
48 virtual bool ShouldSupportConfigUI() { 45 virtual bool ShouldSupportConfigUI() {
49 return button_->ShouldSupportConfigUI(); 46 return button_->ShouldSupportConfigUI();
50 } 47 }
51 virtual void OpenConfigUI() { 48 virtual void OpenConfigUI() {
52 button_->OpenConfigUI(); 49 button_->OpenConfigUI();
53 } 50 }
54 // The UI (views button) to which this class delegates all requests. 51 // The UI (views button) to which this class delegates all requests.
55 chromeos::InputMethodMenuButton* button_; 52 chromeos::InputMethodMenuButton* button_;
56 53
57 DISALLOW_COPY_AND_ASSIGN(MenuImpl); 54 DISALLOW_COPY_AND_ASSIGN(MenuImpl);
58 }; 55 };
59 56
60 } // namespace 57 } // namespace
61 58
62 namespace chromeos { 59 namespace chromeos {
63 60
64 //////////////////////////////////////////////////////////////////////////////// 61 ////////////////////////////////////////////////////////////////////////////////
65 // InputMethodMenuButton 62 // InputMethodMenuButton
66 63
67 InputMethodMenuButton::InputMethodMenuButton(StatusAreaHost* host) 64 InputMethodMenuButton::InputMethodMenuButton(
68 : StatusAreaButton(host, this), 65 StatusAreaButton::Delegate* delegate,
69 menu_(new MenuImpl(this, GetPrefService(host), host->GetScreenMode())) { 66 StatusAreaViewChromeos::ScreenMode screen_mode)
67 : StatusAreaButton(delegate, this),
68 menu_(new MenuImpl(this, GetPrefService(), screen_mode)),
69 screen_mode_(screen_mode) {
70 set_id(VIEW_ID_STATUS_BUTTON_INPUT_METHOD);
70 UpdateUIFromCurrentInputMethod(); 71 UpdateUIFromCurrentInputMethod();
71 } 72 }
72 73
73 InputMethodMenuButton::~InputMethodMenuButton() {} 74 InputMethodMenuButton::~InputMethodMenuButton() {}
74 75
75 //////////////////////////////////////////////////////////////////////////////// 76 ////////////////////////////////////////////////////////////////////////////////
76 // views::View implementation: 77 // views::View implementation:
77 78
78 void InputMethodMenuButton::OnLocaleChanged() { 79 void InputMethodMenuButton::OnLocaleChanged() {
79 input_method::InputMethodManager* manager = 80 input_method::InputMethodManager* manager =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 const string16& name, 112 const string16& name,
112 const string16& tooltip, 113 const string16& tooltip,
113 size_t num_active_input_methods) { 114 size_t num_active_input_methods) {
114 // Hide the button only if there is only one input method, and the input 115 // Hide the button only if there is only one input method, and the input
115 // method is a XKB keyboard layout. We don't hide the button for other 116 // method is a XKB keyboard layout. We don't hide the button for other
116 // types of input methods as these might have intra input method modes, 117 // types of input methods as these might have intra input method modes,
117 // like Hiragana and Katakana modes in Japanese input methods. 118 // like Hiragana and Katakana modes in Japanese input methods.
118 const bool hide_button = 119 const bool hide_button =
119 num_active_input_methods == 1 && 120 num_active_input_methods == 1 &&
120 input_method::InputMethodUtil::IsKeyboardLayout(input_method_id) && 121 input_method::InputMethodUtil::IsKeyboardLayout(input_method_id) &&
121 host_->GetScreenMode() == StatusAreaHost::kBrowserMode; 122 screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE;
122 SetVisible(!hide_button); 123 SetVisible(!hide_button);
123 SetText(name); 124 SetText(name);
124 SetTooltipText(tooltip); 125 SetTooltipText(tooltip);
125 SetAccessibleName(tooltip); 126 SetAccessibleName(tooltip);
126 127
127 if (WindowIsActive()) { 128 if (WindowIsActive()) {
128 // We don't call these functions if the |current_window| is not active since 129 // We don't call these functions if the |current_window| is not active since
129 // the calls are relatively expensive (crosbug.com/9206). Please note that 130 // the calls are relatively expensive (crosbug.com/9206). Please note that
130 // PrepareMenuModel() is necessary for fixing crosbug.com/7522 when the 131 // PrepareMenuModel() is necessary for fixing crosbug.com/7522 when the
131 // window is active. 132 // window is active.
132 menu_->PrepareMenuModel(); 133 menu_->PrepareMenuModel();
133 SchedulePaint(); 134 SchedulePaint();
134 } 135 }
135 136
136 // TODO(yusukes): For a window which isn't on top, probably it's better to 137 // TODO(yusukes): For a window which isn't on top, probably it's better to
137 // update the texts when the window gets activated because SetTooltipText() 138 // update the texts when the window gets activated because SetTooltipText()
138 // and SetText() are also expensive. 139 // and SetText() are also expensive.
139 } 140 }
140 141
141 void InputMethodMenuButton::OpenConfigUI() { 142 void InputMethodMenuButton::OpenConfigUI() {
142 host_->OpenButtonOptions(this); // ask browser to open the WebUI page. 143 // Ask browser to open the WebUI page.
144 delegate()->ExecuteStatusAreaCommand(
145 this, StatusAreaViewChromeos::SHOW_LANGUAGE_OPTIONS);
143 } 146 }
144 147
145 bool InputMethodMenuButton::ShouldSupportConfigUI() { 148 bool InputMethodMenuButton::ShouldSupportConfigUI() {
146 return host_->ShouldOpenButtonOptions(this); 149 return delegate()->ShouldExecuteStatusAreaCommand(
150 this, StatusAreaViewChromeos::SHOW_LANGUAGE_OPTIONS);
147 } 151 }
148 152
149 void InputMethodMenuButton::UpdateUIFromCurrentInputMethod() { 153 void InputMethodMenuButton::UpdateUIFromCurrentInputMethod() {
150 input_method::InputMethodManager* input_method_manager = 154 input_method::InputMethodManager* input_method_manager =
151 input_method::InputMethodManager::GetInstance(); 155 input_method::InputMethodManager::GetInstance();
152 const input_method::InputMethodDescriptor& input_method = 156 const input_method::InputMethodDescriptor& input_method =
153 input_method_manager->current_input_method(); 157 input_method_manager->current_input_method();
154 const string16 name = InputMethodMenu::GetTextForIndicator(input_method); 158 const string16 name = InputMethodMenu::GetTextForIndicator(input_method);
155 const string16 tooltip = InputMethodMenu::GetTextForMenu(input_method); 159 const string16 tooltip = InputMethodMenu::GetTextForMenu(input_method);
156 const size_t num_active_input_methods = 160 const size_t num_active_input_methods =
157 input_method_manager->GetNumActiveInputMethods(); 161 input_method_manager->GetNumActiveInputMethods();
158 UpdateUI(input_method.id(), name, tooltip, num_active_input_methods); 162 UpdateUI(input_method.id(), name, tooltip, num_active_input_methods);
159 } 163 }
160 164
161 } // namespace chromeos 165 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698