summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/bookmark_context_menu_gtk.h
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-08 16:38:08 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-08 16:38:08 +0000
commit74bcb49df27ecc297937732876c2dd03c5dc29e3 (patch)
tree085f72579a5f60ab78fa1f8547a33a1c33090521 /chrome/browser/gtk/bookmark_context_menu_gtk.h
parentd818504aeb1f5ed305df803a4cf3e3c209b9554f (diff)
downloadchromium_src-74bcb49df27ecc297937732876c2dd03c5dc29e3.zip
chromium_src-74bcb49df27ecc297937732876c2dd03c5dc29e3.tar.gz
chromium_src-74bcb49df27ecc297937732876c2dd03c5dc29e3.tar.bz2
Renames browser/gtk/bookmark_context_menu to
BoookmarkContextMenuGtk. I need to do this so that views/gtk can use both BookmarkContextMenu and BookmarkContextMenuGtk. BUG=none TEST=none Review URL: http://codereview.chromium.org/261013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28400 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/bookmark_context_menu_gtk.h')
-rw-r--r--chrome/browser/gtk/bookmark_context_menu_gtk.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/chrome/browser/gtk/bookmark_context_menu_gtk.h b/chrome/browser/gtk/bookmark_context_menu_gtk.h
new file mode 100644
index 0000000..a84db53
--- /dev/null
+++ b/chrome/browser/gtk/bookmark_context_menu_gtk.h
@@ -0,0 +1,141 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_GTK_BOOKMARK_CONTEXT_MENU_H_
+#define CHROME_BROWSER_GTK_BOOKMARK_CONTEXT_MENU_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/gfx/native_widget_types.h"
+#include "base/scoped_ptr.h"
+#include "chrome/browser/bookmarks/bookmark_model_observer.h"
+#include "chrome/browser/gtk/menu_gtk.h"
+
+class Browser;
+class PageNavigator;
+class Profile;
+
+// BookmarkContextMenu manages the context menu shown for the
+// bookmark bar, items on the bookmark bar, submenus of the bookmark bar and
+// the bookmark manager.
+class BookmarkContextMenuGtk : public BookmarkModelObserver,
+ public MenuGtk::Delegate {
+ public:
+ // Used to configure what the context menu shows.
+ enum ConfigurationType {
+ BOOKMARK_BAR,
+ BOOKMARK_MANAGER_TABLE,
+ // Used when the source is the table in the bookmark manager and the table
+ // is showing recently bookmarked or searched.
+ BOOKMARK_MANAGER_TABLE_OTHER,
+ BOOKMARK_MANAGER_TREE,
+ BOOKMARK_MANAGER_ORGANIZE_MENU,
+ // Used when the source is the bookmark manager and the table is showing
+ // recently bookmarked or searched.
+ BOOKMARK_MANAGER_ORGANIZE_MENU_OTHER
+ };
+
+ class Delegate {
+ public:
+ // Called when one of the menu items is selected and executed.
+ virtual void WillExecuteCommand() = 0;
+ };
+
+ // Creates the bookmark context menu.
+ // |profile| is used for opening urls as well as enabling 'open incognito'.
+ // |browser| is used to determine the PageNavigator and may be null.
+ // |navigator| is used if |browser| is null, and is provided for testing.
+ // |parent| is the parent for newly created nodes if |selection| is empty.
+ // |selection| is the nodes the context menu operates on and may be empty.
+ // |configuration| determines which items to show.
+ BookmarkContextMenuGtk(gfx::NativeView hwnd,
+ Profile* profile,
+ Browser* browser,
+ PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection,
+ ConfigurationType configuration,
+ Delegate* delegate);
+ virtual ~BookmarkContextMenuGtk();
+
+ // Pops up this menu. This call doesn't block.
+ void PopupAsContext(guint32 event_time);
+
+ // Returns the menu.
+ GtkWidget* menu() const { return menu_->widget(); }
+
+ // Should be called by the delegate when it is no longer valid.
+ void DelegateDestroyed();
+
+ // Menu::Delegate / MenuGtk::Delegate methods.
+ virtual void ExecuteCommand(int id);
+ virtual bool IsItemChecked(int id) const;
+ virtual bool IsCommandEnabled(int id) const;
+
+ private:
+ // BookmarkModelObserver method. Any change to the model results in closing
+ // the menu.
+ virtual void Loaded(BookmarkModel* model) {}
+ virtual void BookmarkModelBeingDeleted(BookmarkModel* model);
+ virtual void BookmarkNodeMoved(BookmarkModel* model,
+ const BookmarkNode* old_parent,
+ int old_index,
+ const BookmarkNode* new_parent,
+ int new_index);
+ virtual void BookmarkNodeAdded(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int index);
+ virtual void BookmarkNodeRemoved(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int index,
+ const BookmarkNode* node);
+ virtual void BookmarkNodeChanged(BookmarkModel* model,
+ const BookmarkNode* node);
+ virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model,
+ const BookmarkNode* node) {}
+ virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
+ const BookmarkNode* node);
+
+ // Invoked from the various bookmark model observer methods. Closes the menu.
+ void ModelChanged();
+
+ // Builds the platform specific menu object.
+ void CreateMenuObject();
+
+ // Adds a IDS_* style command to the menu.
+ void AppendItem(int id);
+ // Adds a IDS_* style command to the menu with a different localized string.
+ void AppendItem(int id, int localization_id);
+ // Adds a separator to the menu.
+ void AppendSeparator();
+ // Adds a checkable item to the menu.
+ void AppendCheckboxItem(int id);
+
+ // Removes the observer from the model and NULLs out model_.
+ BookmarkModel* RemoveModelObserver();
+
+ // Returns true if selection_ has at least one bookmark of type url.
+ bool HasURLs() const;
+
+ // Returns the parent for newly created folders/bookmarks. If selection_
+ // has one element and it is a folder, selection_[0] is returned, otherwise
+ // parent_ is returned.
+ const BookmarkNode* GetParentForNewNodes() const;
+
+ gfx::NativeView wnd_;
+ Profile* profile_;
+ Browser* browser_;
+ PageNavigator* navigator_;
+ const BookmarkNode* parent_;
+ std::vector<const BookmarkNode*> selection_;
+ BookmarkModel* model_;
+ ConfigurationType configuration_;
+ Delegate* delegate_;
+ scoped_ptr<MenuGtk> menu_;
+
+ DISALLOW_COPY_AND_ASSIGN(BookmarkContextMenuGtk);
+};
+
+#endif // CHROME_BROWSER_GTK_BOOKMARK_CONTEXT_MENU_H_