15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_CONTROLS_MENU_MENU_WRAPPER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_CONTROLS_MENU_MENU_WRAPPER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/views_export.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuModel; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MenuInsertionDelegateWin; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuListener; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interface that wraps an object that implements a menu. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VIEWS_EXPORT MenuWrapper { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All of the possible actions that can result from RunMenuAt. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum MenuAction { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_ACTION_NONE, // Menu cancelled, or never opened. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_ACTION_SELECTED, // An item was selected. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_ACTION_PREVIOUS, // User wants to navigate to the previous menu. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_ACTION_NEXT, // User wants to navigate to the next menu. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MenuWrapper() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates the appropriate instance of this wrapper for the current platform. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static MenuWrapper* CreateWrapper(ui::MenuModel* model); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs the menu at the specified point. This blocks until done. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RunMenuAt(const gfx::Point& point, int alignment) = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancels the active menu. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelMenu() = 0; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the model supplying data to this menu has changed, and the menu 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must be rebuilt. 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Rebuild(MenuInsertionDelegateWin* delegate) = 0; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the states of the items in the menu must be updated from the 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // model. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateStates() = 0; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve a native menu handle. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual HMENU GetNativeMenu() const = 0; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the result of the last call to RunMenuAt to determine whether an 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // item was selected, the user navigated to a next or previous menu, or 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // nothing. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual MenuAction GetMenuAction() const = 0; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a listener to receive a callback when the menu opens. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddMenuListener(MenuListener* listener) = 0; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove a menu listener. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RemoveMenuListener(MenuListener* listener) = 0; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the minimum width of the menu. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetMinimumWidth(int width) = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_CONTROLS_MENU_MENU_WRAPPER_H_ 75