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

Side by Side Diff: ui/app_list/apps_grid_view.cc

Issue 10386224: app_list: Add search box and search result view for v2. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, rename and add chrome search Created 8 years, 7 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/app_list/app_list_model_view.h" 5 #include "ui/app_list/apps_grid_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ui/app_list/app_list_item_view.h" 9 #include "ui/app_list/app_list_item_view.h"
10 #include "ui/app_list/app_list_model.h"
11 #include "ui/app_list/pagination_model.h" 10 #include "ui/app_list/pagination_model.h"
11 #include "ui/app_list/view_ids.h"
12 #include "ui/views/border.h" 12 #include "ui/views/border.h"
13 13
14 namespace { 14 namespace {
15 15
16 // Padding space in pixels for fixed layout. 16 // Padding space in pixels for fixed layout.
17 const int kTopLeftRightPadding = 15; 17 const int kTopLeftRightPadding = 15;
18 const int kBottomPadding = 30; 18 const int kBottomPadding = 30;
19 19
20 // Preferred tile size when showing in fixed layout. 20 // Preferred tile size when showing in fixed layout.
21 const int kPreferredTileWidth = 80; 21 const int kPreferredTileWidth = 80;
22 const int kPreferredTileHeight = 88; 22 const int kPreferredTileHeight = 88;
23 23
24 } // namespace 24 } // namespace
25 25
26 namespace app_list { 26 namespace app_list {
27 27
28 AppListModelView::AppListModelView(views::ButtonListener* listener, 28 AppsGridView::AppsGridView(views::ButtonListener* listener,
29 PaginationModel* pagination_model) 29 PaginationModel* pagination_model)
30 : model_(NULL), 30 : model_(NULL),
31 listener_(listener), 31 listener_(listener),
32 pagination_model_(pagination_model), 32 pagination_model_(pagination_model),
33 fixed_layout_(false), 33 fixed_layout_(false),
34 cols_(0), 34 cols_(0),
35 rows_per_page_(0), 35 rows_per_page_(0),
36 selected_item_index_(-1) { 36 selected_item_index_(-1) {
37 set_id(VIEW_ID_APPS_GRID);
37 set_focusable(true); 38 set_focusable(true);
38 pagination_model_->AddObserver(this); 39 pagination_model_->AddObserver(this);
39 } 40 }
40 41
41 AppListModelView::~AppListModelView() { 42 AppsGridView::~AppsGridView() {
42 if (model_) 43 if (model_)
43 model_->RemoveObserver(this); 44 model_->RemoveObserver(this);
44 pagination_model_->RemoveObserver(this); 45 pagination_model_->RemoveObserver(this);
45 } 46 }
46 47
47 void AppListModelView::CalculateLayout(const gfx::Size& content_size, 48 void AppsGridView::CalculateLayout(const gfx::Size& content_size,
48 int num_of_tiles, 49 int num_of_tiles,
49 gfx::Size* icon_size, 50 gfx::Size* icon_size,
50 int* rows, 51 int* rows,
51 int* cols) { 52 int* cols) {
52 DCHECK(!content_size.IsEmpty() && num_of_tiles); 53 DCHECK(!content_size.IsEmpty() && num_of_tiles);
53 54
54 // Icon sizes to try. 55 // Icon sizes to try.
55 const int kIconSizes[] = { 128, 96, 64, 48, 32 }; 56 const int kIconSizes[] = { 128, 96, 64, 48, 32 };
56 57
57 double aspect = static_cast<double>(content_size.width()) / 58 double aspect = static_cast<double>(content_size.width()) /
(...skipping 30 matching lines...) Expand all
88 89
89 DCHECK((*rows) * (*cols) >= num_of_tiles); 90 DCHECK((*rows) * (*cols) >= num_of_tiles);
90 return; 91 return;
91 } 92 }
92 93
93 // No icon size that could fit all tiles. 94 // No icon size that could fit all tiles.
94 *cols = std::max(content_size.width() / tile_size.width(), 1); 95 *cols = std::max(content_size.width() / tile_size.width(), 1);
95 *rows = (num_of_tiles - 1) / (*cols) + 1; 96 *rows = (num_of_tiles - 1) / (*cols) + 1;
96 } 97 }
97 98
98 void AppListModelView::SetLayout(int icon_size, int cols, int rows_per_page) { 99 void AppsGridView::SetLayout(int icon_size, int cols, int rows_per_page) {
99 fixed_layout_ = true; 100 fixed_layout_ = true;
100 101
101 icon_size_.SetSize(icon_size, icon_size); 102 icon_size_.SetSize(icon_size, icon_size);
102 cols_ = cols; 103 cols_ = cols;
103 rows_per_page_ = rows_per_page; 104 rows_per_page_ = rows_per_page;
104 105
105 set_border(views::Border::CreateEmptyBorder(kTopLeftRightPadding, 106 set_border(views::Border::CreateEmptyBorder(kTopLeftRightPadding,
106 kTopLeftRightPadding, 107 kTopLeftRightPadding,
107 kBottomPadding, 108 kBottomPadding,
108 kTopLeftRightPadding)); 109 kTopLeftRightPadding));
109 } 110 }
110 111
111 void AppListModelView::SetModel(AppListModel* model) { 112 void AppsGridView::SetModel(AppListModel::Apps* model) {
112 if (model_) 113 if (model_)
113 model_->RemoveObserver(this); 114 model_->RemoveObserver(this);
114 115
115 model_ = model; 116 model_ = model;
116 if (model_) 117 if (model_)
117 model_->AddObserver(this); 118 model_->AddObserver(this);
118 Update(); 119 Update();
119 } 120 }
120 121
121 void AppListModelView::SetSelectedItem(AppListItemView* item) { 122 void AppsGridView::SetSelectedItem(AppListItemView* item) {
122 int index = GetIndexOf(item); 123 int index = GetIndexOf(item);
123 if (index >= 0) 124 if (index >= 0)
124 SetSelectedItemByIndex(index); 125 SetSelectedItemByIndex(index);
125 } 126 }
126 127
127 void AppListModelView::ClearSelectedItem(AppListItemView* item) { 128 void AppsGridView::ClearSelectedItem(AppListItemView* item) {
128 int index = GetIndexOf(item); 129 int index = GetIndexOf(item);
129 if (index == selected_item_index_) 130 if (index == selected_item_index_)
130 SetSelectedItemByIndex(-1); 131 SetSelectedItemByIndex(-1);
131 } 132 }
132 133
133 void AppListModelView::Update() { 134 void AppsGridView::Update() {
134 selected_item_index_ = -1; 135 selected_item_index_ = -1;
135 RemoveAllChildViews(true); 136 RemoveAllChildViews(true);
136 if (!model_ || model_->item_count() == 0) 137 if (!model_ || model_->item_count() == 0)
137 return; 138 return;
138 139
139 for (size_t i = 0; i < model_->item_count(); ++i) 140 for (size_t i = 0; i < model_->item_count(); ++i)
140 AddChildView(new AppListItemView(this, model_->GetItemAt(i), listener_)); 141 AddChildView(new AppListItemView(this, model_->GetItemAt(i), listener_));
141 142
142 Layout(); 143 Layout();
143 SchedulePaint(); 144 SchedulePaint();
144 } 145 }
145 146
146 AppListItemView* AppListModelView::GetItemViewAtIndex(int index) { 147 AppListItemView* AppsGridView::GetItemViewAtIndex(int index) {
147 return static_cast<AppListItemView*>(child_at(index)); 148 return static_cast<AppListItemView*>(child_at(index));
148 } 149 }
149 150
150 void AppListModelView::SetSelectedItemByIndex(int index) { 151 void AppsGridView::SetSelectedItemByIndex(int index) {
151 if (selected_item_index_ == index) 152 if (selected_item_index_ == index)
152 return; 153 return;
153 154
154 if (selected_item_index_ >= 0) 155 if (selected_item_index_ >= 0)
155 GetItemViewAtIndex(selected_item_index_)->SetSelected(false); 156 GetItemViewAtIndex(selected_item_index_)->SetSelected(false);
156 157
157 if (index < 0 || index >= child_count()) { 158 if (index < 0 || index >= child_count()) {
158 selected_item_index_ = -1; 159 selected_item_index_ = -1;
159 } else { 160 } else {
160 selected_item_index_ = index; 161 selected_item_index_ = index;
161 GetItemViewAtIndex(selected_item_index_)->SetSelected(true); 162 GetItemViewAtIndex(selected_item_index_)->SetSelected(true);
162 163
163 if (tiles_per_page()) 164 if (tiles_per_page())
164 pagination_model_->SelectPage(selected_item_index_ / tiles_per_page()); 165 pagination_model_->SelectPage(selected_item_index_ / tiles_per_page());
165 } 166 }
166 } 167 }
167 168
168 gfx::Size AppListModelView::GetPreferredSize() { 169 gfx::Size AppsGridView::GetPreferredSize() {
169 if (!fixed_layout_) 170 if (!fixed_layout_)
170 return gfx::Size(); 171 return gfx::Size();
171 172
172 gfx::Insets insets(GetInsets()); 173 gfx::Insets insets(GetInsets());
173 gfx::Size tile_size = gfx::Size(kPreferredTileWidth, kPreferredTileHeight); 174 gfx::Size tile_size = gfx::Size(kPreferredTileWidth, kPreferredTileHeight);
174 return gfx::Size(tile_size.width() * cols_ + insets.width(), 175 return gfx::Size(tile_size.width() * cols_ + insets.width(),
175 tile_size.height() * rows_per_page_ + insets.height()); 176 tile_size.height() * rows_per_page_ + insets.height());
176 } 177 }
177 178
178 void AppListModelView::Layout() { 179 void AppsGridView::Layout() {
179 gfx::Rect rect(GetContentsBounds()); 180 gfx::Rect rect(GetContentsBounds());
180 if (rect.IsEmpty() || child_count() == 0) 181 if (rect.IsEmpty() || child_count() == 0)
181 return; 182 return;
182 183
183 gfx::Size tile_size; 184 gfx::Size tile_size;
184 if (fixed_layout_) { 185 if (fixed_layout_) {
185 tile_size = gfx::Size(kPreferredTileWidth, kPreferredTileHeight); 186 tile_size = gfx::Size(kPreferredTileWidth, kPreferredTileHeight);
186 } else { 187 } else {
187 int rows = 0; 188 int rows = 0;
188 CalculateLayout(rect.size(), child_count(), &icon_size_, &rows, &cols_); 189 CalculateLayout(rect.size(), child_count(), &icon_size_, &rows, &cols_);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 view->SetVisible(rect.Contains(current_tile)); 229 view->SetVisible(rect.Contains(current_tile));
229 230
230 current_tile.Offset(tile_size.width(), 0); 231 current_tile.Offset(tile_size.width(), 0);
231 if ((i + 1) % cols_ == 0) { 232 if ((i + 1) % cols_ == 0) {
232 current_tile.set_x(grid_rect.x()); 233 current_tile.set_x(grid_rect.x());
233 current_tile.set_y(current_tile.y() + tile_size.height()); 234 current_tile.set_y(current_tile.y() + tile_size.height());
234 } 235 }
235 } 236 }
236 } 237 }
237 238
238 bool AppListModelView::OnKeyPressed(const views::KeyEvent& event) { 239 bool AppsGridView::OnKeyPressed(const views::KeyEvent& event) {
239 bool handled = false; 240 bool handled = false;
240 if (selected_item_index_ >= 0) 241 if (selected_item_index_ >= 0)
241 handled = GetItemViewAtIndex(selected_item_index_)->OnKeyPressed(event); 242 handled = GetItemViewAtIndex(selected_item_index_)->OnKeyPressed(event);
242 243
243 if (!handled) { 244 if (!handled) {
244 switch (event.key_code()) { 245 switch (event.key_code()) {
245 case ui::VKEY_LEFT: 246 case ui::VKEY_LEFT:
246 SetSelectedItemByIndex(std::max(selected_item_index_ - 1, 0)); 247 SetSelectedItemByIndex(std::max(selected_item_index_ - 1, 0));
247 return true; 248 return true;
248 case ui::VKEY_RIGHT: 249 case ui::VKEY_RIGHT:
(...skipping 28 matching lines...) Expand all
277 } 278 }
278 } 279 }
279 default: 280 default:
280 break; 281 break;
281 } 282 }
282 } 283 }
283 284
284 return handled; 285 return handled;
285 } 286 }
286 287
287 bool AppListModelView::OnKeyReleased(const views::KeyEvent& event) { 288 bool AppsGridView::OnKeyReleased(const views::KeyEvent& event) {
288 bool handled = false; 289 bool handled = false;
289 if (selected_item_index_ >= 0) 290 if (selected_item_index_ >= 0)
290 handled = GetItemViewAtIndex(selected_item_index_)->OnKeyReleased(event); 291 handled = GetItemViewAtIndex(selected_item_index_)->OnKeyReleased(event);
291 292
292 return handled; 293 return handled;
293 } 294 }
294 295
295 void AppListModelView::OnPaintFocusBorder(gfx::Canvas* canvas) { 296 void AppsGridView::OnPaintFocusBorder(gfx::Canvas* canvas) {
296 // Override to not paint focus frame. 297 // Override to not paint focus frame.
297 } 298 }
298 299
299 void AppListModelView::ListItemsAdded(size_t start, size_t count) { 300 void AppsGridView::ListItemsAdded(size_t start, size_t count) {
300 for (size_t i = start; i < start + count; ++i) { 301 for (size_t i = start; i < start + count; ++i) {
301 AddChildViewAt(new AppListItemView(this, model_->GetItemAt(i), listener_), 302 AddChildViewAt(new AppListItemView(this, model_->GetItemAt(i), listener_),
302 i); 303 i);
303 } 304 }
304 Layout(); 305 Layout();
305 SchedulePaint(); 306 SchedulePaint();
306 } 307 }
307 308
308 void AppListModelView::ListItemsRemoved(size_t start, size_t count) { 309 void AppsGridView::ListItemsRemoved(size_t start, size_t count) {
309 for (size_t i = 0; i < count; ++i) 310 for (size_t i = 0; i < count; ++i)
310 delete child_at(start); 311 delete child_at(start);
311 312
312 Layout(); 313 Layout();
313 SchedulePaint(); 314 SchedulePaint();
314 } 315 }
315 316
316 void AppListModelView::ListItemsChanged(size_t start, size_t count) { 317 void AppsGridView::ListItemsChanged(size_t start, size_t count) {
317 NOTREACHED(); 318 NOTREACHED();
318 } 319 }
319 320
320 void AppListModelView::TotalPagesChanged() { 321 void AppsGridView::TotalPagesChanged() {
321 } 322 }
322 323
323 void AppListModelView::SelectedPageChanged(int old_selected, int new_selected) { 324 void AppsGridView::SelectedPageChanged(int old_selected, int new_selected) {
324 Layout(); 325 Layout();
325 } 326 }
326 327
327 } // namespace app_list 328 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698