Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: chrome/browser/chromeos/status/language_menu_button.cc

Issue 3185020: Remove redundant "keyboard layout" suffix and fix redundant language display. (Closed)
Patch Set: Merge trunk. Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/status/language_menu_button.h" 5 #include "chrome/browser/chromeos/status/language_menu_button.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 DCHECK(input_method_descriptors_.get()); 314 DCHECK(input_method_descriptors_.get());
315 315
316 // We use IDS_OPTIONS_SETTINGS_LANGUAGES_CUSTOMIZE here as the button 316 // We use IDS_OPTIONS_SETTINGS_LANGUAGES_CUSTOMIZE here as the button
317 // opens the same dialog that is opened from the main options dialog. 317 // opens the same dialog that is opened from the main options dialog.
318 if (IndexPointsToConfigureImeMenuItem(index)) { 318 if (IndexPointsToConfigureImeMenuItem(index)) {
319 return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_CUSTOMIZE); 319 return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_CUSTOMIZE);
320 } 320 }
321 321
322 std::wstring name; 322 std::wstring name;
323 if (IndexIsInInputMethodList(index)) { 323 if (IndexIsInInputMethodList(index)) {
324 const std::string language_code = 324 name = GetTextForMenu(input_method_descriptors_->at(index));
325 input_method::GetLanguageCodeFromDescriptor(
326 input_method_descriptors_->at(index));
327 const bool need_method_name =
328 (ambiguous_language_code_set_.count(language_code) > 0);
329 name = GetTextForMenu(input_method_descriptors_->at(index),
330 need_method_name);
331 } else if (GetPropertyIndex(index, &index)) { 325 } else if (GetPropertyIndex(index, &index)) {
332 const ImePropertyList& property_list 326 const ImePropertyList& property_list
333 = CrosLibrary::Get()->GetInputMethodLibrary()->current_ime_properties(); 327 = CrosLibrary::Get()->GetInputMethodLibrary()->current_ime_properties();
334 return input_method::GetStringUTF16(property_list.at(index).label); 328 return input_method::GetStringUTF16(property_list.at(index).label);
335 } 329 }
336 330
337 return WideToUTF16(name); 331 return WideToUTF16(name);
338 } 332 }
339 333
340 void LanguageMenuButton::ActivatedAt(int index) { 334 void LanguageMenuButton::ActivatedAt(int index) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 SetEnabled(true); 480 SetEnabled(true);
487 SetTooltipText(tooltip); 481 SetTooltipText(tooltip);
488 } 482 }
489 SetText(name); 483 SetText(name);
490 SchedulePaint(); 484 SchedulePaint();
491 } 485 }
492 486
493 void LanguageMenuButton::UpdateIndicatorFromInputMethod( 487 void LanguageMenuButton::UpdateIndicatorFromInputMethod(
494 const InputMethodDescriptor& input_method) { 488 const InputMethodDescriptor& input_method) {
495 const std::wstring name = GetTextForIndicator(input_method); 489 const std::wstring name = GetTextForIndicator(input_method);
496 const std::wstring tooltip = 490 const std::wstring tooltip = GetTextForMenu(input_method);
497 GetTextForMenu(input_method, true /* add_method_name */);
498 UpdateIndicator(name, tooltip); 491 UpdateIndicator(name, tooltip);
499 } 492 }
500 493
501 void LanguageMenuButton::RebuildModel() { 494 void LanguageMenuButton::RebuildModel() {
502 model_.reset(new menus::SimpleMenuModel(NULL)); 495 model_.reset(new menus::SimpleMenuModel(NULL));
503 string16 dummy_label = UTF8ToUTF16(""); 496 string16 dummy_label = UTF8ToUTF16("");
504 // Indicates if separator's needed before each section. 497 // Indicates if separator's needed before each section.
505 bool need_separator = false; 498 bool need_separator = false;
506 499
507 ambiguous_language_code_set_.clear();
508 if (!input_method_descriptors_->empty()) { 500 if (!input_method_descriptors_->empty()) {
509 // We "abuse" the command_id and group_id arguments of AddRadioItem method. 501 // We "abuse" the command_id and group_id arguments of AddRadioItem method.
510 // A COMMAND_ID_XXX enum value is passed as command_id, and array index of 502 // A COMMAND_ID_XXX enum value is passed as command_id, and array index of
511 // |input_method_descriptors_| or |property_list| is passed as group_id. 503 // |input_method_descriptors_| or |property_list| is passed as group_id.
512 for (size_t i = 0; i < input_method_descriptors_->size(); ++i) { 504 for (size_t i = 0; i < input_method_descriptors_->size(); ++i) {
513 model_->AddRadioItem(COMMAND_ID_INPUT_METHODS, dummy_label, i); 505 model_->AddRadioItem(COMMAND_ID_INPUT_METHODS, dummy_label, i);
514 } 506 }
515 507
516 GetAmbiguousLanguageCodeSet(*input_method_descriptors_,
517 &ambiguous_language_code_set_);
518 need_separator = true; 508 need_separator = true;
519 } 509 }
520 510
521 const ImePropertyList& property_list 511 const ImePropertyList& property_list
522 = CrosLibrary::Get()->GetInputMethodLibrary()->current_ime_properties(); 512 = CrosLibrary::Get()->GetInputMethodLibrary()->current_ime_properties();
523 if (!property_list.empty()) { 513 if (!property_list.empty()) {
524 if (need_separator) 514 if (need_separator)
525 model_->AddSeparator(); 515 model_->AddSeparator();
526 for (size_t i = 0; i < property_list.size(); ++i) { 516 for (size_t i = 0; i < property_list.size(); ++i) {
527 model_->AddRadioItem(COMMAND_ID_IME_PROPERTIES, dummy_label, i); 517 model_->AddRadioItem(COMMAND_ID_IME_PROPERTIES, dummy_label, i);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 } 620 }
631 621
632 text = StringToUpperASCII(UTF8ToWide(language_code)).substr( 622 text = StringToUpperASCII(UTF8ToWide(language_code)).substr(
633 0, kMaxLanguageNameLen); 623 0, kMaxLanguageNameLen);
634 } 624 }
635 DCHECK(!text.empty()); 625 DCHECK(!text.empty());
636 return text; 626 return text;
637 } 627 }
638 628
639 std::wstring LanguageMenuButton::GetTextForMenu( 629 std::wstring LanguageMenuButton::GetTextForMenu(
640 const InputMethodDescriptor& input_method, bool add_method_name) { 630 const InputMethodDescriptor& input_method) {
631 // We don't show language here. Name of keyboard layout or input method
632 // usually imply (or explicitly include) its language.
633
634 // Special case for Dutch, French and German: these languages have multiple
635 // keyboard layouts and share the same laout of keyboard (Belgian). We need to
636 // show explicitly the language for the layout.
637 // For Arabic, Hebrew and Hindi: they share "Standard Input Method".
641 const std::string language_code 638 const std::string language_code
642 = input_method::GetLanguageCodeFromDescriptor(input_method); 639 = input_method::GetLanguageCodeFromDescriptor(input_method);
640 std::wstring text;
641 if (language_code == "ar" ||
642 language_code == "he" ||
643 language_code == "hi" ||
644 language_code == "nl" ||
645 language_code == "fr" ||
646 language_code == "de") {
647 text = GetLanguageName(language_code) + L" - ";
648 }
649 text += input_method::GetString(input_method.display_name);
643 650
644 // For the drop-down menu and tooltip, we'll show language names like
645 // "Chinese (Simplified)" and "Japanese", instead of input method names
646 // like "Pinyin" and "Mozc".
647 std::wstring text = GetLanguageName(language_code);
648 if (add_method_name) {
649 text += L" - ";
650 text += input_method::GetString(input_method.display_name);
651 }
652 DCHECK(!text.empty()); 651 DCHECK(!text.empty());
653 return text; 652 return text;
654 } 653 }
655 654
656 void LanguageMenuButton::RegisterPrefs(PrefService* local_state) { 655 void LanguageMenuButton::RegisterPrefs(PrefService* local_state) {
657 local_state->RegisterStringPref(language_prefs::kPreferredKeyboardLayout, 656 local_state->RegisterStringPref(language_prefs::kPreferredKeyboardLayout,
658 ""); 657 "");
659 } 658 }
660 659
661 void LanguageMenuButton::GetAmbiguousLanguageCodeSet(
662 const InputMethodDescriptors& input_method_descriptors,
663 std::set<std::string>* ambiguous_language_code_set) {
664 DCHECK(ambiguous_language_code_set);
665 ambiguous_language_code_set->clear();
666
667 std::set<std::string> languages_seen;
668 for (size_t i = 0; i < input_method_descriptors.size(); ++i) {
669 const std::string language_code
670 = input_method::GetLanguageCodeFromDescriptor(
671 input_method_descriptors.at(i));
672 // If there is more than one input method for this language, then we need
673 // to display the method name.
674 if (languages_seen.count(language_code) > 0 ||
675 // Special-case Japanese as showing the language name alone is
676 // confusing when Japanese keyboard is enabled but Japanese
677 // input methods are not.
678 language_code == "ja") {
679 ambiguous_language_code_set->insert(language_code);
680 } else {
681 languages_seen.insert(language_code);
682 }
683 }
684 }
685
686 void LanguageMenuButton::Observe(NotificationType type, 660 void LanguageMenuButton::Observe(NotificationType type,
687 const NotificationSource& source, 661 const NotificationSource& source,
688 const NotificationDetails& details) { 662 const NotificationDetails& details) {
689 if (type == NotificationType::LOGIN_USER_CHANGED) { 663 if (type == NotificationType::LOGIN_USER_CHANGED) {
690 logged_in_ = true; 664 logged_in_ = true;
691 } 665 }
692 } 666 }
693 667
694 } // namespace chromeos 668 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/status/language_menu_button.h ('k') | chrome/browser/chromeos/status/language_menu_button_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698