// Copyright (c) 2012 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_UI_VIEWS_ACTION_BOX_MENU_H_ #define CHROME_BROWSER_UI_VIEWS_ACTION_BOX_MENU_H_ #include #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "chrome/browser/ui/views/browser_action_view.h" #include "content/public/browser/notification_observer.h" #include "ui/views/controls/menu/menu_delegate.h" class ActionBoxMenuModel; namespace views { class Background; class Border; class MenuItemView; class MenuRunner; class View; } // ActionBoxMenu adapts the ActionBoxMenuModel to view's menu related classes. class ActionBoxMenu : public views::MenuDelegate, public BrowserActionView::Delegate, public content::NotificationObserver { public: ActionBoxMenu(Browser* browser, ActionBoxMenuModel* model); virtual ~ActionBoxMenu(); void Init(); // Shows the menu relative to the specified button. void RunMenu(views::MenuButton* menu_button); private: // Overridden from views::MenuDelegate: virtual void ExecuteCommand(int id) OVERRIDE; virtual views::Border* CreateMenuBorder() OVERRIDE; virtual views::Background* CreateMenuBackground() OVERRIDE; // Overridden from BrowserActionView::Delegate and DragController overrides: virtual int GetCurrentTabId() const OVERRIDE; virtual void OnBrowserActionExecuted(BrowserActionButton* button) OVERRIDE; virtual void OnBrowserActionVisibilityChanged() OVERRIDE; virtual gfx::Point GetViewContentOffset() const OVERRIDE; virtual bool NeedToShowMultipleIconStates() const OVERRIDE; virtual bool NeedToShowTooltip() const OVERRIDE; virtual void WriteDragDataForView(views::View* sender, const gfx::Point& press_pt, ui::OSExchangeData* data) OVERRIDE; virtual int GetDragOperationsForView(views::View* sender, const gfx::Point& p) OVERRIDE; virtual bool CanStartDragForView(views::View* sender, const gfx::Point& press_pt, const gfx::Point& p) OVERRIDE; // NotificationObserver overrides: virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; // Populates |root_| with all the child menu items from the |model_|. void PopulateMenu(); Browser* browser_; // The views menu. Owned by |menu_runner_|. views::MenuItemView* root_; scoped_ptr menu_runner_; // The model that tracks the order of the toolbar icons. ActionBoxMenuModel* model_; DISALLOW_COPY_AND_ASSIGN(ActionBoxMenu); }; #endif // CHROME_BROWSER_UI_VIEWS_ACTION_BOX_MENU_H_