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_types.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. 24 View* scroll_down_button() const { return scroll_down_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() const OVERRIDE; 37 virtual void GetAccessibleState(ui::AXViewState* 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(MenuAnchorPosition anchor); 51 52 class MenuScrollView; 53 54 // The scroll buttons. 55 View* scroll_up_button_; 56 View* scroll_down_button_; 57 58 // The scroll view. 59 MenuScrollView* scroll_view_; 60 61 // The content view. 62 SubmenuView* content_view_; 63 64 // If set the currently set border is a bubble border. 65 BubbleBorder::Arrow arrow_; 66 67 // Weak reference to the currently set border. 68 BubbleBorder* bubble_border_; 69 70 DISALLOW_COPY_AND_ASSIGN(MenuScrollViewContainer); 71 }; 72 73 } // namespace views 74 75 #endif // UI_VIEWS_CONTROLS_MENU_MENU_SCROLL_VIEW_CONTAINER_H_ 76