| Index: ui/message_center/views/message_popup_bubble.cc
|
| diff --git a/ui/message_center/views/message_popup_bubble.cc b/ui/message_center/views/message_popup_bubble.cc
|
| deleted file mode 100644
|
| index 81bfd18306255d01ef9605881d6ad8389fb16e58..0000000000000000000000000000000000000000
|
| --- a/ui/message_center/views/message_popup_bubble.cc
|
| +++ /dev/null
|
| @@ -1,242 +0,0 @@
|
| -// 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/views/message_popup_bubble.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/stl_util.h"
|
| -#include "ui/message_center/message_center.h"
|
| -#include "ui/message_center/message_center_style.h"
|
| -#include "ui/message_center/notification.h"
|
| -#include "ui/message_center/notification_types.h"
|
| -#include "ui/message_center/views/message_view.h"
|
| -#include "ui/message_center/views/notification_view.h"
|
| -#include "ui/views/bubble/tray_bubble_view.h"
|
| -#include "ui/views/layout/box_layout.h"
|
| -#include "ui/views/view.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -namespace message_center {
|
| -
|
| -// Popup notifications contents.
|
| -class PopupBubbleContentsView : public views::View {
|
| - public:
|
| - explicit PopupBubbleContentsView(MessageCenter* message_center);
|
| -
|
| - void Update(const NotificationList::PopupNotifications& popup_notifications);
|
| -
|
| - size_t NumMessageViews() const {
|
| - return content_->child_count();
|
| - }
|
| -
|
| - private:
|
| - MessageCenter* message_center_; // Weak reference.
|
| - views::View* content_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PopupBubbleContentsView);
|
| -};
|
| -
|
| -PopupBubbleContentsView::PopupBubbleContentsView(
|
| - MessageCenter* message_center)
|
| - : message_center_(message_center) {
|
| - SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
|
| -
|
| - content_ = new views::View;
|
| - content_->SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
|
| - AddChildView(content_);
|
| -
|
| - if (get_use_acceleration_when_possible()) {
|
| - content_->SetPaintToLayer(true);
|
| - content_->SetFillsBoundsOpaquely(false);
|
| - content_->layer()->SetMasksToBounds(true);
|
| - }
|
| -}
|
| -
|
| -void PopupBubbleContentsView::Update(
|
| - const NotificationList::PopupNotifications& popup_notifications) {
|
| - content_->RemoveAllChildViews(true);
|
| - for (NotificationList::PopupNotifications::const_iterator iter =
|
| - popup_notifications.begin();
|
| - iter != popup_notifications.end(); ++iter) {
|
| - // NotificationViews are expanded by default here because MessagePopupBubble
|
| - // hasn't been tested yet with changing subview sizes, and such changes
|
| - // could come if those subviews were initially collapsed and allowed to be
|
| - // expanded by users. TODO(dharcourt): Fix.
|
| - content_->AddChildView(
|
| - NotificationView::Create(*(*iter),
|
| - message_center_,
|
| - NULL,
|
| - true, // Create expanded.
|
| - false)); // Not creating a top-level
|
| - // notification.
|
| - }
|
| - content_->SizeToPreferredSize();
|
| - content_->InvalidateLayout();
|
| - Layout();
|
| - if (GetWidget())
|
| - GetWidget()->GetRootView()->SchedulePaint();
|
| -}
|
| -
|
| -// The timer to call OnAutoClose for |notification|.
|
| -class MessagePopupBubble::AutocloseTimer {
|
| - public:
|
| - AutocloseTimer(Notification* notification, MessagePopupBubble* bubble);
|
| -
|
| - void Start();
|
| - void Restart();
|
| - void Suspend();
|
| -
|
| - private:
|
| - const std::string id_;
|
| - base::TimeDelta delay_;
|
| - base::Time start_time_;
|
| - MessagePopupBubble* bubble_;
|
| - base::OneShotTimer<MessagePopupBubble> timer_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(AutocloseTimer);
|
| -};
|
| -
|
| -MessagePopupBubble::AutocloseTimer::AutocloseTimer(
|
| - Notification* notification,
|
| - MessagePopupBubble* bubble)
|
| - : id_(notification->id()),
|
| - bubble_(bubble) {
|
| - int seconds = kAutocloseDefaultDelaySeconds;
|
| - if (notification->priority() > DEFAULT_PRIORITY)
|
| - seconds = kAutocloseHighPriorityDelaySeconds;
|
| - delay_ = base::TimeDelta::FromSeconds(seconds);
|
| -}
|
| -
|
| -void MessagePopupBubble::AutocloseTimer::Start() {
|
| - start_time_ = base::Time::Now();
|
| - timer_.Start(FROM_HERE,
|
| - delay_,
|
| - base::Bind(&MessagePopupBubble::OnAutoClose,
|
| - base::Unretained(bubble_), id_));
|
| -}
|
| -
|
| -void MessagePopupBubble::AutocloseTimer::Restart() {
|
| - delay_ -= base::Time::Now() - start_time_;
|
| - if (delay_ < base::TimeDelta())
|
| - bubble_->OnAutoClose(id_);
|
| - else
|
| - Start();
|
| -}
|
| -
|
| -void MessagePopupBubble::AutocloseTimer::Suspend() {
|
| - timer_.Stop();
|
| -}
|
| -
|
| -// MessagePopupBubble
|
| -MessagePopupBubble::MessagePopupBubble(MessageCenter* message_center)
|
| - : MessageBubbleBase(message_center, NULL),
|
| - contents_view_(NULL) {
|
| -}
|
| -
|
| -MessagePopupBubble::~MessagePopupBubble() {
|
| - STLDeleteContainerPairSecondPointers(autoclose_timers_.begin(),
|
| - autoclose_timers_.end());
|
| -}
|
| -
|
| -views::TrayBubbleView::InitParams MessagePopupBubble::GetInitParams(
|
| - views::TrayBubbleView::AnchorAlignment anchor_alignment) {
|
| - views::TrayBubbleView::InitParams init_params =
|
| - GetDefaultInitParams(anchor_alignment);
|
| - init_params.arrow_color = kBackgroundColor;
|
| - init_params.close_on_deactivate = false;
|
| - return init_params;
|
| -}
|
| -
|
| -void MessagePopupBubble::InitializeContents(
|
| - views::TrayBubbleView* new_bubble_view) {
|
| - set_bubble_view(new_bubble_view);
|
| - contents_view_ = new PopupBubbleContentsView(message_center());
|
| - bubble_view()->AddChildView(contents_view_);
|
| - bubble_view()->set_notify_enter_exit_on_child(true);
|
| - UpdateBubbleView();
|
| -}
|
| -
|
| -void MessagePopupBubble::OnBubbleViewDestroyed() {
|
| - contents_view_ = NULL;
|
| -}
|
| -
|
| -void MessagePopupBubble::UpdateBubbleView() {
|
| - NotificationList::PopupNotifications popups =
|
| - message_center()->GetPopupNotifications();
|
| -
|
| - if (popups.size() == 0) {
|
| - if (bubble_view())
|
| - bubble_view()->delegate()->HideBubble(bubble_view()); // deletes |this|
|
| - return;
|
| - }
|
| -
|
| - contents_view_->Update(popups);
|
| - bubble_view()->GetWidget()->Show();
|
| - bubble_view()->UpdateBubble();
|
| -
|
| - std::set<std::string> old_popup_ids;
|
| - old_popup_ids.swap(popup_ids_);
|
| -
|
| - // Start autoclose timers.
|
| - for (NotificationList::PopupNotifications::const_iterator iter =
|
| - popups.begin();
|
| - iter != popups.end(); ++iter) {
|
| - std::string id = (*iter)->id();
|
| - std::map<std::string, AutocloseTimer*>::const_iterator timer_iter =
|
| - autoclose_timers_.find(id);
|
| - if (timer_iter == autoclose_timers_.end()) {
|
| - AutocloseTimer *timer = new AutocloseTimer(*iter, this);
|
| - autoclose_timers_[id] = timer;
|
| - timer->Start();
|
| - }
|
| - popup_ids_.insert(id);
|
| - old_popup_ids.erase(id);
|
| - }
|
| -
|
| - // Stops timers whose notifications are gone.
|
| - for (std::set<std::string>::const_iterator iter = old_popup_ids.begin();
|
| - iter != old_popup_ids.end(); ++iter) {
|
| - DeleteTimer(*iter);
|
| - }
|
| -}
|
| -
|
| -void MessagePopupBubble::OnMouseEnteredView() {
|
| - for (std::map<std::string, AutocloseTimer*>::iterator iter =
|
| - autoclose_timers_.begin(); iter != autoclose_timers_.end(); ++iter) {
|
| - iter->second->Suspend();
|
| - }
|
| -}
|
| -
|
| -void MessagePopupBubble::OnMouseExitedView() {
|
| - for (std::map<std::string, AutocloseTimer*>::iterator iter =
|
| - autoclose_timers_.begin(); iter != autoclose_timers_.end();) {
|
| - // |iter| can be deleted if timer is already over.
|
| - AutocloseTimer* timer = iter->second;
|
| - ++iter;
|
| - timer->Restart();
|
| - }
|
| -}
|
| -
|
| -void MessagePopupBubble::OnAutoClose(const std::string& id) {
|
| - if (!message_center()->HasNotification(id))
|
| - return;
|
| -
|
| - message_center()->MarkSinglePopupAsShown(id, false);
|
| -}
|
| -
|
| -void MessagePopupBubble::DeleteTimer(const std::string& id) {
|
| - std::map<std::string, AutocloseTimer*>::iterator iter =
|
| - autoclose_timers_.find(id);
|
| - if (iter != autoclose_timers_.end()) {
|
| - scoped_ptr<AutocloseTimer> release_timer(iter->second);
|
| - autoclose_timers_.erase(iter);
|
| - }
|
| -}
|
| -
|
| -size_t MessagePopupBubble::NumMessageViewsForTest() const {
|
| - return contents_view_->NumMessageViews();
|
| -}
|
| -
|
| -} // namespace message_center
|
|
|