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_SUBMENU_VIEW_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/animation/scroll_animator.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_delegate.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/controls/prefix_delegate.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/controls/prefix_selector.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuHost; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuItemView; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuScrollViewContainer; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SubmenuView is the parent of all menu items. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SubmenuView has the following responsibilities: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . It positions and sizes all child views (any type of View may be added, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// not just MenuItemViews). 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . Forwards the appropriate events to the MenuController. This allows the 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MenuController to update the selection as the user moves the mouse around. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . Renders the drop indicator during a drop operation. 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// . Shows and hides the window (a NativeWidget) when the menu is shown on 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// screen. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SubmenuView is itself contained in a MenuScrollViewContainer. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MenuScrollViewContainer handles showing as much of the SubmenuView as the 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// screen allows. If the SubmenuView is taller than the screen, scroll buttons 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are provided that allow the user to see all the menu items. 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class VIEWS_EXPORT SubmenuView : public PrefixDelegate, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ScrollDelegate { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The submenu's class name. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kViewClassName[]; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a SubmenuView for the specified menu item. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SubmenuView(MenuItemView* parent); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SubmenuView(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the number of child views that are MenuItemViews. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MenuItemViews are identified by ID. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetMenuItemCount(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the MenuItemView at the specified index. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView* GetMenuItemAt(int index); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Positions and sizes the child views. This tiles the views vertically, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // giving each child the available width. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Layout() OVERRIDE; 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override from View. 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ui::TextInputClient* GetTextInputClient() OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Painting. 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void PaintChildren(gfx::Canvas* canvas, 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const views::CullSet& cull_view) OVERRIDE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag and drop methods. These are forwarded to the MenuController. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetDropFormats( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* formats, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<OSExchangeData::CustomFormat>* custom_formats) OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool AreDropTypesRequired() OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanDrop(const OSExchangeData& data) OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDragEntered(const ui::DropTargetEvent& event) OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int OnDragUpdated(const ui::DropTargetEvent& event) OVERRIDE; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDragExited() OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int OnPerformDrop(const ui::DropTargetEvent& event) OVERRIDE; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scrolls on menu item boundaries. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMouseWheel(const ui::MouseWheelEvent& e) OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ui::EventHandler. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scrolls on menu item boundaries. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Overridden from PrefixDelegate. 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int GetRowCount() OVERRIDE; 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int GetSelectedRow() OVERRIDE; 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetSelectedRow(int row) OVERRIDE; 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual base::string16 GetTextForRow(int row) OVERRIDE; 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the menu is showing. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsShowing(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows the menu at the specified location. Coordinates are in screen 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coordinates. max_width gives the max width the view should be. 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ShowAt(Widget* parent, const gfx::Rect& bounds, bool do_capture); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resets the bounds of the submenu to |bounds|. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Reposition(const gfx::Rect& bounds); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Closes the menu, destroying the host. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Close(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hides the hosting window. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The hosting window is hidden first, then deleted (Close) when the menu is 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // done running. This is done to avoid deletion ordering dependencies. In 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // particular, during drag and drop (and when a modal dialog is shown as 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a result of choosing a context menu) it is possible that an event is 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // being processed by the host, so that host is on the stack when we need to 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // close the window. If we closed the window immediately (and deleted it), 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when control returned back to host we would crash as host was deleted. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Hide(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If mouse capture was grabbed, it is released. Does nothing if mouse was 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not captured. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReleaseCapture(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overriden from View to prevent tab from doing anything. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the parent menu item we're showing children for. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView* GetMenuItem() const; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the drop item and position. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDropMenuItem(MenuItemView* item, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuDelegate::DropPosition position); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether the selection should be shown for the specified item. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The selection is NOT shown during drag and drop when the drop is over 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the menu. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetShowSelection(MenuItemView* item); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the container for the SubmenuView. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuScrollViewContainer* GetScrollViewContainer(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked if the menu is prematurely destroyed. This can happen if the window 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // closes while the menu is shown. If invoked the SubmenuView must drop all 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // references to the MenuHost as the MenuHost is about to be deleted. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MenuHostDestroyed(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Max width of minor text (accelerator or subtitle) in child menu items. This 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // doesn't include children's children, only direct children. 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int max_minor_text_width() const { return max_minor_text_width_; } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Minimum width of menu in pixels (default 0). This becomes the smallest 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // width returned by GetPreferredSize(). 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_minimum_preferred_width(int minimum_preferred_width) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) minimum_preferred_width_ = minimum_preferred_width; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Automatically resize menu if a subview's preferred size changes. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool resize_open_menu() const { return resize_open_menu_; } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_resize_open_menu(bool resize_open_menu) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resize_open_menu_ = resize_open_menu; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 160b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Overridden from View: 161b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual const char* GetClassName() const OVERRIDE; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // View method. Overridden to schedule a paint. We do this so that when 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scrolling occurs, everything is repainted correctly. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Paints the drop indicator. This is only invoked if item is non-NULL and 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // position is not DROP_NONE. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PaintDropIndicator(gfx::Canvas* canvas, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView* item, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuDelegate::DropPosition position); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SchedulePaintForDropIndicator(MenuItemView* item, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuDelegate::DropPosition position); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calculates the location of th edrop indicator. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect CalculateDropIndicatorBounds(MenuItemView* item, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuDelegate::DropPosition position); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of ScrollDelegate 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnScroll(float dx, float dy) OVERRIDE; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parent menu item. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView* parent_menu_item_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Widget subclass used to show the children. This is deleted when we invoke 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |DestroyMenuHost|, or |MenuHostDestroyed| is invoked back on us. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuHost* host_; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If non-null, indicates a drop is in progress and drop_item is the item 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the drop is over. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView* drop_item_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position of the drop. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuDelegate::DropPosition drop_position_; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ancestor of the SubmenuView, lazily created. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuScrollViewContainer* scroll_view_container_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See description above getter. 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mutable int max_minor_text_width_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Minimum width returned in GetPreferredSize(). 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int minimum_preferred_width_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reposition open menu when contained views change size. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool resize_open_menu_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The submenu's scroll animator 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ScrollAnimator> scroll_animator_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Difference between current position and cumulative deltas passed to 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // OnScroll. 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(tdresser): This should be removed when raw pixel scrolling for views 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // is enabled. See crbug.com/329354. 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float roundoff_error_; 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PrefixSelector prefix_selector_; 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SubmenuView); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_ 229