Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/message_center/views/message_center_view.h" | 5 #include "ui/message_center/views/message_center_view.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
| 13 #include "grit/ui_resources.h" | |
| 14 #include "grit/ui_strings.h" | 13 #include "grit/ui_strings.h" |
| 15 #include "ui/base/animation/multi_animation.h" | 14 #include "ui/base/animation/multi_animation.h" |
| 16 #include "ui/base/animation/slide_animation.h" | 15 #include "ui/base/animation/slide_animation.h" |
| 17 #include "ui/base/l10n/l10n_util.h" | 16 #include "ui/base/l10n/l10n_util.h" |
| 18 #include "ui/base/resource/resource_bundle.h" | |
| 19 #include "ui/gfx/canvas.h" | 17 #include "ui/gfx/canvas.h" |
| 20 #include "ui/gfx/insets.h" | 18 #include "ui/gfx/insets.h" |
| 21 #include "ui/gfx/point.h" | |
| 22 #include "ui/gfx/rect.h" | 19 #include "ui/gfx/rect.h" |
| 23 #include "ui/gfx/size.h" | 20 #include "ui/gfx/size.h" |
| 24 #include "ui/gfx/text_constants.h" | |
| 25 #include "ui/message_center/message_center.h" | 21 #include "ui/message_center/message_center.h" |
| 26 #include "ui/message_center/message_center_style.h" | 22 #include "ui/message_center/message_center_style.h" |
| 27 #include "ui/message_center/message_center_tray.h" | 23 #include "ui/message_center/views/message_center_button_bar.h" |
| 28 #include "ui/message_center/message_center_util.h" | |
| 29 #include "ui/message_center/views/message_view.h" | 24 #include "ui/message_center/views/message_view.h" |
| 30 #include "ui/message_center/views/notification_view.h" | 25 #include "ui/message_center/views/notification_view.h" |
| 31 #include "ui/message_center/views/notifier_settings_view.h" | 26 #include "ui/message_center/views/notifier_settings_view.h" |
| 32 #include "ui/views/animation/bounds_animator.h" | 27 #include "ui/views/animation/bounds_animator.h" |
| 33 #include "ui/views/animation/bounds_animator_observer.h" | 28 #include "ui/views/animation/bounds_animator_observer.h" |
| 34 #include "ui/views/background.h" | 29 #include "ui/views/background.h" |
| 35 #include "ui/views/border.h" | 30 #include "ui/views/border.h" |
| 36 #include "ui/views/controls/button/button.h" | 31 #include "ui/views/controls/button/button.h" |
| 37 #include "ui/views/controls/button/label_button.h" | |
| 38 #include "ui/views/controls/label.h" | 32 #include "ui/views/controls/label.h" |
| 39 #include "ui/views/controls/scroll_view.h" | 33 #include "ui/views/controls/scroll_view.h" |
| 40 #include "ui/views/controls/scrollbar/overlay_scroll_bar.h" | 34 #include "ui/views/controls/scrollbar/overlay_scroll_bar.h" |
| 41 #include "ui/views/layout/box_layout.h" | 35 #include "ui/views/layout/box_layout.h" |
| 42 #include "ui/views/layout/grid_layout.h" | |
| 43 #include "ui/views/painter.h" | |
| 44 #include "ui/views/widget/widget.h" | 36 #include "ui/views/widget/widget.h" |
| 45 | 37 |
| 46 namespace message_center { | 38 namespace message_center { |
| 47 | 39 |
| 48 namespace { | 40 namespace { |
| 49 | 41 |
| 50 const int kMinScrollViewHeight = 100; | 42 const int kMinScrollViewHeight = 100; |
| 51 const int kFooterLeftMargin = 17; | |
| 52 const int kFooterRightMargin = 14; | |
| 53 const int kButtonSize = 40; | |
| 54 const SkColor kNoNotificationsTextColor = SkColorSetRGB(0xb4, 0xb4, 0xb4); | 43 const SkColor kNoNotificationsTextColor = SkColorSetRGB(0xb4, 0xb4, 0xb4); |
| 55 const SkColor kBorderDarkColor = SkColorSetRGB(0xaa, 0xaa, 0xaa); | 44 const SkColor kBorderDarkColor = SkColorSetRGB(0xaa, 0xaa, 0xaa); |
| 56 const SkColor kTransparentColor = SkColorSetARGB(0, 0, 0, 0); | 45 const SkColor kTransparentColor = SkColorSetARGB(0, 0, 0, 0); |
| 57 const SkColor kButtonTextHighlightColor = SkColorSetRGB(0x2a, 0x2a, 0x2a); | 46 const SkColor kButtonTextHighlightColor = SkColorSetRGB(0x2a, 0x2a, 0x2a); |
| 58 const SkColor kButtonTextHoverColor = SkColorSetRGB(0x2a, 0x2a, 0x2a); | 47 const SkColor kButtonTextHoverColor = SkColorSetRGB(0x2a, 0x2a, 0x2a); |
| 59 const int kAnimateClearingNextNotificationDelayMS = 40; | 48 const int kAnimateClearingNextNotificationDelayMS = 40; |
| 60 | 49 |
| 61 static const int kDefaultFrameRateHz = 60; | 50 static const int kDefaultFrameRateHz = 60; |
| 62 static const int kDefaultAnimationDurationMs = 120; | 51 static const int kDefaultAnimationDurationMs = 120; |
| 63 | 52 |
| 64 } // namespace | 53 } // namespace |
| 65 | 54 |
| 66 // NotificationCenterButton //////////////////////////////////////////////////// | |
| 67 | |
| 68 class NotificationCenterButton : public views::ToggleImageButton { | |
| 69 public: | |
| 70 NotificationCenterButton(views::ButtonListener* listener, | |
| 71 int normal_id, | |
| 72 int hover_id, | |
| 73 int pressed_id, | |
| 74 int text_id); | |
| 75 | |
| 76 protected: | |
| 77 // Overridden from views::View: | |
| 78 virtual gfx::Size GetPreferredSize() OVERRIDE; | |
| 79 virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; | |
| 80 | |
| 81 private: | |
| 82 DISALLOW_COPY_AND_ASSIGN(NotificationCenterButton); | |
| 83 }; | |
| 84 | |
| 85 NotificationCenterButton::NotificationCenterButton( | |
| 86 views::ButtonListener* listener, | |
| 87 int normal_id, | |
| 88 int hover_id, | |
| 89 int pressed_id, | |
| 90 int text_id) | |
| 91 : views::ToggleImageButton(listener) { | |
| 92 ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance(); | |
| 93 SetImage(STATE_NORMAL, resource_bundle.GetImageSkiaNamed(normal_id)); | |
| 94 SetImage(STATE_HOVERED, resource_bundle.GetImageSkiaNamed(hover_id)); | |
| 95 SetImage(STATE_PRESSED, resource_bundle.GetImageSkiaNamed(pressed_id)); | |
| 96 SetImageAlignment(views::ImageButton::ALIGN_CENTER, | |
| 97 views::ImageButton::ALIGN_MIDDLE); | |
| 98 SetTooltipText(resource_bundle.GetLocalizedString(text_id)); | |
| 99 set_focusable(true); | |
| 100 set_request_focus_on_press(false); | |
| 101 } | |
| 102 | |
| 103 gfx::Size NotificationCenterButton::GetPreferredSize() { | |
| 104 return gfx::Size(kButtonSize, kButtonSize); | |
| 105 } | |
| 106 | |
| 107 void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) { | |
| 108 if (HasFocus() && (focusable() || IsAccessibilityFocusable())) { | |
| 109 canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3), | |
| 110 kFocusBorderColor); | |
| 111 } | |
| 112 } | |
| 113 | |
| 114 // MessageCenterButtonBar ////////////////////////////////////////////////// | |
| 115 | |
| 116 class MessageCenterButtonBar : public views::View, | |
| 117 public views::ButtonListener { | |
| 118 public: | |
| 119 MessageCenterButtonBar(MessageCenterView* message_center_view, | |
| 120 MessageCenter* message_center); | |
| 121 virtual ~MessageCenterButtonBar(); | |
| 122 | |
| 123 virtual void SetAllButtonsEnabled(bool enabled); | |
| 124 void SetCloseAllVisible(bool visible); | |
| 125 | |
| 126 private: | |
| 127 // Overridden from views::View: | |
| 128 virtual void ChildVisibilityChanged(views::View* child) OVERRIDE; | |
| 129 | |
| 130 // Overridden from views::ButtonListener: | |
| 131 virtual void ButtonPressed(views::Button* sender, const ui::Event& event) | |
| 132 OVERRIDE; | |
| 133 | |
| 134 MessageCenterView* message_center_view() const { | |
| 135 return message_center_view_; | |
| 136 } | |
| 137 MessageCenter* message_center() const { return message_center_; } | |
| 138 MessageCenterTray* tray() const { return tray_; } | |
| 139 views::Button* close_all_button() const { return close_all_button_; } | |
| 140 void set_close_all_button(views::Button* button) { | |
| 141 close_all_button_ = button; | |
| 142 } | |
| 143 | |
| 144 MessageCenterView* message_center_view_; // Weak reference. | |
| 145 MessageCenter* message_center_; // Weak reference. | |
| 146 MessageCenterTray* tray_; // Weak reference. | |
| 147 views::Button* close_all_button_; | |
| 148 NotificationCenterButton* settings_button_; | |
| 149 NotificationCenterButton* quiet_mode_button_; | |
| 150 | |
| 151 DISALLOW_COPY_AND_ASSIGN(MessageCenterButtonBar); | |
| 152 }; | |
| 153 | |
| 154 MessageCenterButtonBar::MessageCenterButtonBar( | |
| 155 MessageCenterView* message_center_view, | |
| 156 MessageCenter* message_center) | |
| 157 : message_center_view_(message_center_view), | |
| 158 message_center_(message_center), | |
| 159 close_all_button_(NULL) { | |
| 160 if (get_use_acceleration_when_possible()) | |
| 161 SetPaintToLayer(true); | |
| 162 set_background(views::Background::CreateSolidBackground( | |
| 163 kMessageCenterBackgroundColor)); | |
| 164 | |
| 165 views::Label* notification_label = new views::Label(l10n_util::GetStringUTF16( | |
| 166 IDS_MESSAGE_CENTER_FOOTER_TITLE)); | |
| 167 notification_label->SetAutoColorReadabilityEnabled(false); | |
| 168 notification_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
| 169 notification_label->SetEnabledColor(kRegularTextColor); | |
| 170 AddChildView(notification_label); | |
| 171 | |
| 172 views::View* button_container = new views::View; | |
| 173 button_container->SetLayoutManager( | |
| 174 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); | |
| 175 quiet_mode_button_ = new NotificationCenterButton( | |
| 176 this, | |
| 177 IDR_NOTIFICATION_DO_NOT_DISTURB, | |
| 178 IDR_NOTIFICATION_DO_NOT_DISTURB_HOVER, | |
| 179 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED, | |
| 180 IDS_MESSAGE_CENTER_QUIET_MODE_BUTTON_TOOLTIP); | |
| 181 ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance(); | |
| 182 quiet_mode_button_->SetToggledImage( | |
| 183 views::Button::STATE_NORMAL, | |
| 184 resource_bundle.GetImageSkiaNamed( | |
| 185 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED)); | |
| 186 quiet_mode_button_->SetToggledImage( | |
| 187 views::Button::STATE_HOVERED, | |
| 188 resource_bundle.GetImageSkiaNamed( | |
| 189 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED)); | |
| 190 quiet_mode_button_->SetToggledImage( | |
| 191 views::Button::STATE_PRESSED, | |
| 192 resource_bundle.GetImageSkiaNamed( | |
| 193 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED)); | |
| 194 quiet_mode_button_->SetToggled(message_center->IsQuietMode()); | |
| 195 button_container->AddChildView(quiet_mode_button_); | |
| 196 | |
| 197 NotificationCenterButton* close_all_button = new NotificationCenterButton( | |
| 198 this, | |
| 199 IDR_NOTIFICATION_CLEAR_ALL, | |
| 200 IDR_NOTIFICATION_CLEAR_ALL_HOVER, | |
| 201 IDR_NOTIFICATION_CLEAR_ALL_PRESSED, | |
| 202 IDS_MESSAGE_CENTER_CLEAR_ALL); | |
| 203 button_container->AddChildView(close_all_button); | |
| 204 set_close_all_button(close_all_button); | |
| 205 settings_button_ = new NotificationCenterButton( | |
| 206 this, | |
| 207 IDR_NOTIFICATION_SETTINGS, | |
| 208 IDR_NOTIFICATION_SETTINGS_HOVER, | |
| 209 IDR_NOTIFICATION_SETTINGS_PRESSED, | |
| 210 IDS_MESSAGE_CENTER_SETTINGS_BUTTON_LABEL); | |
| 211 button_container->AddChildView(settings_button_); | |
| 212 | |
| 213 gfx::ImageSkia* settings_image = | |
| 214 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | |
| 215 IDR_NOTIFICATION_SETTINGS); | |
| 216 int image_margin = std::max(0, (kButtonSize - settings_image->width()) / 2); | |
| 217 views::GridLayout* layout = new views::GridLayout(this); | |
| 218 SetLayoutManager(layout); | |
| 219 layout->SetInsets( | |
| 220 0, kFooterLeftMargin, 0, std::max(0, kFooterRightMargin - image_margin)); | |
| 221 views::ColumnSet* column = layout->AddColumnSet(0); | |
| 222 column->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, | |
| 223 1.0f, views::GridLayout::USE_PREF, 0, 0); | |
| 224 column->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, | |
| 225 0, views::GridLayout::USE_PREF, 0, 0); | |
| 226 layout->StartRow(0, 0); | |
| 227 layout->AddView(notification_label); | |
| 228 layout->AddView(button_container); | |
| 229 } | |
| 230 | |
| 231 MessageCenterButtonBar::~MessageCenterButtonBar() {} | |
| 232 | |
| 233 void MessageCenterButtonBar::SetAllButtonsEnabled(bool enabled) { | |
| 234 if (close_all_button_) | |
| 235 close_all_button_->SetEnabled(enabled); | |
| 236 settings_button_->SetEnabled(enabled); | |
| 237 quiet_mode_button_->SetEnabled(enabled); | |
| 238 } | |
| 239 | |
| 240 void MessageCenterButtonBar::SetCloseAllVisible(bool visible) { | |
| 241 if (close_all_button_) | |
| 242 close_all_button_->SetVisible(visible); | |
| 243 } | |
| 244 | |
| 245 // Overridden from views::View: | |
| 246 void MessageCenterButtonBar::ChildVisibilityChanged(views::View* child) { | |
| 247 InvalidateLayout(); | |
| 248 } | |
| 249 | |
| 250 // Overridden from views::ButtonListener: | |
| 251 void MessageCenterButtonBar::ButtonPressed(views::Button* sender, | |
| 252 const ui::Event& event) { | |
| 253 if (sender == close_all_button()) { | |
| 254 message_center_view()->ClearAllNotifications(); | |
| 255 } else if (sender == settings_button_) { | |
| 256 MessageCenterView* center_view = static_cast<MessageCenterView*>(parent()); | |
| 257 center_view->SetSettingsVisible(!center_view->settings_visible()); | |
| 258 } else if (sender == quiet_mode_button_) { | |
| 259 if (message_center()->IsQuietMode()) | |
| 260 message_center()->SetQuietMode(false); | |
| 261 else | |
| 262 message_center()->EnterQuietModeWithExpire(base::TimeDelta::FromDays(1)); | |
| 263 quiet_mode_button_->SetToggled(message_center()->IsQuietMode()); | |
| 264 } else { | |
| 265 NOTREACHED(); | |
| 266 } | |
| 267 } | |
| 268 | |
| 269 // BoundedScrollView /////////////////////////////////////////////////////////// | 55 // BoundedScrollView /////////////////////////////////////////////////////////// |
| 270 | 56 |
| 271 // A custom scroll view whose height has a minimum and maximum value and whose | 57 // A custom scroll view whose height has a minimum and maximum value and whose |
| 272 // scroll bar disappears when not needed. | 58 // scroll bar disappears when not needed. |
| 273 class BoundedScrollView : public views::ScrollView { | 59 class BoundedScrollView : public views::ScrollView { |
| 274 public: | 60 public: |
| 275 BoundedScrollView(int min_height, int max_height); | 61 BoundedScrollView(int min_height, int max_height); |
| 276 | 62 |
| 277 // Overridden from views::View: | 63 // Overridden from views::View: |
| 278 virtual gfx::Size GetPreferredSize() OVERRIDE; | 64 virtual gfx::Size GetPreferredSize() OVERRIDE; |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 798 // MessageCenterView /////////////////////////////////////////////////////////// | 584 // MessageCenterView /////////////////////////////////////////////////////////// |
| 799 | 585 |
| 800 MessageCenterView::MessageCenterView(MessageCenter* message_center, | 586 MessageCenterView::MessageCenterView(MessageCenter* message_center, |
| 801 MessageCenterTray* tray, | 587 MessageCenterTray* tray, |
| 802 int max_height, | 588 int max_height, |
| 803 bool initially_settings_visible, | 589 bool initially_settings_visible, |
| 804 bool top_down) | 590 bool top_down) |
| 805 : message_center_(message_center), | 591 : message_center_(message_center), |
| 806 tray_(tray), | 592 tray_(tray), |
| 807 top_down_(top_down), | 593 top_down_(top_down), |
| 808 settings_visible_(initially_settings_visible) { | 594 settings_visible_(initially_settings_visible), |
| 595 source_view_(NULL), | |
| 596 source_height_(0), | |
| 597 target_view_(NULL), | |
| 598 target_height_(0) { | |
| 809 message_center_->AddObserver(this); | 599 message_center_->AddObserver(this); |
| 810 set_notify_enter_exit_on_child(true); | 600 set_notify_enter_exit_on_child(true); |
| 811 set_background(views::Background::CreateSolidBackground( | 601 set_background(views::Background::CreateSolidBackground( |
| 812 kMessageCenterBackgroundColor)); | 602 kMessageCenterBackgroundColor)); |
| 813 | 603 |
| 814 button_bar_ = new MessageCenterButtonBar(this, message_center); | 604 NotifierSettingsProvider* notifier_settings_provider = |
| 605 message_center_->GetNotifierSettingsProvider(); | |
| 606 button_bar_ = new MessageCenterButtonBar(this, | |
| 607 message_center, | |
| 608 notifier_settings_provider, | |
| 609 initially_settings_visible); | |
| 815 | 610 |
| 816 const int button_height = button_bar_->GetPreferredSize().height(); | 611 const int button_height = button_bar_->GetPreferredSize().height(); |
| 817 scroller_ = new BoundedScrollView(kMinScrollViewHeight, | 612 const int kButtonBarBorderThickness = 1; |
|
jianli
2013/08/05 20:48:03
nit: move it to the constant sections at the begin
dewittj
2013/08/05 22:42:28
Done.
| |
| 818 max_height - button_height); | 613 button_bar_->set_border(views::Border::CreateSolidSidedBorder( |
| 614 top_down_ ? 0 : kButtonBarBorderThickness, | |
| 615 0, | |
| 616 top_down_ ? kButtonBarBorderThickness : 0, | |
| 617 0, | |
| 618 kFooterDelimiterColor)); | |
| 619 | |
| 620 scroller_ = | |
| 621 new BoundedScrollView(kMinScrollViewHeight, max_height - button_height); | |
| 819 | 622 |
| 820 if (get_use_acceleration_when_possible()) { | 623 if (get_use_acceleration_when_possible()) { |
| 821 scroller_->SetPaintToLayer(true); | 624 scroller_->SetPaintToLayer(true); |
| 822 scroller_->SetFillsBoundsOpaquely(false); | 625 scroller_->SetFillsBoundsOpaquely(false); |
| 823 scroller_->layer()->SetMasksToBounds(true); | 626 scroller_->layer()->SetMasksToBounds(true); |
| 824 } | 627 } |
| 825 | 628 |
| 826 message_list_view_ = new MessageListView(this, top_down); | 629 message_list_view_ = new MessageListView(this, top_down); |
| 827 no_notifications_message_view_ = new NoNotificationMessageView(); | 630 no_notifications_message_view_ = new NoNotificationMessageView(); |
| 828 // Set the default visibility to false, otherwise the notification has slide | 631 // Set the default visibility to false, otherwise the notification has slide |
| 829 // in animation when the center is shown. | 632 // in animation when the center is shown. |
| 830 no_notifications_message_view_->SetVisible(false); | 633 no_notifications_message_view_->SetVisible(false); |
| 831 message_list_view_->AddChildView(no_notifications_message_view_); | 634 message_list_view_->AddChildView(no_notifications_message_view_); |
| 832 scroller_->SetContents(message_list_view_); | 635 scroller_->SetContents(message_list_view_); |
| 833 | 636 |
| 834 settings_view_ = new NotifierSettingsView( | 637 settings_view_ = new NotifierSettingsView(notifier_settings_provider); |
| 835 message_center_->GetNotifierSettingsProvider()); | |
| 836 | 638 |
| 837 if (initially_settings_visible) | 639 if (initially_settings_visible) |
| 838 scroller_->SetVisible(false); | 640 scroller_->SetVisible(false); |
| 839 else | 641 else |
| 840 settings_view_->SetVisible(false); | 642 settings_view_->SetVisible(false); |
| 841 | 643 |
| 842 AddChildView(scroller_); | 644 AddChildView(scroller_); |
| 843 AddChildView(settings_view_); | 645 AddChildView(settings_view_); |
| 844 AddChildView(button_bar_); | 646 AddChildView(button_bar_); |
| 845 } | 647 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 900 } else { | 702 } else { |
| 901 parts.push_back(ui::MultiAnimation::Part()); | 703 parts.push_back(ui::MultiAnimation::Part()); |
| 902 } | 704 } |
| 903 settings_transition_animation_.reset(new ui::MultiAnimation( | 705 settings_transition_animation_.reset(new ui::MultiAnimation( |
| 904 parts, base::TimeDelta::FromMicroseconds(1000000 / kDefaultFrameRateHz))); | 706 parts, base::TimeDelta::FromMicroseconds(1000000 / kDefaultFrameRateHz))); |
| 905 settings_transition_animation_->set_delegate(this); | 707 settings_transition_animation_->set_delegate(this); |
| 906 settings_transition_animation_->set_continuous(false); | 708 settings_transition_animation_->set_continuous(false); |
| 907 settings_transition_animation_->Start(); | 709 settings_transition_animation_->Start(); |
| 908 } | 710 } |
| 909 | 711 |
| 712 void MessageCenterView::OnSettingsChanged() { | |
| 713 scroller_->InvalidateLayout(); | |
| 714 PreferredSizeChanged(); | |
| 715 Layout(); | |
| 716 } | |
| 717 | |
| 910 void MessageCenterView::ClearAllNotifications() { | 718 void MessageCenterView::ClearAllNotifications() { |
| 911 scroller_->SetEnabled(false); | 719 scroller_->SetEnabled(false); |
| 912 button_bar_->SetAllButtonsEnabled(false); | 720 button_bar_->SetAllButtonsEnabled(false); |
| 913 message_list_view_->ClearAllNotifications(scroller_->GetVisibleRect()); | 721 message_list_view_->ClearAllNotifications(scroller_->GetVisibleRect()); |
| 914 } | 722 } |
| 915 | 723 |
| 916 void MessageCenterView::OnAllNotificationsCleared() { | 724 void MessageCenterView::OnAllNotificationsCleared() { |
| 917 scroller_->SetEnabled(true); | 725 scroller_->SetEnabled(true); |
| 918 button_bar_->SetAllButtonsEnabled(true); | 726 button_bar_->SetAllButtonsEnabled(true); |
| 919 message_center_->RemoveAllNotifications(true); // Action by user. | 727 message_center_->RemoveAllNotifications(true); // Action by user. |
| 920 } | 728 } |
| 921 | 729 |
| 922 size_t MessageCenterView::NumMessageViewsForTest() const { | 730 size_t MessageCenterView::NumMessageViewsForTest() const { |
| 923 return message_list_view_->child_count(); | 731 return message_list_view_->child_count(); |
| 924 } | 732 } |
| 925 | 733 |
| 926 void MessageCenterView::Layout() { | 734 void MessageCenterView::Layout() { |
| 927 int button_height = button_bar_->GetHeightForWidth(width()); | 735 int button_height = button_bar_->GetHeightForWidth(width()) + |
| 736 button_bar_->GetInsets().height(); | |
| 928 // Skip unnecessary re-layout of contents during the resize animation. | 737 // Skip unnecessary re-layout of contents during the resize animation. |
| 929 if (settings_transition_animation_ && | 738 if (settings_transition_animation_ && |
| 930 settings_transition_animation_->is_animating() && | 739 settings_transition_animation_->is_animating() && |
| 931 settings_transition_animation_->current_part_index() == 0) { | 740 settings_transition_animation_->current_part_index() == 0) { |
| 932 if (!top_down_) | 741 if (!top_down_) |
| 933 button_bar_->SetBounds( | 742 button_bar_->SetBounds( |
| 934 0, height() - button_height, width(), button_height); | 743 0, height() - button_height, width(), button_height); |
| 935 return; | 744 return; |
| 936 } | 745 } |
| 937 | 746 |
| 938 scroller_->SetBounds(0, | 747 scroller_->SetBounds(0, |
| 939 top_down_ ? button_height : 0, | 748 top_down_ ? button_height : 0, |
| 940 width(), | 749 width(), |
| 941 height() - button_height); | 750 height() - button_height); |
| 942 settings_view_->SetBounds(0, | 751 settings_view_->SetBounds(0, |
| 943 top_down_ ? button_height : 0, | 752 top_down_ ? button_height : 0, |
| 944 width(), | 753 width(), |
| 945 height() - button_height); | 754 height() - button_height); |
| 946 | 755 |
| 947 bool is_scrollable = false; | |
| 948 if (scroller_->visible()) | |
| 949 is_scrollable = scroller_->height() < message_list_view_->height(); | |
| 950 else | |
| 951 is_scrollable = settings_view_->IsScrollable(); | |
| 952 | |
| 953 if (is_scrollable && !button_bar_->border()) { | |
| 954 // Draw separator line on the top of the button bar if it is on the bottom | |
| 955 // or draw it at the bottom if the bar is on the top. | |
| 956 button_bar_->set_border(views::Border::CreateSolidSidedBorder( | |
| 957 top_down_ ? 0 : 1, | |
| 958 0, | |
| 959 top_down_ ? 1 : 0, | |
| 960 0, | |
| 961 kFooterDelimiterColor)); | |
| 962 button_bar_->SchedulePaint(); | |
| 963 } else if (!is_scrollable && button_bar_->border()) { | |
| 964 button_bar_->set_border(NULL); | |
| 965 button_bar_->SchedulePaint(); | |
| 966 } | |
| 967 | |
| 968 button_bar_->SetBounds(0, | 756 button_bar_->SetBounds(0, |
| 969 top_down_ ? 0 : height() - button_height, | 757 top_down_ ? 0 : height() - button_height, |
| 970 width(), | 758 width(), |
| 971 button_height); | 759 button_height); |
| 972 if (GetWidget()) | 760 if (GetWidget()) |
| 973 GetWidget()->GetRootView()->SchedulePaint(); | 761 GetWidget()->GetRootView()->SchedulePaint(); |
| 974 } | 762 } |
| 975 | 763 |
| 976 gfx::Size MessageCenterView::GetPreferredSize() { | 764 gfx::Size MessageCenterView::GetPreferredSize() { |
| 977 if (settings_transition_animation_ && | 765 if (settings_transition_animation_ && |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1001 source_height_, target_height_); | 789 source_height_, target_height_); |
| 1002 } | 790 } |
| 1003 return button_bar_->GetHeightForWidth(width) + content_height; | 791 return button_bar_->GetHeightForWidth(width) + content_height; |
| 1004 } | 792 } |
| 1005 | 793 |
| 1006 int content_height = 0; | 794 int content_height = 0; |
| 1007 if (scroller_->visible()) | 795 if (scroller_->visible()) |
| 1008 content_height += scroller_->GetHeightForWidth(width); | 796 content_height += scroller_->GetHeightForWidth(width); |
| 1009 else | 797 else |
| 1010 content_height += settings_view_->GetHeightForWidth(width); | 798 content_height += settings_view_->GetHeightForWidth(width); |
| 1011 return button_bar_->GetHeightForWidth(width) + content_height; | 799 return button_bar_->GetHeightForWidth(width) + |
| 800 button_bar_->GetInsets().height() + content_height; | |
| 1012 } | 801 } |
| 1013 | 802 |
| 1014 bool MessageCenterView::OnMouseWheel(const ui::MouseWheelEvent& event) { | 803 bool MessageCenterView::OnMouseWheel(const ui::MouseWheelEvent& event) { |
| 1015 // Do not rely on the default scroll event handler of ScrollView because | 804 // Do not rely on the default scroll event handler of ScrollView because |
| 1016 // the scroll happens only when the focus is on the ScrollView. The | 805 // the scroll happens only when the focus is on the ScrollView. The |
| 1017 // notification center will allow the scrolling even when the focus is on | 806 // notification center will allow the scrolling even when the focus is on |
| 1018 // the buttons. | 807 // the buttons. |
| 1019 if (scroller_->bounds().Contains(event.location())) | 808 if (scroller_->bounds().Contains(event.location())) |
| 1020 return scroller_->OnMouseWheel(event); | 809 return scroller_->OnMouseWheel(event); |
| 1021 return views::View::OnMouseWheel(event); | 810 return views::View::OnMouseWheel(event); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1165 scroller_->InvalidateLayout(); | 954 scroller_->InvalidateLayout(); |
| 1166 PreferredSizeChanged(); | 955 PreferredSizeChanged(); |
| 1167 Layout(); | 956 Layout(); |
| 1168 } | 957 } |
| 1169 | 958 |
| 1170 void MessageCenterView::SetNotificationViewForTest(views::View* view) { | 959 void MessageCenterView::SetNotificationViewForTest(views::View* view) { |
| 1171 message_list_view_->AddNotificationAt(view, 0); | 960 message_list_view_->AddNotificationAt(view, 0); |
| 1172 } | 961 } |
| 1173 | 962 |
| 1174 } // namespace message_center | 963 } // namespace message_center |
| OLD | NEW |