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

Side by Side Diff: chrome/browser/chromeos/options/system_page_view.cc

Issue 6307019: Cleanup: remove unused internet and system pages for chrome os options. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Remove ifdef code in content_page_gtk.cc Created 9 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
« no previous file with comments | « chrome/browser/chromeos/options/system_page_view.h ('k') | chrome/browser/ui/gtk/gtk_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/options/system_page_view.h"
6
7 #include <string>
8 #include <vector>
9
10 #include "base/stl_util-inl.h"
11 #include "base/string16.h"
12 #include "base/string_util.h"
13 #include "base/stringprintf.h"
14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/chromeos/cros/cros_library.h"
16 #include "chrome/browser/chromeos/cros/keyboard_library.h"
17 #include "chrome/browser/chromeos/cros/system_library.h"
18 #include "chrome/browser/chromeos/language_preferences.h"
19 #include "chrome/browser/chromeos/options/options_window_view.h"
20 #include "chrome/browser/prefs/pref_member.h"
21 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/common/pref_names.h"
23 #include "grit/generated_resources.h"
24 #include "ui/base/l10n/l10n_util.h"
25 #include "ui/base/models/combobox_model.h"
26 #include "unicode/timezone.h"
27 #include "views/controls/button/checkbox.h"
28 #include "views/controls/button/native_button.h"
29 #include "views/controls/combobox/combobox.h"
30 #include "views/controls/slider/slider.h"
31 #include "views/layout/layout_constants.h"
32 #include "views/window/window.h"
33
34 namespace chromeos {
35
36 ////////////////////////////////////////////////////////////////////////////////
37 // DateTimeSection
38
39 // Date/Time section for datetime settings
40 class DateTimeSection : public SettingsPageSection,
41 public views::Combobox::Listener,
42 public SystemLibrary::Observer {
43 public:
44 explicit DateTimeSection(Profile* profile);
45 virtual ~DateTimeSection();
46
47 // Overridden from views::Combobox::Listener:
48 virtual void ItemChanged(views::Combobox* sender,
49 int prev_index,
50 int new_index);
51
52 // Overridden from SystemLibrary::Observer:
53 virtual void TimezoneChanged(const icu::TimeZone& timezone);
54
55 protected:
56 // SettingsPageSection overrides:
57 virtual void InitContents(GridLayout* layout);
58
59 private:
60 // The combobox model for the list of timezones.
61 class TimezoneComboboxModel : public ui::ComboboxModel {
62 public:
63 TimezoneComboboxModel() {
64 // TODO(chocobo): For now, add all the GMT timezones.
65 // We may eventually want to use icu::TimeZone::createEnumeration()
66 // to list all the timezones and pick the ones we want to show.
67 // NOTE: This currently does not handle daylight savings properly
68 // b/c this is just a manually selected list of timezones that
69 // happen to span the GMT-11 to GMT+12 Today. When daylight savings
70 // kick in, this list might have more than one timezone in the same
71 // GMT bucket.
72 timezones_.push_back(icu::TimeZone::createTimeZone(
73 icu::UnicodeString::fromUTF8("Pacific/Samoa")));
74 timezones_.push_back(icu::TimeZone::createTimeZone(
75 icu::UnicodeString::fromUTF8("US/Hawaii")));
76 timezones_.push_back(icu::TimeZone::createTimeZone(
77 icu::UnicodeString::fromUTF8("US/Alaska")));
78 timezones_.push_back(icu::TimeZone::createTimeZone(
79 icu::UnicodeString::fromUTF8("US/Pacific")));
80 timezones_.push_back(icu::TimeZone::createTimeZone(
81 icu::UnicodeString::fromUTF8("US/Mountain")));
82 timezones_.push_back(icu::TimeZone::createTimeZone(
83 icu::UnicodeString::fromUTF8("US/Central")));
84 timezones_.push_back(icu::TimeZone::createTimeZone(
85 icu::UnicodeString::fromUTF8("US/Eastern")));
86 timezones_.push_back(icu::TimeZone::createTimeZone(
87 icu::UnicodeString::fromUTF8("America/Santiago")));
88 timezones_.push_back(icu::TimeZone::createTimeZone(
89 icu::UnicodeString::fromUTF8("America/Sao_Paulo")));
90 timezones_.push_back(icu::TimeZone::createTimeZone(
91 icu::UnicodeString::fromUTF8("Atlantic/South_Georgia")));
92 timezones_.push_back(icu::TimeZone::createTimeZone(
93 icu::UnicodeString::fromUTF8("Atlantic/Cape_Verde")));
94 timezones_.push_back(icu::TimeZone::createTimeZone(
95 icu::UnicodeString::fromUTF8("Europe/London")));
96 timezones_.push_back(icu::TimeZone::createTimeZone(
97 icu::UnicodeString::fromUTF8("Europe/Rome")));
98 timezones_.push_back(icu::TimeZone::createTimeZone(
99 icu::UnicodeString::fromUTF8("Europe/Helsinki")));
100 timezones_.push_back(icu::TimeZone::createTimeZone(
101 icu::UnicodeString::fromUTF8("Europe/Moscow")));
102 timezones_.push_back(icu::TimeZone::createTimeZone(
103 icu::UnicodeString::fromUTF8("Asia/Dubai")));
104 timezones_.push_back(icu::TimeZone::createTimeZone(
105 icu::UnicodeString::fromUTF8("Asia/Karachi")));
106 timezones_.push_back(icu::TimeZone::createTimeZone(
107 icu::UnicodeString::fromUTF8("Asia/Dhaka")));
108 timezones_.push_back(icu::TimeZone::createTimeZone(
109 icu::UnicodeString::fromUTF8("Asia/Bangkok")));
110 timezones_.push_back(icu::TimeZone::createTimeZone(
111 icu::UnicodeString::fromUTF8("Asia/Hong_Kong")));
112 timezones_.push_back(icu::TimeZone::createTimeZone(
113 icu::UnicodeString::fromUTF8("Asia/Tokyo")));
114 timezones_.push_back(icu::TimeZone::createTimeZone(
115 icu::UnicodeString::fromUTF8("Australia/Sydney")));
116 timezones_.push_back(icu::TimeZone::createTimeZone(
117 icu::UnicodeString::fromUTF8("Asia/Magadan")));
118 timezones_.push_back(icu::TimeZone::createTimeZone(
119 icu::UnicodeString::fromUTF8("Pacific/Auckland")));
120 }
121
122 virtual ~TimezoneComboboxModel() {
123 STLDeleteElements(&timezones_);
124 }
125
126 virtual int GetItemCount() {
127 return static_cast<int>(timezones_.size());
128 }
129
130 virtual string16 GetItemAt(int index) {
131 icu::UnicodeString name;
132 timezones_[index]->getDisplayName(name);
133 std::wstring output;
134 UTF16ToWide(name.getBuffer(), name.length(), &output);
135 int hour_offset = timezones_[index]->getRawOffset() / 3600000;
136 return WideToUTF16Hack(
137 base::StringPrintf(hour_offset == 0 ? L"(GMT) " : (hour_offset > 0 ?
138 L"(GMT+%d) " : L"(GMT%d) "), hour_offset) + output);
139 }
140
141 virtual icu::TimeZone* GetTimeZoneAt(int index) {
142 return timezones_[index];
143 }
144
145 private:
146 std::vector<icu::TimeZone*> timezones_;
147
148 DISALLOW_COPY_AND_ASSIGN(TimezoneComboboxModel);
149 };
150
151 // TimeZone combobox model.
152 views::Combobox* timezone_combobox_;
153
154 // Controls for this section:
155 TimezoneComboboxModel timezone_combobox_model_;
156
157 DISALLOW_COPY_AND_ASSIGN(DateTimeSection);
158 };
159
160 DateTimeSection::DateTimeSection(Profile* profile)
161 : SettingsPageSection(profile, IDS_OPTIONS_SETTINGS_SECTION_TITLE_DATETIME),
162 timezone_combobox_(NULL) {
163 CrosLibrary::Get()->GetSystemLibrary()->AddObserver(this);
164 }
165
166 DateTimeSection::~DateTimeSection() {
167 CrosLibrary::Get()->GetSystemLibrary()->RemoveObserver(this);
168 }
169
170 void DateTimeSection::ItemChanged(views::Combobox* sender,
171 int prev_index,
172 int new_index) {
173 if (new_index == prev_index)
174 return;
175
176 CrosLibrary::Get()->GetSystemLibrary()->SetTimezone(
177 timezone_combobox_model_.GetTimeZoneAt(new_index));
178 }
179
180 void DateTimeSection::TimezoneChanged(const icu::TimeZone& timezone) {
181 for (int i = 0; i < timezone_combobox_model_.GetItemCount(); i++) {
182 if (*timezone_combobox_model_.GetTimeZoneAt(i) == timezone) {
183 timezone_combobox_->SetSelectedItem(i);
184 return;
185 }
186 }
187 }
188
189 void DateTimeSection::InitContents(GridLayout* layout) {
190 timezone_combobox_ = new views::Combobox(&timezone_combobox_model_);
191 timezone_combobox_->set_listener(this);
192
193 layout->StartRow(0, double_column_view_set_id());
194 layout->AddView(new views::Label(UTF16ToWide(
195 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION))));
196 layout->AddView(timezone_combobox_);
197 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
198
199 TimezoneChanged(CrosLibrary::Get()->GetSystemLibrary()->GetTimezone());
200 }
201
202 ////////////////////////////////////////////////////////////////////////////////
203 // TouchpadSection
204
205 class TouchpadSection : public SettingsPageSection,
206 public views::ButtonListener,
207 public views::SliderListener {
208 public:
209 explicit TouchpadSection(Profile* profile);
210 virtual ~TouchpadSection() {}
211
212 // Overridden from views::ButtonListener:
213 virtual void ButtonPressed(views::Button* sender, const views::Event& event);
214
215 // Overridden from views::SliderListener:
216 virtual void SliderValueChanged(views::Slider* sender);
217
218 protected:
219 // SettingsPageSection overrides:
220 virtual void InitContents(GridLayout* layout);
221 virtual void NotifyPrefChanged(const std::string* pref_name);
222
223 private:
224 // The View that contains the contents of the section.
225 views::View* contents_;
226
227 // Controls for this section:
228 views::Checkbox* enable_tap_to_click_checkbox_;
229 views::Slider* sensitivity_slider_;
230
231 // Preferences for this section:
232 BooleanPrefMember tap_to_click_enabled_;
233 IntegerPrefMember sensitivity_;
234
235 DISALLOW_COPY_AND_ASSIGN(TouchpadSection);
236 };
237
238 TouchpadSection::TouchpadSection(Profile* profile)
239 : SettingsPageSection(profile, IDS_OPTIONS_SETTINGS_SECTION_TITLE_TOUCHPAD),
240 enable_tap_to_click_checkbox_(NULL),
241 sensitivity_slider_(NULL) {
242 }
243
244 void TouchpadSection::ButtonPressed(
245 views::Button* sender, const views::Event& event) {
246 if (sender == enable_tap_to_click_checkbox_) {
247 bool enabled = enable_tap_to_click_checkbox_->checked();
248 UserMetricsRecordAction(enabled ?
249 UserMetricsAction("Options_TapToClickCheckbox_Enable") :
250 UserMetricsAction("Options_TapToClickCheckbox_Disable"),
251 profile()->GetPrefs());
252 tap_to_click_enabled_.SetValue(enabled);
253 }
254 }
255
256 void TouchpadSection::SliderValueChanged(views::Slider* sender) {
257 if (sender == sensitivity_slider_) {
258 double value = sensitivity_slider_->value();
259 UserMetricsRecordAction(
260 UserMetricsAction("Options_SensitivitySlider_Changed"),
261 profile()->GetPrefs());
262 sensitivity_.SetValue(value);
263 }
264 }
265
266 void TouchpadSection::InitContents(GridLayout* layout) {
267 enable_tap_to_click_checkbox_ =
268 new views::Checkbox(UTF16ToWide(l10n_util::GetStringUTF16(
269 IDS_OPTIONS_SETTINGS_TAP_TO_CLICK_ENABLED_DESCRIPTION)));
270 enable_tap_to_click_checkbox_->set_listener(this);
271 enable_tap_to_click_checkbox_->SetMultiLine(true);
272 // Create sensitivity slider with values between 1 and 5 step 1
273 sensitivity_slider_ = new views::Slider(1, 5, 1,
274 static_cast<views::Slider::StyleFlags>(
275 views::Slider::STYLE_DRAW_VALUE |
276 views::Slider::STYLE_UPDATE_ON_RELEASE),
277 this);
278
279 layout->StartRow(0, double_column_view_set_id());
280 layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16(
281 IDS_OPTIONS_SETTINGS_SENSITIVITY_DESCRIPTION))));
282 layout->AddView(sensitivity_slider_);
283 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
284 layout->StartRow(0, single_column_view_set_id());
285 layout->AddView(enable_tap_to_click_checkbox_);
286 layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
287
288 // Init member prefs so we can update the controls if prefs change.
289 tap_to_click_enabled_.Init(prefs::kTapToClickEnabled,
290 profile()->GetPrefs(), this);
291 sensitivity_.Init(prefs::kTouchpadSensitivity,
292 profile()->GetPrefs(), this);
293 }
294
295 void TouchpadSection::NotifyPrefChanged(const std::string* pref_name) {
296 if (!pref_name || *pref_name == prefs::kTapToClickEnabled) {
297 bool enabled = tap_to_click_enabled_.GetValue();
298 enable_tap_to_click_checkbox_->SetChecked(enabled);
299 }
300 if (!pref_name || *pref_name == prefs::kTouchpadSensitivity) {
301 double value = sensitivity_.GetValue();
302 sensitivity_slider_->SetValue(value);
303 }
304 }
305
306 ///////////////////////////////////////////////////////////////////////////////
307 // AccessibilitySection
308
309 // Checkbox for specifying if accessibility should be enabled for this profile
310 class AccessibilitySection : public SettingsPageSection,
311 public views::ButtonListener {
312 public:
313 explicit AccessibilitySection(Profile* profile);
314 virtual ~AccessibilitySection() {}
315
316 protected:
317 // Overridden from views::ButtonListener:
318 virtual void ButtonPressed(views::Button* sender,
319 const views::Event& event);
320
321 // Overridden from SettingsPageSection:
322 virtual void InitContents(GridLayout* layout);
323 virtual void NotifyPrefChanged(const std::string* pref_name);
324
325 private:
326 // The View that contains the contents of the section.
327 views::View* contents_;
328
329 // Controls for this section:
330 views::Checkbox* accessibility_checkbox_;
331
332 // Preferences for this section:
333 BooleanPrefMember accessibility_enabled_;
334
335 DISALLOW_COPY_AND_ASSIGN(AccessibilitySection);
336 };
337
338 AccessibilitySection::AccessibilitySection(Profile* profile)
339 : SettingsPageSection(profile,
340 IDS_OPTIONS_SETTINGS_SECTION_TITLE_ACCESSIBILITY),
341 accessibility_checkbox_(NULL) {
342 }
343
344 void AccessibilitySection::InitContents(GridLayout* layout) {
345 accessibility_checkbox_ =
346 new views::Checkbox(UTF16ToWide(l10n_util::GetStringUTF16(
347 IDS_OPTIONS_SETTINGS_ACCESSIBILITY_DESCRIPTION)));
348 accessibility_checkbox_->set_listener(this);
349 accessibility_checkbox_->SetMultiLine(true);
350
351 layout->StartRow(0, double_column_view_set_id());
352 layout->AddView(accessibility_checkbox_);
353 layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
354
355 // Init member prefs so we can update the controls if prefs change.
356 accessibility_enabled_.Init(prefs::kAccessibilityEnabled,
357 profile()->GetPrefs(), this);
358 }
359
360 void AccessibilitySection::ButtonPressed(
361 views::Button* sender, const views::Event& event) {
362 if (sender == accessibility_checkbox_) {
363 bool enabled = accessibility_checkbox_->checked();
364 // Set the accessibility enabled value in profile/prefs
365 accessibility_enabled_.SetValue(enabled);
366 }
367 }
368
369 void AccessibilitySection::NotifyPrefChanged(const std::string* pref_name) {
370 if (!pref_name || *pref_name == prefs::kAccessibilityEnabled) {
371 bool enabled = accessibility_enabled_.GetValue();
372 accessibility_checkbox_->SetChecked(enabled);
373 }
374 }
375
376 ////////////////////////////////////////////////////////////////////////////////
377 // SystemPageView
378
379 ////////////////////////////////////////////////////////////////////////////////
380 // SystemPageView, SettingsPageView implementation:
381
382 void SystemPageView::InitControlLayout() {
383 GridLayout* layout = GridLayout::CreatePanel(this);
384 SetLayoutManager(layout);
385
386 int single_column_view_set_id = 0;
387 ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
388 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
389 GridLayout::USE_PREF, 0, 0);
390
391 layout->StartRow(0, single_column_view_set_id);
392 layout->AddView(new DateTimeSection(profile()));
393 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
394 layout->StartRow(0, single_column_view_set_id);
395 layout->AddView(new TouchpadSection(profile()));
396 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
397 layout->StartRow(0, single_column_view_set_id);
398 layout->AddView(new AccessibilitySection(profile()));
399 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
400 }
401
402 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/options/system_page_view.h ('k') | chrome/browser/ui/gtk/gtk_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698