| OLD | NEW |
| (Empty) |
| 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/tray/tray_item_more.h" | |
| 6 | |
| 7 #include "ash/common/system/tray/fixed_sized_image_view.h" | |
| 8 #include "ash/common/system/tray/system_tray_item.h" | |
| 9 #include "ash/common/system/tray/tray_constants.h" | |
| 10 #include "grit/ash_resources.h" | |
| 11 #include "ui/accessibility/ax_view_state.h" | |
| 12 #include "ui/base/resource/resource_bundle.h" | |
| 13 #include "ui/gfx/image/image.h" | |
| 14 #include "ui/views/controls/image_view.h" | |
| 15 #include "ui/views/controls/label.h" | |
| 16 #include "ui/views/layout/box_layout.h" | |
| 17 | |
| 18 namespace ash { | |
| 19 | |
| 20 TrayItemMore::TrayItemMore(SystemTrayItem* owner, bool show_more) | |
| 21 : owner_(owner), | |
| 22 show_more_(show_more), | |
| 23 icon_(NULL), | |
| 24 label_(NULL), | |
| 25 more_(NULL) { | |
| 26 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, | |
| 27 kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems)); | |
| 28 | |
| 29 icon_ = new FixedSizedImageView(0, kTrayPopupItemHeight); | |
| 30 AddChildView(icon_); | |
| 31 | |
| 32 label_ = new views::Label; | |
| 33 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
| 34 AddChildView(label_); | |
| 35 | |
| 36 if (show_more) { | |
| 37 more_ = new views::ImageView; | |
| 38 more_->EnableCanvasFlippingForRTLUI(true); | |
| 39 more_->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageNamed( | |
| 40 IDR_AURA_UBER_TRAY_MORE).ToImageSkia()); | |
| 41 AddChildView(more_); | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 TrayItemMore::~TrayItemMore() { | |
| 46 } | |
| 47 | |
| 48 void TrayItemMore::SetLabel(const base::string16& label) { | |
| 49 label_->SetText(label); | |
| 50 Layout(); | |
| 51 SchedulePaint(); | |
| 52 } | |
| 53 | |
| 54 void TrayItemMore::SetImage(const gfx::ImageSkia* image_skia) { | |
| 55 icon_->SetImage(image_skia); | |
| 56 SchedulePaint(); | |
| 57 } | |
| 58 | |
| 59 void TrayItemMore::SetAccessibleName(const base::string16& name) { | |
| 60 accessible_name_ = name; | |
| 61 } | |
| 62 | |
| 63 void TrayItemMore::ReplaceIcon(views::View* view) { | |
| 64 delete icon_; | |
| 65 icon_ = NULL; | |
| 66 AddChildViewAt(view, 0); | |
| 67 } | |
| 68 | |
| 69 bool TrayItemMore::PerformAction(const ui::Event& event) { | |
| 70 if (!show_more_) | |
| 71 return false; | |
| 72 | |
| 73 owner()->TransitionDetailedView(); | |
| 74 return true; | |
| 75 } | |
| 76 | |
| 77 void TrayItemMore::Layout() { | |
| 78 // Let the box-layout do the layout first. Then move the '>' arrow to right | |
| 79 // align. | |
| 80 views::View::Layout(); | |
| 81 | |
| 82 if (!show_more_) | |
| 83 return; | |
| 84 | |
| 85 // Make sure the chevron always has the full size. | |
| 86 gfx::Size size = more_->GetPreferredSize(); | |
| 87 gfx::Rect bounds(size); | |
| 88 bounds.set_x(width() - size.width() - kTrayPopupPaddingBetweenItems); | |
| 89 bounds.set_y((height() - size.height()) / 2); | |
| 90 more_->SetBoundsRect(bounds); | |
| 91 | |
| 92 // Adjust the label's bounds in case it got cut off by |more_|. | |
| 93 if (label_->bounds().Intersects(more_->bounds())) { | |
| 94 gfx::Rect bounds = label_->bounds(); | |
| 95 bounds.set_width(more_->x() - kTrayPopupPaddingBetweenItems - label_->x()); | |
| 96 label_->SetBoundsRect(bounds); | |
| 97 } | |
| 98 } | |
| 99 | |
| 100 void TrayItemMore::GetAccessibleState(ui::AXViewState* state) { | |
| 101 ActionableView::GetAccessibleState(state); | |
| 102 if (!accessible_name_.empty()) | |
| 103 state->name = accessible_name_; | |
| 104 } | |
| 105 | |
| 106 } // namespace ash | |
| OLD | NEW |