diff options
author | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-21 03:51:32 +0000 |
---|---|---|
committer | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-21 03:51:32 +0000 |
commit | 204e936d3b0455b0c55f2dc5713f8a84b55e0cbf (patch) | |
tree | 098ef9f29db5d43fda8d9804d1bd4ea7e7b244e1 | |
parent | 0848295876d5e64e7aa3fb7c6333d32764447fb6 (diff) | |
download | chromium_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.grd | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/settings_contents_view.cc | 99 |
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 |