diff options
author | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-14 18:44:26 +0000 |
---|---|---|
committer | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-14 18:44:26 +0000 |
commit | 75a4bc04c277520b6771ff7621ae731ddc527115 (patch) | |
tree | f087fdb4c12e7cc41765d09ff0d351fc4231c281 | |
parent | cddc00ce69bd923f8d1afa677bd0d637d0de6f8a (diff) | |
download | chromium_src-75a4bc04c277520b6771ff7621ae731ddc527115.zip chromium_src-75a4bc04c277520b6771ff7621ae731ddc527115.tar.gz chromium_src-75a4bc04c277520b6771ff7621ae731ddc527115.tar.bz2 |
Revert 89033 - Convert LanguageSwitchMenu from Menu2 to MenuItemView.
This conversion is part of GTK removal required.
BUG=chromium-os:13887
TEST=none
Review URL: http://codereview.chromium.org/6982054
TBR=rhashimoto@chromium.org
Review URL: http://codereview.chromium.org/7146023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89035 0039d316-1c4b-4281-b951-d872f2087c98
3 files changed, 61 insertions, 47 deletions
diff --git a/chrome/browser/chromeos/login/language_switch_menu.cc b/chrome/browser/chromeos/login/language_switch_menu.cc index f8499a6..2625703 100644 --- a/chrome/browser/chromeos/login/language_switch_menu.cc +++ b/chrome/browser/chromeos/login/language_switch_menu.cc @@ -21,10 +21,7 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/platform_font_gtk.h" #include "views/controls/button/menu_button.h" -#include "views/controls/menu/menu_item_view.h" -#include "views/controls/menu/submenu_view.h" #include "views/widget/widget.h" -#include "views/window/window.h" namespace { @@ -38,7 +35,9 @@ const int kMoreLanguagesSubMenu = 200; namespace chromeos { LanguageSwitchMenu::LanguageSwitchMenu() - : ALLOW_THIS_IN_INITIALIZER_LIST(menu_(new views::MenuItemView(this))) { + : ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_(this)), + ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_submenu_(this)), + menu_alignment_(views::Menu2::ALIGN_TOPRIGHT) { } LanguageSwitchMenu::~LanguageSwitchMenu() {} @@ -49,32 +48,25 @@ void LanguageSwitchMenu::InitLanguageMenu() { language_list_->CopySpecifiedLanguagesUp(kLanguagesTopped); // Clear older menu items. - if (menu_->HasSubmenu()) { - const int old_count = menu_->GetSubmenu()->child_count(); - for (int i = 0; i < old_count; ++i) - menu_->RemoveMenuItemAt(0); - } + menu_model_.Clear(); + menu_model_submenu_.Clear(); // Fill menu items with updated items. for (int line = 0; line != kLanguageMainMenuSize; line++) { - menu_->AppendMenuItemWithLabel( - line, - UTF16ToWide(language_list_->GetLanguageNameAt(line))); + menu_model_.AddItem(line, language_list_->GetLanguageNameAt(line)); } - - menu_->AppendSeparator(); - views::MenuItemView* submenu = menu_->AppendSubMenu( - kMoreLanguagesSubMenu, - UTF16ToWide(l10n_util::GetStringUTF16(IDS_LANGUAGES_MORE))); - + menu_model_.AddSeparator(); + menu_model_.AddSubMenuWithStringId(kMoreLanguagesSubMenu, + IDS_LANGUAGES_MORE, + &menu_model_submenu_); for (int line = kLanguageMainMenuSize; line != language_list_->get_languages_count(); line++) { - submenu->AppendMenuItemWithLabel( - line, - UTF16ToWide(language_list_->GetLanguageNameAt(line))); + menu_model_submenu_.AddItem( + line, language_list_->GetLanguageNameAt(line)); } - menu_->ChildrenChanged(); + // Initialize menu here so it appears fast when called. + menu_.reset(new views::Menu2(&menu_model_)); } string16 LanguageSwitchMenu::GetCurrentLocaleName() const { @@ -87,8 +79,7 @@ string16 LanguageSwitchMenu::GetCurrentLocaleName() const { void LanguageSwitchMenu::SetFirstLevelMenuWidth(int width) { DCHECK(menu_ != NULL); - - menu_->GetSubmenu()->set_minimum_preferred_width(width); + menu_->SetMinimumWidth(width); } // static @@ -160,23 +151,34 @@ void LanguageSwitchMenu::SwitchLanguageAndEnableKeyboardLayouts( void LanguageSwitchMenu::RunMenu(views::View* source, const gfx::Point& pt) { DCHECK(menu_ != NULL); views::MenuButton* button = static_cast<views::MenuButton*>(source); - - // We align on the left edge of the button for non RTL case. - // MenuButton passes in pt the lower left corner for RTL and the - // lower right corner for non-RTL (with menu_offset applied). - const int reverse_offset = button->width() + button->menu_offset().x() * 2; + // We align the on left edge of the button for non RTL case. gfx::Point new_pt(pt); - if (base::i18n::IsRTL()) - new_pt.set_x(pt.x() + reverse_offset); - else - new_pt.set_x(pt.x() - reverse_offset); - - menu_->RunMenuAt(button->GetWidget()->GetNativeWindow(), button, - gfx::Rect(new_pt, gfx::Size()), views::MenuItemView::TOPLEFT, true); + if (menu_alignment_ == views::Menu2::ALIGN_TOPLEFT) { + int reverse_offset = button->width() + button->menu_offset().x() * 2; + if (base::i18n::IsRTL()) { + new_pt.set_x(pt.x() + reverse_offset); + } else { + new_pt.set_x(pt.x() - reverse_offset); + } + } + menu_->RunMenuAt(new_pt, menu_alignment_); } //////////////////////////////////////////////////////////////////////////////// -// views::MenuDelegate implementation. +// ui::SimpleMenuModel::Delegate implementation. + +bool LanguageSwitchMenu::IsCommandIdChecked(int command_id) const { + return false; +} + +bool LanguageSwitchMenu::IsCommandIdEnabled(int command_id) const { + return true; +} + +bool LanguageSwitchMenu::GetAcceleratorForCommandId( + int command_id, ui::Accelerator* accelerator) { + return false; +} void LanguageSwitchMenu::ExecuteCommand(int command_id) { const std::string locale = language_list_->GetLocaleFromIndex(command_id); diff --git a/chrome/browser/chromeos/login/language_switch_menu.h b/chrome/browser/chromeos/login/language_switch_menu.h index 8920a7e..39c6c38 100644 --- a/chrome/browser/chromeos/login/language_switch_menu.h +++ b/chrome/browser/chromeos/login/language_switch_menu.h @@ -11,22 +11,19 @@ #include "base/memory/scoped_ptr.h" #include "chrome/browser/language_combobox_model.h" #include "testing/gtest/include/gtest/gtest_prod.h" -#include "views/controls/menu/menu_delegate.h" +#include "ui/base/models/simple_menu_model.h" +#include "views/controls/menu/menu_2.h" #include "views/controls/menu/view_menu_delegate.h" #include "views/view.h" class WizardControllerTest_SwitchLanguage_Test; -namespace views { -class MenuItemView; -} // namespace views - namespace chromeos { class ScreenObserver; class LanguageSwitchMenu : public views::ViewMenuDelegate, - public views::MenuDelegate { + public ui::SimpleMenuModel::Delegate { public: LanguageSwitchMenu(); virtual ~LanguageSwitchMenu(); @@ -34,6 +31,11 @@ class LanguageSwitchMenu : public views::ViewMenuDelegate, // Initializes language selection menu contents. void InitLanguageMenu(); + // Sets menu's alignment. + void set_menu_alignment(views::Menu2::Alignment alignment) { + menu_alignment_ = alignment; + } + // Returns current locale name to be placed on the language menu-button. string16 GetCurrentLocaleName() const; @@ -53,17 +55,26 @@ class LanguageSwitchMenu : public views::ViewMenuDelegate, static void LoadFontsForCurrentLocale(); // views::ViewMenuDelegate implementation. - virtual void RunMenu(views::View* source, const gfx::Point& pt) OVERRIDE; + virtual void RunMenu(views::View* source, const gfx::Point& pt); - // views::MenuDelegate implementation. - virtual void ExecuteCommand(int command_id) OVERRIDE; + // ui::SimpleMenuModel::Delegate implementation. + virtual bool IsCommandIdChecked(int command_id) const; + virtual bool IsCommandIdEnabled(int command_id) const; + virtual bool GetAcceleratorForCommandId(int command_id, + ui::Accelerator* accelerator); + virtual void ExecuteCommand(int command_id); // Dialog controls that we own ourselves. - scoped_ptr<views::MenuItemView> menu_; + ui::SimpleMenuModel menu_model_; + ui::SimpleMenuModel menu_model_submenu_; + scoped_ptr<views::Menu2> menu_; // Language locale name storage. scoped_ptr<LanguageList> language_list_; + // Menu alignment. + views::Menu2::Alignment menu_alignment_; + FRIEND_TEST(::WizardControllerTest, SwitchLanguage); DISALLOW_COPY_AND_ASSIGN(LanguageSwitchMenu); }; diff --git a/chrome/browser/chromeos/login/views_network_screen_actor.cc b/chrome/browser/chromeos/login/views_network_screen_actor.cc index 2f6172a..3194652 100644 --- a/chrome/browser/chromeos/login/views_network_screen_actor.cc +++ b/chrome/browser/chromeos/login/views_network_screen_actor.cc @@ -44,6 +44,7 @@ ViewsNetworkScreenActor::ViewsNetworkScreenActor( kWelcomeScreenHeight), bubble_(NULL), screen_(NULL) { + language_switch_menu_.set_menu_alignment(views::Menu2::ALIGN_TOPLEFT); } ViewsNetworkScreenActor::~ViewsNetworkScreenActor() { |