| OLD | NEW |
| 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/options/language_config_view.h" | 5 #include "chrome/browser/chromeos/options/language_config_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "app/l10n_util.h" | 11 #include "app/l10n_util.h" |
| 12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
| 14 #include "chrome/browser/chromeos/cros/cros_library.h" | 14 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 15 #include "chrome/browser/chromeos/cros/language_library.h" | 15 #include "chrome/browser/chromeos/cros/language_library.h" |
| 16 #include "chrome/browser/chromeos/options/language_hangul_config_view.h" | 16 #include "chrome/browser/chromeos/options/language_hangul_config_view.h" |
| 17 #include "chrome/browser/chromeos/preferences.h" | 17 #include "chrome/browser/chromeos/preferences.h" |
| 18 #include "chrome/browser/language_combobox_model.h" | 18 #include "chrome/browser/language_combobox_model.h" |
| 19 #include "chrome/common/notification_type.h" | 19 #include "chrome/common/notification_type.h" |
| 20 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
| 21 #include "gfx/font.h" | 21 #include "gfx/font.h" |
| 22 #include "grit/generated_resources.h" | 22 #include "grit/generated_resources.h" |
| 23 #include "grit/locale_settings.h" | 23 #include "grit/locale_settings.h" |
| 24 #include "third_party/icu/public/common/unicode/uloc.h" |
| 24 #include "views/controls/button/checkbox.h" | 25 #include "views/controls/button/checkbox.h" |
| 25 #include "views/controls/combobox/combobox.h" | 26 #include "views/controls/combobox/combobox.h" |
| 26 #include "views/controls/label.h" | 27 #include "views/controls/label.h" |
| 27 #include "views/fill_layout.h" | 28 #include "views/fill_layout.h" |
| 28 #include "views/grid_layout.h" | 29 #include "views/grid_layout.h" |
| 29 #include "views/standard_layout.h" | 30 #include "views/standard_layout.h" |
| 30 #include "views/window/window.h" | 31 #include "views/window/window.h" |
| 31 | 32 |
| 32 namespace chromeos { | 33 namespace chromeos { |
| 33 using views::ColumnSet; | 34 using views::ColumnSet; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 language_combobox_ = new views::Combobox(language_combobox_model_.get()); | 135 language_combobox_ = new views::Combobox(language_combobox_model_.get()); |
| 135 language_combobox_->SetSelectedItem(selected_index_); | 136 language_combobox_->SetSelectedItem(selected_index_); |
| 136 language_combobox_->set_listener(this); | 137 language_combobox_->set_listener(this); |
| 137 layout->StartRow(0, kColumnSetId); | 138 layout->StartRow(0, kColumnSetId); |
| 138 layout->AddView(language_combobox_); | 139 layout->AddView(language_combobox_); |
| 139 } | 140 } |
| 140 | 141 |
| 141 // Creates the language combobox model from the supported languages. | 142 // Creates the language combobox model from the supported languages. |
| 142 LanguageComboboxModel* CreateLanguageComboboxModel() { | 143 LanguageComboboxModel* CreateLanguageComboboxModel() { |
| 143 std::vector<std::string> language_codes; | 144 std::vector<std::string> language_codes; |
| 144 parent_view_->GetSupportedLangageCodes(&language_codes); | 145 parent_view_->GetSupportedLanguageCodes(&language_codes); |
| 145 // LanguageComboboxModel sorts languages by their display names. | 146 // LanguageComboboxModel sorts languages by their display names. |
| 146 return new LanguageComboboxModelWithOthers(NULL, language_codes); | 147 return new LanguageComboboxModelWithOthers(NULL, language_codes); |
| 147 } | 148 } |
| 148 | 149 |
| 149 LanguageConfigView* parent_view_; | 150 LanguageConfigView* parent_view_; |
| 150 | 151 |
| 151 // Combobox and its corresponding model. | 152 // Combobox and its corresponding model. |
| 152 scoped_ptr<LanguageComboboxModel> language_combobox_model_; | 153 scoped_ptr<LanguageComboboxModel> language_combobox_model_; |
| 153 views::Combobox* language_combobox_; | 154 views::Combobox* language_combobox_; |
| 154 views::View* contents_; | 155 views::View* contents_; |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 // Add the title label. | 301 // Add the title label. |
| 301 layout->StartRow(0, kTitleColumnSetId); | 302 layout->StartRow(0, kTitleColumnSetId); |
| 302 layout->AddView(title_label); | 303 layout->AddView(title_label); |
| 303 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); | 304 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
| 304 | 305 |
| 305 // Add input method names and configuration buttons. | 306 // Add input method names and configuration buttons. |
| 306 input_method_buttons_.clear(); | 307 input_method_buttons_.clear(); |
| 307 input_method_checkboxes_.clear(); | 308 input_method_checkboxes_.clear(); |
| 308 | 309 |
| 309 std::vector<std::string> language_ids; | 310 std::vector<std::string> language_ids; |
| 310 GetSupportedLangageIDs(&language_ids); | 311 GetSupportedLanguageIDs(&language_ids); |
| 311 for (size_t i = 0; i < language_ids.size(); ++i) { | 312 for (size_t i = 0; i < language_ids.size(); ++i) { |
| 312 const std::string& language_id = language_ids[i]; | 313 const std::string& language_id = language_ids[i]; |
| 313 const std::string language_code = GetLanguageCodeFromID(language_id); | 314 const std::string language_code = GetLanguageCodeFromID(language_id); |
| 314 const std::string display_name = GetDisplayNameFromID(language_id); | 315 const std::string display_name = GetDisplayNameFromID(language_id); |
| 315 if (language_code == target_language_code) { | 316 if (language_code == target_language_code) { |
| 316 layout->StartRow(0, kDoubleColumnSetId); | 317 layout->StartRow(0, kDoubleColumnSetId); |
| 317 InputMethodCheckbox* checkbox | 318 InputMethodCheckbox* checkbox |
| 318 = new InputMethodCheckbox(language_id, display_name); | 319 = new InputMethodCheckbox(language_id, display_name); |
| 319 checkbox->set_listener(this); | 320 checkbox->set_listener(this); |
| 320 checkbox->SetChecked(LanguageIsActivated(language_id)); | 321 checkbox->SetChecked(LanguageIsActivated(language_id)); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 input_method_config_view_map_["hangul"] = | 435 input_method_config_view_map_["hangul"] = |
| 435 CreateLanguageHangulConfigView; | 436 CreateLanguageHangulConfigView; |
| 436 } | 437 } |
| 437 | 438 |
| 438 void LanguageConfigView::InitLanguageIdMaps() { | 439 void LanguageConfigView::InitLanguageIdMaps() { |
| 439 // GetSupportedLanguages() never return NULL. | 440 // GetSupportedLanguages() never return NULL. |
| 440 scoped_ptr<InputLanguageList> supported_language_list( | 441 scoped_ptr<InputLanguageList> supported_language_list( |
| 441 CrosLibrary::Get()->GetLanguageLibrary()->GetSupportedLanguages()); | 442 CrosLibrary::Get()->GetLanguageLibrary()->GetSupportedLanguages()); |
| 442 for (size_t i = 0; i < supported_language_list->size(); ++i) { | 443 for (size_t i = 0; i < supported_language_list->size(); ++i) { |
| 443 const InputLanguage& language = supported_language_list->at(i); | 444 const InputLanguage& language = supported_language_list->at(i); |
| 445 // Normalize the language code as some engines return three-letter |
| 446 // codes like "jpn" wheres some other engines return two-letter codes |
| 447 // like "ja". |
| 448 std::string language_code = NormalizeLanguageCode(language.language_code); |
| 444 id_to_language_code_map_.insert( | 449 id_to_language_code_map_.insert( |
| 445 std::make_pair(language.id, language.language_code)); | 450 std::make_pair(language.id, language_code)); |
| 446 id_to_display_name_map_.insert( | 451 id_to_display_name_map_.insert( |
| 447 std::make_pair(language.id, language.display_name)); | 452 std::make_pair(language.id, language.display_name)); |
| 448 } | 453 } |
| 449 } | 454 } |
| 450 | 455 |
| 451 views::View* LanguageConfigView::CreateContentsOnLeft() { | 456 views::View* LanguageConfigView::CreateContentsOnLeft() { |
| 452 views::View* contents = new views::View; | 457 views::View* contents = new views::View; |
| 453 GridLayout* layout = new GridLayout(contents); | 458 GridLayout* layout = new GridLayout(contents); |
| 454 contents->SetLayoutManager(layout); | 459 contents->SetLayoutManager(layout); |
| 455 | 460 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 } | 509 } |
| 505 | 510 |
| 506 void LanguageConfigView::OnAddLanguage(const std::string& language_code) { | 511 void LanguageConfigView::OnAddLanguage(const std::string& language_code) { |
| 507 if (std::find(preferred_language_codes_.begin(), | 512 if (std::find(preferred_language_codes_.begin(), |
| 508 preferred_language_codes_.end(), | 513 preferred_language_codes_.end(), |
| 509 language_code) == preferred_language_codes_.end()) { | 514 language_code) == preferred_language_codes_.end()) { |
| 510 // Activate the first input language associated with the language. We have | 515 // Activate the first input language associated with the language. We have |
| 511 // to call this before the OnItemsAdded() call below so the checkbox for | 516 // to call this before the OnItemsAdded() call below so the checkbox for |
| 512 // the first input language gets checked. | 517 // the first input language gets checked. |
| 513 std::vector<std::string> language_ids; | 518 std::vector<std::string> language_ids; |
| 514 GetSupportedLangageIDs(&language_ids); | 519 GetSupportedLanguageIDs(&language_ids); |
| 515 for (size_t i = 0; i < language_ids.size(); ++i) { | 520 for (size_t i = 0; i < language_ids.size(); ++i) { |
| 516 if (GetLanguageCodeFromID(language_ids[i]) == language_code) { | 521 if (GetLanguageCodeFromID(language_ids[i]) == language_code) { |
| 517 SetLanguageActivated(language_ids[i], true); | 522 SetLanguageActivated(language_ids[i], true); |
| 518 break; | 523 break; |
| 519 } | 524 } |
| 520 } | 525 } |
| 521 | 526 |
| 522 // Append the language to the list of language codes. | 527 // Append the language to the list of language codes. |
| 523 preferred_language_codes_.push_back(language_code); | 528 preferred_language_codes_.push_back(language_code); |
| 524 // Update the language table accordingly. | 529 // Update the language table accordingly. |
| 525 preferred_language_table_->OnItemsAdded(RowCount() - 1, 1); | 530 preferred_language_table_->OnItemsAdded(RowCount() - 1, 1); |
| 526 preferred_language_table_->SelectRow(RowCount() - 1); | 531 preferred_language_table_->SelectRow(RowCount() - 1); |
| 527 } | 532 } |
| 528 } | 533 } |
| 529 | 534 |
| 530 void LanguageConfigView::DeactivateInputLanguagesFor( | 535 void LanguageConfigView::DeactivateInputLanguagesFor( |
| 531 const std::string& language_code) { | 536 const std::string& language_code) { |
| 532 std::vector<std::string> language_ids; | 537 std::vector<std::string> language_ids; |
| 533 GetSupportedLangageIDs(&language_ids); | 538 GetSupportedLanguageIDs(&language_ids); |
| 534 for (size_t i = 0; i < language_ids.size(); ++i) { | 539 for (size_t i = 0; i < language_ids.size(); ++i) { |
| 535 if (GetLanguageCodeFromID(language_ids[i]) == language_code) { | 540 if (GetLanguageCodeFromID(language_ids[i]) == language_code) { |
| 536 SetLanguageActivated(language_ids[i], false); | 541 SetLanguageActivated(language_ids[i], false); |
| 537 // Do not break; here in order to disable all engines that belong to | 542 // Do not break; here in order to disable all engines that belong to |
| 538 // |language_code|. | 543 // |language_code|. |
| 539 } | 544 } |
| 540 } | 545 } |
| 541 | 546 |
| 542 // Switch back to the US English. | 547 // Switch back to the US English. |
| 543 // TODO(yusukes): what if "USA" is not active? | 548 // TODO(yusukes): what if "USA" is not active? |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 language_ids.end()); | 595 language_ids.end()); |
| 591 } | 596 } |
| 592 | 597 |
| 593 void LanguageConfigView::GetActiveLanguageIDs( | 598 void LanguageConfigView::GetActiveLanguageIDs( |
| 594 std::vector<std::string>* out_language_ids) { | 599 std::vector<std::string>* out_language_ids) { |
| 595 const std::wstring value = preload_engines_.GetValue(); | 600 const std::wstring value = preload_engines_.GetValue(); |
| 596 out_language_ids->clear(); | 601 out_language_ids->clear(); |
| 597 SplitString(WideToUTF8(value), ',', out_language_ids); | 602 SplitString(WideToUTF8(value), ',', out_language_ids); |
| 598 } | 603 } |
| 599 | 604 |
| 600 void LanguageConfigView::GetSupportedLangageIDs( | 605 void LanguageConfigView::GetSupportedLanguageIDs( |
| 601 std::vector<std::string>* out_language_ids) const { | 606 std::vector<std::string>* out_language_ids) const { |
| 602 out_language_ids->clear(); | 607 out_language_ids->clear(); |
| 603 std::map<std::string, std::string>::const_iterator iter; | 608 std::map<std::string, std::string>::const_iterator iter; |
| 604 for (iter = id_to_language_code_map_.begin(); | 609 for (iter = id_to_language_code_map_.begin(); |
| 605 iter != id_to_language_code_map_.end(); | 610 iter != id_to_language_code_map_.end(); |
| 606 ++iter) { | 611 ++iter) { |
| 607 out_language_ids->push_back(iter->first); | 612 out_language_ids->push_back(iter->first); |
| 608 } | 613 } |
| 609 } | 614 } |
| 610 | 615 |
| 611 void LanguageConfigView::GetSupportedLangageCodes( | 616 void LanguageConfigView::GetSupportedLanguageCodes( |
| 612 std::vector<std::string>* out_language_codes) const { | 617 std::vector<std::string>* out_language_codes) const { |
| 613 std::set<std::string> language_code_set; | 618 std::set<std::string> language_code_set; |
| 614 std::map<std::string, std::string>::const_iterator iter; | 619 std::map<std::string, std::string>::const_iterator iter; |
| 615 for (iter = id_to_language_code_map_.begin(); | 620 for (iter = id_to_language_code_map_.begin(); |
| 616 iter != id_to_language_code_map_.end(); | 621 iter != id_to_language_code_map_.end(); |
| 617 ++iter) { | 622 ++iter) { |
| 618 language_code_set.insert(iter->second); | 623 language_code_set.insert(iter->second); |
| 619 } | 624 } |
| 620 out_language_codes->clear(); | 625 out_language_codes->clear(); |
| 621 out_language_codes->assign( | 626 out_language_codes->assign( |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 const std::wstring& language_name) { | 660 const std::wstring& language_name) { |
| 656 // "t" is used as the language code for input methods that don't fall | 661 // "t" is used as the language code for input methods that don't fall |
| 657 // under any other languages. | 662 // under any other languages. |
| 658 if (language_name == L"t") { | 663 if (language_name == L"t") { |
| 659 return l10n_util::GetString( | 664 return l10n_util::GetString( |
| 660 IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS); | 665 IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS); |
| 661 } | 666 } |
| 662 return language_name; | 667 return language_name; |
| 663 } | 668 } |
| 664 | 669 |
| 670 std::string LanguageConfigView::NormalizeLanguageCode( |
| 671 const std::string& language_code) { |
| 672 // We only handle two-letter codes here. |
| 673 // Some ibus engines return locale codes like "zh_CN" as language codes, |
| 674 // and we don't want to rewrite this to "zho". |
| 675 if (language_code.size() != 2) { |
| 676 return language_code; |
| 677 } |
| 678 const char* three_letter_code = uloc_getISO3Language( |
| 679 language_code.c_str()); |
| 680 if (three_letter_code && strlen(three_letter_code) > 0) { |
| 681 return three_letter_code; |
| 682 } |
| 683 return language_code; |
| 684 } |
| 685 |
| 665 } // namespace chromeos | 686 } // namespace chromeos |
| OLD | NEW |