summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/bookmark_context_menu_gtk.h
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-16 18:19:17 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-16 18:19:17 +0000
commit2b2d1697cd3cd6303b372949565bb8ac87741589 (patch)
tree2c4ca63f7e4854c1be423d74896ec71d4c80a858 /chrome/browser/gtk/bookmark_context_menu_gtk.h
parent54e1d52455272e0af32b4c6080f1914f6f2c4f95 (diff)
downloadchromium_src-2b2d1697cd3cd6303b372949565bb8ac87741589.zip
chromium_src-2b2d1697cd3cd6303b372949565bb8ac87741589.tar.gz
chromium_src-2b2d1697cd3cd6303b372949565bb8ac87741589.tar.bz2
Recommit previous change with GYP files fixed.
Implement BookmarkContextMenuGtk and hook it up to most bookmark bar elements. Also: - Fixes window dispositions (shift-click works on bookmark bar items). - Reorganizes gtk_utils Original Review URL: http://codereview.chromium.org/76002 Review URL: http://codereview.chromium.org/67223 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13857 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.h116
1 files changed, 116 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..26ecee1a
--- /dev/null
+++ b/chrome/browser/gtk/bookmark_context_menu_gtk.h
@@ -0,0 +1,116 @@
+// Copyright (c) 2009 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_GTK_H_
+#define CHROME_BROWSER_GTK_BOOKMARK_CONTEXT_MENU_GTK_H_
+
+#include <vector>
+
+#include "base/gfx/native_widget_types.h"
+#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/gtk/menu_gtk.h"
+
+class Profile;
+class Browser;
+class PageNavigator;
+
+typedef struct _GtkWindow GtkWindow;
+
+// The context menu that opens or modifies bookmarks. (This is not the menu
+// that displays folders contents.)
+//
+// TODO(erg): This is a copy of
+// ./browser/bookmarks/bookmark_context_menu.{cc,h} and should be merged with
+// that file once it is sufficiently de-views-ed.
+class BookmarkContextMenuGtk : public MenuGtk::Delegate,
+ public BookmarkModelObserver {
+ 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
+ };
+
+ BookmarkContextMenuGtk(GtkWindow* window,
+ Profile* profile,
+ Browser* browser,
+ PageNavigator* navigator,
+ BookmarkNode* parent,
+ const std::vector<BookmarkNode*>& selection,
+ ConfigurationType configuration);
+ virtual ~BookmarkContextMenuGtk();
+
+ // Pops up this menu.
+ void PopupAsContext(guint32 event_time);
+
+ // Overridden from MenuGtk::Delegate:
+ virtual bool IsCommandEnabled(int index) const;
+ virtual void ExecuteCommand(int index);
+
+ 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,
+ BookmarkNode* old_parent,
+ int old_index,
+ BookmarkNode* new_parent,
+ int new_index);
+ virtual void BookmarkNodeAdded(BookmarkModel* model,
+ BookmarkNode* parent,
+ int index);
+ virtual void BookmarkNodeRemoved(BookmarkModel* model,
+ BookmarkNode* parent,
+ int index,
+ BookmarkNode* node);
+ virtual void BookmarkNodeChanged(BookmarkModel* model,
+ BookmarkNode* node);
+ virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model,
+ BookmarkNode* node) {}
+ virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
+ BookmarkNode* node);
+
+ // 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();
+
+ // Invoked from the various bookmark model observer methods. Closes the menu.
+ void ModelChanged();
+
+ // 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.
+ BookmarkNode* GetParentForNewNodes() const;
+
+ gfx::NativeWindow window_;
+ Profile* profile_;
+ Browser* browser_;
+ PageNavigator* navigator_;
+ BookmarkNode* parent_;
+ std::vector<BookmarkNode*> selection_;
+ BookmarkModel* model_;
+ ConfigurationType configuration_;
+
+ scoped_ptr<MenuGtk> menu_;
+};
+
+#endif // CHROME_BROWSER_GTK_BOOKMARK_CONTEXT_MENU_GTK_H_