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

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

Issue 6262012: Remove multiple inheritance from input_method_menu_button.h. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #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/cros/cros_library.h" 10 #include "chrome/browser/chromeos/cros/cros_library.h"
(...skipping 14 matching lines...) Expand all
25 } 25 }
26 return NULL; 26 return NULL;
27 } 27 }
28 28
29 #if defined(CROS_FONTS_USING_BCI) 29 #if defined(CROS_FONTS_USING_BCI)
30 const int kFontSizeDelta = 0; 30 const int kFontSizeDelta = 0;
31 #else 31 #else
32 const int kFontSizeDelta = 1; 32 const int kFontSizeDelta = 1;
33 #endif 33 #endif
34 34
35 // A class which implements interfaces of chromeos::InputMethodMenu. This class
36 // is just for avoiding multiple inheritance.
37 class MenuImpl : public chromeos::InputMethodMenu {
38 public:
39 MenuImpl(chromeos::InputMethodMenuButton* button,
40 PrefService* pref_service,
41 chromeos::StatusAreaHost::ScreenMode screen_mode)
42 : InputMethodMenu(pref_service, screen_mode, false), button_(button) {}
43
44 private:
45 // InputMethodMenu implementation.
46 virtual void UpdateUI(const std::string& input_method_id,
47 const std::wstring& name,
48 const std::wstring& tooltip,
49 size_t num_active_input_methods) {
50 button_->UpdateUI(input_method_id, name, tooltip, num_active_input_methods);
51 }
52 virtual bool ShouldSupportConfigUI() {
53 return button_->ShouldSupportConfigUI();
54 }
55 virtual void OpenConfigUI() {
56 button_->OpenConfigUI();
57 }
58 // The UI (views button) to which this class delegates all requests.
59 chromeos::InputMethodMenuButton* button_;
60
61 DISALLOW_COPY_AND_ASSIGN(MenuImpl);
62 };
63
35 } // namespace 64 } // namespace
36 65
37 namespace chromeos { 66 namespace chromeos {
38 67
39 //////////////////////////////////////////////////////////////////////////////// 68 ////////////////////////////////////////////////////////////////////////////////
40 // InputMethodMenuButton 69 // InputMethodMenuButton
41 70
42 InputMethodMenuButton::InputMethodMenuButton(StatusAreaHost* host) 71 InputMethodMenuButton::InputMethodMenuButton(StatusAreaHost* host)
43 : StatusAreaButton(this), 72 : StatusAreaButton(this),
44 InputMethodMenu(GetPrefService(host), 73 menu_(new MenuImpl(this, GetPrefService(host), host->GetScreenMode())),
45 host->GetScreenMode(),
46 false /* for_out_of_box_experience_dialog */),
47 host_(host) { 74 host_(host) {
48 set_border(NULL); 75 set_border(NULL);
49 set_use_menu_button_paint(true); 76 set_use_menu_button_paint(true);
50 SetFont(ResourceBundle::GetSharedInstance().GetFont( 77 SetFont(ResourceBundle::GetSharedInstance().GetFont(
51 ResourceBundle::BaseFont).DeriveFont(kFontSizeDelta)); 78 ResourceBundle::BaseFont).DeriveFont(kFontSizeDelta));
52 SetEnabledColor(0xB3FFFFFF); // White with 70% Alpha 79 SetEnabledColor(0xB3FFFFFF); // White with 70% Alpha
53 SetDisabledColor(0x00FFFFFF); // White with 00% Alpha (invisible) 80 SetDisabledColor(0x00FFFFFF); // White with 00% Alpha (invisible)
54 SetShowMultipleIconStates(false); 81 SetShowMultipleIconStates(false);
55 set_alignment(TextButton::ALIGN_CENTER); 82 set_alignment(TextButton::ALIGN_CENTER);
56 83
57 chromeos::KeyboardLibrary* keyboard_library = 84 chromeos::KeyboardLibrary* keyboard_library =
58 chromeos::CrosLibrary::Get()->GetKeyboardLibrary(); 85 chromeos::CrosLibrary::Get()->GetKeyboardLibrary();
59 const std::string hardware_keyboard_id = // e.g. "xkb:us::eng" 86 const std::string hardware_keyboard_id = // e.g. "xkb:us::eng"
60 keyboard_library->GetHardwareKeyboardLayoutName(); 87 keyboard_library->GetHardwareKeyboardLayoutName();
61 88
62 // Draw the default indicator "US". The default indicator "US" is used when 89 // Draw the default indicator "US". The default indicator "US" is used when
63 // |pref_service| is not available (for example, unit tests) or |pref_service| 90 // |pref_service| is not available (for example, unit tests) or |pref_service|
64 // is available, but Chrome preferences are not available (for example, 91 // is available, but Chrome preferences are not available (for example,
65 // initial OS boot). 92 // initial OS boot).
66 InputMethodMenuButton::UpdateUI(hardware_keyboard_id, L"US", L"", 1); 93 UpdateUI(hardware_keyboard_id, L"US", L"", 1);
67 } 94 }
68 95
69 //////////////////////////////////////////////////////////////////////////////// 96 ////////////////////////////////////////////////////////////////////////////////
70 // views::View implementation: 97 // views::View implementation:
71 98
72 gfx::Size InputMethodMenuButton::GetPreferredSize() { 99 gfx::Size InputMethodMenuButton::GetPreferredSize() {
73 // If not enabled, then hide this button. 100 // If not enabled, then hide this button.
74 if (!IsEnabled()) { 101 if (!IsEnabled()) {
75 return gfx::Size(0, 0); 102 return gfx::Size(0, 0);
76 } 103 }
77 return StatusAreaButton::GetPreferredSize(); 104 return StatusAreaButton::GetPreferredSize();
78 } 105 }
79 106
80 void InputMethodMenuButton::OnLocaleChanged() { 107 void InputMethodMenuButton::OnLocaleChanged() {
81 input_method::OnLocaleChanged(); 108 input_method::OnLocaleChanged();
82 109
83 chromeos::InputMethodLibrary* input_method_library = 110 chromeos::InputMethodLibrary* input_method_library =
84 chromeos::CrosLibrary::Get()->GetInputMethodLibrary(); 111 chromeos::CrosLibrary::Get()->GetInputMethodLibrary();
85 const InputMethodDescriptor& input_method = 112 const InputMethodDescriptor& input_method =
86 input_method_library->current_input_method(); 113 input_method_library->current_input_method();
114 const std::wstring name = InputMethodMenu::GetTextForIndicator(input_method);
115 const std::wstring tooltip = InputMethodMenu::GetTextForMenu(input_method);
87 116
88 // In general, we should not call an input method API in the input method 117 // In general, we should not call an input method API in the input method
89 // button classes (status/input_menu_button*.cc) for performance reasons (see 118 // button classes (status/input_menu_button*.cc) for performance reasons (see
90 // http://crosbug.com/8284). However, since OnLocaleChanged is called only in 119 // http://crosbug.com/8284). However, since OnLocaleChanged is called only in
91 // OOBE/Login screen which does not have two or more Chrome windows, it's okay 120 // OOBE/Login screen which does not have two or more Chrome windows, it's okay
92 // to call GetNumActiveInputMethods here. 121 // to call GetNumActiveInputMethods here.
93 const size_t num_active_input_methods = 122 const size_t num_active_input_methods =
94 input_method_library->GetNumActiveInputMethods(); 123 input_method_library->GetNumActiveInputMethods();
124 UpdateUI(input_method.id, name, tooltip, num_active_input_methods);
95 125
96 UpdateUIFromInputMethod(input_method, num_active_input_methods);
97 Layout(); 126 Layout();
98 SchedulePaint(); 127 SchedulePaint();
99 } 128 }
100 129
101 //////////////////////////////////////////////////////////////////////////////// 130 ////////////////////////////////////////////////////////////////////////////////
102 // InputMethodMenu::InputMethodMenuHost implementation: 131 // views::ViewMenuDelegate implementation:
132
133 void InputMethodMenuButton::RunMenu(views::View* unused_source,
134 const gfx::Point& pt) {
135 menu_->RunMenu(unused_source, pt);
136 }
103 137
104 void InputMethodMenuButton::UpdateUI(const std::string& input_method_id, 138 void InputMethodMenuButton::UpdateUI(const std::string& input_method_id,
105 const std::wstring& name, 139 const std::wstring& name,
106 const std::wstring& tooltip, 140 const std::wstring& tooltip,
107 size_t num_active_input_methods) { 141 size_t num_active_input_methods) {
108 // Hide the button only if there is only one input method, and the input 142 // Hide the button only if there is only one input method, and the input
109 // method is a XKB keyboard layout. We don't hide the button for other 143 // method is a XKB keyboard layout. We don't hide the button for other
110 // types of input methods as these might have intra input method modes, 144 // types of input methods as these might have intra input method modes,
111 // like Hiragana and Katakana modes in Japanese input methods. 145 // like Hiragana and Katakana modes in Japanese input methods.
112 if (num_active_input_methods == 1 && 146 if (num_active_input_methods == 1 &&
(...skipping 13 matching lines...) Expand all
126 160
127 void InputMethodMenuButton::OpenConfigUI() { 161 void InputMethodMenuButton::OpenConfigUI() {
128 host_->OpenButtonOptions(this); // ask browser to open the DOMUI page. 162 host_->OpenButtonOptions(this); // ask browser to open the DOMUI page.
129 } 163 }
130 164
131 bool InputMethodMenuButton::ShouldSupportConfigUI() { 165 bool InputMethodMenuButton::ShouldSupportConfigUI() {
132 return host_->ShouldOpenButtonOptions(this); 166 return host_->ShouldOpenButtonOptions(this);
133 } 167 }
134 168
135 } // namespace chromeos 169 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/status/input_method_menu_button.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698