Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: ash/system/tray/special_popup_row.cc

Issue 12263021: Refactor SpecialPopupRow out of tray_views.h/cc into its own files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 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/special_popup_row.h"
6
7 #include "ash/system/tray/tray_constants.h"
8 #include "ash/system/tray/tray_views.h"
9 #include "grit/ash_resources.h"
10 #include "grit/ash_strings.h"
11 #include "ui/base/resource/resource_bundle.h"
12 #include "ui/gfx/canvas.h"
13 #include "ui/gfx/rect.h"
14 #include "ui/views/border.h"
15 #include "ui/views/layout/box_layout.h"
16 #include "ui/views/painter.h"
17
18 namespace ash {
19 namespace internal {
20
21 namespace {
stevenjb 2013/02/13 23:13:16 nit: ws
jennyz 2013/02/13 23:36:57 Done.
22 const int kIconPaddingLeft = 5;
23 const int kSpecialPopupRowHeight = 55;
24 const int kBorderHeight = 3;
25 const SkColor kBorderGradientDark = SkColorSetRGB(0xae, 0xae, 0xae);
26 const SkColor kBorderGradientLight = SkColorSetRGB(0xe8, 0xe8, 0xe8);
27
28 views::View* CreatePopupHeaderButtonsContainer() {
29 views::View* view = new views::View;
30 view->SetLayoutManager(new
31 views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, -1));
32 view->set_border(views::Border::CreateEmptyBorder(0, 0, 0, 5));
33 return view;
34 }
35
36 class SpecialPopupRowBorder : public views::Border {
37 public:
38 SpecialPopupRowBorder()
39 : painter_(views::Painter::CreateVerticalGradient(kBorderGradientDark,
40 kBorderGradientLight)) {
41 }
42
43 virtual ~SpecialPopupRowBorder() {}
44
45 private:
46 virtual void Paint(const views::View& view, gfx::Canvas* canvas) OVERRIDE {
47 views::Painter::PaintPainterAt(canvas, painter_.get(),
48 gfx::Rect(gfx::Size(view.width(), kBorderHeight)));
49 }
50
51 virtual gfx::Insets GetInsets() const OVERRIDE {
52 return gfx::Insets(kBorderHeight, 0, 0, 0);
53 }
54
55 scoped_ptr<views::Painter> painter_;
56
57 DISALLOW_COPY_AND_ASSIGN(SpecialPopupRowBorder);
58 };
59
60 } // namespace
61
62 SpecialPopupRow::SpecialPopupRow()
63 : content_(NULL),
64 button_container_(NULL) {
65 views::Background* background = views::Background::CreateBackgroundPainter(
66 true, views::Painter::CreateVerticalGradient(kHeaderBackgroundColorLight,
67 kHeaderBackgroundColorDark));
68 background->SetNativeControlColor(kHeaderBackgroundColorDark);
69 set_background(background);
70 set_border(new SpecialPopupRowBorder);
71 SetLayoutManager(
72 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
73 }
74
75 SpecialPopupRow::~SpecialPopupRow() {
76 }
77
78 void SpecialPopupRow::SetTextLabel(int string_id, ViewClickListener* listener) {
79 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
80 HoverHighlightView* container = new HoverHighlightView(listener);
81 container->SetLayoutManager(new
82 views::BoxLayout(views::BoxLayout::kHorizontal, 0, 3, kIconPaddingLeft));
83
84 container->set_highlight_color(SkColorSetARGB(0, 0, 0, 0));
85 container->set_default_color(SkColorSetARGB(0, 0, 0, 0));
86 container->set_text_highlight_color(kHeaderTextColorHover);
87 container->set_text_default_color(kHeaderTextColorNormal);
88
89 container->AddIconAndLabel(
90 *rb.GetImageNamed(IDR_AURA_UBER_TRAY_LESS).ToImageSkia(),
91 rb.GetLocalizedString(string_id),
92 gfx::Font::BOLD);
93
94 container->set_border(views::Border::CreateEmptyBorder(0,
95 kTrayPopupPaddingHorizontal, 0, 0));
96
97 container->SetAccessibleName(
98 rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_PREVIOUS_MENU));
99 SetContent(container);
100 }
101
102 void SpecialPopupRow::SetContent(views::View* view) {
103 CHECK(!content_);
104 content_ = view;
105 AddChildViewAt(content_, 0);
106 }
107
108 void SpecialPopupRow::AddButton(TrayPopupHeaderButton* button) {
109 if (!button_container_) {
110 button_container_ = CreatePopupHeaderButtonsContainer();
111 AddChildView(button_container_);
112 }
113
stevenjb 2013/02/13 23:13:16 nit: no need for extra WS here
jennyz 2013/02/13 23:36:57 Done.
114 button_container_->AddChildView(button);
115 }
116
117 void SpecialPopupRow::AddThrobber(ThrobberView* throbber) {
118 if (!button_container_) {
119 button_container_ = CreatePopupHeaderButtonsContainer();
120 AddChildView(button_container_);
121 }
122
stevenjb 2013/02/13 23:13:16 nit: no need for extra WS here
jennyz 2013/02/13 23:36:57 Done.
123 button_container_->AddChildView(throbber);
124 }
125
126 gfx::Size SpecialPopupRow::GetPreferredSize() {
127 gfx::Size size = views::View::GetPreferredSize();
128 size.set_height(kSpecialPopupRowHeight);
129 return size;
130 }
131
132 void SpecialPopupRow::Layout() {
133 views::View::Layout();
134 gfx::Rect content_bounds = GetContentsBounds();
135 if (content_bounds.IsEmpty())
136 return;
137 if (!button_container_) {
138 content_->SetBoundsRect(GetContentsBounds());
139 return;
140 }
141
142 gfx::Rect bounds(button_container_->GetPreferredSize());
143 bounds.set_height(content_bounds.height());
144 gfx::Rect container_bounds = content_bounds;
145 container_bounds.ClampToCenteredSize(bounds.size());
146 container_bounds.set_x(content_bounds.width() - container_bounds.width());
147 button_container_->SetBoundsRect(container_bounds);
148
149 bounds = content_->bounds();
150 bounds.set_width(button_container_->x());
151 content_->SetBoundsRect(bounds);
152 }
153
154 } // namespace internal
155 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698