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
12namespace views {
13
14class 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.
19class 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