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 "ash/system/chromeos/label_tray_view.h" 6 7 #include "ash/system/tray/hover_highlight_view.h" 8 #include "ash/system/tray/tray_constants.h" 9 #include "ash/system/tray/view_click_listener.h" 10 #include "ui/base/resource/resource_bundle.h" 11 #include "ui/gfx/font.h" 12 #include "ui/views/border.h" 13 #include "ui/views/controls/label.h" 14 #include "ui/views/layout/fill_layout.h" 15 16 namespace ash { 17 namespace internal { 18 LabelTrayView(ViewClickListener * click_listener,int icon_resource_id)19LabelTrayView::LabelTrayView(ViewClickListener* click_listener, 20 int icon_resource_id) 21 : click_listener_(click_listener), 22 icon_resource_id_(icon_resource_id) { 23 SetLayoutManager(new views::FillLayout()); 24 SetVisible(false); 25 } 26 ~LabelTrayView()27LabelTrayView::~LabelTrayView() { 28 } 29 SetMessage(const base::string16 & message)30void LabelTrayView::SetMessage(const base::string16& message) { 31 if (message_ == message) 32 return; 33 34 message_ = message; 35 RemoveAllChildViews(true); 36 if (!message_.empty()) { 37 AddChildView(CreateChildView(message_)); 38 SetVisible(true); 39 } else { 40 SetVisible(false); 41 } 42 } 43 CreateChildView(const base::string16 & message) const44views::View* LabelTrayView::CreateChildView( 45 const base::string16& message) const { 46 HoverHighlightView* child = new HoverHighlightView(click_listener_); 47 if (icon_resource_id_) { 48 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 49 const gfx::ImageSkia* icon = rb.GetImageSkiaNamed(icon_resource_id_); 50 child->AddIconAndLabel(*icon, message, gfx::Font::NORMAL); 51 child->set_border( 52 views::Border::CreateEmptyBorder(0, kTrayPopupPaddingHorizontal, 53 0, kTrayPopupPaddingHorizontal)); 54 child->text_label()->SetMultiLine(true); 55 child->text_label()->SizeToFit(kTrayNotificationContentsWidth); 56 } else { 57 child->AddLabel(message, gfx::Font::NORMAL); 58 child->text_label()->SetMultiLine(true); 59 child->text_label()->SizeToFit(kTrayNotificationContentsWidth + 60 kNotificationIconWidth); 61 } 62 child->text_label()->SetAllowCharacterBreak(true); 63 child->SetExpandable(true); 64 child->SetVisible(true); 65 return child; 66 } 67 68 } // namespace internal 69 } // namespace ash 70