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 0792ec8a690f0d16e98e9538f967a3b36071f008..9b3b9417667897039b017bd79386b8badf4f6b45 100644 |
--- a/ui/message_center/views/message_center_view.cc |
+++ b/ui/message_center/views/message_center_view.cc |
@@ -10,22 +10,17 @@ |
#include "base/memory/weak_ptr.h" |
#include "base/message_loop/message_loop.h" |
#include "base/stl_util.h" |
-#include "grit/ui_resources.h" |
#include "grit/ui_strings.h" |
#include "ui/base/animation/multi_animation.h" |
#include "ui/base/animation/slide_animation.h" |
#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
#include "ui/gfx/canvas.h" |
#include "ui/gfx/insets.h" |
-#include "ui/gfx/point.h" |
#include "ui/gfx/rect.h" |
#include "ui/gfx/size.h" |
-#include "ui/gfx/text_constants.h" |
#include "ui/message_center/message_center.h" |
#include "ui/message_center/message_center_style.h" |
-#include "ui/message_center/message_center_tray.h" |
-#include "ui/message_center/message_center_util.h" |
+#include "ui/message_center/views/message_center_button_bar.h" |
#include "ui/message_center/views/message_view.h" |
#include "ui/message_center/views/notification_view.h" |
#include "ui/message_center/views/notifier_settings_view.h" |
@@ -34,13 +29,10 @@ |
#include "ui/views/background.h" |
#include "ui/views/border.h" |
#include "ui/views/controls/button/button.h" |
-#include "ui/views/controls/button/label_button.h" |
#include "ui/views/controls/label.h" |
#include "ui/views/controls/scroll_view.h" |
#include "ui/views/controls/scrollbar/overlay_scroll_bar.h" |
#include "ui/views/layout/box_layout.h" |
-#include "ui/views/layout/grid_layout.h" |
-#include "ui/views/painter.h" |
#include "ui/views/widget/widget.h" |
namespace message_center { |
@@ -48,9 +40,6 @@ namespace message_center { |
namespace { |
const int kMinScrollViewHeight = 100; |
-const int kFooterLeftMargin = 17; |
-const int kFooterRightMargin = 14; |
-const int kButtonSize = 40; |
const SkColor kNoNotificationsTextColor = SkColorSetRGB(0xb4, 0xb4, 0xb4); |
const SkColor kBorderDarkColor = SkColorSetRGB(0xaa, 0xaa, 0xaa); |
const SkColor kTransparentColor = SkColorSetARGB(0, 0, 0, 0); |
@@ -63,209 +52,6 @@ static const int kDefaultAnimationDurationMs = 120; |
} // namespace |
-// NotificationCenterButton //////////////////////////////////////////////////// |
- |
-class NotificationCenterButton : public views::ToggleImageButton { |
- public: |
- NotificationCenterButton(views::ButtonListener* listener, |
- int normal_id, |
- int hover_id, |
- int pressed_id, |
- int text_id); |
- |
- protected: |
- // Overridden from views::View: |
- virtual gfx::Size GetPreferredSize() OVERRIDE; |
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(NotificationCenterButton); |
-}; |
- |
-NotificationCenterButton::NotificationCenterButton( |
- views::ButtonListener* listener, |
- int normal_id, |
- int hover_id, |
- int pressed_id, |
- int text_id) |
- : views::ToggleImageButton(listener) { |
- ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance(); |
- SetImage(STATE_NORMAL, resource_bundle.GetImageSkiaNamed(normal_id)); |
- SetImage(STATE_HOVERED, resource_bundle.GetImageSkiaNamed(hover_id)); |
- SetImage(STATE_PRESSED, resource_bundle.GetImageSkiaNamed(pressed_id)); |
- SetImageAlignment(views::ImageButton::ALIGN_CENTER, |
- views::ImageButton::ALIGN_MIDDLE); |
- SetTooltipText(resource_bundle.GetLocalizedString(text_id)); |
- set_focusable(true); |
- set_request_focus_on_press(false); |
-} |
- |
-gfx::Size NotificationCenterButton::GetPreferredSize() { |
- return gfx::Size(kButtonSize, kButtonSize); |
-} |
- |
-void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) { |
- if (HasFocus() && (focusable() || IsAccessibilityFocusable())) { |
- canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3), |
- kFocusBorderColor); |
- } |
-} |
- |
-// MessageCenterButtonBar ////////////////////////////////////////////////// |
- |
-class MessageCenterButtonBar : public views::View, |
- public views::ButtonListener { |
- public: |
- MessageCenterButtonBar(MessageCenterView* message_center_view, |
- MessageCenter* message_center); |
- virtual ~MessageCenterButtonBar(); |
- |
- virtual void SetAllButtonsEnabled(bool enabled); |
- void SetCloseAllVisible(bool visible); |
- |
- private: |
- // 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; |
- |
- MessageCenterView* message_center_view() const { |
- return message_center_view_; |
- } |
- MessageCenter* message_center() const { return message_center_; } |
- MessageCenterTray* tray() const { return tray_; } |
- views::Button* close_all_button() const { return close_all_button_; } |
- void set_close_all_button(views::Button* button) { |
- close_all_button_ = button; |
- } |
- |
- MessageCenterView* message_center_view_; // Weak reference. |
- MessageCenter* message_center_; // Weak reference. |
- MessageCenterTray* tray_; // Weak reference. |
- views::Button* close_all_button_; |
- NotificationCenterButton* settings_button_; |
- NotificationCenterButton* quiet_mode_button_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MessageCenterButtonBar); |
-}; |
- |
-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( |
- kMessageCenterBackgroundColor)); |
- |
- views::Label* notification_label = new views::Label(l10n_util::GetStringUTF16( |
- IDS_MESSAGE_CENTER_FOOTER_TITLE)); |
- notification_label->SetAutoColorReadabilityEnabled(false); |
- notification_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- notification_label->SetEnabledColor(kRegularTextColor); |
- AddChildView(notification_label); |
- |
- views::View* button_container = new views::View; |
- button_container->SetLayoutManager( |
- new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); |
- quiet_mode_button_ = new NotificationCenterButton( |
- this, |
- IDR_NOTIFICATION_DO_NOT_DISTURB, |
- IDR_NOTIFICATION_DO_NOT_DISTURB_HOVER, |
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED, |
- IDS_MESSAGE_CENTER_QUIET_MODE_BUTTON_TOOLTIP); |
- ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance(); |
- quiet_mode_button_->SetToggledImage( |
- views::Button::STATE_NORMAL, |
- resource_bundle.GetImageSkiaNamed( |
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED)); |
- quiet_mode_button_->SetToggledImage( |
- views::Button::STATE_HOVERED, |
- resource_bundle.GetImageSkiaNamed( |
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED)); |
- quiet_mode_button_->SetToggledImage( |
- views::Button::STATE_PRESSED, |
- resource_bundle.GetImageSkiaNamed( |
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED)); |
- quiet_mode_button_->SetToggled(message_center->IsQuietMode()); |
- button_container->AddChildView(quiet_mode_button_); |
- |
- NotificationCenterButton* close_all_button = new NotificationCenterButton( |
- this, |
- IDR_NOTIFICATION_CLEAR_ALL, |
- IDR_NOTIFICATION_CLEAR_ALL_HOVER, |
- IDR_NOTIFICATION_CLEAR_ALL_PRESSED, |
- IDS_MESSAGE_CENTER_CLEAR_ALL); |
- button_container->AddChildView(close_all_button); |
- set_close_all_button(close_all_button); |
- settings_button_ = new NotificationCenterButton( |
- this, |
- IDR_NOTIFICATION_SETTINGS, |
- IDR_NOTIFICATION_SETTINGS_HOVER, |
- IDR_NOTIFICATION_SETTINGS_PRESSED, |
- IDS_MESSAGE_CENTER_SETTINGS_BUTTON_LABEL); |
- button_container->AddChildView(settings_button_); |
- |
- gfx::ImageSkia* settings_image = |
- ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
- IDR_NOTIFICATION_SETTINGS); |
- int image_margin = std::max(0, (kButtonSize - settings_image->width()) / 2); |
- views::GridLayout* layout = new views::GridLayout(this); |
- SetLayoutManager(layout); |
- layout->SetInsets( |
- 0, kFooterLeftMargin, 0, std::max(0, kFooterRightMargin - image_margin)); |
- views::ColumnSet* column = layout->AddColumnSet(0); |
- column->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, |
- 1.0f, views::GridLayout::USE_PREF, 0, 0); |
- column->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, |
- 0, views::GridLayout::USE_PREF, 0, 0); |
- layout->StartRow(0, 0); |
- layout->AddView(notification_label); |
- layout->AddView(button_container); |
-} |
- |
-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 MessageCenterButtonBar::ChildVisibilityChanged(views::View* child) { |
- InvalidateLayout(); |
-} |
- |
-// Overridden from views::ButtonListener: |
-void MessageCenterButtonBar::ButtonPressed(views::Button* sender, |
- const ui::Event& event) { |
- if (sender == close_all_button()) { |
- message_center_view()->ClearAllNotifications(); |
- } else if (sender == settings_button_) { |
- MessageCenterView* center_view = static_cast<MessageCenterView*>(parent()); |
- center_view->SetSettingsVisible(!center_view->settings_visible()); |
- } else if (sender == quiet_mode_button_) { |
- if (message_center()->IsQuietMode()) |
- message_center()->SetQuietMode(false); |
- else |
- message_center()->EnterQuietModeWithExpire(base::TimeDelta::FromDays(1)); |
- quiet_mode_button_->SetToggled(message_center()->IsQuietMode()); |
- } else { |
- NOTREACHED(); |
- } |
-} |
- |
// BoundedScrollView /////////////////////////////////////////////////////////// |
// A custom scroll view whose height has a minimum and maximum value and whose |
@@ -805,17 +591,34 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center, |
: message_center_(message_center), |
tray_(tray), |
top_down_(top_down), |
- settings_visible_(initially_settings_visible) { |
+ settings_visible_(initially_settings_visible), |
+ source_view_(NULL), |
+ source_height_(0), |
+ target_view_(NULL), |
+ target_height_(0) { |
message_center_->AddObserver(this); |
set_notify_enter_exit_on_child(true); |
set_background(views::Background::CreateSolidBackground( |
kMessageCenterBackgroundColor)); |
- button_bar_ = new MessageCenterButtonBar(this, message_center); |
+ NotifierSettingsProvider* notifier_settings_provider = |
+ message_center_->GetNotifierSettingsProvider(); |
+ button_bar_ = new MessageCenterButtonBar(this, |
+ message_center, |
+ notifier_settings_provider, |
+ initially_settings_visible); |
const int button_height = button_bar_->GetPreferredSize().height(); |
- scroller_ = new BoundedScrollView(kMinScrollViewHeight, |
- max_height - button_height); |
+ 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.
|
+ button_bar_->set_border(views::Border::CreateSolidSidedBorder( |
+ top_down_ ? 0 : kButtonBarBorderThickness, |
+ 0, |
+ top_down_ ? kButtonBarBorderThickness : 0, |
+ 0, |
+ kFooterDelimiterColor)); |
+ |
+ scroller_ = |
+ new BoundedScrollView(kMinScrollViewHeight, max_height - button_height); |
if (get_use_acceleration_when_possible()) { |
scroller_->SetPaintToLayer(true); |
@@ -831,8 +634,7 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center, |
message_list_view_->AddChildView(no_notifications_message_view_); |
scroller_->SetContents(message_list_view_); |
- settings_view_ = new NotifierSettingsView( |
- message_center_->GetNotifierSettingsProvider()); |
+ settings_view_ = new NotifierSettingsView(notifier_settings_provider); |
if (initially_settings_visible) |
scroller_->SetVisible(false); |
@@ -907,6 +709,12 @@ void MessageCenterView::SetSettingsVisible(bool visible) { |
settings_transition_animation_->Start(); |
} |
+void MessageCenterView::OnSettingsChanged() { |
+ scroller_->InvalidateLayout(); |
+ PreferredSizeChanged(); |
+ Layout(); |
+} |
+ |
void MessageCenterView::ClearAllNotifications() { |
scroller_->SetEnabled(false); |
button_bar_->SetAllButtonsEnabled(false); |
@@ -924,7 +732,8 @@ size_t MessageCenterView::NumMessageViewsForTest() const { |
} |
void MessageCenterView::Layout() { |
- int button_height = button_bar_->GetHeightForWidth(width()); |
+ int button_height = button_bar_->GetHeightForWidth(width()) + |
+ button_bar_->GetInsets().height(); |
// Skip unnecessary re-layout of contents during the resize animation. |
if (settings_transition_animation_ && |
settings_transition_animation_->is_animating() && |
@@ -944,27 +753,6 @@ void MessageCenterView::Layout() { |
width(), |
height() - button_height); |
- bool is_scrollable = false; |
- if (scroller_->visible()) |
- is_scrollable = scroller_->height() < message_list_view_->height(); |
- else |
- is_scrollable = settings_view_->IsScrollable(); |
- |
- if (is_scrollable && !button_bar_->border()) { |
- // Draw separator line on the top of the button bar if it is on the bottom |
- // or draw it at the bottom if the bar is on the top. |
- button_bar_->set_border(views::Border::CreateSolidSidedBorder( |
- top_down_ ? 0 : 1, |
- 0, |
- top_down_ ? 1 : 0, |
- 0, |
- kFooterDelimiterColor)); |
- button_bar_->SchedulePaint(); |
- } else if (!is_scrollable && button_bar_->border()) { |
- button_bar_->set_border(NULL); |
- button_bar_->SchedulePaint(); |
- } |
- |
button_bar_->SetBounds(0, |
top_down_ ? 0 : height() - button_height, |
width(), |
@@ -1008,7 +796,8 @@ int MessageCenterView::GetHeightForWidth(int width) { |
content_height += scroller_->GetHeightForWidth(width); |
else |
content_height += settings_view_->GetHeightForWidth(width); |
- return button_bar_->GetHeightForWidth(width) + content_height; |
+ return button_bar_->GetHeightForWidth(width) + |
+ button_bar_->GetInsets().height() + content_height; |
} |
bool MessageCenterView::OnMouseWheel(const ui::MouseWheelEvent& event) { |