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