1 // Copyright (c) 2011 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_SCROLL_VIEW_CONTAINER_H_ 6 #define UI_VIEWS_CONTROLS_MENU_MENU_SCROLL_VIEW_CONTAINER_H_ 7 8 #include "ui/views/view.h" 9 #include "ui/views/bubble/bubble_border.h" 10 #include "ui/views/controls/menu/menu_item_view.h" 11 12 namespace views { 13 14 class SubmenuView; 15 16 // MenuScrollViewContainer contains the SubmenuView (through a MenuScrollView) 17 // and two scroll buttons. The scroll buttons are only visible and enabled if 18 // the preferred height of the SubmenuView is bigger than our bounds. 19 class MenuScrollViewContainer : public View { 20 public: 21 explicit MenuScrollViewContainer(SubmenuView* content_view); 22 23 // Returns the buttons for scrolling up/down. scroll_down_button()24 View* scroll_down_button() const { return scroll_down_button_; } scroll_up_button()25 View* scroll_up_button() const { return scroll_up_button_; } 26 27 // External function to check if the bubble border is usd. 28 bool HasBubbleBorder(); 29 30 // Offsets the Arrow from the default location. 31 void SetBubbleArrowOffset(int offset); 32 33 // View overrides. 34 virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE; 35 virtual void Layout() OVERRIDE; 36 virtual gfx::Size GetPreferredSize() OVERRIDE; 37 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 38 39 protected: 40 // View override. 41 virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 42 43 private: 44 // Create the default border. 45 void CreateDefaultBorder(); 46 47 // Create the bubble border. 48 void CreateBubbleBorder(); 49 50 BubbleBorder::Arrow BubbleBorderTypeFromAnchor( 51 MenuItemView::AnchorPosition anchor); 52 53 class MenuScrollView; 54 55 // The scroll buttons. 56 View* scroll_up_button_; 57 View* scroll_down_button_; 58 59 // The scroll view. 60 MenuScrollView* scroll_view_; 61 62 // The content view. 63 SubmenuView* content_view_; 64 65 // If set the currently set border is a bubble border. 66 BubbleBorder::Arrow arrow_; 67 68 // The currently set border. 69 BubbleBorder* bubble_border_; 70 71 DISALLOW_COPY_AND_ASSIGN(MenuScrollViewContainer); 72 }; 73 74 } // namespace views 75 76 #endif // UI_VIEWS_CONTROLS_MENU_MENU_SCROLL_VIEW_CONTAINER_H_ 77