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

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: Rebase. 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..a15d09cdcd129562484dc9f5f1cbfb71499ee951
--- /dev/null
+++ b/ui/message_center/message_center_tray.cc
@@ -0,0 +1,123 @@
+// Copyright (c) 2012 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/memory/singleton.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_visible_(false),
+ popups_visible_(false),
+ delegate_(delegate) {
+ message_center_ = new message_center::MessageCenter();
+ message_center_->AddObserver(this);
+}
+
+MessageCenterTray::~MessageCenterTray() {
+ message_center_->RemoveObserver(this);
+}
+
+void MessageCenterTray::AddObserver(MessageCenterTrayObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void MessageCenterTray::RemoveObserver(MessageCenterTrayObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+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);
+ if (!message_center_visible_)
+ return; // Unable to show message center.
+ NotifyShowMessageCenterBubble();
+}
+
+bool MessageCenterTray::HideMessageCenterBubble() {
+ if (!message_center_visible_)
+ return false;
+
+ delegate_->HideMessageCenter();
+
+ message_center_visible_ = false;
+ message_center_->SetMessageCenterVisible(false);
+
+ NotifyHideMessageCenterBubble();
+
+ return true;
+}
+
+void MessageCenterTray::ToggleMessageCenterBubble() {
+ if (message_center_visible_) {
+ HideMessageCenterBubble();
+ } else {
+ ShowMessageCenterBubble();
+ }
+}
+
+void MessageCenterTray::ShowPopupBubble() {
+ if (message_center_visible_)
+ 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);
+ if (!popups_visible_)
Pete Williamson 2013/01/17 19:07:45 Remove these two lines
dewittj 2013/01/18 00:57:46 Done.
+ return;
+}
+
+bool MessageCenterTray::HidePopupBubble() {
+ if (!popups_visible_)
+ return false;
+
+ delegate_->HidePopups();
+ popups_visible_ = false;
+
+ NotifyHidePopupBubble();
+
+ 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();
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698