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

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

Issue 114323002: Fixes the context menu for a notification. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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
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/views/message_view.h" 5 #include "ui/message_center/views/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/accessibility/accessible_view_state.h" 9 #include "ui/base/accessibility/accessible_view_state.h"
10 #include "ui/base/l10n/l10n_util.h" 10 #include "ui/base/l10n/l10n_util.h"
11 #include "ui/base/models/simple_menu_model.h" 11 #include "ui/base/models/simple_menu_model.h"
12 #include "ui/base/resource/resource_bundle.h" 12 #include "ui/base/resource/resource_bundle.h"
13 #include "ui/compositor/scoped_layer_animation_settings.h" 13 #include "ui/compositor/scoped_layer_animation_settings.h"
14 #include "ui/gfx/canvas.h" 14 #include "ui/gfx/canvas.h"
15 #include "ui/message_center/message_center.h" 15 #include "ui/message_center/message_center.h"
16 #include "ui/message_center/message_center_style.h" 16 #include "ui/message_center/message_center_style.h"
17 #include "ui/message_center/message_center_util.h" 17 #include "ui/message_center/message_center_util.h"
18 #include "ui/message_center/views/padded_button.h" 18 #include "ui/message_center/views/padded_button.h"
19 #include "ui/views/context_menu_controller.h"
20 #include "ui/views/controls/button/image_button.h" 19 #include "ui/views/controls/button/image_button.h"
21 #include "ui/views/controls/menu/menu_runner.h"
22 #include "ui/views/controls/scroll_view.h" 20 #include "ui/views/controls/scroll_view.h"
23 #include "ui/views/painter.h" 21 #include "ui/views/painter.h"
24 #include "ui/views/shadow_border.h" 22 #include "ui/views/shadow_border.h"
25 #include "ui/views/widget/widget.h" 23 #include "ui/views/widget/widget.h"
26 24
27 namespace { 25 namespace {
28 26
29 const int kCloseIconTopPadding = 5; 27 const int kCloseIconTopPadding = 5;
30 const int kCloseIconRightPadding = 5; 28 const int kCloseIconRightPadding = 5;
31 29
32 const int kShadowOffset = 1; 30 const int kShadowOffset = 1;
33 const int kShadowBlur = 4; 31 const int kShadowBlur = 4;
34 32
35 // Menu constants
36 const int kTogglePermissionCommand = 0;
37 const int kShowSettingsCommand = 1;
38
39 // A dropdown menu for notifications.
40 class MenuModel : public ui::SimpleMenuModel,
41 public ui::SimpleMenuModel::Delegate {
42 public:
43 MenuModel(message_center::MessageView* message_view,
44 const string16& display_source);
45 virtual ~MenuModel();
46
47 // Overridden from ui::SimpleMenuModel::Delegate:
48 virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE;
49 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
50 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
51 virtual bool GetAcceleratorForCommandId(
52 int command_id,
53 ui::Accelerator* accelerator) OVERRIDE;
54 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
55
56 private:
57 message_center::MessageView* message_view_; // Weak, owns us.
58 DISALLOW_COPY_AND_ASSIGN(MenuModel);
59 };
60
61 MenuModel::MenuModel(message_center::MessageView* message_view,
62 const string16& display_source)
63 : ui::SimpleMenuModel(this),
64 message_view_(message_view) {
65 // Add 'disable notifications' menu item.
66 if (!display_source.empty()) {
67 AddItem(kTogglePermissionCommand,
68 l10n_util::GetStringFUTF16(IDS_MESSAGE_CENTER_NOTIFIER_DISABLE,
69 display_source));
70 }
71 // Add settings menu item.
72 AddItem(kShowSettingsCommand,
73 l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_SETTINGS));
74 }
75
76 MenuModel::~MenuModel() {
77 }
78
79 bool MenuModel::IsItemForCommandIdDynamic(int command_id) const {
80 return false;
81 }
82
83 bool MenuModel::IsCommandIdChecked(int command_id) const {
84 return false;
85 }
86
87 bool MenuModel::IsCommandIdEnabled(int command_id) const {
88 return true;
89 }
90
91 bool MenuModel::GetAcceleratorForCommandId(int command_id,
92 ui::Accelerator* accelerator) {
93 return false;
94 }
95
96 void MenuModel::ExecuteCommand(int command_id, int event_flags) {
97 switch (command_id) {
98 case kTogglePermissionCommand:
99 message_view_->DisableNotificationsFromThisSource();
100 break;
101 case kShowSettingsCommand:
102 message_view_->ShowNotifierSettingsBubble();
103 break;
104 default:
105 NOTREACHED();
106 }
107 }
108
109 } // namespace 33 } // namespace
110 34
111 namespace message_center { 35 namespace message_center {
112 36
113 class MessageViewContextMenuController : public views::ContextMenuController { 37 MessageView::MessageView()
114 public: 38 : scroller_(NULL) {
115 MessageViewContextMenuController(MessageView* message_view,
116 const string16& display_source);
117 virtual ~MessageViewContextMenuController();
118
119 protected:
120 // Overridden from views::ContextMenuController:
121 virtual void ShowContextMenuForView(views::View* source,
122 const gfx::Point& point,
123 ui::MenuSourceType source_type) OVERRIDE;
124
125 MessageView* message_view_; // Weak, owns us.
126 string16 display_source_;
127 };
128
129 MessageViewContextMenuController::MessageViewContextMenuController(
130 MessageView* message_view,
131 const string16& display_source)
132 : message_view_(message_view),
133 display_source_(display_source) {
134 }
135
136 MessageViewContextMenuController::~MessageViewContextMenuController() {
137 }
138
139 void MessageViewContextMenuController::ShowContextMenuForView(
140 views::View* source,
141 const gfx::Point& point,
142 ui::MenuSourceType source_type) {
143 MenuModel menu_model(message_view_, display_source_);
144 if (menu_model.GetItemCount() == 0)
145 return;
146
147 views::MenuRunner menu_runner(&menu_model);
148
149 ignore_result(menu_runner.RunMenuAt(
150 source->GetWidget()->GetTopLevelWidget(),
151 NULL,
152 gfx::Rect(point, gfx::Size()),
153 views::MenuItemView::TOPRIGHT,
154 source_type,
155 views::MenuRunner::HAS_MNEMONICS));
156 }
157
158 MessageView::MessageView(const string16& display_source)
159 : context_menu_controller_(
160 new MessageViewContextMenuController(this, display_source)),
161 scroller_(NULL) {
162 set_focusable(true); 39 set_focusable(true);
163 set_context_menu_controller(context_menu_controller_.get());
164 40
165 PaddedButton *close = new PaddedButton(this); 41 PaddedButton *close = new PaddedButton(this);
166 close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding); 42 close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding);
167 close->SetNormalImage(IDR_NOTIFICATION_CLOSE); 43 close->SetNormalImage(IDR_NOTIFICATION_CLOSE);
168 close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER); 44 close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER);
169 close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED); 45 close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED);
170 close->set_owned_by_client(); 46 close->set_owned_by_client();
171 close->set_animate_on_state_change(false); 47 close->set_animate_on_state_change(false);
172 close->SetAccessibleName(l10n_util::GetStringUTF16( 48 close->SetAccessibleName(l10n_util::GetStringUTF16(
173 IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME)); 49 IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 if (sender == close_button()) { 162 if (sender == close_button()) {
287 RemoveNotification(true); // By user. 163 RemoveNotification(true); // By user.
288 } 164 }
289 } 165 }
290 166
291 void MessageView::OnSlideOut() { 167 void MessageView::OnSlideOut() {
292 RemoveNotification(true); // By user. 168 RemoveNotification(true); // By user.
293 } 169 }
294 170
295 } // namespace message_center 171 } // namespace message_center
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698