1// Copyright 2013 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 ASH_SHELF_OVERFLOW_BUBBLE_VIEW_H_
6#define ASH_SHELF_OVERFLOW_BUBBLE_VIEW_H_
7
8#include "ash/ash_export.h"
9#include "base/basictypes.h"
10#include "base/compiler_specific.h"
11#include "ui/views/bubble/bubble_delegate.h"
12
13namespace ash {
14class ShelfLayoutManager;
15class ShelfView;
16
17namespace test {
18class OverflowBubbleViewTestAPI;
19}
20
21// OverflowBubbleView hosts a ShelfView to display overflown items.
22// Exports to access this class from OverflowBubbleViewTestAPI.
23class ASH_EXPORT OverflowBubbleView : public views::BubbleDelegateView {
24 public:
25  OverflowBubbleView();
26  virtual ~OverflowBubbleView();
27
28  void InitOverflowBubble(views::View* anchor, ShelfView* shelf_view);
29
30  // views::BubbleDelegateView overrides:
31  virtual gfx::Rect GetBubbleBounds() OVERRIDE;
32
33 private:
34  friend class test::OverflowBubbleViewTestAPI;
35
36  bool IsHorizontalAlignment() const;
37
38  const gfx::Size GetContentsSize() const;
39
40  // Gets arrow location based on shelf alignment.
41  views::BubbleBorder::Arrow GetBubbleArrow() const;
42
43  void ScrollByXOffset(int x_offset);
44  void ScrollByYOffset(int y_offset);
45
46  // views::View overrides:
47  virtual gfx::Size GetPreferredSize() const OVERRIDE;
48  virtual void Layout() OVERRIDE;
49  virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
50  virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE;
51
52  // ui::EventHandler overrides:
53  virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE;
54
55  ShelfLayoutManager* GetShelfLayoutManager() const;
56
57  ShelfView* shelf_view_;  // Owned by views hierarchy.
58  gfx::Vector2d scroll_offset_;
59
60  DISALLOW_COPY_AND_ASSIGN(OverflowBubbleView);
61};
62
63}  // namespace ash
64
65#endif  // ASH_SHELF_OVERFLOW_BUBBLE_VIEW_H_
66