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

Side by Side Diff: chrome/browser/ui/views/options/languages_page_view.cc

Issue 6670011: Options: Remove the GTK and Views native options code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 9 years, 9 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
(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 <windows.h>
6 #include <shlobj.h>
7 #include <vsstyle.h>
8 #include <vssym32.h>
9
10 #include "chrome/browser/ui/views/options/languages_page_view.h"
11
12 #include "base/command_line.h"
13 #include "base/file_util.h"
14 #include "base/string_util.h"
15 #include "base/utf_string_conversions.h"
16 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/language_combobox_model.h"
18 #include "chrome/browser/language_order_table_model.h"
19 #include "chrome/browser/prefs/pref_service.h"
20 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/ui/shell_dialogs.h"
22 #include "chrome/browser/ui/views/restart_message_box.h"
23 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/pref_names.h"
25 #include "chrome/common/spellcheck_common.h"
26 #include "grit/chromium_strings.h"
27 #include "grit/generated_resources.h"
28 #include "grit/theme_resources.h"
29 #include "third_party/skia/include/core/SkBitmap.h"
30 #include "ui/base/l10n/l10n_util.h"
31 #include "ui/base/resource/resource_bundle.h"
32 #include "ui/gfx/canvas.h"
33 #include "ui/gfx/font.h"
34 #include "ui/gfx/native_theme_win.h"
35 #include "unicode/uloc.h"
36 #include "views/controls/button/radio_button.h"
37 #include "views/controls/tabbed_pane/tabbed_pane.h"
38 #include "views/controls/table/table_view.h"
39 #include "views/layout/grid_layout.h"
40 #include "views/layout/layout_constants.h"
41 #include "views/widget/widget.h"
42 #include "views/window/window.h"
43
44 ///////////////////////////////////////////////////////////////////////////////
45 // AddLanguageWindowView
46 //
47 // This opens another window from where a new accept language can be selected.
48 //
49 class AddLanguageWindowView : public views::View,
50 public views::Combobox::Listener,
51 public views::DialogDelegate {
52 public:
53 AddLanguageWindowView(LanguagesPageView* language_delegate, Profile* profile);
54 views::Window* container() const { return container_; }
55 void set_container(views::Window* container) {
56 container_ = container;
57 }
58
59 // views::DialogDelegate methods.
60 virtual bool Accept();
61 virtual std::wstring GetWindowTitle() const;
62
63 // views::WindowDelegate method.
64 virtual bool IsModal() const { return true; }
65 virtual views::View* GetContentsView() { return this; }
66
67 // views::Combobox::Listener implementation:
68 virtual void ItemChanged(views::Combobox* combobox,
69 int prev_index,
70 int new_index);
71
72 // views::View overrides.
73 virtual void Layout();
74 virtual gfx::Size GetPreferredSize();
75
76 protected:
77 virtual void ViewHierarchyChanged(bool is_add, views::View* parent,
78 views::View* child);
79
80 private:
81 void Init();
82
83 // The Options dialog window.
84 views::Window* container_;
85
86 // Used for Call back to LanguagePageView that language has been selected.
87 LanguagesPageView* language_delegate_;
88 std::string accept_language_selected_;
89
90 // Combobox and its corresponding model.
91 scoped_ptr<LanguageComboboxModel> accept_language_combobox_model_;
92 views::Combobox* accept_language_combobox_;
93
94 // The Profile associated with this window.
95 Profile* profile_;
96
97 DISALLOW_COPY_AND_ASSIGN(AddLanguageWindowView);
98 };
99
100 static const int kDialogPadding = 7;
101 static int kDefaultWindowWidthChars = 60;
102 static int kDefaultWindowHeightLines = 3;
103
104 AddLanguageWindowView::AddLanguageWindowView(
105 LanguagesPageView* language_delegate,
106 Profile* profile)
107 : profile_(profile->GetOriginalProfile()),
108 language_delegate_(language_delegate),
109 accept_language_combobox_(NULL) {
110 Init();
111
112 // Initialize accept_language_selected_ to the first index in drop down.
113 accept_language_selected_ = accept_language_combobox_model_->
114 GetLocaleFromIndex(0);
115 }
116
117 std::wstring AddLanguageWindowView::GetWindowTitle() const {
118 return UTF16ToWide(
119 l10n_util::GetStringUTF16(IDS_FONT_LANGUAGE_SETTING_LANGUAGES_TAB_TITLE));
120 }
121
122 bool AddLanguageWindowView::Accept() {
123 if (language_delegate_) {
124 language_delegate_->OnAddLanguage(accept_language_selected_);
125 }
126 return true;
127 }
128
129 void AddLanguageWindowView::ItemChanged(views::Combobox* combobox,
130 int prev_index,
131 int new_index) {
132 accept_language_selected_ = accept_language_combobox_model_->
133 GetLocaleFromIndex(new_index);
134 }
135
136 void AddLanguageWindowView::Layout() {
137 gfx::Size sz = accept_language_combobox_->GetPreferredSize();
138 accept_language_combobox_->SetBounds(kDialogPadding, kDialogPadding,
139 width() - 2*kDialogPadding,
140 sz.height());
141 }
142
143 gfx::Size AddLanguageWindowView::GetPreferredSize() {
144 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
145 const gfx::Font& font = rb.GetFont(ResourceBundle::BaseFont);
146 return gfx::Size(font.GetAverageCharacterWidth() * kDefaultWindowWidthChars,
147 font.GetHeight() * kDefaultWindowHeightLines);
148 }
149
150 void AddLanguageWindowView::ViewHierarchyChanged(bool is_add,
151 views::View* parent,
152 views::View* child) {
153 // Can't init before we're inserted into a Widget, because we require
154 // a HWND to parent native child controls to.
155 if (is_add && child == this)
156 Init();
157 }
158
159 void AddLanguageWindowView::Init() {
160 // Determine Locale Codes.
161 const std::string app_locale = g_browser_process->GetApplicationLocale();
162 std::vector<std::string> locale_codes;
163 l10n_util::GetAcceptLanguagesForLocale(app_locale, &locale_codes);
164
165 accept_language_combobox_model_.reset(new LanguageComboboxModel(
166 profile_, locale_codes));
167 accept_language_combobox_ = new views::Combobox(
168 accept_language_combobox_model_.get());
169 accept_language_combobox_->SetSelectedItem(0);
170 accept_language_combobox_->set_listener(this);
171 AddChildView(accept_language_combobox_);
172 }
173
174 LanguagesPageView::LanguagesPageView(Profile* profile)
175 : languages_instructions_(NULL),
176 languages_contents_(NULL),
177 language_order_table_(NULL),
178 add_button_(NULL),
179 remove_button_(NULL),
180 move_up_button_(NULL),
181 move_down_button_(NULL),
182 button_stack_(NULL),
183 language_info_label_(NULL),
184 ui_language_label_(NULL),
185 change_ui_language_combobox_(NULL),
186 change_dictionary_language_combobox_(NULL),
187 enable_spellchecking_checkbox_(NULL),
188 enable_autospellcorrect_checkbox_(NULL),
189 dictionary_language_label_(NULL),
190 OptionsPageView(profile),
191 language_table_edited_(false),
192 language_warning_shown_(false),
193 enable_spellcheck_checkbox_clicked_(false),
194 enable_autospellcorrect_checkbox_clicked_(false),
195 spellcheck_language_index_selected_(-1),
196 ui_language_index_selected_(-1),
197 starting_ui_language_index_(-1) {
198 accept_languages_.Init(prefs::kAcceptLanguages,
199 profile->GetPrefs(), NULL);
200 enable_spellcheck_.Init(prefs::kEnableSpellCheck,
201 profile->GetPrefs(), NULL);
202 enable_autospellcorrect_.Init(prefs::kEnableAutoSpellCorrect,
203 profile->GetPrefs(), NULL);
204 }
205
206 LanguagesPageView::~LanguagesPageView() {
207 if (language_order_table_)
208 language_order_table_->SetModel(NULL);
209 }
210
211 void LanguagesPageView::ButtonPressed(
212 views::Button* sender, const views::Event& event) {
213 if (sender == move_up_button_) {
214 OnMoveUpLanguage();
215 language_table_edited_ = true;
216 } else if (sender == move_down_button_) {
217 OnMoveDownLanguage();
218 language_table_edited_ = true;
219 } else if (sender == remove_button_) {
220 OnRemoveLanguage();
221 language_table_edited_ = true;
222 } else if (sender == add_button_) {
223 views::Window::CreateChromeWindow(
224 GetWindow()->GetNativeWindow(),
225 gfx::Rect(),
226 new AddLanguageWindowView(this, profile()))->Show();
227 language_table_edited_ = true;
228 } else if (sender == enable_spellchecking_checkbox_) {
229 enable_spellcheck_checkbox_clicked_ = true;
230 } else if (sender == enable_autospellcorrect_checkbox_) {
231 enable_autospellcorrect_checkbox_clicked_ = true;
232 }
233 }
234
235 void LanguagesPageView::OnAddLanguage(const std::string& new_language) {
236 if (language_order_table_model_->Add(new_language)) {
237 language_order_table_->Select(language_order_table_model_->RowCount() - 1);
238 OnSelectionChanged();
239 }
240 }
241
242 void LanguagesPageView::InitControlLayout() {
243 // Define the buttons.
244 add_button_ = new views::NativeButton(
245 this,
246 UTF16ToWide(l10n_util::GetStringUTF16(
247 IDS_FONT_LANGUAGE_SETTING_LANGUAGES_SELECTOR_ADD_BUTTON_LABEL)));
248 remove_button_ = new views::NativeButton(
249 this,
250 UTF16ToWide(l10n_util::GetStringUTF16(
251 IDS_FONT_LANGUAGE_SETTING_LANGUAGES_SELECTOR_REMOVE_BUTTON_LABEL)));
252 remove_button_->SetEnabled(false);
253 move_up_button_ = new views::NativeButton(
254 this,
255 UTF16ToWide(l10n_util::GetStringUTF16(
256 IDS_FONT_LANGUAGE_SETTING_LANGUAGES_SELECTOR_MOVEUP_BUTTON_LABEL)));
257 move_up_button_->SetEnabled(false);
258 move_down_button_ = new views::NativeButton(
259 this,
260 UTF16ToWide(l10n_util::GetStringUTF16(
261 IDS_FONT_LANGUAGE_SETTING_LANGUAGES_SELECTOR_MOVEDOWN_BUTTON_LABEL)));
262 move_down_button_->SetEnabled(false);
263
264 languages_contents_ = new views::View;
265 using views::GridLayout;
266 using views::ColumnSet;
267
268 GridLayout* layout = GridLayout::CreatePanel(this);
269 SetLayoutManager(layout);
270
271 const int single_column_view_set_id = 0;
272 ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
273
274 // Add the instructions label.
275 column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1,
276 GridLayout::USE_PREF, 0, 0);
277 languages_instructions_ = new views::Label(
278 UTF16ToWide(l10n_util::GetStringUTF16(
279 IDS_FONT_LANGUAGE_SETTING_LANGUAGES_INSTRUCTIONS)));
280 languages_instructions_->SetMultiLine(true);
281 languages_instructions_->SetHorizontalAlignment(
282 views::Label::ALIGN_LEFT);
283 layout->StartRow(0, single_column_view_set_id);
284 layout->AddView(languages_instructions_);
285 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
286
287 // Add two columns - for table, and for button stack.
288 std::vector<TableColumn> columns;
289 columns.push_back(TableColumn());
290 language_order_table_model_.reset(new LanguageOrderTableModel);
291 language_order_table_ = new views::TableView(
292 language_order_table_model_.get(), columns,
293 views::TEXT_ONLY, false, true, true);
294 language_order_table_->SetObserver(this);
295
296 const int double_column_view_set_id = 1;
297 column_set = layout->AddColumnSet(double_column_view_set_id);
298 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
299 GridLayout::USE_PREF, 0, 0);
300 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
301 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
302 GridLayout::USE_PREF, 0, 0);
303
304 layout->StartRow(0, double_column_view_set_id);
305
306 // Add the table to the the first column.
307 layout->AddView(language_order_table_);
308
309 // Now add the four buttons to the second column.
310 button_stack_ = new views::View;
311 GridLayout* button_stack_layout = new GridLayout(button_stack_);
312 button_stack_->SetLayoutManager(button_stack_layout);
313
314 column_set = button_stack_layout->AddColumnSet(single_column_view_set_id);
315 column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 1,
316 GridLayout::USE_PREF, 0, 0);
317 button_stack_layout->StartRow(0, single_column_view_set_id);
318 button_stack_layout->AddView(add_button_, 1, 1, GridLayout::FILL,
319 GridLayout::CENTER);
320 button_stack_layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
321 button_stack_layout->StartRow(0, single_column_view_set_id);
322 button_stack_layout->AddView(remove_button_, 1, 1, GridLayout::FILL,
323 GridLayout::CENTER);
324 button_stack_layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
325 button_stack_layout->StartRow(0, single_column_view_set_id);
326 button_stack_layout->AddView(move_up_button_, 1, 1, GridLayout::FILL,
327 GridLayout::CENTER);
328 button_stack_layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
329 button_stack_layout->StartRow(0, single_column_view_set_id);
330 button_stack_layout->AddView(move_down_button_, 1, 1, GridLayout::FILL,
331 GridLayout::CENTER);
332
333 layout->AddView(button_stack_);
334
335 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
336
337 language_info_label_ = new views::Label(
338 UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_CHROME_LANGUAGE_INFO)));
339 language_info_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
340 ui_language_label_ = new views::Label(
341 UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_CHROME_UI_LANGUAGE)));
342 ui_language_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
343 ui_language_model_.reset(new LanguageComboboxModel);
344 change_ui_language_combobox_ =
345 new views::Combobox(ui_language_model_.get());
346 change_ui_language_combobox_->set_listener(this);
347 dictionary_language_label_ = new views::Label(UTF16ToWide(
348 l10n_util::GetStringUTF16(IDS_OPTIONS_CHROME_DICTIONARY_LANGUAGE)));
349 dictionary_language_label_->SetHorizontalAlignment(
350 views::Label::ALIGN_LEFT);
351 enable_spellchecking_checkbox_ = new views::Checkbox(
352 UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_SPELLCHECK)));
353 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
354 if (command_line.HasSwitch(switches::kExperimentalSpellcheckerFeatures)) {
355 enable_autospellcorrect_checkbox_ = new views::Checkbox(UTF16ToWide(
356 l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_AUTO_SPELL_CORRECTION)));
357 enable_autospellcorrect_checkbox_->set_listener(this);
358 }
359 enable_spellchecking_checkbox_->set_listener(this);
360 enable_spellchecking_checkbox_->SetMultiLine(true);
361
362 // Determine Locale Codes.
363 std::vector<std::string> spell_check_languages;
364 SpellCheckCommon::SpellCheckLanguages(&spell_check_languages);
365 dictionary_language_model_.reset(new LanguageComboboxModel(profile(),
366 spell_check_languages));
367 change_dictionary_language_combobox_ =
368 new views::Combobox(dictionary_language_model_.get());
369 change_dictionary_language_combobox_->set_listener(this);
370
371 // SpellCheck language settings.
372 layout->StartRow(0, single_column_view_set_id);
373 layout->AddView(enable_spellchecking_checkbox_);
374 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
375 if (command_line.HasSwitch(switches::kExperimentalSpellcheckerFeatures)) {
376 layout->StartRow(0, single_column_view_set_id);
377 layout->AddView(enable_autospellcorrect_checkbox_);
378 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
379 }
380 const int double_column_view_set_2_id = 2;
381 column_set = layout->AddColumnSet(double_column_view_set_2_id);
382 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
383 GridLayout::USE_PREF, 0, 0);
384 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
385 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
386 GridLayout::USE_PREF, 0, 0);
387
388 layout->StartRow(0, double_column_view_set_2_id);
389 layout->AddView(dictionary_language_label_);
390 layout->AddView(change_dictionary_language_combobox_);
391
392 // UI language settings.
393 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
394 layout->StartRow(0, single_column_view_set_id);
395 layout->AddView(language_info_label_);
396 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
397
398 layout->StartRow(0, double_column_view_set_2_id);
399 layout->AddView(ui_language_label_);
400 layout->AddView(change_ui_language_combobox_);
401 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
402
403 // Init member prefs so we can update the controls if prefs change.
404 app_locale_.Init(prefs::kApplicationLocale,
405 g_browser_process->local_state(), this);
406 dictionary_language_.Init(prefs::kSpellCheckDictionary,
407 profile()->GetPrefs(), this);
408 }
409
410 void LanguagesPageView::NotifyPrefChanged(const std::string* pref_name) {
411 if (!pref_name || *pref_name == prefs::kAcceptLanguages) {
412 language_order_table_model_->SetAcceptLanguagesString(
413 accept_languages_.GetValue());
414 }
415 if (!pref_name || *pref_name == prefs::kApplicationLocale) {
416 int index = ui_language_model_->GetSelectedLanguageIndex(
417 prefs::kApplicationLocale);
418 if (-1 == index) {
419 // The pref value for locale isn't valid. Use the current app locale
420 // (which is what we're currently using).
421 index = ui_language_model_->GetIndexFromLocale(
422 g_browser_process->GetApplicationLocale());
423 }
424 DCHECK(-1 != index);
425 change_ui_language_combobox_->SetSelectedItem(index);
426 starting_ui_language_index_ = index;
427 }
428 if (!pref_name || *pref_name == prefs::kSpellCheckDictionary) {
429 int index = dictionary_language_model_->GetSelectedLanguageIndex(
430 prefs::kSpellCheckDictionary);
431
432 // If the index for the current language cannot be found, it is due to
433 // the fact that the pref-member value for the last dictionary language
434 // set by the user still uses the old format; i.e. language-region, even
435 // when region is not necessary. For example, if the user sets the
436 // dictionary language to be French, the pref-member value in the user
437 // profile is "fr-FR", whereas we now use only "fr". To resolve this issue,
438 // if "fr-FR" is read from the pref, the language code ("fr" here) is
439 // extracted, and re-written in the pref, so that the pref-member value for
440 // dictionary language in the user profile now correctly stores "fr"
441 // instead of "fr-FR".
442 if (index < 0) {
443 const std::string& lang_region = dictionary_language_.GetValue();
444 dictionary_language_.SetValue(
445 SpellCheckCommon::GetLanguageFromLanguageRegion(lang_region));
446 index = dictionary_language_model_->GetSelectedLanguageIndex(
447 prefs::kSpellCheckDictionary);
448 }
449
450 change_dictionary_language_combobox_->SetSelectedItem(index);
451 spellcheck_language_index_selected_ = -1;
452 }
453 if (!pref_name || *pref_name == prefs::kEnableSpellCheck) {
454 enable_spellchecking_checkbox_->SetChecked(
455 enable_spellcheck_.GetValue());
456 }
457 if (!pref_name || *pref_name == prefs::kEnableAutoSpellCorrect) {
458 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
459 if (command_line.HasSwitch(switches::kExperimentalSpellcheckerFeatures)) {
460 enable_autospellcorrect_checkbox_->SetChecked(
461 enable_autospellcorrect_.GetValue());
462 }
463 }
464 }
465
466 void LanguagesPageView::ItemChanged(views::Combobox* sender,
467 int prev_index,
468 int new_index) {
469 if (prev_index == new_index)
470 return;
471
472 if (sender == change_ui_language_combobox_) {
473 if (new_index == starting_ui_language_index_)
474 ui_language_index_selected_ = -1;
475 else
476 ui_language_index_selected_ = new_index;
477
478 if (!language_warning_shown_) {
479 RestartMessageBox::ShowMessageBox(GetWindow()->GetNativeWindow());
480 language_warning_shown_ = true;
481 }
482 } else if (sender == change_dictionary_language_combobox_) {
483 // Set the spellcheck language selected.
484 spellcheck_language_index_selected_ = new_index;
485
486 // Remove the previously added spell check language to the accept list.
487 if (!spellcheck_language_added_.empty()) {
488 int old_index = language_order_table_model_->GetIndex(
489 spellcheck_language_added_);
490 if (old_index > -1)
491 language_order_table_model_->Remove(old_index);
492 }
493
494 // Add this new spell check language only if it is not already in the
495 // accept language list.
496 std::string language =
497 dictionary_language_model_->GetLocaleFromIndex(new_index);
498 int index = language_order_table_model_->GetIndex(language);
499 if (index == -1) {
500 // Add the new language.
501 OnAddLanguage(language);
502 language_table_edited_ = true;
503 spellcheck_language_added_ = language;
504 } else {
505 spellcheck_language_added_ = "";
506 }
507 }
508 }
509
510 void LanguagesPageView::OnSelectionChanged() {
511 move_up_button_->SetEnabled(language_order_table_->FirstSelectedRow() > 0 &&
512 language_order_table_->SelectedRowCount() == 1);
513 move_down_button_->SetEnabled(language_order_table_->FirstSelectedRow() <
514 language_order_table_->RowCount() - 1 &&
515 language_order_table_->SelectedRowCount() ==
516 1);
517 remove_button_->SetEnabled(language_order_table_->SelectedRowCount() > 0);
518 }
519
520 void LanguagesPageView::OnRemoveLanguage() {
521 int item_selected = 0;
522 for (views::TableView::iterator i =
523 language_order_table_->SelectionBegin();
524 i != language_order_table_->SelectionEnd(); ++i) {
525 language_order_table_model_->Remove(*i);
526 item_selected = *i;
527 }
528
529 move_up_button_->SetEnabled(false);
530 move_down_button_->SetEnabled(false);
531 remove_button_->SetEnabled(false);
532 int items_left = language_order_table_model_->RowCount();
533 if (items_left <= 0)
534 return;
535 if (item_selected > items_left - 1)
536 item_selected = items_left - 1;
537 language_order_table_->Select(item_selected);
538 OnSelectionChanged();
539 }
540
541 void LanguagesPageView::OnMoveDownLanguage() {
542 int item_selected = language_order_table_->FirstSelectedRow();
543 language_order_table_model_->MoveDown(item_selected);
544 language_order_table_->Select(item_selected + 1);
545 OnSelectionChanged();
546 }
547
548 void LanguagesPageView::OnMoveUpLanguage() {
549 int item_selected = language_order_table_->FirstSelectedRow();
550 language_order_table_model_->MoveUp(item_selected);
551 language_order_table_->Select(item_selected - 1);
552
553 OnSelectionChanged();
554 }
555
556 void LanguagesPageView::SaveChanges() {
557 if (language_order_table_model_.get() && language_table_edited_) {
558 accept_languages_.SetValue(
559 language_order_table_model_->GetLanguageList());
560 }
561
562 if (ui_language_index_selected_ != -1) {
563 UserMetricsRecordAction(UserMetricsAction("Options_AppLanguage"),
564 g_browser_process->local_state());
565 app_locale_.SetValue(ui_language_model_->
566 GetLocaleFromIndex(ui_language_index_selected_));
567
568 // Remove pref values for spellcheck dictionaries forcefully.
569 PrefService* prefs = profile()->GetPrefs();
570 if (prefs)
571 prefs->ClearPref(prefs::kSpellCheckDictionary);
572 }
573
574 if (spellcheck_language_index_selected_ != -1) {
575 UserMetricsRecordAction(UserMetricsAction("Options_DictionaryLanguage"),
576 profile()->GetPrefs());
577 dictionary_language_.SetValue(dictionary_language_model_->
578 GetLocaleFromIndex(spellcheck_language_index_selected_));
579 }
580
581 if (enable_spellcheck_checkbox_clicked_)
582 enable_spellcheck_.SetValue(enable_spellchecking_checkbox_->checked());
583
584 if (enable_autospellcorrect_checkbox_clicked_) {
585 enable_autospellcorrect_.SetValue(
586 enable_autospellcorrect_checkbox_->checked());
587 }
588 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/options/languages_page_view.h ('k') | chrome/browser/ui/views/options/managed_prefs_banner_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698