Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / app_list / views / start_page_view.cc
index 23d2f64..598b153 100644 (file)
 #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"
@@ -39,7 +41,8 @@ const int kWebViewHeight = 105;
 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.
@@ -50,10 +53,10 @@ class DummySearchBoxView : public SearchBoxView {
       : 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;
@@ -68,15 +71,13 @@ class DummySearchBoxView : public SearchBoxView {
 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_);
@@ -92,8 +93,6 @@ StartPageView::StartPageView(AppListMainView* app_list_main_view,
 }
 
 StartPageView::~StartPageView() {
-  if (search_results_model_)
-    search_results_model_->RemoveObserver(this);
 }
 
 void StartPageView::InitInstantContainer() {
@@ -131,20 +130,27 @@ void StartPageView::InitTilesContainer() {
   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();
 }
 
@@ -188,6 +194,10 @@ void StartPageView::UpdateForTesting() {
   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);
@@ -209,29 +219,24 @@ void StartPageView::Layout() {
 }
 
 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) {
@@ -242,20 +247,4 @@ 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