OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/chromeos/options/language_chewing_config_view.h" | |
6 | |
7 #include "app/l10n_util.h" | |
8 #include "base/utf_string_conversions.h" | |
9 #include "chrome/browser/chromeos/cros/cros_library.h" | |
10 #include "chrome/browser/chromeos/cros/input_method_library.h" | |
11 #include "chrome/browser/chromeos/options/language_config_util.h" | |
12 #include "chrome/browser/chromeos/preferences.h" | |
13 #include "chrome/browser/profiles/profile.h" | |
14 #include "chrome/common/notification_type.h" | |
15 #include "grit/generated_resources.h" | |
16 #include "grit/locale_settings.h" | |
17 #include "views/controls/button/checkbox.h" | |
18 #include "views/controls/label.h" | |
19 #include "views/grid_layout.h" | |
20 #include "views/standard_layout.h" | |
21 #include "views/window/window.h" | |
22 | |
23 namespace chromeos { | |
24 | |
25 LanguageChewingConfigView::LanguageChewingConfigView(Profile* profile) | |
26 : OptionsPageView(profile), contents_(NULL) { | |
27 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) { | |
28 chewing_boolean_prefs_[i].Init( | |
29 language_prefs::kChewingBooleanPrefs[i].pref_name, | |
30 profile->GetPrefs(), this); | |
31 chewing_boolean_checkboxes_[i] = NULL; | |
32 } | |
33 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) { | |
34 ChewingPrefAndAssociatedCombobox& current = prefs_and_comboboxes_[i]; | |
35 current.multiple_choice_pref.Init( | |
36 language_prefs::kChewingMultipleChoicePrefs[i].pref_name, | |
37 profile->GetPrefs(), this); | |
38 current.combobox_model = | |
39 new LanguageComboboxModel<const char*>( | |
40 &language_prefs::kChewingMultipleChoicePrefs[i]); | |
41 current.combobox = NULL; | |
42 } | |
43 | |
44 hsu_sel_key_type_.multiple_choice_pref.Init( | |
45 language_prefs::kChewingHsuSelKeyType.pref_name, profile->GetPrefs(), | |
46 this); | |
47 hsu_sel_key_type_.combobox_model = | |
48 new LanguageComboboxModel<int>(&language_prefs::kChewingHsuSelKeyType); | |
49 hsu_sel_key_type_.combobox = NULL; | |
50 | |
51 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) { | |
52 chewing_integer_prefs_[i].Init( | |
53 language_prefs::kChewingIntegerPrefs[i].pref_name, | |
54 profile->GetPrefs(), this); | |
55 chewing_integer_sliders_[i] = NULL; | |
56 } | |
57 } | |
58 | |
59 LanguageChewingConfigView::~LanguageChewingConfigView() { | |
60 } | |
61 | |
62 void LanguageChewingConfigView::ButtonPressed( | |
63 views::Button* sender, const views::Event& event) { | |
64 views::Checkbox* checkbox = static_cast<views::Checkbox*>(sender); | |
65 const int pref_id = checkbox->tag(); | |
66 DCHECK(pref_id >= 0 && pref_id < static_cast<int>( | |
67 language_prefs::kNumChewingBooleanPrefs)); | |
68 chewing_boolean_prefs_[pref_id].SetValue(checkbox->checked()); | |
69 } | |
70 | |
71 void LanguageChewingConfigView::ItemChanged( | |
72 views::Combobox* sender, int prev_index, int new_index) { | |
73 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) { | |
74 ChewingPrefAndAssociatedCombobox& current = prefs_and_comboboxes_[i]; | |
75 if (current.combobox == sender) { | |
76 const std::string config_value = | |
77 current.combobox_model->GetConfigValueAt(new_index); | |
78 VLOG(1) << "Changing Chewing pref to " << config_value; | |
79 // Update the Chrome pref. | |
80 current.multiple_choice_pref.SetValue(config_value); | |
81 break; | |
82 } | |
83 } | |
84 if (hsu_sel_key_type_.combobox == sender) { | |
85 const int config_value = | |
86 hsu_sel_key_type_.combobox_model->GetConfigValueAt(new_index); | |
87 VLOG(1) << "Changing Chewing pref to " << config_value; | |
88 // Update the Chrome pref. | |
89 hsu_sel_key_type_.multiple_choice_pref.SetValue(config_value); | |
90 } | |
91 } | |
92 | |
93 void LanguageChewingConfigView::SliderValueChanged(views::Slider* sender) { | |
94 size_t pref_id; | |
95 for (pref_id = 0; pref_id < language_prefs::kNumChewingIntegerPrefs; | |
96 ++pref_id) { | |
97 if (chewing_integer_sliders_[pref_id] == sender) | |
98 break; | |
99 } | |
100 DCHECK(pref_id < language_prefs::kNumChewingIntegerPrefs); | |
101 chewing_integer_prefs_[pref_id].SetValue(sender->value()); | |
102 } | |
103 | |
104 | |
105 void LanguageChewingConfigView::Layout() { | |
106 // Not sure why but this is needed to show contents in the dialog. | |
107 contents_->SetBounds(0, 0, width(), height()); | |
108 } | |
109 | |
110 int LanguageChewingConfigView::GetDialogButtons() const { | |
111 return MessageBoxFlags::DIALOGBUTTON_OK; | |
112 } | |
113 | |
114 std::wstring LanguageChewingConfigView::GetDialogButtonLabel( | |
115 MessageBoxFlags::DialogButton button) const { | |
116 if (button == MessageBoxFlags::DIALOGBUTTON_OK) { | |
117 return UTF16ToWide(l10n_util::GetStringUTF16(IDS_OK)); | |
118 } | |
119 return L""; | |
120 } | |
121 | |
122 std::wstring LanguageChewingConfigView::GetWindowTitle() const { | |
123 return UTF16ToWide(l10n_util::GetStringUTF16( | |
124 IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTINGS_TITLE)); | |
125 } | |
126 | |
127 gfx::Size LanguageChewingConfigView::GetPreferredSize() { | |
128 return gfx::Size(views::Window::GetLocalizedContentsSize( | |
129 IDS_LANGUAGES_INPUT_DIALOG_WIDTH_CHARS, | |
130 IDS_LANGUAGES_INPUT_DIALOG_HEIGHT_LINES)); | |
131 } | |
132 | |
133 void LanguageChewingConfigView::InitControlLayout() { | |
134 using views::ColumnSet; | |
135 using views::GridLayout; | |
136 | |
137 contents_ = new views::View; | |
138 AddChildView(contents_); | |
139 | |
140 GridLayout* layout = new GridLayout(contents_); | |
141 layout->SetInsets(kPanelVertMargin, kPanelHorizMargin, | |
142 kPanelVertMargin, kPanelHorizMargin); | |
143 contents_->SetLayoutManager(layout); | |
144 | |
145 const int kColumnSetId = 0; | |
146 ColumnSet* column_set = layout->AddColumnSet(kColumnSetId); | |
147 column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, | |
148 GridLayout::USE_PREF, 0, 0); | |
149 column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); | |
150 column_set->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, | |
151 GridLayout::USE_PREF, 0, 0); | |
152 | |
153 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) { | |
154 chewing_boolean_checkboxes_[i] = new views::Checkbox( | |
155 UTF16ToWide(l10n_util::GetStringUTF16( | |
156 language_prefs::kChewingBooleanPrefs[i].message_id))); | |
157 chewing_boolean_checkboxes_[i]->set_listener(this); | |
158 chewing_boolean_checkboxes_[i]->set_tag(i); | |
159 } | |
160 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) { | |
161 ChewingPrefAndAssociatedCombobox& current = prefs_and_comboboxes_[i]; | |
162 current.combobox = new LanguageCombobox(current.combobox_model); | |
163 current.combobox->set_listener(this); | |
164 } | |
165 hsu_sel_key_type_.combobox = | |
166 new LanguageCombobox(hsu_sel_key_type_.combobox_model); | |
167 hsu_sel_key_type_.combobox->set_listener(this); | |
168 | |
169 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) { | |
170 chewing_integer_sliders_[i] = new views::Slider( | |
171 language_prefs::kChewingIntegerPrefs[i].min_pref_value, | |
172 language_prefs::kChewingIntegerPrefs[i].max_pref_value, | |
173 1, | |
174 static_cast<views::Slider::StyleFlags>( | |
175 views::Slider::STYLE_DRAW_VALUE | | |
176 views::Slider::STYLE_UPDATE_ON_RELEASE), | |
177 this); | |
178 } | |
179 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) { | |
180 layout->StartRow(0, kColumnSetId); | |
181 layout->AddView(chewing_boolean_checkboxes_[i]); | |
182 } | |
183 | |
184 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) { | |
185 layout->StartRow(0, kColumnSetId); | |
186 layout->AddView(new views::Label( | |
187 UTF16ToWide(l10n_util::GetStringUTF16( | |
188 language_prefs::kChewingIntegerPrefs[i].message_id)))); | |
189 layout->AddView(chewing_integer_sliders_[i]); | |
190 } | |
191 NotifyPrefChanged(); | |
192 | |
193 // Show the comboboxes. | |
194 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) { | |
195 const ChewingPrefAndAssociatedCombobox& current = prefs_and_comboboxes_[i]; | |
196 layout->StartRow(0, kColumnSetId); | |
197 layout->AddView(new views::Label(current.combobox_model->GetLabel())); | |
198 layout->AddView(current.combobox); | |
199 } | |
200 layout->StartRow(0, kColumnSetId); | |
201 layout->AddView( | |
202 new views::Label(hsu_sel_key_type_.combobox_model->GetLabel())); | |
203 layout->AddView(hsu_sel_key_type_.combobox); | |
204 } | |
205 | |
206 void LanguageChewingConfigView::Observe(NotificationType type, | |
207 const NotificationSource& source, | |
208 const NotificationDetails& details) { | |
209 if (type == NotificationType::PREF_CHANGED) { | |
210 NotifyPrefChanged(); | |
211 } | |
212 } | |
213 | |
214 void LanguageChewingConfigView::NotifyPrefChanged() { | |
215 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) { | |
216 const bool checked = chewing_boolean_prefs_[i].GetValue(); | |
217 chewing_boolean_checkboxes_[i]->SetChecked(checked); | |
218 } | |
219 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) { | |
220 const int value = chewing_integer_prefs_[i].GetValue(); | |
221 chewing_integer_sliders_[i]->SetValue(value); | |
222 } | |
223 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) { | |
224 ChewingPrefAndAssociatedCombobox& current = prefs_and_comboboxes_[i]; | |
225 const std::string value = current.multiple_choice_pref.GetValue(); | |
226 for (int i = 0; i < current.combobox_model->num_items(); ++i) { | |
227 if (current.combobox_model->GetConfigValueAt(i) == value) { | |
228 current.combobox->SetSelectedItem(i); | |
229 break; | |
230 } | |
231 } | |
232 } | |
233 const int value = hsu_sel_key_type_.multiple_choice_pref.GetValue(); | |
234 for (int i = 0; i < hsu_sel_key_type_.combobox_model->num_items(); ++i) { | |
235 if (hsu_sel_key_type_.combobox_model->GetConfigValueAt(i) == value) { | |
236 hsu_sel_key_type_.combobox->SetSelectedItem(i); | |
237 break; | |
238 } | |
239 } | |
240 } | |
241 | |
242 } // namespace chromeos | |
OLD | NEW |