Home | History | Annotate | Download | only in views
      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
      3 // found in the LICENSE file.
      4 
      5 #include "ui/message_center/views/message_bubble_base.h"
      6 
      7 #include "base/bind.h"
      8 #include "ui/message_center/message_center_style.h"
      9 #include "ui/views/widget/widget.h"
     10 #include "ui/views/widget/widget_observer.h"
     11 
     12 namespace {
     13 // Delay laying out the MessageBubbleBase until all notifications have been
     14 // added and icons have had a chance to load.
     15 const int kUpdateDelayMs = 50;
     16 const int kMessageBubbleBaseDefaultMaxHeight = 400;
     17 }
     18 
     19 namespace message_center {
     20 
     21 const SkColor MessageBubbleBase::kBackgroundColor =
     22     SkColorSetRGB(0xfe, 0xfe, 0xfe);
     23 
     24 MessageBubbleBase::MessageBubbleBase(MessageCenter* message_center,
     25                                      MessageCenterTray* tray)
     26     : message_center_(message_center),
     27       tray_(tray),
     28       bubble_view_(NULL),
     29       weak_ptr_factory_(this),
     30       max_height_(kMessageBubbleBaseDefaultMaxHeight) {
     31 }
     32 
     33 MessageBubbleBase::~MessageBubbleBase() {
     34   if (bubble_view_)
     35     bubble_view_->reset_delegate();
     36 }
     37 
     38 void MessageBubbleBase::BubbleViewDestroyed() {
     39   bubble_view_ = NULL;
     40   OnBubbleViewDestroyed();
     41 }
     42 
     43 void MessageBubbleBase::ScheduleUpdate() {
     44   weak_ptr_factory_.InvalidateWeakPtrs();  // Cancel any pending update.
     45   base::MessageLoop::current()->PostDelayedTask(
     46       FROM_HERE,
     47       base::Bind(&MessageBubbleBase::UpdateBubbleView,
     48                  weak_ptr_factory_.GetWeakPtr()),
     49       base::TimeDelta::FromMilliseconds(kUpdateDelayMs));
     50 }
     51 
     52 bool MessageBubbleBase::IsVisible() const {
     53   return bubble_view() && bubble_view()->GetWidget()->IsVisible();
     54 }
     55 
     56 void MessageBubbleBase::SetMaxHeight(int height) {
     57   // Maximum height makes sense only for the new design.
     58   if (height == 0)
     59     height = kMessageBubbleBaseDefaultMaxHeight;
     60   if (height == max_height_)
     61     return;
     62 
     63   max_height_ = height;
     64   if (bubble_view_)
     65     bubble_view_->SetMaxHeight(max_height_);
     66 }
     67 
     68 views::TrayBubbleView::InitParams MessageBubbleBase::GetDefaultInitParams(
     69     views::TrayBubbleView::AnchorAlignment anchor_alignment) {
     70   views::TrayBubbleView::InitParams init_params(
     71       views::TrayBubbleView::ANCHOR_TYPE_TRAY,
     72       anchor_alignment,
     73       kNotificationWidth,
     74       kNotificationWidth);
     75   init_params.arrow_color = kBackgroundDarkColor;
     76   return init_params;
     77 }
     78 
     79 }  // namespace message_center
     80