OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/views/start_page_view.h" | 5 #include "ui/app_list/views/start_page_view.h" |
6 | 6 |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "ui/app_list/app_list_constants.h" | 8 #include "ui/app_list/app_list_constants.h" |
9 #include "ui/app_list/app_list_item.h" | 9 #include "ui/app_list/app_list_item.h" |
10 #include "ui/app_list/app_list_model.h" | 10 #include "ui/app_list/app_list_model.h" |
11 #include "ui/app_list/app_list_view_delegate.h" | 11 #include "ui/app_list/app_list_view_delegate.h" |
12 #include "ui/app_list/search_result.h" | 12 #include "ui/app_list/search_result.h" |
| 13 #include "ui/app_list/views/all_apps_tile_item_view.h" |
13 #include "ui/app_list/views/app_list_main_view.h" | 14 #include "ui/app_list/views/app_list_main_view.h" |
14 #include "ui/app_list/views/search_box_view.h" | 15 #include "ui/app_list/views/search_box_view.h" |
15 #include "ui/app_list/views/search_result_list_view.h" | 16 #include "ui/app_list/views/search_result_list_view.h" |
| 17 #include "ui/app_list/views/search_result_tile_item_view.h" |
16 #include "ui/app_list/views/tile_item_view.h" | 18 #include "ui/app_list/views/tile_item_view.h" |
17 #include "ui/gfx/canvas.h" | 19 #include "ui/gfx/canvas.h" |
18 #include "ui/views/background.h" | 20 #include "ui/views/background.h" |
19 #include "ui/views/controls/image_view.h" | 21 #include "ui/views/controls/image_view.h" |
20 #include "ui/views/controls/label.h" | 22 #include "ui/views/controls/label.h" |
21 #include "ui/views/controls/textfield/textfield.h" | 23 #include "ui/views/controls/textfield/textfield.h" |
22 #include "ui/views/layout/box_layout.h" | 24 #include "ui/views/layout/box_layout.h" |
23 #include "ui/views/widget/widget.h" | 25 #include "ui/views/widget/widget.h" |
24 | 26 |
25 namespace app_list { | 27 namespace app_list { |
26 | 28 |
27 namespace { | 29 namespace { |
28 | 30 |
29 // Layout constants. | 31 // Layout constants. |
30 const int kTopMargin = 84; | 32 const int kTopMargin = 84; |
31 const int kInstantContainerSpacing = 11; | 33 const int kInstantContainerSpacing = 11; |
32 const int kSearchBoxAndTilesSpacing = 40; | 34 const int kSearchBoxAndTilesSpacing = 40; |
33 | 35 |
34 // WebView constants. | 36 // WebView constants. |
35 const int kWebViewWidth = 500; | 37 const int kWebViewWidth = 500; |
36 const int kWebViewHeight = 105; | 38 const int kWebViewHeight = 105; |
37 | 39 |
38 // DummySearchBoxView constants. | 40 // DummySearchBoxView constants. |
39 const int kDummySearchBoxWidth = 480; | 41 const int kDummySearchBoxWidth = 480; |
40 | 42 |
41 // Tile container constants. | 43 // Tile container constants. |
42 const size_t kNumStartPageTiles = 5; | 44 const size_t kNumStartPageTiles = 4; |
| 45 const size_t kNumSearchResultTiles = 5; |
43 const int kTileSpacing = 10; | 46 const int kTileSpacing = 10; |
44 | 47 |
45 // A placeholder search box which is sized to fit within the start page view. | 48 // A placeholder search box which is sized to fit within the start page view. |
46 class DummySearchBoxView : public SearchBoxView { | 49 class DummySearchBoxView : public SearchBoxView { |
47 public: | 50 public: |
48 DummySearchBoxView(SearchBoxViewDelegate* delegate, | 51 DummySearchBoxView(SearchBoxViewDelegate* delegate, |
49 AppListViewDelegate* view_delegate) | 52 AppListViewDelegate* view_delegate) |
50 : SearchBoxView(delegate, view_delegate) { | 53 : SearchBoxView(delegate, view_delegate) { |
51 } | 54 } |
52 | 55 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 | 127 |
125 instant_container_->AddChildView(search_box_container); | 128 instant_container_->AddChildView(search_box_container); |
126 } | 129 } |
127 | 130 |
128 void StartPageView::InitTilesContainer() { | 131 void StartPageView::InitTilesContainer() { |
129 views::BoxLayout* tiles_layout_manager = | 132 views::BoxLayout* tiles_layout_manager = |
130 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing); | 133 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing); |
131 tiles_layout_manager->set_main_axis_alignment( | 134 tiles_layout_manager->set_main_axis_alignment( |
132 views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); | 135 views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); |
133 tiles_container_->SetLayoutManager(tiles_layout_manager); | 136 tiles_container_->SetLayoutManager(tiles_layout_manager); |
134 for (size_t i = 0; i < kNumStartPageTiles; ++i) { | 137 |
135 TileItemView* tile_item = new TileItemView(); | 138 // Add SearchResultTileItemViews to the container. |
| 139 for (size_t i = 0; i < std::max(kNumStartPageTiles, kNumSearchResultTiles); |
| 140 ++i) { |
| 141 SearchResultTileItemView* tile_item = new SearchResultTileItemView(); |
136 tiles_container_->AddChildView(tile_item); | 142 tiles_container_->AddChildView(tile_item); |
137 tile_views_.push_back(tile_item); | 143 search_result_tile_views_.push_back(tile_item); |
138 } | 144 } |
| 145 |
| 146 // Also add a special "all apps" button to the end of the container. |
| 147 all_apps_button_ = |
| 148 new AllAppsTileItemView(app_list_main_view_->contents_view()); |
| 149 tiles_container_->AddChildView(all_apps_button_); |
139 } | 150 } |
140 | 151 |
141 void StartPageView::SetModel(AppListModel* model) { | 152 void StartPageView::SetModel(AppListModel* model) { |
142 DCHECK(model); | 153 DCHECK(model); |
143 if (search_results_model_) | 154 if (search_results_model_) |
144 search_results_model_->RemoveObserver(this); | 155 search_results_model_->RemoveObserver(this); |
145 search_results_model_ = model->results(); | 156 search_results_model_ = model->results(); |
146 search_results_model_->AddObserver(this); | 157 search_results_model_->AddObserver(this); |
147 results_view_->SetResults(search_results_model_); | 158 results_view_->SetResults(search_results_model_); |
148 Reset(); | 159 Reset(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 } | 192 } |
182 | 193 |
183 bool StartPageView::IsShowingSearchResults() const { | 194 bool StartPageView::IsShowingSearchResults() const { |
184 return show_state_ == SHOW_SEARCH_RESULTS; | 195 return show_state_ == SHOW_SEARCH_RESULTS; |
185 } | 196 } |
186 | 197 |
187 void StartPageView::UpdateForTesting() { | 198 void StartPageView::UpdateForTesting() { |
188 Update(); | 199 Update(); |
189 } | 200 } |
190 | 201 |
| 202 TileItemView* StartPageView::all_apps_button() const { |
| 203 return all_apps_button_; |
| 204 } |
| 205 |
191 bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) { | 206 bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) { |
192 if (show_state_ == SHOW_SEARCH_RESULTS) | 207 if (show_state_ == SHOW_SEARCH_RESULTS) |
193 return results_view_->OnKeyPressed(event); | 208 return results_view_->OnKeyPressed(event); |
194 | 209 |
195 return false; | 210 return false; |
196 } | 211 } |
197 | 212 |
198 void StartPageView::Layout() { | 213 void StartPageView::Layout() { |
199 // Instant and search results take up the height of the instant container. | 214 // Instant and search results take up the height of the instant container. |
200 gfx::Rect bounds(GetContentsBounds()); | 215 gfx::Rect bounds(GetContentsBounds()); |
201 bounds.set_height(instant_container_->GetHeightForWidth(bounds.width())); | 216 bounds.set_height(instant_container_->GetHeightForWidth(bounds.width())); |
202 instant_container_->SetBoundsRect(bounds); | 217 instant_container_->SetBoundsRect(bounds); |
203 results_view_->SetBoundsRect(bounds); | 218 results_view_->SetBoundsRect(bounds); |
204 | 219 |
205 // Tiles begin where the instant container ends. | 220 // Tiles begin where the instant container ends. |
206 bounds.set_y(bounds.bottom()); | 221 bounds.set_y(bounds.bottom()); |
207 bounds.set_height(tiles_container_->GetHeightForWidth(bounds.width())); | 222 bounds.set_height(tiles_container_->GetHeightForWidth(bounds.width())); |
208 tiles_container_->SetBoundsRect(bounds); | 223 tiles_container_->SetBoundsRect(bounds); |
209 } | 224 } |
210 | 225 |
211 void StartPageView::Update() { | 226 void StartPageView::Update() { |
| 227 size_t max_tiles = show_state_ == SHOW_START_PAGE ? kNumStartPageTiles |
| 228 : kNumSearchResultTiles; |
212 std::vector<SearchResult*> display_results = | 229 std::vector<SearchResult*> display_results = |
213 AppListModel::FilterSearchResultsByDisplayType(search_results_model_, | 230 AppListModel::FilterSearchResultsByDisplayType( |
214 SearchResult::DISPLAY_TILE, | 231 search_results_model_, SearchResult::DISPLAY_TILE, max_tiles); |
215 kNumStartPageTiles); | 232 |
216 for (size_t i = 0; i < kNumStartPageTiles; ++i) { | 233 // Update the tile item results. |
| 234 for (size_t i = 0; i < search_result_tile_views_.size(); ++i) { |
217 SearchResult* item = NULL; | 235 SearchResult* item = NULL; |
218 if (i < display_results.size()) | 236 if (i < display_results.size()) |
219 item = display_results[i]; | 237 item = display_results[i]; |
220 tile_views_[i]->SetSearchResult(item); | 238 search_result_tile_views_[i]->SetSearchResult(item); |
221 } | 239 } |
| 240 |
| 241 // Show or hide the all apps button (depending on the current show state). |
| 242 all_apps_button_->SetVisible(show_state_ == SHOW_START_PAGE); |
| 243 |
222 tiles_container_->Layout(); | 244 tiles_container_->Layout(); |
223 Layout(); | 245 Layout(); |
224 update_factory_.InvalidateWeakPtrs(); | 246 update_factory_.InvalidateWeakPtrs(); |
225 } | 247 } |
226 | 248 |
227 void StartPageView::ScheduleUpdate() { | 249 void StartPageView::ScheduleUpdate() { |
228 // When search results are added one by one, each addition generates an update | 250 // When search results are added one by one, each addition generates an update |
229 // request. Consolidates those update requests into one Update call. | 251 // request. Consolidates those update requests into one Update call. |
230 if (!update_factory_.HasWeakPtrs()) { | 252 if (!update_factory_.HasWeakPtrs()) { |
231 base::MessageLoop::current()->PostTask( | 253 base::MessageLoop::current()->PostTask( |
(...skipping 20 matching lines...) Expand all Loading... |
252 | 274 |
253 void StartPageView::ListItemMoved(size_t index, size_t target_index) { | 275 void StartPageView::ListItemMoved(size_t index, size_t target_index) { |
254 ScheduleUpdate(); | 276 ScheduleUpdate(); |
255 } | 277 } |
256 | 278 |
257 void StartPageView::ListItemsChanged(size_t start, size_t count) { | 279 void StartPageView::ListItemsChanged(size_t start, size_t count) { |
258 ScheduleUpdate(); | 280 ScheduleUpdate(); |
259 } | 281 } |
260 | 282 |
261 } // namespace app_list | 283 } // namespace app_list |
OLD | NEW |