overflow_bubble.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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_H_
6#define ASH_SHELF_OVERFLOW_BUBBLE_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "ui/events/event_handler.h"
11#include "ui/views/widget/widget_observer.h"
12
13namespace ui {
14class LocatedEvent;
15}
16
17namespace views {
18class View;
19}
20
21namespace ash {
22
23class LauncherDelegate;
24class LauncherModel;
25
26namespace internal {
27
28class LauncherView;
29
30// OverflowBubble displays the overflown launcher items in a bubble.
31class OverflowBubble : public ui::EventHandler,
32                       public views::WidgetObserver {
33 public:
34  OverflowBubble();
35  virtual ~OverflowBubble();
36
37  // Shows an bubble pointing to |anchor| with |launcher_view| as its content.
38  void Show(views::View* anchor, LauncherView* launcher_view);
39
40  void Hide();
41
42  // This method as name indicates will hide bubble and schedule paint
43  // for overflow button.
44  void HideBubbleAndRefreshButton();
45
46  bool IsShowing() const { return !!bubble_; }
47  LauncherView* launcher_view() { return launcher_view_; }
48
49 private:
50  void ProcessPressedEvent(ui::LocatedEvent* event);
51
52  // Overridden from ui::EventHandler:
53  virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
54  virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
55
56  // Overridden from views::WidgetObserver:
57  virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
58
59  views::View* bubble_;  // Owned by views hierarchy.
60  views::View* anchor_;  // Owned by LauncherView.
61  LauncherView* launcher_view_;  // Owned by |bubble_|.
62
63  DISALLOW_COPY_AND_ASSIGN(OverflowBubble);
64};
65
66}  // namespace internal
67}  // namespace ash
68
69#endif  // ASH_SHELF_OVERFLOW_BUBBLE_H_
70