keyboard_handler.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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#include "chrome/browser/ui/webui/options/chromeos/keyboard_handler.h"
6
7#include "base/command_line.h"
8#include "base/values.h"
9#include "chromeos/chromeos_switches.h"
10#include "chromeos/ime/xkeyboard.h"
11#include "content/public/browser/web_ui.h"
12#include "grit/generated_resources.h"
13#include "ui/base/l10n/l10n_util.h"
14
15namespace {
16const struct ModifierKeysSelectItem {
17  int message_id;
18  chromeos::input_method::ModifierKey value;
19} kModifierKeysSelectItems[] = {
20  { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_SEARCH,
21    chromeos::input_method::kSearchKey },
22  { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_CTRL,
23    chromeos::input_method::kControlKey },
24  { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_ALT,
25    chromeos::input_method::kAltKey },
26  { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_VOID,
27    chromeos::input_method::kVoidKey },
28  { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_CAPS_LOCK,
29    chromeos::input_method::kCapsLockKey },
30  { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_ESCAPE,
31    chromeos::input_method::kEscapeKey },
32};
33
34const char* kDataValuesNames[] = {
35  "remapSearchKeyToValue",
36  "remapControlKeyToValue",
37  "remapAltKeyToValue",
38  "remapCapsLockKeyToValue",
39  "remapDiamondKeyToValue",
40};
41}  // namespace
42
43namespace chromeos {
44namespace options {
45
46KeyboardHandler::KeyboardHandler() {
47}
48
49KeyboardHandler::~KeyboardHandler() {
50}
51
52void KeyboardHandler::GetLocalizedValues(
53    base::DictionaryValue* localized_strings) {
54  DCHECK(localized_strings);
55
56  localized_strings->SetString("keyboardOverlayTitle",
57      l10n_util::GetStringUTF16(IDS_OPTIONS_KEYBOARD_OVERLAY_TITLE));
58  localized_strings->SetString("remapSearchKeyToContent",
59      l10n_util::GetStringUTF16(
60          IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_SEARCH_LABEL));
61  localized_strings->SetString("remapControlKeyToContent",
62      l10n_util::GetStringUTF16(
63          IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_CTRL_LABEL));
64  localized_strings->SetString("remapAltKeyToContent",
65      l10n_util::GetStringUTF16(
66          IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_ALT_LABEL));
67  localized_strings->SetString("remapCapsLockKeyToContent",
68      l10n_util::GetStringUTF16(
69          IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_CAPS_LOCK_LABEL));
70  localized_strings->SetString("remapDiamondKeyToContent",
71      l10n_util::GetStringUTF16(
72          IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_DIAMOND_KEY_LABEL));
73  localized_strings->SetString("sendFunctionKeys",
74      l10n_util::GetStringUTF16(
75          IDS_OPTIONS_SETTINGS_LANGUAGES_SEND_FUNCTION_KEYS));
76  localized_strings->SetString("sendFunctionKeysDescription",
77      l10n_util::GetStringUTF16(
78          IDS_OPTIONS_SETTINGS_LANGUAGES_SEND_FUNCTION_KEYS_DESCRIPTION));
79  localized_strings->SetString("changeLanguageAndInputSettings",
80      l10n_util::GetStringUTF16(
81          IDS_OPTIONS_SETTINGS_CHANGE_LANGUAGE_AND_INPUT_SETTINGS));
82
83  for (size_t i = 0; i < arraysize(kDataValuesNames); ++i) {
84    base::ListValue* list_value = new base::ListValue();
85    for (size_t j = 0; j < arraysize(kModifierKeysSelectItems); ++j) {
86      const input_method::ModifierKey value =
87          kModifierKeysSelectItems[j].value;
88      const int message_id = kModifierKeysSelectItems[j].message_id;
89      // Only the seach key can be remapped to the caps lock key.
90      if (kDataValuesNames[i] != std::string("remapSearchKeyToValue") &&
91          kDataValuesNames[i] != std::string("remapCapsLockKeyToValue") &&
92          value == input_method::kCapsLockKey) {
93        continue;
94      }
95      base::ListValue* option = new base::ListValue();
96      option->Append(new base::FundamentalValue(value));
97      option->Append(new base::StringValue(l10n_util::GetStringUTF16(
98          message_id)));
99      list_value->Append(option);
100    }
101    localized_strings->Set(kDataValuesNames[i], list_value);
102  }
103}
104
105void KeyboardHandler::InitializePage() {
106  bool chromeos_keyboard = CommandLine::ForCurrentProcess()->HasSwitch(
107      chromeos::switches::kHasChromeOSKeyboard);
108  const base::FundamentalValue show_caps_lock_options(!chromeos_keyboard);
109
110  bool has_diamond_key = CommandLine::ForCurrentProcess()->HasSwitch(
111      chromeos::switches::kHasChromeOSDiamondKey);
112  const base::FundamentalValue show_diamond_key_options(has_diamond_key);
113
114  web_ui()->CallJavascriptFunction(
115      "options.KeyboardOverlay.showCapsLockOptions",
116      show_caps_lock_options);
117  web_ui()->CallJavascriptFunction(
118      "options.KeyboardOverlay.showDiamondKeyOptions",
119      show_diamond_key_options);
120}
121
122}  // namespace options
123}  // namespace chromeos
124