summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsatorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-21 03:51:32 +0000
committersatorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-21 03:51:32 +0000
commit204e936d3b0455b0c55f2dc5713f8a84b55e0cbf (patch)
tree098ef9f29db5d43fda8d9804d1bd4ea7e7b244e1
parent0848295876d5e64e7aa3fb7c6333d32764447fb6 (diff)
downloadchromium_src-204e936d3b0455b0c55f2dc5713f8a84b55e0cbf.zip
chromium_src-204e936d3b0455b0c55f2dc5713f8a84b55e0cbf.tar.gz
chromium_src-204e936d3b0455b0c55f2dc5713f8a84b55e0cbf.tar.bz2
Add "Text Input" section to the Chromium OS tab.
The section is used to activate and deactivate input languages. See the design doc for details about the text input support. http://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input TEST=manually BUG=none Review URL: http://codereview.chromium.org/549082 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36726 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/chromeos/settings_contents_view.cc99
2 files changed, 102 insertions, 0 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 2b8bdb5..adae1e2 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6441,6 +6441,9 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_OPTIONS_SETTINGS_SECTION_TITLE_PASSWORD">
Network Password
</message>
+ <message name="IDS_OPTIONS_SETTINGS_SECTION_TITLE_TEXT_INPUT">
+ Text Input
+ </message>
<message name="IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION" desc="In the settings tab, the text next to the timezone combobox.">
Timezone:
</message>
diff --git a/chrome/browser/chromeos/settings_contents_view.cc b/chrome/browser/chromeos/settings_contents_view.cc
index dfff133..d1ea9a5 100644
--- a/chrome/browser/chromeos/settings_contents_view.cc
+++ b/chrome/browser/chromeos/settings_contents_view.cc
@@ -14,6 +14,7 @@
#include "base/basictypes.h"
#include "base/stl_util-inl.h"
#include "base/string_util.h"
+#include "chrome/browser/chromeos/language_library.h"
#include "chrome/browser/chromeos/network_library.h"
#include "chrome/browser/chromeos/password_dialog_view.h"
#include "chrome/browser/profile.h"
@@ -581,6 +582,101 @@ void TouchpadSection::NotifyPrefChanged(const std::wstring* pref_name) {
}
////////////////////////////////////////////////////////////////////////////////
+// TextInputSection
+
+// This is a checkbox associated with input language information.
+class LanguageCheckbox : public views::Checkbox {
+ public:
+ explicit LanguageCheckbox(const InputLanguage& language)
+ : views::Checkbox(UTF8ToWide(language.display_name)),
+ language_(language) {
+ }
+
+ const InputLanguage& language() const {
+ return language_;
+ }
+
+ private:
+ InputLanguage language_;
+ DISALLOW_COPY_AND_ASSIGN(LanguageCheckbox);
+};
+
+// TextInput section for text input settings.
+class TextInputSection : public SettingsContentsSection,
+ public views::ButtonListener {
+ public:
+ explicit TextInputSection(Profile* profile);
+ virtual ~TextInputSection() {}
+
+ private:
+ // Overridden from SettingsContentsSection:
+ virtual void InitContents(GridLayout* layout);
+
+ // Overridden from views::ButtonListener:
+ virtual void ButtonPressed(views::Button* sender,
+ const views::Event& event);
+ DISALLOW_COPY_AND_ASSIGN(TextInputSection);
+};
+
+TextInputSection::TextInputSection(Profile* profile)
+ : SettingsContentsSection(profile,
+ IDS_OPTIONS_SETTINGS_SECTION_TITLE_TEXT_INPUT) {
+}
+
+void TextInputSection::ButtonPressed(
+ views::Button* sender, const views::Event& event) {
+ LanguageCheckbox* checkbox = static_cast<LanguageCheckbox*>(sender);
+ const InputLanguage& language = checkbox->language();
+ // Check if the checkbox is now being checked.
+ if (checkbox->checked()) {
+ // Try to activate the language.
+ if (!LanguageLibrary::Get()->ActivateLanguage(language.category,
+ language.id)) {
+ // Activation should never fail (failure means something is broken),
+ // but if it fails we just revert the checkbox and ignore the error.
+ // TODO(satorux): Implement a better error handling if it becomes
+ // necessary.
+ checkbox->SetChecked(false);
+ LOG(ERROR) << "Failed to activate language: " << language.display_name;
+ }
+ } else {
+ // Try to deactivate the language.
+ if (!LanguageLibrary::Get()->DeactivateLanguage(language.category,
+ language.id)) {
+ // See a comment above about the activation failure.
+ checkbox->SetChecked(true);
+ LOG(ERROR) << "Failed to deactivate language: " << language.display_name;
+ }
+ }
+}
+
+void TextInputSection::InitContents(GridLayout* layout) {
+ // GetActiveLanguages() and GetSupportedLanguages() never return NULL.
+ scoped_ptr<InputLanguageList> active_language_list(
+ LanguageLibrary::Get()->GetActiveLanguages());
+ scoped_ptr<InputLanguageList> supported_language_list(
+ LanguageLibrary::Get()->GetSupportedLanguages());
+
+ for (size_t i = 0; i < supported_language_list->size(); ++i) {
+ const InputLanguage& language = supported_language_list->at(i);
+ // Check if |language| is active. Note that active_language_list is
+ // small (usually a couple), so scanning here is fine.
+ const bool language_is_active =
+ (std::find(active_language_list->begin(),
+ active_language_list->end(),
+ language) != active_language_list->end());
+ // Create a checkbox.
+ LanguageCheckbox* checkbox = new LanguageCheckbox(language);
+ checkbox->SetChecked(language_is_active);
+ checkbox->set_listener(this);
+
+ // Add the checkbox to the layout manager.
+ layout->StartRow(0, single_column_view_set_id());
+ layout->AddView(checkbox);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
// SettingsContentsView
////////////////////////////////////////////////////////////////////////////////
@@ -605,6 +701,9 @@ void SettingsContentsView::InitControlLayout() {
layout->StartRow(0, single_column_view_set_id);
layout->AddView(new TouchpadSection(profile()));
layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(new TextInputSection(profile()));
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
}
} // namespace chromeos