Home | History | Annotate | Download | only in menu
      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.
     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() 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