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

Side by Side Diff: ui/app_list/views/folder_header_view.cc

Issue 27777002: Implement app list folder management page UI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nits. Created 7 years, 1 month 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 "ui/app_list/views/folder_header_view.h"
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "grit/ui_resources.h"
9 #include "grit/ui_strings.h"
10 #include "ui/app_list/app_list_constants.h"
11 #include "ui/app_list/app_list_folder_item.h"
12 #include "ui/app_list/views/app_list_folder_view.h"
13 #include "ui/base/resource/resource_bundle.h"
14 #include "ui/gfx/canvas.h"
15 #include "ui/views/controls/button/image_button.h"
16 #include "ui/views/controls/textfield/textfield.h"
17
18 namespace app_list {
19
20 namespace {
21
22 const int kPreferredWidth = 360;
23 const int kPreferredHeight = 48;
24 const int kIconDimension = 32;
25 const int kPadding = 14;
26 const int kFolderNameWidth = 150;
27 const int kFolderNameHeight = 30;
28 const int kBottomSeparatorWidth = 380;
29 const int kBottomSeparatorHeight = 1;
30
31 const SkColor kHintTextColor = SkColorSetRGB(0xA0, 0xA0, 0xA0);
32
33 } // namespace
34
35 class FolderHeaderView::FolderNameView : public views::Textfield {
36 public:
37 FolderNameView() {
38 set_border(views::Border::CreateEmptyBorder(1, 1, 1, 1));
39 }
40
41 virtual ~FolderNameView() {
42 }
43
44 // Overridden from views::View:
45 virtual gfx::Size GetPreferredSize() OVERRIDE {
46 return gfx::Size(kFolderNameWidth, kFolderNameHeight);
47 }
48
49 virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE {
50 const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250);
51 if (HasFocus() && focusable()) {
52 gfx::Rect rect = GetLocalBounds();
53 rect.Inset(0, 0, 1, 1);
54 canvas->DrawRect(rect, kFocusBorderColor);
55 }
56 }
57
58 private:
59 DISALLOW_COPY_AND_ASSIGN(FolderNameView);
60 };
61
62 FolderHeaderView::FolderHeaderView(FolderHeaderViewDelegate* delegate)
63 : folder_item_(NULL),
64 back_button_(new views::ImageButton(this)),
65 folder_name_view_(new FolderNameView),
66 delegate_(delegate) {
67 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
68 back_button_->SetImage(views::ImageButton::STATE_NORMAL,
69 rb.GetImageSkiaNamed(IDR_APP_LIST_FOLDER_BACK_NORMAL));
70 back_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
71 views::ImageButton::ALIGN_MIDDLE);
72 AddChildView(back_button_);
73
74 folder_name_view_->SetFont(rb.GetFont(ui::ResourceBundle::MediumFont));
75 folder_name_view_->set_placeholder_text_color(kHintTextColor);
76 folder_name_view_->set_placeholder_text(
77 rb.GetLocalizedString(IDS_APP_LIST_FOLDER_NAME_PLACEHOLDER));
78 folder_name_view_->RemoveBorder();
79 folder_name_view_->SetBackgroundColor(kContentsBackgroundColor);
80 folder_name_view_->SetController(this);
81 AddChildView(folder_name_view_);
82 }
83
84 FolderHeaderView::~FolderHeaderView() {
85 if (folder_item_)
86 folder_item_->RemoveObserver(this);
87 }
88
89 void FolderHeaderView::SetFolderItem(AppListFolderItem* folder_item) {
90 if (folder_item_)
91 folder_item_->RemoveObserver(this);
92
93 folder_item_ = folder_item;
94 if (!folder_item_)
95 return;
96 folder_item_->AddObserver(this);
97
98 Update();
99 }
100
101 void FolderHeaderView::Update() {
102 if (!folder_item_)
103 return;
104
105 folder_name_view_->SetText(UTF8ToUTF16(folder_item_->title()));
106 }
107
108 gfx::Size FolderHeaderView::GetPreferredSize() {
109 return gfx::Size(kPreferredWidth, kPreferredHeight);
110 }
111
112 void FolderHeaderView::Layout() {
113 gfx::Rect rect(GetContentsBounds());
114 if (rect.IsEmpty())
115 return;
116
117 gfx::Rect back_bounds(rect);
118 back_bounds.set_width(kIconDimension + 2 * kPadding);
119 back_button_->SetBoundsRect(back_bounds);
120
121 gfx::Rect text_bounds(rect);
122 int text_width = folder_name_view_->GetPreferredSize().width();
123 text_bounds.set_x(back_bounds.x() + (rect.width() - text_width) / 2);
124 text_bounds.set_width(text_width);
125 text_bounds.ClampToCenteredSize(gfx::Size(text_bounds.width(),
126 folder_name_view_->GetPreferredSize().height()));
127 folder_name_view_->SetBoundsRect(text_bounds);
128 }
129
130 void FolderHeaderView::OnPaint(gfx::Canvas* canvas) {
131 views::View::OnPaint(canvas);
132
133 gfx::Rect rect(GetContentsBounds());
134 if (rect.IsEmpty())
135 return;
136
137 // Draw bottom separator line.
138 rect.set_x((rect.width() - kBottomSeparatorWidth) / 2 + rect.x());
139 rect.set_y(rect.y() + rect.height() - kBottomSeparatorHeight);
140 rect.set_width(kBottomSeparatorWidth);
141 rect.set_height(kBottomSeparatorHeight);
142 canvas->FillRect(rect, kTopSeparatorColor);
143 }
144
145 void FolderHeaderView::ContentsChanged(views::Textfield* sender,
146 const base::string16& new_contents) {
147 // Temporarily remove from observer to ignore data change caused by us.
148 if (!folder_item_)
149 return;
150
151 folder_item_->RemoveObserver(this);
152 std::string name = UTF16ToUTF8(folder_name_view_->text());
153 folder_item_->SetTitleAndFullName(name, name);
154 folder_item_->AddObserver(this);
155 }
156
157 void FolderHeaderView::ButtonPressed(views::Button* sender,
158 const ui::Event& event) {
159 delegate_->NavigateBack(folder_item_, event);
160 }
161
162 void FolderHeaderView::ItemIconChanged() {
163 }
164
165 void FolderHeaderView::ItemTitleChanged() {
166 Update();
167 }
168
169 void FolderHeaderView::ItemHighlightedChanged() {
170 }
171
172 void FolderHeaderView::ItemIsInstallingChanged() {
173 }
174
175 void FolderHeaderView::ItemPercentDownloadedChanged() {
176 }
177
178 } // namespace app_list
179
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698