Home | History | Annotate | Download | only in chromeos
      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