message_center_view.h revision bb1529ce867d8845a77ec7cdf3e3003ef1771a40
1// Copyright (c) 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 UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_VIEW_H_
6#define UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_VIEW_H_
7
8#include "ui/views/view.h"
9
10#include "ui/base/animation/animation_delegate.h"
11#include "ui/message_center/message_center_export.h"
12#include "ui/message_center/message_center_observer.h"
13#include "ui/message_center/notification_list.h"
14#include "ui/views/controls/button/button.h"
15
16namespace ui {
17class MultiAnimation;
18}  // namespace ui
19
20namespace views {
21class Button;
22}  // namespace views
23
24namespace message_center {
25
26class MessageCenter;
27class MessageCenterBubble;
28class NotificationCenterButton;
29class MessageCenterButtonBar;
30class MessageCenterTray;
31class MessageCenterView;
32class MessageView;
33class MessageListView;
34class NotifierSettingsView;
35
36// MessageCenterView ///////////////////////////////////////////////////////////
37
38class MESSAGE_CENTER_EXPORT MessageCenterView : public views::View,
39                                                public MessageCenterObserver,
40                                                public ui::AnimationDelegate {
41 public:
42  MessageCenterView(MessageCenter* message_center,
43                    MessageCenterTray* tray,
44                    int max_height,
45                    bool initially_settings_visible,
46                    bool top_down);
47  virtual ~MessageCenterView();
48
49  void SetNotifications(const NotificationList::Notifications& notifications);
50
51  void ClearAllNotifications();
52  void OnAllNotificationsCleared();
53
54  size_t NumMessageViewsForTest() const;
55
56  void SetSettingsVisible(bool visible);
57  void OnSettingsChanged();
58  bool settings_visible() const { return settings_visible_; }
59
60  void SetIsClosing(bool is_closing);
61
62 protected:
63  // Overridden from views::View:
64  virtual void Layout() OVERRIDE;
65  virtual gfx::Size GetPreferredSize() OVERRIDE;
66  virtual int GetHeightForWidth(int width) OVERRIDE;
67  virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE;
68  virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
69
70  // Overridden from MessageCenterObserver:
71  virtual void OnNotificationAdded(const std::string& id) OVERRIDE;
72  virtual void OnNotificationRemoved(const std::string& id,
73                                     bool by_user) OVERRIDE;
74  virtual void OnNotificationUpdated(const std::string& id) OVERRIDE;
75
76  // Overridden from ui::AnimationDelegate:
77  virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE;
78  virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE;
79  virtual void AnimationCanceled(const ui::Animation* animation) OVERRIDE;
80
81 private:
82  friend class MessageCenterViewTest;
83
84  void AddNotificationAt(const Notification& notification, int index);
85  void NotificationsChanged();
86  void SetNotificationViewForTest(views::View* view);
87
88  MessageCenter* message_center_;  // Weak reference.
89  MessageCenterTray* tray_;  // Weak reference.
90  std::vector<MessageView*> message_views_;  // Weak references.
91
92  // Child views.
93  views::ScrollView* scroller_;
94  MessageListView* message_list_view_;
95  NotifierSettingsView* settings_view_;
96  MessageCenterButtonBar* button_bar_;
97  views::View* no_notifications_message_view_;
98  bool top_down_;
99
100  // Data for transition animation between settings view and message list.
101  bool settings_visible_;
102
103  // Animation managing transition between message center and settings (and vice
104  // versa).
105  scoped_ptr<ui::MultiAnimation> settings_transition_animation_;
106
107  // Helper data to keep track of the transition between settings and
108  // message center views.
109  views::View* source_view_;
110  int source_height_;
111  views::View* target_view_;
112  int target_height_;
113
114  // True when the widget is closing so that further operations should be
115  // ignored.
116  bool is_closing_;
117
118  DISALLOW_COPY_AND_ASSIGN(MessageCenterView);
119};
120
121}  // namespace message_center
122
123#endif  // UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_VIEW_H_
124