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_CONTEXT_MENU_H_
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h"
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/menu/menu_delegate.h"
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Observer for the BookmarkContextMenu.
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BookmarkContextMenuObserver {
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Invoked before the specified items are removed from the bookmark model.
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void WillRemoveBookmarks(
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const std::vector<const BookmarkNode*>& bookmarks) = 0;
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Invoked after the items have been removed from the model.
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void DidRemoveBookmarks() = 0;
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~BookmarkContextMenuObserver() {}
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BookmarkContextMenu : public BookmarkContextMenuControllerViewsDelegate,
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                            public views::MenuDelegate {
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BookmarkContextMenu(
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      gfx::NativeWindow parent_window,
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      Profile* profile,
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      PageNavigator* page_navigator,
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const BookmarkNode* parent,
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const std::vector<const BookmarkNode*>& selection);
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~BookmarkContextMenu();
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Shows the context menu at the specified point.
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void RunMenuAt(const gfx::Point& point);
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::MenuItemView* menu() const { return menu_.get(); }
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void set_observer(BookmarkContextMenuObserver* observer) {
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    observer_ = observer;
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  }
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Overridden from views::MenuDelegate:
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ExecuteCommand(int command_id);
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsItemChecked(int command_id) const;
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsCommandEnabled(int command_id) const;
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool ShouldCloseAllMenusOnExecute(int id);
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Overridden from BookmarkContextMenuControllerViewsDelegate:
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void CloseMenu();
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void AddItemWithStringId(int command_id, int string_id);
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void AddSeparator();
5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void AddCheckboxItem(int command_id, int string_id);
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void WillRemoveBookmarks(
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const std::vector<const BookmarkNode*>& bookmarks);
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void DidRemoveBookmarks();
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  scoped_ptr<BookmarkContextMenuControllerViews> controller_;
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The parent of dialog boxes opened from the context menu.
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::NativeWindow parent_window_;
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The menu itself.
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  scoped_ptr<views::MenuItemView> menu_;
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The node we're showing the menu for.
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const BookmarkNode* parent_node_;
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BookmarkContextMenuObserver* observer_;
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(BookmarkContextMenu);
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_H_
79