1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_H_
6#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_H_
7#pragma once
8
9#include "chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h"
10#include "views/controls/menu/menu_delegate.h"
11
12// Observer for the BookmarkContextMenu.
13class BookmarkContextMenuObserver {
14 public:
15  // Invoked before the specified items are removed from the bookmark model.
16  virtual void WillRemoveBookmarks(
17      const std::vector<const BookmarkNode*>& bookmarks) = 0;
18
19  // Invoked after the items have been removed from the model.
20  virtual void DidRemoveBookmarks() = 0;
21
22 protected:
23  virtual ~BookmarkContextMenuObserver() {}
24};
25
26class BookmarkContextMenu : public BookmarkContextMenuControllerViewsDelegate,
27                            public views::MenuDelegate {
28 public:
29  BookmarkContextMenu(
30      gfx::NativeWindow parent_window,
31      Profile* profile,
32      PageNavigator* page_navigator,
33      const BookmarkNode* parent,
34      const std::vector<const BookmarkNode*>& selection);
35  virtual ~BookmarkContextMenu();
36
37  // Shows the context menu at the specified point.
38  void RunMenuAt(const gfx::Point& point);
39
40  views::MenuItemView* menu() const { return menu_.get(); }
41
42  void set_observer(BookmarkContextMenuObserver* observer) {
43    observer_ = observer;
44  }
45
46  // Overridden from views::MenuDelegate:
47  virtual void ExecuteCommand(int command_id);
48  virtual bool IsItemChecked(int command_id) const;
49  virtual bool IsCommandEnabled(int command_id) const;
50  virtual bool ShouldCloseAllMenusOnExecute(int id);
51
52  // Overridden from BookmarkContextMenuControllerViewsDelegate:
53  virtual void CloseMenu();
54  virtual void AddItemWithStringId(int command_id, int string_id);
55  virtual void AddSeparator();
56  virtual void AddCheckboxItem(int command_id, int string_id);
57  virtual void WillRemoveBookmarks(
58      const std::vector<const BookmarkNode*>& bookmarks);
59  virtual void DidRemoveBookmarks();
60
61 private:
62  scoped_ptr<BookmarkContextMenuControllerViews> controller_;
63
64  // The parent of dialog boxes opened from the context menu.
65  gfx::NativeWindow parent_window_;
66
67  // The menu itself.
68  scoped_ptr<views::MenuItemView> menu_;
69
70  // The node we're showing the menu for.
71  const BookmarkNode* parent_node_;
72
73  BookmarkContextMenuObserver* observer_;
74
75  DISALLOW_COPY_AND_ASSIGN(BookmarkContextMenu);
76};
77
78#endif  // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_H_
79