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.
5 #include "ash/system/tray/tray_item_more.h"
7 #include "ash/system/tray/fixed_sized_image_view.h"
8 #include "ash/system/tray/system_tray_item.h"
9 #include "ash/system/tray/tray_constants.h"
10 #include "ash/system/tray/tray_views.h"
11 #include "grit/ash_resources.h"
12 #include "ui/base/accessibility/accessible_view_state.h"
13 #include "ui/base/resource/resource_bundle.h"
14 #include "ui/gfx/image/image.h"
15 #include "ui/views/controls/image_view.h"
16 #include "ui/views/controls/label.h"
17 #include "ui/views/layout/box_layout.h"
22 TrayItemMore::TrayItemMore(SystemTrayItem
* owner
, bool show_more
)
24 show_more_(show_more
),
28 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal
,
29 kTrayPopupPaddingHorizontal
, 0, kTrayPopupPaddingBetweenItems
));
31 icon_
= new FixedSizedImageView(0, kTrayPopupItemHeight
);
34 label_
= new views::Label
;
35 label_
->SetHorizontalAlignment(gfx::ALIGN_LEFT
);
39 more_
= new views::ImageView
;
40 more_
->EnableCanvasFlippingForRTLUI(true);
41 more_
->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageNamed(
42 IDR_AURA_UBER_TRAY_MORE
).ToImageSkia());
47 TrayItemMore::~TrayItemMore() {
50 void TrayItemMore::SetLabel(const string16
& label
) {
51 label_
->SetText(label
);
56 void TrayItemMore::SetImage(const gfx::ImageSkia
* image_skia
) {
57 icon_
->SetImage(image_skia
);
61 void TrayItemMore::SetAccessibleName(const string16
& name
) {
62 accessible_name_
= name
;
65 void TrayItemMore::ReplaceIcon(views::View
* view
) {
68 AddChildViewAt(view
, 0);
71 bool TrayItemMore::PerformAction(const ui::Event
& event
) {
75 owner()->TransitionDetailedView();
79 void TrayItemMore::Layout() {
80 // Let the box-layout do the layout first. Then move the '>' arrow to right
82 views::View::Layout();
87 // Make sure the chevron always has the full size.
88 gfx::Size size
= more_
->GetPreferredSize();
89 gfx::Rect
bounds(size
);
90 bounds
.set_x(width() - size
.width() - kTrayPopupPaddingBetweenItems
);
91 bounds
.set_y((height() - size
.height()) / 2);
92 more_
->SetBoundsRect(bounds
);
94 // Adjust the label's bounds in case it got cut off by |more_|.
95 if (label_
->bounds().Intersects(more_
->bounds())) {
96 gfx::Rect bounds
= label_
->bounds();
97 bounds
.set_width(more_
->x() - kTrayPopupPaddingBetweenItems
- label_
->x());
98 label_
->SetBoundsRect(bounds
);
102 void TrayItemMore::GetAccessibleState(ui::AccessibleViewState
* state
) {
103 state
->role
= ui::AccessibilityTypes::ROLE_PUSHBUTTON
;
104 state
->name
= accessible_name_
;
107 } // namespace internal