1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_LANGUAGE_OPTIONS_UTIL_H_ 6 #define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_LANGUAGE_OPTIONS_UTIL_H_ 7 8 #include <string> 9 10 #include "base/strings/utf_string_conversions.h" 11 #include "base/values.h" 12 #include "chrome/browser/chromeos/language_preferences.h" 13 #include "ui/base/l10n/l10n_util.h" 14 15 namespace base { 16 class ListValue; 17 } 18 19 namespace chromeos { 20 namespace options { 21 22 // Returns an i18n-content value corresponding to |preference|. 23 template <typename T> 24 std::string GetI18nContentValue(const T& preference, const char* prefix) { 25 return std::string(prefix) + preference.ibus_config_name; 26 } 27 28 // Returns a property name of templateData corresponding to |preference|. 29 template <typename T> 30 std::string GetTemplateDataPropertyName(const T& preference, 31 const char* prefix) { 32 return std::string(prefix) + preference.ibus_config_name + "Value"; 33 } 34 35 // Returns an property name of templateData corresponding the value of the min 36 // attribute. 37 template <typename T> 38 std::string GetTemplateDataMinName(const T& preference, const char* prefix) { 39 return std::string(prefix) + preference.ibus_config_name + "Min"; 40 } 41 42 // Returns an property name of templateData corresponding the value of the max 43 // attribute. 44 template <typename T> 45 std::string GetTemplateDataMaxName(const T& preference, const char* prefix) { 46 return std::string(prefix) + preference.ibus_config_name + "Max"; 47 } 48 49 // Creates a Value object from the given value. Here we use function 50 // overloading to handle string and integer preferences in 51 // CreateMultipleChoiceList. 52 base::Value* CreateValue(const char* in_value); 53 base::Value* CreateValue(int in_value); 54 55 // Creates a multiple choice list from the given preference. 56 template <typename T> 57 base::ListValue* CreateMultipleChoiceList( 58 const language_prefs::LanguageMultipleChoicePreference<T>& preference) { 59 int list_length = 0; 60 for (size_t i = 0; 61 i < language_prefs::LanguageMultipleChoicePreference<T>::kMaxItems; 62 ++i) { 63 if (preference.values_and_ids[i].item_message_id == 0) 64 break; 65 ++list_length; 66 } 67 DCHECK_GT(list_length, 0); 68 69 base::ListValue* list_value = new base::ListValue(); 70 for (int i = 0; i < list_length; ++i) { 71 base::ListValue* option = new base::ListValue(); 72 option->Append(CreateValue( 73 preference.values_and_ids[i].ibus_config_value)); 74 option->Append(new base::StringValue(l10n_util::GetStringUTF16( 75 preference.values_and_ids[i].item_message_id))); 76 list_value->Append(option); 77 } 78 return list_value; 79 } 80 81 } // namespace options 82 } // namespace chromeos 83 84 #endif // CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_LANGUAGE_OPTIONS_UTIL_H_ 85