1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_
6 #define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_
10 #include "base/compiler_specific.h"
11 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
12 #include "chrome/browser/bookmarks/bookmark_node_data.h"
13 #include "ui/views/controls/menu/menu_delegate.h"
14 #include "ui/views/controls/menu/menu_item_view.h"
16 class BookmarkBarView
;
17 class BookmarkMenuControllerObserver
;
18 class BookmarkMenuDelegate
;
36 // BookmarkMenuController is responsible for showing a menu of bookmarks,
37 // each item in the menu represents a bookmark.
38 // BookmarkMenuController deletes itself as necessary, although the menu can
39 // be explicitly hidden by way of the Cancel method.
40 class BookmarkMenuController
: public BaseBookmarkModelObserver
,
41 public views::MenuDelegate
{
43 // Creates a BookmarkMenuController showing the children of |node| starting
44 // at |start_child_index|.
45 BookmarkMenuController(Browser
* browser
,
46 content::PageNavigator
* page_navigator
,
47 views::Widget
* parent
,
48 const BookmarkNode
* node
,
49 int start_child_index
);
51 void RunMenuAt(BookmarkBarView
* bookmark_bar
, bool for_drop
);
53 void clear_bookmark_bar() {
60 // Returns the node the menu is showing for.
61 const BookmarkNode
* node() const { return node_
; }
64 views::MenuItemView
* menu() const;
66 // Returns the context menu, or NULL if the context menu isn't showing.
67 views::MenuItemView
* context_menu() const;
69 // Sets the page navigator.
70 void SetPageNavigator(content::PageNavigator
* navigator
);
72 void set_observer(BookmarkMenuControllerObserver
* observer
) {
76 // views::MenuDelegate:
77 virtual string16
GetTooltipText(int id
, const gfx::Point
& p
) const OVERRIDE
;
78 virtual bool IsTriggerableEvent(views::MenuItemView
* view
,
79 const ui::Event
& e
) OVERRIDE
;
80 virtual void ExecuteCommand(int id
, int mouse_event_flags
) OVERRIDE
;
81 virtual bool ShouldExecuteCommandWithoutClosingMenu(
83 const ui::Event
& e
) OVERRIDE
;
84 virtual bool GetDropFormats(
85 views::MenuItemView
* menu
,
87 std::set
<ui::OSExchangeData::CustomFormat
>* custom_formats
) OVERRIDE
;
88 virtual bool AreDropTypesRequired(views::MenuItemView
* menu
) OVERRIDE
;
89 virtual bool CanDrop(views::MenuItemView
* menu
,
90 const ui::OSExchangeData
& data
) OVERRIDE
;
91 virtual int GetDropOperation(views::MenuItemView
* item
,
92 const ui::DropTargetEvent
& event
,
93 DropPosition
* position
) OVERRIDE
;
94 virtual int OnPerformDrop(views::MenuItemView
* menu
,
95 DropPosition position
,
96 const ui::DropTargetEvent
& event
) OVERRIDE
;
97 virtual bool ShowContextMenu(views::MenuItemView
* source
,
100 ui::MenuSourceType source_type
) OVERRIDE
;
101 virtual void DropMenuClosed(views::MenuItemView
* menu
) OVERRIDE
;
102 virtual bool CanDrag(views::MenuItemView
* menu
) OVERRIDE
;
103 virtual void WriteDragData(views::MenuItemView
* sender
,
104 ui::OSExchangeData
* data
) OVERRIDE
;
105 virtual int GetDragOperations(views::MenuItemView
* sender
) OVERRIDE
;
106 virtual views::MenuItemView
* GetSiblingMenu(
107 views::MenuItemView
* menu
,
108 const gfx::Point
& screen_point
,
109 views::MenuItemView::AnchorPosition
* anchor
,
111 views::MenuButton
** button
) OVERRIDE
;
112 virtual int GetMaxWidthForMenu(views::MenuItemView
* view
) OVERRIDE
;
114 // BaseBookmarkModelObserver:
115 virtual void BookmarkModelChanged() OVERRIDE
;
118 // BookmarkMenuController deletes itself as necessary.
119 virtual ~BookmarkMenuController();
121 scoped_ptr
<views::MenuRunner
> menu_runner_
;
123 scoped_ptr
<BookmarkMenuDelegate
> menu_delegate_
;
125 // The node we're showing the contents of.
126 const BookmarkNode
* node_
;
128 // Data for the drop.
129 BookmarkNodeData drop_data_
;
131 // The observer, may be null.
132 BookmarkMenuControllerObserver
* observer_
;
134 // Is the menu being shown for a drop?
137 // The bookmark bar. This is only non-null if we're showing a menu item for a
138 // folder on the bookmark bar and not for drop, or if the BookmarkBarView has
139 // been destroyed before the menu.
140 BookmarkBarView
* bookmark_bar_
;
142 DISALLOW_COPY_AND_ASSIGN(BookmarkMenuController
);
145 #endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_MENU_CONTROLLER_VIEWS_H_