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