Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: ui/message_center/views/message_center_button_bar.cc

Issue 20066003: Update notification settings to allow for multiprofile situations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix message_center_unittests Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "ui/message_center/views/message_center_button_bar.h"
6
7 #include "grit/ui_resources.h"
8 #include "grit/ui_strings.h"
9 #include "ui/base/l10n/l10n_util.h"
10 #include "ui/base/models/simple_menu_model.h"
11 #include "ui/base/resource/resource_bundle.h"
12 #include "ui/gfx/canvas.h"
13 #include "ui/gfx/text_constants.h"
14 #include "ui/message_center/message_center.h"
15 #include "ui/message_center/message_center_style.h"
16 #include "ui/message_center/notifier_settings.h"
17 #include "ui/message_center/views/message_center_view.h"
18 #include "ui/views/controls/button/button.h"
19 #include "ui/views/controls/button/image_button.h"
20 #include "ui/views/controls/button/label_button.h"
21 #include "ui/views/controls/button/menu_button.h"
22 #include "ui/views/controls/button/menu_button_listener.h"
23 #include "ui/views/controls/label.h"
24 #include "ui/views/controls/menu/menu_runner.h"
25 #include "ui/views/layout/box_layout.h"
26 #include "ui/views/layout/grid_layout.h"
27
28 namespace message_center {
29
30 namespace {
31 const int kButtonSize = 40;
32 const int kChevronMargin = 4;
33 const int kFooterLeftMargin = 17;
34 const int kFooterRightMargin = 14;
35 } // namespace
36
37 // NotificationCenterButton ////////////////////////////////////////////////////
38 ////////////////////////////////////////////////////////////////////////////////
39 class NotificationCenterButton : public views::ToggleImageButton {
40 public:
41 NotificationCenterButton(views::ButtonListener* listener,
42 int normal_id,
43 int hover_id,
44 int pressed_id,
45 int text_id);
46
47 protected:
48 // Overridden from views::View:
49 virtual gfx::Size GetPreferredSize() OVERRIDE;
50 virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
51
52 private:
53 DISALLOW_COPY_AND_ASSIGN(NotificationCenterButton);
54 };
55
56 NotificationCenterButton::NotificationCenterButton(
57 views::ButtonListener* listener,
58 int normal_id,
59 int hover_id,
60 int pressed_id,
61 int text_id)
62 : views::ToggleImageButton(listener) {
63 ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance();
64 SetImage(STATE_NORMAL, resource_bundle.GetImageSkiaNamed(normal_id));
65 SetImage(STATE_HOVERED, resource_bundle.GetImageSkiaNamed(hover_id));
66 SetImage(STATE_PRESSED, resource_bundle.GetImageSkiaNamed(pressed_id));
67 SetImageAlignment(views::ImageButton::ALIGN_CENTER,
68 views::ImageButton::ALIGN_MIDDLE);
69 SetTooltipText(resource_bundle.GetLocalizedString(text_id));
70 set_focusable(true);
71 set_request_focus_on_press(false);
72 }
73
74 gfx::Size NotificationCenterButton::GetPreferredSize() {
75 return gfx::Size(kButtonSize, kButtonSize);
76 }
77
78 void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
79 if (HasFocus() && (focusable() || IsAccessibilityFocusable())) {
80 canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3),
81 kFocusBorderColor);
82 }
83 }
84
85 // MessageCenterButtonBar /////////////////////////////////////////////////////
86 ///////////////////////////////////////////////////////////////////////////////
87 MessageCenterButtonBar::MessageCenterButtonBar(
88 MessageCenterView* message_center_view,
89 MessageCenter* message_center,
90 NotifierSettingsProvider* notifier_settings_provider,
91 bool settings_initially_visible)
92 : message_center_view_(message_center_view),
93 message_center_(message_center),
94 close_all_button_(NULL) {
jianli 2013/08/05 20:48:03 bit: better to also initialize quiet_mode_button_
dewittj 2013/08/05 22:42:28 Done.
95 if (get_use_acceleration_when_possible())
96 SetPaintToLayer(true);
97 set_background(
98 views::Background::CreateSolidBackground(kMessageCenterBackgroundColor));
99
100 views::Label* notification_label = new views::Label(
101 l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_FOOTER_TITLE));
102 notification_label->SetAutoColorReadabilityEnabled(false);
103 notification_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
104 notification_label->SetEnabledColor(kRegularTextColor);
105 AddChildView(notification_label);
106
107 views::View* button_container = new views::View;
108 button_container->SetLayoutManager(
109 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
110 quiet_mode_button_ = new NotificationCenterButton(
111 this,
112 IDR_NOTIFICATION_DO_NOT_DISTURB,
113 IDR_NOTIFICATION_DO_NOT_DISTURB_HOVER,
114 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED,
115 IDS_MESSAGE_CENTER_QUIET_MODE_BUTTON_TOOLTIP);
116 ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance();
117 quiet_mode_button_->SetToggledImage(
118 views::Button::STATE_NORMAL,
119 resource_bundle.GetImageSkiaNamed(
120 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED));
121 quiet_mode_button_->SetToggledImage(
122 views::Button::STATE_HOVERED,
123 resource_bundle.GetImageSkiaNamed(
124 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED));
125 quiet_mode_button_->SetToggledImage(
126 views::Button::STATE_PRESSED,
127 resource_bundle.GetImageSkiaNamed(
128 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED));
129 quiet_mode_button_->SetToggled(message_center->IsQuietMode());
130 button_container->AddChildView(quiet_mode_button_);
131
132 close_all_button_ =
133 new NotificationCenterButton(this,
134 IDR_NOTIFICATION_CLEAR_ALL,
135 IDR_NOTIFICATION_CLEAR_ALL_HOVER,
136 IDR_NOTIFICATION_CLEAR_ALL_PRESSED,
137 IDS_MESSAGE_CENTER_CLEAR_ALL);
138 button_container->AddChildView(close_all_button_);
139 settings_button_ =
140 new NotificationCenterButton(this,
141 IDR_NOTIFICATION_SETTINGS,
142 IDR_NOTIFICATION_SETTINGS_HOVER,
143 IDR_NOTIFICATION_SETTINGS_PRESSED,
144 IDS_MESSAGE_CENTER_SETTINGS_BUTTON_LABEL);
145 button_container->AddChildView(settings_button_);
146
147 gfx::ImageSkia* settings_image =
148 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
149 IDR_NOTIFICATION_SETTINGS);
150 int image_margin = std::max(0, (kButtonSize - settings_image->width()) / 2);
151 views::GridLayout* layout = new views::GridLayout(this);
152 SetLayoutManager(layout);
153 layout->SetInsets(
154 0, kFooterLeftMargin, 0, std::max(0, kFooterRightMargin - image_margin));
155 views::ColumnSet* column = layout->AddColumnSet(0);
156 column->AddColumn(views::GridLayout::FILL,
157 views::GridLayout::FILL,
158 1.0f,
159 views::GridLayout::USE_PREF,
160 0,
161 0);
162 column->AddColumn(views::GridLayout::LEADING,
163 views::GridLayout::FILL,
164 0,
165 views::GridLayout::USE_PREF,
166 0,
167 0);
168 layout->StartRow(0, 0);
169 layout->AddView(notification_label);
170 layout->AddView(button_container);
171 }
172
173 MessageCenterButtonBar::~MessageCenterButtonBar() {}
174
175 void MessageCenterButtonBar::SetAllButtonsEnabled(bool enabled) {
176 if (close_all_button_)
177 close_all_button_->SetEnabled(enabled);
178 settings_button_->SetEnabled(enabled);
179 quiet_mode_button_->SetEnabled(enabled);
180 }
181
182 void MessageCenterButtonBar::SetCloseAllVisible(bool visible) {
183 if (close_all_button_)
184 close_all_button_->SetVisible(visible);
185 }
186
187 void MessageCenterButtonBar::ChildVisibilityChanged(views::View* child) {
188 InvalidateLayout();
189 }
190
191 void MessageCenterButtonBar::ButtonPressed(views::Button* sender,
192 const ui::Event& event) {
193 if (sender == close_all_button()) {
jianli 2013/08/05 20:48:03 nit: close_all_button_
dewittj 2013/08/05 22:42:28 Done.
194 message_center_view()->ClearAllNotifications();
195 } else if (sender == settings_button_) {
196 MessageCenterView* center_view = message_center_view();
197 center_view->SetSettingsVisible(!center_view->settings_visible());
198 } else if (sender == quiet_mode_button_) {
199 if (message_center()->IsQuietMode())
200 message_center()->SetQuietMode(false);
201 else
202 message_center()->EnterQuietModeWithExpire(base::TimeDelta::FromDays(1));
203 quiet_mode_button_->SetToggled(message_center()->IsQuietMode());
204 } else {
205 NOTREACHED();
206 }
207 }
208
209 } // namespace message_center
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698