diff options
author | rhashimoto@chromium.org <rhashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-14 18:33:19 +0000 |
---|---|---|
committer | rhashimoto@chromium.org <rhashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-14 18:33:19 +0000 |
commit | 740379aebc5c3368b63af4ef8f8d3214aa0eb1cb (patch) | |
tree | 07793b7787d8b00f47772d0a5b5c52e25cd1d0db | |
parent | 85dcdc462962f43ae83fca238e20c36f582923e9 (diff) | |
download | chromium_src-740379aebc5c3368b63af4ef8f8d3214aa0eb1cb.zip chromium_src-740379aebc5c3368b63af4ef8f8d3214aa0eb1cb.tar.gz chromium_src-740379aebc5c3368b63af4ef8f8d3214aa0eb1cb.tar.bz2 |
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
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89033 0039d316-1c4b-4281-b951-d872f2087c98
3 files changed, 47 insertions, 61 deletions
diff --git a/chrome/browser/chromeos/login/language_switch_menu.cc b/chrome/browser/chromeos/login/language_switch_menu.cc index 2625703..f8499a6 100644 --- a/chrome/browser/chromeos/login/language_switch_menu.cc +++ b/chrome/browser/chromeos/login/language_switch_menu.cc @@ -21,7 +21,10 @@ #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 { @@ -35,9 +38,7 @@ const int kMoreLanguagesSubMenu = 200; namespace chromeos { LanguageSwitchMenu::LanguageSwitchMenu() - : ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_(this)), - ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_submenu_(this)), - menu_alignment_(views::Menu2::ALIGN_TOPRIGHT) { + : ALLOW_THIS_IN_INITIALIZER_LIST(menu_(new views::MenuItemView(this))) { } LanguageSwitchMenu::~LanguageSwitchMenu() {} @@ -48,25 +49,32 @@ void LanguageSwitchMenu::InitLanguageMenu() { language_list_->CopySpecifiedLanguagesUp(kLanguagesTopped); // Clear older menu items. - menu_model_.Clear(); - menu_model_submenu_.Clear(); + if (menu_->HasSubmenu()) { + const int old_count = menu_->GetSubmenu()->child_count(); + for (int i = 0; i < old_count; ++i) + menu_->RemoveMenuItemAt(0); + } // Fill menu items with updated items. for (int line = 0; line != kLanguageMainMenuSize; line++) { - menu_model_.AddItem(line, language_list_->GetLanguageNameAt(line)); + menu_->AppendMenuItemWithLabel( + line, + UTF16ToWide(language_list_->GetLanguageNameAt(line))); } - menu_model_.AddSeparator(); - menu_model_.AddSubMenuWithStringId(kMoreLanguagesSubMenu, - IDS_LANGUAGES_MORE, - &menu_model_submenu_); + + menu_->AppendSeparator(); + views::MenuItemView* submenu = menu_->AppendSubMenu( + kMoreLanguagesSubMenu, + UTF16ToWide(l10n_util::GetStringUTF16(IDS_LANGUAGES_MORE))); + for (int line = kLanguageMainMenuSize; line != language_list_->get_languages_count(); line++) { - menu_model_submenu_.AddItem( - line, language_list_->GetLanguageNameAt(line)); + submenu->AppendMenuItemWithLabel( + line, + UTF16ToWide(language_list_->GetLanguageNameAt(line))); } - // Initialize menu here so it appears fast when called. - menu_.reset(new views::Menu2(&menu_model_)); + menu_->ChildrenChanged(); } string16 LanguageSwitchMenu::GetCurrentLocaleName() const { @@ -79,7 +87,8 @@ string16 LanguageSwitchMenu::GetCurrentLocaleName() const { void LanguageSwitchMenu::SetFirstLevelMenuWidth(int width) { DCHECK(menu_ != NULL); - menu_->SetMinimumWidth(width); + + menu_->GetSubmenu()->set_minimum_preferred_width(width); } // static @@ -151,34 +160,23 @@ 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 the on left edge of the button for non RTL case. - gfx::Point new_pt(pt); - 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_); -} -//////////////////////////////////////////////////////////////////////////////// -// ui::SimpleMenuModel::Delegate implementation. - -bool LanguageSwitchMenu::IsCommandIdChecked(int command_id) const { - return false; -} + // 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; + 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); -bool LanguageSwitchMenu::IsCommandIdEnabled(int command_id) const { - return true; + menu_->RunMenuAt(button->GetWidget()->GetNativeWindow(), button, + gfx::Rect(new_pt, gfx::Size()), views::MenuItemView::TOPLEFT, true); } -bool LanguageSwitchMenu::GetAcceleratorForCommandId( - int command_id, ui::Accelerator* accelerator) { - return false; -} +//////////////////////////////////////////////////////////////////////////////// +// views::MenuDelegate implementation. 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 39c6c38..8920a7e 100644 --- a/chrome/browser/chromeos/login/language_switch_menu.h +++ b/chrome/browser/chromeos/login/language_switch_menu.h @@ -11,19 +11,22 @@ #include "base/memory/scoped_ptr.h" #include "chrome/browser/language_combobox_model.h" #include "testing/gtest/include/gtest/gtest_prod.h" -#include "ui/base/models/simple_menu_model.h" -#include "views/controls/menu/menu_2.h" +#include "views/controls/menu/menu_delegate.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 ui::SimpleMenuModel::Delegate { + public views::MenuDelegate { public: LanguageSwitchMenu(); virtual ~LanguageSwitchMenu(); @@ -31,11 +34,6 @@ 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; @@ -55,26 +53,17 @@ class LanguageSwitchMenu : public views::ViewMenuDelegate, static void LoadFontsForCurrentLocale(); // views::ViewMenuDelegate implementation. - virtual void RunMenu(views::View* source, const gfx::Point& pt); + virtual void RunMenu(views::View* source, const gfx::Point& pt) 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); + // views::MenuDelegate implementation. + virtual void ExecuteCommand(int command_id) OVERRIDE; // Dialog controls that we own ourselves. - ui::SimpleMenuModel menu_model_; - ui::SimpleMenuModel menu_model_submenu_; - scoped_ptr<views::Menu2> menu_; + scoped_ptr<views::MenuItemView> 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 3194652..2f6172a 100644 --- a/chrome/browser/chromeos/login/views_network_screen_actor.cc +++ b/chrome/browser/chromeos/login/views_network_screen_actor.cc @@ -44,7 +44,6 @@ ViewsNetworkScreenActor::ViewsNetworkScreenActor( kWelcomeScreenHeight), bubble_(NULL), screen_(NULL) { - language_switch_menu_.set_menu_alignment(views::Menu2::ALIGN_TOPLEFT); } ViewsNetworkScreenActor::~ViewsNetworkScreenActor() { |