diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-30 20:51:36 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-30 20:51:36 +0000 |
commit | 295f61885be7e1104502185f3322e3bcacdc5f00 (patch) | |
tree | 89f9d58aec05c4570ff1fd6d456f516e4c401e31 /chrome/browser/gtk/menu_gtk.cc | |
parent | d2dc4733d65be32140c3ed84a64d5e24538229ed (diff) | |
download | chromium_src-295f61885be7e1104502185f3322e3bcacdc5f00.zip chromium_src-295f61885be7e1104502185f3322e3bcacdc5f00.tar.gz chromium_src-295f61885be7e1104502185f3322e3bcacdc5f00.tar.bz2 |
Make back forward menu model a MenuModel.
On Linux, implement just enough MenuModel support in GtkMenu. On Linux + windows, remove wrapper classes. On Mac, just change a few function calls around.
BUG=none
TEST=unit test + manually clicking around on it in debug mode
Review URL: http://codereview.chromium.org/501168
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35389 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/menu_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/menu_gtk.cc | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc index 2a9ab51..75605b5 100644 --- a/chrome/browser/gtk/menu_gtk.cc +++ b/chrome/browser/gtk/menu_gtk.cc @@ -6,6 +6,7 @@ #include "app/gfx/gtk_util.h" #include "app/l10n_util.h" +#include "app/menus/menu_model.h" #include "base/logging.h" #include "base/message_loop.h" #include "base/stl_util-inl.h" @@ -22,6 +23,7 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, const MenuCreateMaterial* menu_data, GtkAccelGroup* accel_group) : delegate_(delegate), + model_(NULL), dummy_accel_group_(gtk_accel_group_new()), menu_(gtk_menu_new()), factory_(this) { @@ -29,14 +31,16 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, BuildMenuIn(menu_.get(), menu_data, accel_group); } -MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, bool load) +MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, + menus::MenuModel* model) : delegate_(delegate), + model_(model), dummy_accel_group_(NULL), menu_(gtk_menu_new()), factory_(this) { ConnectSignalHandlers(); - if (load) - BuildMenuFromDelegate(); + if (model) + BuildMenuFromModel(); } MenuGtk::~MenuGtk() { @@ -143,9 +147,6 @@ void MenuGtk::BuildMenuIn(GtkWidget* menu, l10n_util::GetStringUTF16(menu_data->label_argument)); } else if (menu_data->label_id) { label = l10n_util::GetStringUTF8(menu_data->label_id); - } else if (menu_data->type != MENU_SEPARATOR) { - label = delegate_->GetLabel(menu_data->id); - DCHECK(!label.empty()); } label = ConvertAcceleratorsFromWindowsStyle(label); @@ -223,18 +224,24 @@ GtkWidget* MenuGtk::BuildMenuItemWithImage(const std::string& label, return menu_item; } -void MenuGtk::BuildMenuFromDelegate() { - // Note that the menu IDs start at 1, not 0. - for (int i = 1; i <= delegate_->GetItemCount(); ++i) { +void MenuGtk::BuildMenuFromModel() { + for (int i = 0; i < model_->GetItemCount(); ++i) { GtkWidget* menu_item = NULL; - if (delegate_->IsItemSeparator(i)) { + // TODO(estade): support these commands. + DCHECK_NE(model_->GetTypeAt(i), menus::MenuModel::TYPE_CHECK); + DCHECK_NE(model_->GetTypeAt(i), menus::MenuModel::TYPE_RADIO); + DCHECK_NE(model_->GetTypeAt(i), menus::MenuModel::TYPE_SUBMENU); + + SkBitmap icon; + if (model_->GetTypeAt(i) == menus::MenuModel::TYPE_SEPARATOR) { menu_item = gtk_separator_menu_item_new(); - } else if (delegate_->HasIcon(i)) { - const SkBitmap* icon = delegate_->GetIcon(i); - menu_item = BuildMenuItemWithImage(delegate_->GetLabel(i), *icon); + } else if (model_->GetIconAt(i, &icon)) { + menu_item = BuildMenuItemWithImage(UTF16ToUTF8(model_->GetLabelAt(i)), + icon); } else { - menu_item = gtk_menu_item_new_with_label(delegate_->GetLabel(i).c_str()); + menu_item = gtk_menu_item_new_with_label( + UTF16ToUTF8(model_->GetLabelAt(i)).c_str()); } AppendMenuItem(i, menu_item); |