172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <map>
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <set>
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/bookmarks/bookmark_node_data.h"
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_context_menu.h"
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h"
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/menu/menu_delegate.h"
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/menu/menu_item_view.h"
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass BookmarkBarView;
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass BookmarkNode;
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass Browser;
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass PageNavigator;
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass Profile;
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace gfx {
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Rect;
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}  // namespace gfx
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace ui {
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass OSExchangeData;
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace ui
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views {
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass MenuButton;
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}  // namespace views
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// BookmarkMenuController is responsible for showing a menu of bookmarks,
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// each item in the menu represents a bookmark.
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// BookmarkMenuController deletes itself as necessary, although the menu can
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// be explicitly hidden by way of the Cancel method.
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BookmarkMenuController : public BaseBookmarkModelObserver,
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               public views::MenuDelegate,
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               public BookmarkContextMenuObserver {
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The observer is notified prior to the menu being deleted.
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  class Observer {
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch   public:
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    virtual void BookmarkMenuDeleted(BookmarkMenuController* controller) = 0;
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch   protected:
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    virtual ~Observer() {}
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  };
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Creates a BookmarkMenuController showing the children of |node| starting
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // at index |start_child_index|.
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BookmarkMenuController(Browser* browser,
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                         Profile* profile,
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                         PageNavigator* page_navigator,
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                         gfx::NativeWindow parent,
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                         const BookmarkNode* node,
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                         int start_child_index);
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void RunMenuAt(BookmarkBarView* bookmark_bar, bool for_drop);
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Shows the menu.
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void RunMenuAt(views::MenuButton* button,
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                 views::MenuItemView::AnchorPosition position,
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                 bool for_drop);
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Hides the menu.
714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void Cancel();
724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the node the menu is showing for.
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  const BookmarkNode* node() const { return node_; }
754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the menu.
774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::MenuItemView* menu() const { return menu_; }
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the context menu, or NULL if the context menu isn't showing.
804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::MenuItemView* context_menu() const {
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    return context_menu_.get() ? context_menu_->menu() : NULL;
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  }
834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void set_observer(Observer* observer) { observer_ = observer; }
854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // MenuDelegate methods.
8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual std::wstring GetTooltipText(int id, const gfx::Point& p);
884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTriggerableEvent(const views::MouseEvent& e);
894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ExecuteCommand(int id, int mouse_event_flags);
904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool GetDropFormats(
914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      views::MenuItemView* menu,
924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      int* formats,
9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      std::set<ui::OSExchangeData::CustomFormat>* custom_formats);
944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool AreDropTypesRequired(views::MenuItemView* menu);
9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool CanDrop(views::MenuItemView* menu,
9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                       const ui::OSExchangeData& data);
974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int GetDropOperation(views::MenuItemView* item,
984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               const views::DropTargetEvent& event,
994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               DropPosition* position);
1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int OnPerformDrop(views::MenuItemView* menu,
1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                            DropPosition position,
1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                            const views::DropTargetEvent& event);
1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool ShowContextMenu(views::MenuItemView* source,
1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               int id,
1054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               const gfx::Point& p,
1064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               bool is_mouse_gesture);
1074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void DropMenuClosed(views::MenuItemView* menu);
1084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool CanDrag(views::MenuItemView* menu);
10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void WriteDragData(views::MenuItemView* sender,
11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                             ui::OSExchangeData* data);
1114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int GetDragOperations(views::MenuItemView* sender);
1124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual views::MenuItemView* GetSiblingMenu(
1134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      views::MenuItemView* menu,
1144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const gfx::Point& screen_point,
1154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      views::MenuItemView::AnchorPosition* anchor,
1164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      bool* has_mnemonics,
1174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      views::MenuButton** button);
1184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int GetMaxWidthForMenu();
1194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // BookmarkModelObserver methods.
1214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void BookmarkModelChanged();
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void BookmarkNodeFaviconLoaded(BookmarkModel* model,
1234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                         const BookmarkNode* node);
1244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // BookmarkContextMenu::Observer methods.
1264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void WillRemoveBookmarks(
1274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const std::vector<const BookmarkNode*>& bookmarks);
1284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void DidRemoveBookmarks();
1294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
1314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  typedef std::map<const BookmarkNode*, int> NodeToMenuIDMap;
1324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // BookmarkMenuController deletes itself as necessary.
1344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~BookmarkMenuController();
1354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Creates a menu and adds it to node_to_menu_id_map_. This uses
1374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // BuildMenu to recursively populate the menu.
1384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::MenuItemView* CreateMenu(const BookmarkNode* parent,
1394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                  int start_child_index);
1404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Creates an entry in menu for each child node of |parent| starting at
1424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // |start_child_index|.
1434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void BuildMenu(const BookmarkNode* parent,
1444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                 int start_child_index,
1454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                 views::MenuItemView* menu,
1464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                 int* next_menu_id);
1474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the menu whose id is |id|.
1494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::MenuItemView* GetMenuByID(int id);
1504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Does the work of processing WillRemoveBookmarks. On exit the set of removed
1524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // menus is added to |removed_menus|. It's up to the caller to delete the
1534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // the menus added to |removed_menus|.
1544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void WillRemoveBookmarksImpl(
1554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const std::vector<const BookmarkNode*>& bookmarks,
1564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      std::set<views::MenuItemView*>* removed_menus);
1574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  Browser* browser_;
1594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  Profile* profile_;
1614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  PageNavigator* page_navigator_;
1634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Parent of menus.
1654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::NativeWindow parent_;
1664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The node we're showing the contents of.
1684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  const BookmarkNode* node_;
1694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Maps from menu id to BookmarkNode.
1714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  std::map<int, const BookmarkNode*> menu_id_to_node_map_;
1724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Mapping from node to menu id. This only contains entries for nodes of type
1744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // URL.
1754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  NodeToMenuIDMap node_to_menu_id_map_;
1764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Current menu.
1784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::MenuItemView* menu_;
1794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Data for the drop.
181201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  BookmarkNodeData drop_data_;
1824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Used when a context menu is shown.
1844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  scoped_ptr<BookmarkContextMenu> context_menu_;
1854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The observer, may be null.
1874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  Observer* observer_;
1884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Is the menu being shown for a drop?
1904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  bool for_drop_;
1914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The bookmark bar. This is only non-null if we're showing a menu item
1934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // for a folder on the bookmark bar and not for drop.
1944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BookmarkBarView* bookmark_bar_;
1954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  typedef std::map<const BookmarkNode*, views::MenuItemView*> NodeToMenuMap;
1974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  NodeToMenuMap node_to_menu_map_;
1984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // ID of the next menu item.
2004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  int next_menu_id_;
2014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(BookmarkMenuController);
2034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
2044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
205dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_
206