Index: chrome/browser/chromeos/options/language_config_model.cc |
diff --git a/chrome/browser/chromeos/options/language_config_model.cc b/chrome/browser/chromeos/options/language_config_model.cc |
deleted file mode 100644 |
index cd400e5a281bc730c1d7bdd97f7232a27c6332a5..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/options/language_config_model.cc |
+++ /dev/null |
@@ -1,277 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/chromeos/options/language_config_model.h" |
- |
-#include <algorithm> |
-#include <functional> |
-#include <utility> |
- |
-#include "app/l10n_util.h" |
-#include "base/string_split.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/chromeos/cros/cros_library.h" |
-#include "chrome/browser/chromeos/cros/input_method_library.h" |
-#include "chrome/browser/chromeos/input_method/input_method_util.h" |
-#include "chrome/browser/chromeos/preferences.h" |
-#include "chrome/common/notification_type.h" |
-#include "chrome/common/pref_names.h" |
-#include "grit/generated_resources.h" |
- |
-namespace chromeos { |
- |
-AddLanguageComboboxModel::AddLanguageComboboxModel( |
- Profile* profile, |
- const std::vector<std::string>& locale_codes) |
- : LanguageComboboxModel(profile, locale_codes) { |
-} |
- |
-int AddLanguageComboboxModel::GetItemCount() { |
- // +1 for "Add language". |
- return get_languages_count() + 1 - ignore_set_.size(); |
-} |
- |
-string16 AddLanguageComboboxModel::GetItemAt(int index) { |
- // Show "Add language" as the first item. |
- if (index == 0) { |
- return l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_LANGUAGE_COMBOBOX); |
- } |
- return GetLanguageNameAt(GetLanguageIndex(index)); |
-} |
- |
-int AddLanguageComboboxModel::GetLanguageIndex(int index) const { |
- // The adjusted_index is counted while ignoring languages in ignore_set_. |
- int adjusted_index = 0; |
- for (int i = 0; i < get_languages_count(); ++i) { |
- if (ignore_set_.count(GetLocaleFromIndex(i)) > 0) { |
- continue; |
- } |
- // -1 for "Add language". |
- if (adjusted_index == index - 1) { |
- return i; |
- } |
- ++adjusted_index; |
- } |
- return 0; |
-} |
- |
-void AddLanguageComboboxModel::SetIgnored( |
- const std::string& language_code, bool ignored) { |
- if (ignored) { |
- // Add to the ignore_set_ if the language code is known (i.e. reject |
- // unknown language codes just in case). |
- if (GetIndexFromLocale(language_code) != -1) { |
- ignore_set_.insert(language_code); |
- } else { |
- LOG(ERROR) << "Unknown language code: " << language_code; |
- } |
- } else { |
- ignore_set_.erase(language_code); |
- } |
-} |
- |
-LanguageConfigModel::LanguageConfigModel(PrefService* pref_service) |
- : pref_service_(pref_service) { |
- // Initialize the maps and vectors. |
- InitInputMethodIdVectors(); |
- |
- preferred_languages_pref_.Init( |
- prefs::kLanguagePreferredLanguages, pref_service_, this); |
- preload_engines_pref_.Init( |
- prefs::kLanguagePreloadEngines, pref_service_, this); |
- // TODO(yusukes): It might be safer to call GetActiveLanguages() cros API |
- // here and compare the result and preload_engines_pref_.GetValue(). |
- // If there's a discrepancy between IBus setting and Chrome prefs, we |
- // can resolve it by calling preload_engines_pref_SetValue() here. |
- |
- // Initialize the language codes currently activated. |
- NotifyPrefChanged(); |
-} |
- |
-size_t LanguageConfigModel::CountNumActiveInputMethods( |
- const std::string& language_code) { |
- int num_selected_active_input_methods = 0; |
- std::vector<std::string> input_method_ids; |
- input_method::GetInputMethodIdsFromLanguageCode( |
- language_code, input_method::kAllInputMethods, &input_method_ids); |
- for (size_t i = 0; i < input_method_ids.size(); ++i) { |
- if (InputMethodIsActivated(input_method_ids[i])) { |
- ++num_selected_active_input_methods; |
- } |
- } |
- return num_selected_active_input_methods; |
-} |
- |
-bool LanguageConfigModel::HasLanguageCode( |
- const std::string& language_code) const { |
- return std::find(preferred_language_codes_.begin(), |
- preferred_language_codes_.end(), |
- language_code) != preferred_language_codes_.end(); |
-} |
- |
-size_t LanguageConfigModel::AddLanguageCode( |
- const std::string& language_code) { |
- preferred_language_codes_.push_back(language_code); |
- // Sort the language codes by names. This is not efficient, but |
- // acceptable as the language list is about 40 item long at most. In |
- // theory, we could find the position to insert rather than sorting, but |
- // it would be complex as we need to use unicode string comparator. |
- input_method::SortLanguageCodesByNames(&preferred_language_codes_); |
- // Find the language code just added in the sorted language codes. |
- const int added_at = |
- std::distance(preferred_language_codes_.begin(), |
- std::find(preferred_language_codes_.begin(), |
- preferred_language_codes_.end(), |
- language_code)); |
- preferred_languages_pref_.SetValue( |
- JoinString(preferred_language_codes_, ',')); |
- return added_at; |
-} |
- |
-void LanguageConfigModel::RemoveLanguageAt(size_t row) { |
- preferred_language_codes_.erase(preferred_language_codes_.begin() + row); |
- preferred_languages_pref_.SetValue( |
- JoinString(preferred_language_codes_, ',')); |
-} |
- |
-void LanguageConfigModel::UpdateInputMethodPreferences( |
- const std::vector<std::string>& in_new_input_method_ids) { |
- std::vector<std::string> new_input_method_ids = in_new_input_method_ids; |
- // Note: Since |new_input_method_ids| is alphabetically sorted and the sort |
- // function below uses stable sort, the relateve order of input methods that |
- // belong to the same language (e.g. "mozc" and "xkb:jp::jpn") is maintained. |
- input_method::SortInputMethodIdsByNames(&new_input_method_ids); |
- preload_engines_pref_.SetValue(JoinString(new_input_method_ids, ',')); |
-} |
- |
-void LanguageConfigModel::DeactivateInputMethodsFor( |
- const std::string& language_code) { |
- for (size_t i = 0; i < num_supported_input_method_ids(); ++i) { |
- if (input_method::GetLanguageCodeFromInputMethodId( |
- supported_input_method_id_at(i)) == |
- language_code) { |
- // What happens if we disable the input method currently active? |
- // IBus should take care of it, so we don't do anything special |
- // here. See crosbug.com/2443. |
- SetInputMethodActivated(supported_input_method_id_at(i), false); |
- // Do not break; here in order to disable all engines that belong to |
- // |language_code|. |
- } |
- } |
-} |
- |
-void LanguageConfigModel::SetInputMethodActivated( |
- const std::string& input_method_id, bool activated) { |
- DCHECK(!input_method_id.empty()); |
- std::vector<std::string> input_method_ids; |
- GetActiveInputMethodIds(&input_method_ids); |
- |
- std::set<std::string> input_method_id_set(input_method_ids.begin(), |
- input_method_ids.end()); |
- if (activated) { |
- // Add |id| if it's not already added. |
- input_method_id_set.insert(input_method_id); |
- } else { |
- input_method_id_set.erase(input_method_id); |
- } |
- |
- // Update Chrome's preference. |
- std::vector<std::string> new_input_method_ids(input_method_id_set.begin(), |
- input_method_id_set.end()); |
- UpdateInputMethodPreferences(new_input_method_ids); |
-} |
- |
-bool LanguageConfigModel::InputMethodIsActivated( |
- const std::string& input_method_id) { |
- std::vector<std::string> input_method_ids; |
- GetActiveInputMethodIds(&input_method_ids); |
- return (std::find(input_method_ids.begin(), input_method_ids.end(), |
- input_method_id) != input_method_ids.end()); |
-} |
- |
-void LanguageConfigModel::GetActiveInputMethodIds( |
- std::vector<std::string>* out_input_method_ids) { |
- const std::string value = preload_engines_pref_.GetValue(); |
- out_input_method_ids->clear(); |
- if (!value.empty()) |
- base::SplitString(value, ',', out_input_method_ids); |
-} |
- |
-void LanguageConfigModel::GetPreferredLanguageCodes( |
- std::vector<std::string>* out_language_codes) { |
- const std::string value = preferred_languages_pref_.GetValue(); |
- out_language_codes->clear(); |
- if (!value.empty()) |
- base::SplitString(value, ',', out_language_codes); |
-} |
- |
-void LanguageConfigModel::GetInputMethodIdsFromLanguageCode( |
- const std::string& language_code, |
- std::vector<std::string>* input_method_ids) const { |
- DCHECK(input_method_ids); |
- input_method_ids->clear(); |
- input_method::GetInputMethodIdsFromLanguageCode( |
- language_code, input_method::kAllInputMethods, input_method_ids); |
-} |
- |
-void LanguageConfigModel::NotifyPrefChanged() { |
- GetPreferredLanguageCodes(&preferred_language_codes_); |
-} |
- |
-void LanguageConfigModel::Observe(NotificationType type, |
- const NotificationSource& source, |
- const NotificationDetails& details) { |
- if (type == NotificationType::PREF_CHANGED) { |
- NotifyPrefChanged(); |
- } |
-} |
- |
-void LanguageConfigModel::InitInputMethodIdVectors() { |
- // The two sets are used to build lists without duplication. |
- std::set<std::string> supported_language_code_set; |
- std::set<std::string> supported_input_method_id_set; |
- // Build the id to descriptor map for handling kExtraLanguages later. |
- std::map<std::string, const InputMethodDescriptor*> id_to_descriptor_map; |
- |
- // GetSupportedLanguages() never return NULL. |
- scoped_ptr<InputMethodDescriptors> supported_input_methods( |
- CrosLibrary::Get()->GetInputMethodLibrary()->GetSupportedInputMethods()); |
- for (size_t i = 0; i < supported_input_methods->size(); ++i) { |
- const InputMethodDescriptor& input_method = supported_input_methods->at(i); |
- const std::string language_code = |
- input_method::GetLanguageCodeFromDescriptor(input_method); |
- // Add the language code and the input method id to the sets. |
- supported_language_code_set.insert(language_code); |
- supported_input_method_id_set.insert(input_method.id); |
- // Remember the pair. |
- id_to_descriptor_map.insert( |
- std::make_pair(input_method.id, &input_method)); |
- } |
- |
- // Go through the languages listed in kExtraLanguages. |
- for (size_t i = 0; i < arraysize(input_method::kExtraLanguages); ++i) { |
- const char* language_code = input_method::kExtraLanguages[i].language_code; |
- const char* input_method_id = |
- input_method::kExtraLanguages[i].input_method_id; |
- std::map<std::string, const InputMethodDescriptor*>::const_iterator iter = |
- id_to_descriptor_map.find(input_method_id); |
- // If the associated input method descriptor is found, add the |
- // language code and the input method. |
- if (iter != id_to_descriptor_map.end()) { |
- const InputMethodDescriptor& input_method = *(iter->second); |
- // Add the language code and the input method id to the sets. |
- supported_language_code_set.insert(language_code); |
- supported_input_method_id_set.insert(input_method.id); |
- } |
- } |
- |
- // Build the vectors from the sets. |
- supported_language_codes_.assign(supported_language_code_set.begin(), |
- supported_language_code_set.end()); |
- supported_input_method_ids_.assign(supported_input_method_id_set.begin(), |
- supported_input_method_id_set.end()); |
-} |
- |
-} // namespace chromeos |