Chromium Code Reviews| Index: ui/message_center/views/message_center_view.cc |
| diff --git a/ui/message_center/views/message_center_view.cc b/ui/message_center/views/message_center_view.cc |
| index 92b79715c9479585c67fbacde4010607c13f6668..faaa2ef1044a6329192f24ad1838b5232727c836 100644 |
| --- a/ui/message_center/views/message_center_view.cc |
| +++ b/ui/message_center/views/message_center_view.cc |
| @@ -61,63 +61,7 @@ const int kAnimateClearingNextNotificationDelayMS = 40; |
| static const int kDefaultFrameRateHz = 60; |
| static const int kDefaultAnimationDurationMs = 120; |
| -// PoorMessageCenterButtonBar ////////////////////////////////////////////////// |
| - |
| -// The view for the buttons at the bottom of the message center window used |
| -// when kEnableRichNotifications is false (hence the "poor" in the name :-). |
| -class PoorMessageCenterButtonBar : public MessageCenterButtonBar, |
| - public views::ButtonListener { |
| - public: |
| - PoorMessageCenterButtonBar(MessageCenterView* message_center_view, |
| - MessageCenter* message_center); |
| - |
| - // Overridden from views::ButtonListener: |
| - virtual void ButtonPressed(views::Button* sender, |
| - const ui::Event& event) OVERRIDE; |
| - |
| - private: |
| - DISALLOW_COPY_AND_ASSIGN(PoorMessageCenterButtonBar); |
| -}; |
| - |
| -PoorMessageCenterButtonBar::PoorMessageCenterButtonBar( |
| - MessageCenterView* message_center_view, MessageCenter* message_center) |
| - : MessageCenterButtonBar(message_center_view, message_center) { |
| - set_background(views::Background::CreateBackgroundPainter( |
| - true, |
| - views::Painter::CreateVerticalGradient(kBackgroundLightColor, |
| - kBackgroundDarkColor))); |
| - set_border(views::Border::CreateSolidSidedBorder( |
| - 2, 0, 0, 0, kBorderDarkColor)); |
| - |
| - views::GridLayout* layout = new views::GridLayout(this); |
| - SetLayoutManager(layout); |
| - views::ColumnSet* columns = layout->AddColumnSet(0); |
| - columns->AddPaddingColumn(100, 0); |
| - columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| - 0, /* resize percent */ |
| - views::GridLayout::USE_PREF, 0, 0); |
| - columns->AddPaddingColumn(0, 4); |
| - |
| - ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance(); |
| - views::LabelButton* close_all_button = new views::LabelButton( |
| - this, resource_bundle.GetLocalizedString(IDS_MESSAGE_CENTER_CLEAR_ALL)); |
| - close_all_button->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
| - close_all_button->set_request_focus_on_press(false); |
| - close_all_button->SetTextColor(views::Button::STATE_NORMAL, kFooterTextColor); |
| - close_all_button->SetTextColor(views::Button::STATE_HOVERED, |
| - kButtonTextHoverColor); |
| - |
| - layout->AddPaddingRow(0, 4); |
| - layout->StartRow(0, 0); |
| - layout->AddView(close_all_button); |
| - set_close_all_button(close_all_button); |
| -} |
| - |
| -void PoorMessageCenterButtonBar::ButtonPressed(views::Button* sender, |
| - const ui::Event& event) { |
| - if (sender == close_all_button()) |
| - message_center_view()->ClearAllNotifications(); |
| -} |
| +} // namespace |
| // NotificationCenterButton //////////////////////////////////////////////////// |
| @@ -167,36 +111,14 @@ void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) { |
| } |
| } |
| -// RichMessageCenterButtonBar ////////////////////////////////////////////////// |
| - |
| -// TODO(mukai): Merge this into MessageCenterButtonBar and get rid of |
| -// PoorMessageCenterButtonBar when the kEnableRichNotifications flag disappears. |
| -class RichMessageCenterButtonBar : public MessageCenterButtonBar, |
| - public views::ButtonListener { |
| - public: |
| - RichMessageCenterButtonBar(MessageCenterView* message_center_view, |
| - MessageCenter* message_center); |
| - |
| - private: |
| - // Overridden from MessageCenterButtonBar: |
| - virtual void SetAllButtonsEnabled(bool enabled) OVERRIDE; |
| - |
| - // Overridden from views::View: |
| - virtual void ChildVisibilityChanged(views::View* child) OVERRIDE; |
| - |
| - // Overridden from views::ButtonListener: |
| - virtual void ButtonPressed(views::Button* sender, |
| - const ui::Event& event) OVERRIDE; |
| - |
| - NotificationCenterButton* settings_button_; |
| - NotificationCenterButton* quiet_mode_button_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(RichMessageCenterButtonBar); |
| -}; |
| +// MessageCenterButtonBar ////////////////////////////////////////////////// |
| -RichMessageCenterButtonBar::RichMessageCenterButtonBar( |
| - MessageCenterView* message_center_view, MessageCenter* message_center) |
| - : MessageCenterButtonBar(message_center_view, message_center) { |
| +MessageCenterButtonBar::MessageCenterButtonBar( |
| + MessageCenterView* message_center_view, |
| + MessageCenter* message_center) |
| + : message_center_view_(message_center_view), |
| + message_center_(message_center), |
| + close_all_button_(NULL) { |
| if (get_use_acceleration_when_possible()) |
| SetPaintToLayer(true); |
| set_background(views::Background::CreateSolidBackground( |
| @@ -265,21 +187,28 @@ RichMessageCenterButtonBar::RichMessageCenterButtonBar( |
| layout->AddView(button_container); |
| } |
| -// Overridden from MessageCenterButtonBar: |
| -void RichMessageCenterButtonBar::SetAllButtonsEnabled(bool enabled) { |
| - MessageCenterButtonBar::SetAllButtonsEnabled(enabled); |
| +MessageCenterButtonBar::~MessageCenterButtonBar() {} |
| + |
| +void MessageCenterButtonBar::SetAllButtonsEnabled(bool enabled) { |
| + if (close_all_button_) |
| + close_all_button_->SetEnabled(enabled); |
| settings_button_->SetEnabled(enabled); |
| quiet_mode_button_->SetEnabled(enabled); |
| } |
| +void MessageCenterButtonBar::SetCloseAllVisible(bool visible) { |
| + if (close_all_button_) |
| + close_all_button_->SetVisible(visible); |
| +} |
| + |
| // Overridden from views::View: |
| -void RichMessageCenterButtonBar::ChildVisibilityChanged(views::View* child) { |
| +void MessageCenterButtonBar::ChildVisibilityChanged(views::View* child) { |
| InvalidateLayout(); |
| } |
| // Overridden from views::ButtonListener: |
| -void RichMessageCenterButtonBar::ButtonPressed(views::Button* sender, |
| - const ui::Event& event) { |
| +void MessageCenterButtonBar::ButtonPressed(views::Button* sender, |
| + const ui::Event& event) { |
| if (sender == close_all_button()) { |
| message_center_view()->ClearAllNotifications(); |
| } else if (sender == settings_button_) { |
| @@ -322,11 +251,9 @@ BoundedScrollView::BoundedScrollView(int min_height, int max_height) |
| set_notify_enter_exit_on_child(true); |
| // Cancels the default dashed focus border. |
| set_focus_border(NULL); |
| - if (IsRichNotificationEnabled()) { |
| - set_background(views::Background::CreateSolidBackground( |
| - kMessageCenterBackgroundColor)); |
| - SetVerticalScrollBar(new views::OverlayScrollBar(false)); |
| - } |
| + set_background( |
| + views::Background::CreateSolidBackground(kMessageCenterBackgroundColor)); |
| + SetVerticalScrollBar(new views::OverlayScrollBar(false)); |
| } |
| gfx::Size BoundedScrollView::GetPreferredSize() { |
| @@ -403,83 +330,28 @@ void NoNotificationMessageView::Layout() { |
| label_->SetBounds(0, margin, width(), text_height); |
| } |
| -} // namespace |
| - |
| -// MessageListView ///////////////////////////////////////////////////////////// |
| - |
| -// Displays a list of messages. |
| -class MessageListView : public views::View { |
| +// Displays a list of messages for rich notifications. It also supports |
| +// repositioning. |
| +class MessageListView : public views::View, |
| + public views::BoundsAnimatorObserver { |
| public: |
| explicit MessageListView(MessageCenterView* message_center_view); |
| + virtual ~MessageListView(); |
| - // The interface for repositioning. |
| + // Overridden from MessageListView. |
|
Jun Mukai
2013/07/01 20:48:58
not overridden. you should remove virtual too
dewittj
2013/07/01 23:58:30
Done.
|
| virtual void AddNotificationAt(views::View* view, int i); |
| virtual void RemoveNotificationAt(int i); |
| virtual void UpdateNotificationAt(views::View* view, int i); |
| - virtual void SetRepositionTarget(const gfx::Rect& target_rect) {} |
| - virtual void ResetRepositionSession() {} |
| + virtual void SetRepositionTarget(const gfx::Rect& target_rect); |
| + virtual void ResetRepositionSession(); |
| virtual void ClearAllNotifications(const gfx::Rect& visible_scroll_rect); |
| protected: |
| - MessageCenterView* message_center_view() const { |
| - return message_center_view_; |
| - } |
| - |
| - private: |
| - MessageCenterView* message_center_view_; // Weak reference. |
| - |
| - DISALLOW_COPY_AND_ASSIGN(MessageListView); |
| -}; |
| - |
| -MessageListView::MessageListView(MessageCenterView* message_center_view) |
| - : message_center_view_(message_center_view) { |
| - views::BoxLayout* layout = |
| - new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1); |
| - layout->set_spread_blank_space(true); |
| - SetLayoutManager(layout); |
| -} |
| - |
| -void MessageListView::AddNotificationAt(views::View* view, int i) { |
| - AddChildViewAt(view, i); |
| -} |
| - |
| -void MessageListView::RemoveNotificationAt(int i) { |
| - delete child_at(i); |
| -} |
| - |
| -void MessageListView::UpdateNotificationAt(views::View* view, int i) { |
| - delete child_at(i); |
| - AddChildViewAt(view, i); |
| -} |
| - |
| -void MessageListView::ClearAllNotifications( |
| - const gfx::Rect& visible_scroll_rect) { |
| - message_center_view_->OnAllNotificationsCleared(); |
| -} |
| - |
| -// Displays a list of messages for rich notifications. It also supports |
| -// repositioning. |
| -class RichMessageListView : public MessageListView, |
| - public views::BoundsAnimatorObserver { |
| - public: |
| - explicit RichMessageListView(MessageCenterView* message_center_view); |
| - virtual ~RichMessageListView(); |
| - |
| - protected: |
| // Overridden from views::View. |
| virtual void Layout() OVERRIDE; |
| virtual gfx::Size GetPreferredSize() OVERRIDE; |
| virtual int GetHeightForWidth(int width) OVERRIDE; |
| - // Overridden from MessageListView. |
| - virtual void AddNotificationAt(views::View* view, int i) OVERRIDE; |
| - virtual void RemoveNotificationAt(int i) OVERRIDE; |
| - virtual void UpdateNotificationAt(views::View* view, int i) OVERRIDE; |
| - virtual void SetRepositionTarget(const gfx::Rect& target_rect) OVERRIDE; |
| - virtual void ResetRepositionSession() OVERRIDE; |
| - virtual void ClearAllNotifications( |
| - const gfx::Rect& visible_scroll_rect) OVERRIDE; |
| - |
| // Overridden from views::BoundsAnimatorObserver. |
| virtual void OnBoundsAnimatorProgressed( |
| views::BoundsAnimator* animator) OVERRIDE; |
| @@ -487,7 +359,7 @@ class RichMessageListView : public MessageListView, |
| private: |
| // Returns the actual index for child of |index|. |
| - // RichMessageListView allows to slide down upper notifications, which means |
| + // MessageListView allows to slide down upper notifications, which means |
| // that the upper ones should come above the lower ones. To achieve this, |
| // inversed order is adopted. The top most notification is the last child, |
| // and the bottom most notification is the first child. |
| @@ -500,12 +372,14 @@ class RichMessageListView : public MessageListView, |
| // Animate clearing one notification. |
| void AnimateClearingOneNotification(); |
| + MessageCenterView* message_center_view() const { |
| + return message_center_view_; |
| + } |
| + MessageCenterView* message_center_view_; // Weak reference. |
| // The top position of the reposition target rectangle. |
| int reposition_top_; |
| - |
| int fixed_height_; |
| - |
| bool has_deferred_task_; |
| bool clear_all_started_; |
| std::set<views::View*> adding_views_; |
| @@ -513,18 +387,23 @@ class RichMessageListView : public MessageListView, |
| std::set<views::View*> deleted_when_done_; |
| std::list<views::View*> clearing_all_views_; |
| scoped_ptr<views::BoundsAnimator> animator_; |
| - base::WeakPtrFactory<RichMessageListView> weak_ptr_factory_; |
| + base::WeakPtrFactory<MessageListView> weak_ptr_factory_; |
| - DISALLOW_COPY_AND_ASSIGN(RichMessageListView); |
| + DISALLOW_COPY_AND_ASSIGN(MessageListView); |
| }; |
| -RichMessageListView::RichMessageListView(MessageCenterView* message_center_view) |
| - : MessageListView(message_center_view), |
| +MessageListView::MessageListView(MessageCenterView* message_center_view) |
| + : message_center_view_(message_center_view), |
| reposition_top_(-1), |
| fixed_height_(0), |
| has_deferred_task_(false), |
| clear_all_started_(false), |
| weak_ptr_factory_(this) { |
| + views::BoxLayout* layout = |
| + new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1); |
| + layout->set_spread_blank_space(true); |
| + SetLayoutManager(layout); |
| + |
| // Set the margin to 0 for the layout. BoxLayout assumes the same margin |
| // for top and bottom, but the bottom margin here should be smaller |
| // because of the shadow of message view. Use an empty border instead |
| @@ -539,12 +418,12 @@ RichMessageListView::RichMessageListView(MessageCenterView* message_center_view) |
| kMarginBetweenItems - shadow_insets.right() /* right */ )); |
| } |
| -RichMessageListView::~RichMessageListView() { |
| +MessageListView::~MessageListView() { |
| if (animator_.get()) |
| animator_->RemoveObserver(this); |
| } |
| -void RichMessageListView::Layout() { |
| +void MessageListView::Layout() { |
| if (animator_.get()) |
| return; |
| @@ -563,7 +442,7 @@ void RichMessageListView::Layout() { |
| } |
| } |
| -void RichMessageListView::AddNotificationAt(views::View* view, int i) { |
| +void MessageListView::AddNotificationAt(views::View* view, int i) { |
| // Increment by 1 because the default behavior of AddChildViewAt() is to |
| // insert before the specified index. |
| AddChildViewAt(view, GetActualIndex(i) + 1); |
| @@ -574,7 +453,7 @@ void RichMessageListView::AddNotificationAt(views::View* view, int i) { |
| DoUpdateIfPossible(); |
| } |
| -void RichMessageListView::RemoveNotificationAt(int i) { |
| +void MessageListView::RemoveNotificationAt(int i) { |
| views::View* child = child_at(GetActualIndex(i)); |
| if (GetContentsBounds().IsEmpty()) { |
| delete child; |
| @@ -590,7 +469,7 @@ void RichMessageListView::RemoveNotificationAt(int i) { |
| } |
| } |
| -void RichMessageListView::UpdateNotificationAt(views::View* view, int i) { |
| +void MessageListView::UpdateNotificationAt(views::View* view, int i) { |
| int actual_index = GetActualIndex(i); |
| views::View* child = child_at(actual_index); |
| if (animator_.get()) |
| @@ -607,7 +486,7 @@ void RichMessageListView::UpdateNotificationAt(views::View* view, int i) { |
| DoUpdateIfPossible(); |
| } |
| -gfx::Size RichMessageListView::GetPreferredSize() { |
| +gfx::Size MessageListView::GetPreferredSize() { |
| int width = 0; |
| for (int i = 0; i < child_count(); i++) { |
| views::View* child = child_at(i); |
| @@ -619,7 +498,7 @@ gfx::Size RichMessageListView::GetPreferredSize() { |
| GetHeightForWidth(width + GetInsets().width())); |
| } |
| -int RichMessageListView::GetHeightForWidth(int width) { |
| +int MessageListView::GetHeightForWidth(int width) { |
| if (fixed_height_ > 0) |
| return fixed_height_; |
| @@ -637,12 +516,12 @@ int RichMessageListView::GetHeightForWidth(int width) { |
| return height + GetInsets().height(); |
| } |
| -void RichMessageListView::SetRepositionTarget(const gfx::Rect& target) { |
| +void MessageListView::SetRepositionTarget(const gfx::Rect& target) { |
| reposition_top_ = target.y(); |
| fixed_height_ = GetHeightForWidth(width()); |
| } |
| -void RichMessageListView::ResetRepositionSession() { |
| +void MessageListView::ResetRepositionSession() { |
| // Don't call DoUpdateIfPossible(), but let Layout() do the task without |
| // animation. Reset will cause the change of the bubble size itself, and |
| // animation from the old location will look weird. |
| @@ -660,7 +539,7 @@ void RichMessageListView::ResetRepositionSession() { |
| fixed_height_ = 0; |
| } |
| -void RichMessageListView::ClearAllNotifications( |
| +void MessageListView::ClearAllNotifications( |
| const gfx::Rect& visible_scroll_rect) { |
| for (int i = 0; i < child_count(); ++i) { |
| views::View* child = child_at(i); |
| @@ -673,7 +552,7 @@ void RichMessageListView::ClearAllNotifications( |
| DoUpdateIfPossible(); |
| } |
| -void RichMessageListView::OnBoundsAnimatorProgressed( |
| +void MessageListView::OnBoundsAnimatorProgressed( |
| views::BoundsAnimator* animator) { |
| DCHECK_EQ(animator_.get(), animator); |
| for (std::set<views::View*>::iterator iter = deleted_when_done_.begin(); |
| @@ -684,8 +563,7 @@ void RichMessageListView::OnBoundsAnimatorProgressed( |
| } |
| } |
| -void RichMessageListView::OnBoundsAnimatorDone( |
| - views::BoundsAnimator* animator) { |
| +void MessageListView::OnBoundsAnimatorDone(views::BoundsAnimator* animator) { |
| STLDeleteContainerPointers( |
| deleted_when_done_.begin(), deleted_when_done_.end()); |
| deleted_when_done_.clear(); |
| @@ -704,7 +582,7 @@ void RichMessageListView::OnBoundsAnimatorDone( |
| GetWidget()->SynthesizeMouseMoveEvent(); |
| } |
| -int RichMessageListView::GetActualIndex(int index) { |
| +int MessageListView::GetActualIndex(int index) { |
| // As is written in the comment in the declaration, this method |
| // returns actual index for the |index|-th valid child from the end. |
| int actual_index = child_count() - 1; |
| @@ -720,13 +598,13 @@ int RichMessageListView::GetActualIndex(int index) { |
| return actual_index; |
| } |
| -bool RichMessageListView::IsValidChild(views::View* child) { |
| +bool MessageListView::IsValidChild(views::View* child) { |
| return child->visible() && |
| - deleting_views_.find(child) == deleting_views_.end() && |
| - deleted_when_done_.find(child) == deleted_when_done_.end(); |
| + deleting_views_.find(child) == deleting_views_.end() && |
| + deleted_when_done_.find(child) == deleted_when_done_.end(); |
| } |
| -void RichMessageListView::DoUpdateIfPossible() { |
| +void MessageListView::DoUpdateIfPossible() { |
| gfx::Rect child_area = GetContentsBounds(); |
| if (child_area.IsEmpty()) |
| return; |
| @@ -770,9 +648,7 @@ void RichMessageListView::DoUpdateIfPossible() { |
| deleting_views_.clear(); |
| } |
| -void RichMessageListView::AnimateChild(views::View* child, |
| - int top, |
| - int height) { |
| +void MessageListView::AnimateChild(views::View* child, int top, int height) { |
| gfx::Rect child_area = GetContentsBounds(); |
| if (adding_views_.find(child) != adding_views_.end()) { |
| child->SetBounds(child_area.right(), top, child_area.width(), height); |
| @@ -792,7 +668,7 @@ void RichMessageListView::AnimateChild(views::View* child, |
| } |
| } |
| -void RichMessageListView::AnimateClearingOneNotification() { |
| +void MessageListView::AnimateClearingOneNotification() { |
| DCHECK(!clearing_all_views_.empty()); |
| clear_all_started_ = true; |
| @@ -809,35 +685,13 @@ void RichMessageListView::AnimateClearingOneNotification() { |
| if (!clearing_all_views_.empty()) { |
| base::MessageLoop::current()->PostDelayedTask( |
| FROM_HERE, |
| - base::Bind(&RichMessageListView::AnimateClearingOneNotification, |
| - weak_ptr_factory_.GetWeakPtr()), |
| + base::Bind(&MessageListView::AnimateClearingOneNotification, |
| + weak_ptr_factory_.GetWeakPtr()), |
| base::TimeDelta::FromMilliseconds( |
| kAnimateClearingNextNotificationDelayMS)); |
| } |
| } |
| -// MessageCenterButtonBar ////////////////////////////////////////////////////// |
| - |
| -MessageCenterButtonBar::MessageCenterButtonBar( |
| - MessageCenterView* message_center_view, MessageCenter* message_center) |
| - : message_center_view_(message_center_view), |
| - message_center_(message_center), |
| - close_all_button_(NULL) { |
| -} |
| - |
| -MessageCenterButtonBar::~MessageCenterButtonBar() { |
| -} |
| - |
| -void MessageCenterButtonBar::SetAllButtonsEnabled(bool enabled) { |
| - if (close_all_button_) |
| - close_all_button_->SetEnabled(enabled); |
| -} |
| - |
| -void MessageCenterButtonBar::SetCloseAllVisible(bool visible) { |
| - if (close_all_button_) |
| - close_all_button_->SetVisible(visible); |
| -} |
| - |
| // MessageCenterView /////////////////////////////////////////////////////////// |
| MessageCenterView::MessageCenterView(MessageCenter* message_center, |
| @@ -852,10 +706,7 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center, |
| set_background(views::Background::CreateSolidBackground( |
| kMessageCenterBackgroundColor)); |
| - if (IsRichNotificationEnabled()) |
| - button_bar_ = new RichMessageCenterButtonBar(this, message_center); |
| - else |
| - button_bar_ = new PoorMessageCenterButtonBar(this, message_center); |
| + button_bar_ = new MessageCenterButtonBar(this, message_center); |
| const int button_height = button_bar_->GetPreferredSize().height(); |
| scroller_ = new BoundedScrollView(kMinScrollViewHeight, |
| @@ -867,8 +718,7 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center, |
| scroller_->layer()->SetMasksToBounds(true); |
| } |
| - message_list_view_ = IsRichNotificationEnabled() ? |
| - new RichMessageListView(this) : new MessageListView(this); |
| + message_list_view_ = new MessageListView(this); |
| no_notifications_message_view_ = new NoNotificationMessageView(); |
| // Set the default visibility to false, otherwise the notification has slide |
| // in animation when the center is shown. |
| @@ -969,7 +819,6 @@ size_t MessageCenterView::NumMessageViewsForTest() const { |
| } |
| void MessageCenterView::Layout() { |
| - int between_child = IsRichNotificationEnabled() ? 0 : 1; |
| int button_height = button_bar_->GetHeightForWidth(width()); |
| // Skip unnecessary re-layout of contents during the resize animation. |
| if (settings_transition_animation_ && |
| @@ -979,9 +828,8 @@ void MessageCenterView::Layout() { |
| return; |
| } |
| - scroller_->SetBounds(0, 0, width(), height() - button_height - between_child); |
| - settings_view_->SetBounds( |
| - 0, 0, width(), height() - button_height - between_child); |
| + scroller_->SetBounds(0, 0, width(), height() - button_height); |
| + settings_view_->SetBounds(0, 0, width(), height() - button_height); |
| bool is_scrollable = false; |
| if (scroller_->visible()) |