summaryrefslogtreecommitdiffstats
path: root/chromium/ui/message_center/message_center_tray.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/message_center/message_center_tray.cc')
-rw-r--r--chromium/ui/message_center/message_center_tray.cc90
1 files changed, 89 insertions, 1 deletions
diff --git a/chromium/ui/message_center/message_center_tray.cc b/chromium/ui/message_center/message_center_tray.cc
index 58e5868a1e8..671b9797cea 100644
--- a/chromium/ui/message_center/message_center_tray.cc
+++ b/chromium/ui/message_center/message_center_tray.cc
@@ -8,6 +8,7 @@
#include "base/strings/utf_string_conversions.h"
#include "grit/ui_strings.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/models/simple_menu_model.h"
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_tray_delegate.h"
#include "ui/message_center/message_center_types.h"
@@ -15,6 +16,85 @@
namespace message_center {
+namespace {
+
+// Menu constants
+const int kTogglePermissionCommand = 0;
+const int kShowSettingsCommand = 1;
+
+// The model of the context menu for a notification card.
+class NotificationMenuModel : public ui::SimpleMenuModel,
+ public ui::SimpleMenuModel::Delegate {
+ public:
+ NotificationMenuModel(MessageCenterTray* tray,
+ const NotifierId& notifier_id,
+ const base::string16& display_source);
+ virtual ~NotificationMenuModel();
+
+ // Overridden from ui::SimpleMenuModel::Delegate:
+ virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
+ virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
+ virtual bool GetAcceleratorForCommandId(
+ int command_id,
+ ui::Accelerator* accelerator) OVERRIDE;
+ virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
+
+ private:
+ MessageCenterTray* tray_;
+ NotifierId notifier_id_;
+ DISALLOW_COPY_AND_ASSIGN(NotificationMenuModel);
+};
+
+NotificationMenuModel::NotificationMenuModel(
+ MessageCenterTray* tray,
+ const NotifierId& notifier_id,
+ const base::string16& display_source)
+ : ui::SimpleMenuModel(this),
+ tray_(tray),
+ notifier_id_(notifier_id) {
+ // Add 'disable notifications' menu item.
+ if (!display_source.empty()) {
+ AddItem(kTogglePermissionCommand,
+ l10n_util::GetStringFUTF16(IDS_MESSAGE_CENTER_NOTIFIER_DISABLE,
+ display_source));
+ }
+ // Add settings menu item.
+ AddItem(kShowSettingsCommand,
+ l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_SETTINGS));
+}
+
+NotificationMenuModel::~NotificationMenuModel() {
+}
+
+bool NotificationMenuModel::IsCommandIdChecked(int command_id) const {
+ return false;
+}
+
+bool NotificationMenuModel::IsCommandIdEnabled(int command_id) const {
+ return tray_->delegate()->IsContextMenuEnabled();
+}
+
+bool NotificationMenuModel::GetAcceleratorForCommandId(
+ int command_id,
+ ui::Accelerator* accelerator) {
+ return false;
+}
+
+void NotificationMenuModel::ExecuteCommand(int command_id, int event_flags) {
+ switch (command_id) {
+ case kTogglePermissionCommand:
+ tray_->message_center()->DisableNotificationsByNotifier(notifier_id_);
+ break;
+ case kShowSettingsCommand:
+ tray_->ShowNotifierSettingsBubble();
+ break;
+ default:
+ NOTREACHED();
+ }
+}
+
+} // namespace
+
MessageCenterTray::MessageCenterTray(
MessageCenterTrayDelegate* delegate,
message_center::MessageCenter* message_center)
@@ -116,6 +196,13 @@ void MessageCenterTray::ShowNotifierSettingsBubble() {
NotifyMessageCenterTrayChanged();
}
+scoped_ptr<ui::MenuModel> MessageCenterTray::CreateNotificationMenuModel(
+ const NotifierId& notifier_id,
+ const base::string16& display_source) {
+ return scoped_ptr<ui::MenuModel>(new NotificationMenuModel(
+ this, notifier_id, display_source));
+}
+
void MessageCenterTray::OnNotificationAdded(
const std::string& notification_id) {
OnMessageCenterChanged();
@@ -146,7 +233,8 @@ void MessageCenterTray::OnNotificationButtonClicked(
}
void MessageCenterTray::OnNotificationDisplayed(
- const std::string& notification_id) {
+ const std::string& notification_id,
+ const DisplaySource source) {
NotifyMessageCenterTrayChanged();
}