Chromium Code Reviews| Index: ui/app_list/views/start_page_view.cc |
| diff --git a/ui/app_list/views/start_page_view.cc b/ui/app_list/views/start_page_view.cc |
| index cb2ca80a7818a516caed007b39c02a3a457b513c..5112e3ee3a5fa783f182add3fd4b0e254a034f29 100644 |
| --- a/ui/app_list/views/start_page_view.cc |
| +++ b/ui/app_list/views/start_page_view.cc |
| @@ -4,6 +4,7 @@ |
| #include "ui/app_list/views/start_page_view.h" |
| +#include <algorithm> |
| #include <string> |
| #include "base/i18n/rtl.h" |
| @@ -30,6 +31,7 @@ |
| #include "ui/views/controls/label.h" |
| #include "ui/views/controls/textfield/textfield.h" |
| #include "ui/views/layout/box_layout.h" |
| +#include "ui/views/layout/grid_layout.h" |
| #include "ui/views/widget/widget.h" |
| namespace app_list { |
| @@ -46,8 +48,10 @@ const int kWebViewWidth = 700; |
| const int kWebViewHeight = 244; |
| // Tile container constants. |
| -const size_t kNumStartPageTiles = 4; |
| +const int kNumStartPageTiles = 9; |
|
xiyuan
2016/08/08 18:02:15
nit: do we have to replace size_t with int?
xdai1
2016/08/08 21:25:38
Reverted it back. Not necessarily... I just though
|
| const int kTileSpacing = 7; |
| +const int kNumStartPageTilesCols = 5; |
| +const int kTilesHorizontalMarginLeft = 145; |
| const int kLauncherPageBackgroundWidth = 400; |
| @@ -131,7 +135,10 @@ class StartPageView::StartPageTilesContainer |
| int GetYSize() override; |
| private: |
| + void CreateAppsGrid(int apps_num); |
| + |
| ContentsView* contents_view_; |
| + AppListViewDelegate* view_delegate_; |
| std::vector<SearchResultTileItemView*> search_result_tile_views_; |
| AllAppsTileItemView* all_apps_button_; |
| @@ -143,30 +150,12 @@ StartPageView::StartPageTilesContainer::StartPageTilesContainer( |
| ContentsView* contents_view, |
| AllAppsTileItemView* all_apps_button, |
| AppListViewDelegate* view_delegate) |
| - : contents_view_(contents_view), all_apps_button_(all_apps_button) { |
| - views::BoxLayout* tiles_layout_manager = |
| - new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing); |
| - tiles_layout_manager->set_main_axis_alignment( |
| - views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); |
| - SetLayoutManager(tiles_layout_manager); |
| + : contents_view_(contents_view), |
| + view_delegate_(view_delegate), |
| + all_apps_button_(all_apps_button) { |
| set_background( |
| views::Background::CreateSolidBackground(kLabelBackgroundColor)); |
| - |
| - // Add SearchResultTileItemViews to the container. |
| - for (size_t i = 0; i < kNumStartPageTiles; ++i) { |
| - SearchResultTileItemView* tile_item = |
| - new SearchResultTileItemView(this, view_delegate); |
| - AddChildView(tile_item); |
| - tile_item->SetParentBackgroundColor(kLabelBackgroundColor); |
| - tile_item->SetHoverStyle(TileItemView::HOVER_STYLE_ANIMATE_SHADOW); |
| - search_result_tile_views_.push_back(tile_item); |
| - } |
| - |
| - // Also add a special "all apps" button to the end of the container. |
| - all_apps_button_->SetHoverStyle(TileItemView::HOVER_STYLE_ANIMATE_SHADOW); |
| - all_apps_button_->UpdateIcon(); |
| - all_apps_button_->SetParentBackgroundColor(kLabelBackgroundColor); |
| - AddChildView(all_apps_button_); |
| + CreateAppsGrid(kNumStartPageTiles); |
| } |
| StartPageView::StartPageTilesContainer::~StartPageTilesContainer() { |
| @@ -194,10 +183,19 @@ int StartPageView::StartPageTilesContainer::Update() { |
| std::vector<SearchResult*> display_results = |
| AppListModel::FilterSearchResultsByDisplayType( |
| results(), SearchResult::DISPLAY_RECOMMENDATION, kNumStartPageTiles); |
| + if (display_results.size() < kNumStartPageTiles && |
| + display_results.size() > 0) { |
|
xiyuan
2016/08/08 18:02:15
Think we need to update the gird when display_resu
xdai1
2016/08/08 21:25:38
Done.
|
| + // We should recreate the grid layout in this case. |
| + for (size_t i = 0; i < search_result_tile_views_.size(); i++) |
| + RemoveChildView(search_result_tile_views_[i]); |
| + search_result_tile_views_.clear(); |
|
xiyuan
2016/08/08 18:02:15
Would this leak? That is, RemoveChildView() does n
xdai1
2016/08/08 21:25:38
You're right. I think we should manually delete th
|
| + RemoveChildView(all_apps_button_); |
| + CreateAppsGrid(display_results.size()); |
| + } |
| // Update the tile item results. |
| for (size_t i = 0; i < search_result_tile_views_.size(); ++i) { |
| - SearchResult* item = NULL; |
| + SearchResult* item = nullptr; |
| if (i < display_results.size()) |
| item = display_results[i]; |
| search_result_tile_views_[i]->SetSearchResult(item); |
| @@ -236,6 +234,42 @@ int StartPageView::StartPageTilesContainer::GetYSize() { |
| return 0; |
| } |
| +void StartPageView::StartPageTilesContainer::CreateAppsGrid(int apps_num) { |
| + views::GridLayout* tiles_layout_manager = new views::GridLayout(this); |
|
xiyuan
2016/08/08 18:02:15
nit: DCHECK(search_result_tile_views_.empty()) to
xdai1
2016/08/08 21:25:38
Done.
|
| + SetLayoutManager(tiles_layout_manager); |
| + |
| + views::ColumnSet* column_set = tiles_layout_manager->AddColumnSet(0); |
| + column_set->AddPaddingColumn(0, kTilesHorizontalMarginLeft); |
| + for (int col = 0; col < kNumStartPageTilesCols; col++) { |
| + column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
| + views::GridLayout::USE_PREF, 0, 0); |
| + column_set->AddPaddingColumn(0, kTileSpacing); |
| + } |
| + |
| + // Add SearchResultTileItemViews to the container. |
| + int i = 0; |
| + for (; i < apps_num; i++) { |
| + SearchResultTileItemView* tile_item = |
| + new SearchResultTileItemView(this, view_delegate_); |
| + if (i % kNumStartPageTilesCols == 0) |
| + tiles_layout_manager->StartRow(0, 0); |
| + tiles_layout_manager->AddView(tile_item); |
| + AddChildView(tile_item); |
| + tile_item->SetParentBackgroundColor(kLabelBackgroundColor); |
| + tile_item->SetHoverStyle(TileItemView::HOVER_STYLE_ANIMATE_SHADOW); |
| + search_result_tile_views_.push_back(tile_item); |
| + } |
| + |
| + // Also add a special "all apps" button to the end of the container. |
| + all_apps_button_->SetHoverStyle(TileItemView::HOVER_STYLE_ANIMATE_SHADOW); |
| + all_apps_button_->UpdateIcon(); |
| + all_apps_button_->SetParentBackgroundColor(kLabelBackgroundColor); |
|
xiyuan
2016/08/08 18:02:15
nit: hover style in line 264 and this background c
xdai1
2016/08/08 21:25:38
Done.
|
| + if (i % kNumStartPageTilesCols == 0) |
| + tiles_layout_manager->StartRow(0, 0); |
| + tiles_layout_manager->AddView(all_apps_button_); |
| + AddChildView(all_apps_button_); |
| +} |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| // StartPageView implementation: |
| StartPageView::StartPageView(AppListMainView* app_list_main_view, |