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

Unified Diff: ui/message_center/message_center_tray.cc

Issue 11819048: Implement message center on Windows (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Merge with master, address comments. Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: ui/message_center/message_center_tray.cc
diff --git a/ui/message_center/message_center_tray.cc b/ui/message_center/message_center_tray.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ee40fd2d2f641c9c519db2b18e86c4daa672fdbe
--- /dev/null
+++ b/ui/message_center/message_center_tray.cc
@@ -0,0 +1,109 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/message_center/message_center_tray.h"
+
+#include "base/observer_list.h"
+#include "base/utf_string_conversions.h"
+#include "ui/message_center/message_center_bubble.h"
+#include "ui/message_center/message_popup_bubble.h"
+#include "ui/views/widget/widget.h"
+
+namespace ui {
+
+MessageCenterTray::MessageCenterTray(
+ MessageCenterTrayDelegate* delegate,
+ message_center::MessageCenter* message_center)
+ : message_center_(message_center),
+ message_center_visible_(false),
+ popups_visible_(false),
+ delegate_(delegate) {
+ message_center_->AddObserver(this);
+}
+
+MessageCenterTray::~MessageCenterTray() {
+ message_center_->RemoveObserver(this);
+}
+
+void MessageCenterTray::ShowMessageCenterBubble() {
+ if (message_center_visible_)
+ return;
+
+ message_center_->SetMessageCenterVisible(true);
+ HidePopupBubble();
+
+ message_center::MessageCenterBubble* bubble =
+ new message_center::MessageCenterBubble(message_center_);
+ message_center_visible_ = delegate_->ShowMessageCenter(bubble);
Pete Williamson 2013/01/24 19:41:59 Do we need some error handling here if ShowMessage
dewittj 2013/01/25 00:49:04 At this point I'm leaving error handling up to the
+}
+
+bool MessageCenterTray::HideMessageCenterBubble() {
+ if (!message_center_visible_)
+ return false;
+ delegate_->HideMessageCenter();
+ message_center_visible_ = false;
+ message_center_->SetMessageCenterVisible(false);
+ NotifyMessageCenterTrayChanged();
+ return true;
+}
+
+void MessageCenterTray::ToggleMessageCenterBubble() {
Pete Williamson 2013/01/24 19:41:59 Do we really use this function? If not, this may
dewittj 2013/01/25 00:49:04 It is used in WebNotificationTrayWin.
+ if (message_center_visible_)
+ HideMessageCenterBubble();
+ else
+ ShowMessageCenterBubble();
+}
+
+void MessageCenterTray::ShowPopupBubble() {
+ if (message_center_visible_)
Pete Williamson 2013/01/24 19:41:59 This seems a bit strange - if we ask for a popup b
dewittj 2013/01/25 00:49:04 Yes, though I should probably throw in an UpdateMe
+ return;
+
+ if (popups_visible_) {
+ delegate_->UpdatePopups();
+ NotifyMessageCenterTrayChanged();
+ return;
+ }
+
+ if (!message_center_->HasPopupNotifications())
+ return;
+
+ message_center::MessagePopupBubble* bubble =
+ new message_center::MessagePopupBubble(message_center_);
+ popups_visible_ = delegate_->ShowPopups(bubble);
+}
+
+bool MessageCenterTray::HidePopupBubble() {
+ if (!popups_visible_)
+ return false;
+
+ delegate_->HidePopups();
+ popups_visible_ = false;
+
+ return true;
+}
+
+void MessageCenterTray::OnMessageCenterChanged(bool new_notification) {
+ if (message_center_visible_) {
+ if (message_center_->NotificationCount() == 0)
+ HideMessageCenterBubble();
+ else
+ delegate_->UpdateMessageCenter();
+ }
+ if (popups_visible_) {
+ if (message_center_->NotificationCount() == 0)
+ HidePopupBubble();
+ else
+ delegate_->UpdatePopups();
+ }
+
+ NotifyMessageCenterTrayChanged();
+ if (new_notification)
+ ShowPopupBubble();
+}
+
+void MessageCenterTray::NotifyMessageCenterTrayChanged() {
+ delegate_->OnMessageCenterTrayChanged();
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698