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

Side by Side Diff: ui/message_center/message_view.cc

Issue 12277024: Notificaitons refactor step 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more feedback from Steven Created 7 years, 9 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
« no previous file with comments | « ui/message_center/message_view.h ('k') | ui/message_center/notification.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/message_view.h" 5 #include "ui/message_center/message_view.h"
6 6
7 #include "grit/ui_resources.h" 7 #include "grit/ui_resources.h"
8 #include "grit/ui_strings.h" 8 #include "grit/ui_strings.h"
9 #include "ui/base/l10n/l10n_util.h" 9 #include "ui/base/l10n/l10n_util.h"
10 #include "ui/base/models/simple_menu_model.h" 10 #include "ui/base/models/simple_menu_model.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 // Menu constants 137 // Menu constants
138 const int kTogglePermissionCommand = 0; 138 const int kTogglePermissionCommand = 0;
139 const int kToggleExtensionCommand = 1; 139 const int kToggleExtensionCommand = 1;
140 const int kShowSettingsCommand = 2; 140 const int kShowSettingsCommand = 2;
141 141
142 // A dropdown menu for notifications. 142 // A dropdown menu for notifications.
143 class WebNotificationMenuModel : public ui::SimpleMenuModel, 143 class WebNotificationMenuModel : public ui::SimpleMenuModel,
144 public ui::SimpleMenuModel::Delegate { 144 public ui::SimpleMenuModel::Delegate {
145 public: 145 public:
146 WebNotificationMenuModel(NotificationList::Delegate* list_delegate, 146 WebNotificationMenuModel(NotificationList::Delegate* list_delegate,
147 const Notification& notification) 147 const std::string& notification_id,
148 const string16& display_source,
149 const std::string& extension_id)
148 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)), 150 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)),
149 list_delegate_(list_delegate), 151 list_delegate_(list_delegate),
150 notification_(notification) { 152 notification_id_(notification_id),
153 display_source_(display_source) {
151 // Add 'disable notifications' menu item. 154 // Add 'disable notifications' menu item.
152 if (!notification.extension_id.empty()) { 155 if (!extension_id.empty()) {
153 AddItem(kToggleExtensionCommand, 156 AddItem(kToggleExtensionCommand,
154 GetLabelForCommandId(kToggleExtensionCommand)); 157 GetLabelForCommandId(kToggleExtensionCommand));
155 } else if (!notification.display_source.empty()) { 158 } else if (!display_source.empty()) {
156 AddItem(kTogglePermissionCommand, 159 AddItem(kTogglePermissionCommand,
157 GetLabelForCommandId(kTogglePermissionCommand)); 160 GetLabelForCommandId(kTogglePermissionCommand));
158 } 161 }
159 // Add settings menu item. 162 // Add settings menu item.
160 if (!notification.display_source.empty()) { 163 if (!display_source.empty()) {
161 AddItem(kShowSettingsCommand, 164 AddItem(kShowSettingsCommand,
162 GetLabelForCommandId(kShowSettingsCommand)); 165 GetLabelForCommandId(kShowSettingsCommand));
163 } 166 }
164 } 167 }
165 168
166 virtual ~WebNotificationMenuModel() { 169 virtual ~WebNotificationMenuModel() {
167 } 170 }
168 171
169 // Overridden from ui::SimpleMenuModel: 172 // Overridden from ui::SimpleMenuModel:
170 virtual string16 GetLabelForCommandId(int command_id) const OVERRIDE { 173 virtual string16 GetLabelForCommandId(int command_id) const OVERRIDE {
171 switch (command_id) { 174 switch (command_id) {
172 case kToggleExtensionCommand: 175 case kToggleExtensionCommand:
173 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_EXTENSIONS_DISABLE); 176 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_EXTENSIONS_DISABLE);
174 case kTogglePermissionCommand: 177 case kTogglePermissionCommand:
175 return l10n_util::GetStringFUTF16(IDS_MESSAGE_CENTER_SITE_DISABLE, 178 return l10n_util::GetStringFUTF16(IDS_MESSAGE_CENTER_SITE_DISABLE,
176 notification_.display_source); 179 display_source_);
177 case kShowSettingsCommand: 180 case kShowSettingsCommand:
178 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_SETTINGS); 181 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_SETTINGS);
179 default: 182 default:
180 NOTREACHED(); 183 NOTREACHED();
181 } 184 }
182 return string16(); 185 return string16();
183 } 186 }
184 187
185 // Overridden from ui::SimpleMenuModel::Delegate: 188 // Overridden from ui::SimpleMenuModel::Delegate:
186 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE { 189 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
187 return false; 190 return false;
188 } 191 }
189 192
190 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE { 193 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
191 return false; 194 return false;
192 } 195 }
193 196
194 virtual bool GetAcceleratorForCommandId( 197 virtual bool GetAcceleratorForCommandId(
195 int command_id, 198 int command_id,
196 ui::Accelerator* accelerator) OVERRIDE { 199 ui::Accelerator* accelerator) OVERRIDE {
197 return false; 200 return false;
198 } 201 }
199 202
200 virtual void ExecuteCommand(int command_id) OVERRIDE { 203 virtual void ExecuteCommand(int command_id) OVERRIDE {
201 switch (command_id) { 204 switch (command_id) {
202 case kToggleExtensionCommand: 205 case kToggleExtensionCommand:
203 list_delegate_->DisableNotificationByExtension(notification_.id); 206 list_delegate_->DisableNotificationByExtension(notification_id_);
204 break; 207 break;
205 case kTogglePermissionCommand: 208 case kTogglePermissionCommand:
206 list_delegate_->DisableNotificationByUrl(notification_.id); 209 list_delegate_->DisableNotificationByUrl(notification_id_);
207 break; 210 break;
208 case kShowSettingsCommand: 211 case kShowSettingsCommand:
209 list_delegate_->ShowNotificationSettings(notification_.id); 212 list_delegate_->ShowNotificationSettings(notification_id_);
210 break; 213 break;
211 default: 214 default:
212 NOTREACHED(); 215 NOTREACHED();
213 } 216 }
214 } 217 }
215 218
216 private: 219 private:
217 NotificationList::Delegate* list_delegate_; 220 NotificationList::Delegate* list_delegate_; // Weak, global MessageCenter
218 Notification notification_; 221 std::string notification_id_;
222 string16 display_source_;
219 223
220 DISALLOW_COPY_AND_ASSIGN(WebNotificationMenuModel); 224 DISALLOW_COPY_AND_ASSIGN(WebNotificationMenuModel);
221 }; 225 };
222 226
223 MessageView::MessageView( 227 MessageView::MessageView(NotificationList::Delegate* list_delegate,
224 NotificationList::Delegate* list_delegate, 228 const Notification& notification)
225 const Notification& notification)
226 : list_delegate_(list_delegate), 229 : list_delegate_(list_delegate),
227 notification_(notification), 230 notification_id_(notification.id()),
231 display_source_(notification.display_source()),
232 extension_id_(notification.extension_id()),
228 scroller_(NULL) { 233 scroller_(NULL) {
229 ControlButton *close = new ControlButton(this); 234 ControlButton *close = new ControlButton(this);
230 close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding); 235 close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding);
231 close->SetNormalImage(IDR_NOTIFICATION_CLOSE); 236 close->SetNormalImage(IDR_NOTIFICATION_CLOSE);
232 close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER); 237 close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER);
233 close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED); 238 close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED);
234 close_button_.reset(close); 239 close_button_.reset(close);
235 } 240 }
236 241
237 MessageView::MessageView() { 242 MessageView::MessageView() {
238 } 243 }
239 244
240 MessageView::~MessageView() { 245 MessageView::~MessageView() {
241 } 246 }
242 247
243 bool MessageView::OnMousePressed(const ui::MouseEvent& event) { 248 bool MessageView::OnMousePressed(const ui::MouseEvent& event) {
244 if (event.flags() & ui::EF_RIGHT_MOUSE_BUTTON) { 249 if (event.flags() & ui::EF_RIGHT_MOUSE_BUTTON) {
245 ShowMenu(event.location()); 250 ShowMenu(event.location());
246 return true; 251 return true;
247 } 252 }
248 list_delegate_->OnNotificationClicked(notification_.id); 253 list_delegate_->OnNotificationClicked(notification_id_);
249 return true; 254 return true;
250 } 255 }
251 256
252 void MessageView::OnGestureEvent(ui::GestureEvent* event) { 257 void MessageView::OnGestureEvent(ui::GestureEvent* event) {
253 if (event->type() == ui::ET_GESTURE_TAP) { 258 if (event->type() == ui::ET_GESTURE_TAP) {
254 list_delegate_->OnNotificationClicked(notification_.id); 259 list_delegate_->OnNotificationClicked(notification_id_);
255 event->SetHandled(); 260 event->SetHandled();
256 return; 261 return;
257 } 262 }
258 263
259 if (event->type() == ui::ET_GESTURE_LONG_PRESS) { 264 if (event->type() == ui::ET_GESTURE_LONG_PRESS) {
260 ShowMenu(event->location()); 265 ShowMenu(event->location());
261 event->SetHandled(); 266 event->SetHandled();
262 return; 267 return;
263 } 268 }
264 269
265 SlideOutView::OnGestureEvent(event); 270 SlideOutView::OnGestureEvent(event);
266 // Do not return here by checking handled(). SlideOutView calls SetHandled() 271 // Do not return here by checking handled(). SlideOutView calls SetHandled()
267 // even though the scroll gesture doesn't make no (or little) effects on the 272 // even though the scroll gesture doesn't make no (or little) effects on the
268 // slide-out behavior. See http://crbug.com/172991 273 // slide-out behavior. See http://crbug.com/172991
269 274
270 if (!event->IsScrollGestureEvent()) 275 if (!event->IsScrollGestureEvent())
271 return; 276 return;
272 277
273 if (scroller_) 278 if (scroller_)
274 scroller_->OnGestureEvent(event); 279 scroller_->OnGestureEvent(event);
275 event->SetHandled(); 280 event->SetHandled();
276 } 281 }
277 282
278 void MessageView::ButtonPressed(views::Button* sender, 283 void MessageView::ButtonPressed(views::Button* sender,
279 const ui::Event& event) { 284 const ui::Event& event) {
280 if (sender == close_button()) 285 if (sender == close_button())
281 list_delegate_->SendRemoveNotification(notification_.id); 286 list_delegate_->SendRemoveNotification(notification_id_);
282 } 287 }
283 288
284 void MessageView::ShowMenu(gfx::Point screen_location) { 289 void MessageView::ShowMenu(gfx::Point screen_location) {
285 WebNotificationMenuModel menu_model(list_delegate_, notification_); 290 WebNotificationMenuModel menu_model(list_delegate_,
291 notification_id_,
292 display_source_,
293 extension_id_);
286 if (menu_model.GetItemCount() == 0) 294 if (menu_model.GetItemCount() == 0)
287 return; 295 return;
288 296
289 views::MenuModelAdapter menu_model_adapter(&menu_model); 297 views::MenuModelAdapter menu_model_adapter(&menu_model);
290 views::MenuRunner menu_runner(menu_model_adapter.CreateMenu()); 298 views::MenuRunner menu_runner(menu_model_adapter.CreateMenu());
291 299
292 views::View::ConvertPointToScreen(this, &screen_location); 300 views::View::ConvertPointToScreen(this, &screen_location);
293 ignore_result(menu_runner.RunMenuAt( 301 ignore_result(menu_runner.RunMenuAt(
294 GetWidget()->GetTopLevelWidget(), 302 GetWidget()->GetTopLevelWidget(),
295 NULL, 303 NULL,
296 gfx::Rect(screen_location, gfx::Size()), 304 gfx::Rect(screen_location, gfx::Size()),
297 views::MenuItemView::TOPRIGHT, 305 views::MenuItemView::TOPRIGHT,
298 views::MenuRunner::HAS_MNEMONICS)); 306 views::MenuRunner::HAS_MNEMONICS));
299 } 307 }
300 308
301 void MessageView::OnSlideOut() { 309 void MessageView::OnSlideOut() {
302 list_delegate_->SendRemoveNotification(notification_.id); 310 list_delegate_->SendRemoveNotification(notification_id_);
303 } 311 }
304 312
305 } // namespace message_center 313 } // namespace message_center
OLDNEW
« no previous file with comments | « ui/message_center/message_view.h ('k') | ui/message_center/notification.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698