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. 4 5#ifndef UI_VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ 6#define UI_VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ 7 8#include "ui/views/widget/root_view.h" 9 10namespace views { 11 12class MenuController; 13class SubmenuView; 14 15// MenuHostRootView is the RootView of the window showing the menu. 16// SubmenuView's scroll view is added as a child of MenuHostRootView. 17// MenuHostRootView forwards relevant events to the MenuController. 18// 19// As all the menu items are owned by the root menu item, care must be taken 20// such that when MenuHostRootView is deleted it doesn't delete the menu items. 21class MenuHostRootView : public internal::RootView { 22 public: 23 MenuHostRootView(Widget* widget, SubmenuView* submenu); 24 25 void ClearSubmenu() { submenu_ = NULL; } 26 27 // Overridden from View: 28 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 29 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; 30 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 31 virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE; 32 virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE; 33 34 private: 35 // ui::EventProcessor: 36 virtual ui::EventDispatchDetails OnEventFromSource(ui::Event* event) OVERRIDE; 37 38 // Returns the MenuController for this MenuHostRootView. 39 MenuController* GetMenuController(); 40 41 // Returns true if event targets EmptyMenu. 42 bool DoesEventTargetEmptyMenuItem(const ui::MouseEvent& event); 43 44 // The SubmenuView we contain. 45 SubmenuView* submenu_; 46 47 // Whether mouse dragged/released should be forwarded to the MenuController. 48 bool forward_drag_to_menu_controller_; 49 50 DISALLOW_COPY_AND_ASSIGN(MenuHostRootView); 51}; 52 53} // namespace views 54 55#endif // UI_VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ 56