#include "ui/app_list/app_list_model.h"
#include "ui/app_list/app_list_view_delegate.h"
#include "ui/app_list/search_result.h"
+#include "ui/app_list/views/all_apps_tile_item_view.h"
#include "ui/app_list/views/app_list_main_view.h"
#include "ui/app_list/views/search_box_view.h"
#include "ui/app_list/views/search_result_list_view.h"
+#include "ui/app_list/views/search_result_tile_item_view.h"
#include "ui/app_list/views/tile_item_view.h"
#include "ui/gfx/canvas.h"
#include "ui/views/background.h"
const int kDummySearchBoxWidth = 480;
// Tile container constants.
-const size_t kNumStartPageTiles = 5;
+const size_t kNumStartPageTiles = 4;
+const size_t kNumSearchResultTiles = 5;
const int kTileSpacing = 10;
// A placeholder search box which is sized to fit within the start page view.
: SearchBoxView(delegate, view_delegate) {
}
- virtual ~DummySearchBoxView() {}
+ ~DummySearchBoxView() override {}
// Overridden from views::View:
- virtual gfx::Size GetPreferredSize() const OVERRIDE {
+ gfx::Size GetPreferredSize() const override {
gfx::Size size(SearchBoxView::GetPreferredSize());
size.set_width(kDummySearchBoxWidth);
return size;
StartPageView::StartPageView(AppListMainView* app_list_main_view,
AppListViewDelegate* view_delegate)
: app_list_main_view_(app_list_main_view),
- search_results_model_(NULL),
view_delegate_(view_delegate),
search_box_view_(new DummySearchBoxView(this, view_delegate_)),
results_view_(
new SearchResultListView(app_list_main_view, view_delegate)),
instant_container_(new views::View),
tiles_container_(new views::View),
- show_state_(SHOW_START_PAGE),
- update_factory_(this) {
+ show_state_(SHOW_START_PAGE) {
// The view containing the start page WebContents and DummySearchBoxView.
InitInstantContainer();
AddChildView(instant_container_);
}
StartPageView::~StartPageView() {
- if (search_results_model_)
- search_results_model_->RemoveObserver(this);
}
void StartPageView::InitInstantContainer() {
tiles_layout_manager->set_main_axis_alignment(
views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
tiles_container_->SetLayoutManager(tiles_layout_manager);
- for (size_t i = 0; i < kNumStartPageTiles; ++i) {
- TileItemView* tile_item = new TileItemView();
+
+ // Add SearchResultTileItemViews to the container.
+ for (size_t i = 0; i < std::max(kNumStartPageTiles, kNumSearchResultTiles);
+ ++i) {
+ SearchResultTileItemView* tile_item = new SearchResultTileItemView();
tiles_container_->AddChildView(tile_item);
- tile_views_.push_back(tile_item);
+ search_result_tile_views_.push_back(tile_item);
}
+
+ // Also add a special "all apps" button to the end of the container.
+ all_apps_button_ = new AllAppsTileItemView(
+ app_list_main_view_->contents_view(),
+ view_delegate_->GetModel()->top_level_item_list());
+ all_apps_button_->UpdateIcon();
+ tiles_container_->AddChildView(all_apps_button_);
}
void StartPageView::SetModel(AppListModel* model) {
DCHECK(model);
- if (search_results_model_)
- search_results_model_->RemoveObserver(this);
- search_results_model_ = model->results();
- search_results_model_->AddObserver(this);
- results_view_->SetResults(search_results_model_);
+ SetResults(model->results());
+ results_view_->SetResults(model->results());
Reset();
}
Update();
}
+TileItemView* StartPageView::all_apps_button() const {
+ return all_apps_button_;
+}
+
bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) {
if (show_state_ == SHOW_SEARCH_RESULTS)
return results_view_->OnKeyPressed(event);
}
void StartPageView::Update() {
+ size_t max_tiles = show_state_ == SHOW_START_PAGE ? kNumStartPageTiles
+ : kNumSearchResultTiles;
std::vector<SearchResult*> display_results =
- AppListModel::FilterSearchResultsByDisplayType(search_results_model_,
- SearchResult::DISPLAY_TILE,
- kNumStartPageTiles);
- for (size_t i = 0; i < kNumStartPageTiles; ++i) {
+ AppListModel::FilterSearchResultsByDisplayType(
+ results(), SearchResult::DISPLAY_TILE, max_tiles);
+ // Update the tile item results.
+ for (size_t i = 0; i < search_result_tile_views_.size(); ++i) {
SearchResult* item = NULL;
if (i < display_results.size())
item = display_results[i];
- tile_views_[i]->SetSearchResult(item);
+ search_result_tile_views_[i]->SetSearchResult(item);
}
+
+ // Show or hide the all apps button (depending on the current show state).
+ all_apps_button_->SetVisible(show_state_ == SHOW_START_PAGE);
+
tiles_container_->Layout();
Layout();
- update_factory_.InvalidateWeakPtrs();
-}
-
-void StartPageView::ScheduleUpdate() {
- // When search results are added one by one, each addition generates an update
- // request. Consolidates those update requests into one Update call.
- if (!update_factory_.HasWeakPtrs()) {
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&StartPageView::Update, update_factory_.GetWeakPtr()));
- }
}
void StartPageView::QueryChanged(SearchBoxView* sender) {
sender->search_box()->SetText(base::string16());
}
-void StartPageView::ListItemsAdded(size_t start, size_t count) {
- ScheduleUpdate();
-}
-
-void StartPageView::ListItemsRemoved(size_t start, size_t count) {
- ScheduleUpdate();
-}
-
-void StartPageView::ListItemMoved(size_t index, size_t target_index) {
- ScheduleUpdate();
-}
-
-void StartPageView::ListItemsChanged(size_t start, size_t count) {
- ScheduleUpdate();
-}
-
} // namespace app_list