Index: ui/app_list/views/app_list_main_view.cc |
diff --git a/ui/app_list/views/app_list_main_view.cc b/ui/app_list/views/app_list_main_view.cc |
deleted file mode 100644 |
index b7e08b1c7f98ad601e3e429011e1e9b1c03450bc..0000000000000000000000000000000000000000 |
--- a/ui/app_list/views/app_list_main_view.cc |
+++ /dev/null |
@@ -1,349 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ui/app_list/views/app_list_main_view.h" |
- |
-#include <algorithm> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/files/file_path.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/strings/string_util.h" |
-#include "ui/app_list/app_list_constants.h" |
-#include "ui/app_list/app_list_folder_item.h" |
-#include "ui/app_list/app_list_item.h" |
-#include "ui/app_list/app_list_model.h" |
-#include "ui/app_list/app_list_switches.h" |
-#include "ui/app_list/app_list_view_delegate.h" |
-#include "ui/app_list/pagination_model.h" |
-#include "ui/app_list/search_box_model.h" |
-#include "ui/app_list/views/app_list_folder_view.h" |
-#include "ui/app_list/views/app_list_item_view.h" |
-#include "ui/app_list/views/apps_container_view.h" |
-#include "ui/app_list/views/apps_grid_view.h" |
-#include "ui/app_list/views/contents_switcher_view.h" |
-#include "ui/app_list/views/contents_view.h" |
-#include "ui/app_list/views/search_box_view.h" |
-#include "ui/views/border.h" |
-#include "ui/views/controls/textfield/textfield.h" |
-#include "ui/views/layout/box_layout.h" |
-#include "ui/views/layout/fill_layout.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace app_list { |
- |
-namespace { |
- |
-// Border padding space around the bubble contents. |
-const int kPadding = 1; |
- |
-// The maximum allowed time to wait for icon loading in milliseconds. |
-const int kMaxIconLoadingWaitTimeInMs = 50; |
- |
-// A view that holds another view and takes its preferred size. This is used for |
-// wrapping the search box view so it still gets laid out while hidden. This is |
-// a separate class so it can notify the main view on search box visibility |
-// change. |
-class SearchBoxContainerView : public views::View { |
- public: |
- SearchBoxContainerView(AppListMainView* host, SearchBoxView* search_box) |
- : host_(host), search_box_(search_box) { |
- SetLayoutManager(new views::FillLayout()); |
- AddChildView(search_box); |
- } |
- virtual ~SearchBoxContainerView() {} |
- |
- private: |
- // Overridden from views::View: |
- virtual void ChildVisibilityChanged(views::View* child) override { |
- DCHECK_EQ(search_box_, child); |
- host_->NotifySearchBoxVisibilityChanged(); |
- } |
- |
- AppListMainView* host_; |
- SearchBoxView* search_box_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SearchBoxContainerView); |
-}; |
- |
-} // namespace |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AppListMainView::IconLoader |
- |
-class AppListMainView::IconLoader : public AppListItemObserver { |
- public: |
- IconLoader(AppListMainView* owner, |
- AppListItem* item, |
- float scale) |
- : owner_(owner), |
- item_(item) { |
- item_->AddObserver(this); |
- |
- // Triggers icon loading for given |scale_factor|. |
- item_->icon().GetRepresentation(scale); |
- } |
- |
- virtual ~IconLoader() { |
- item_->RemoveObserver(this); |
- } |
- |
- private: |
- // AppListItemObserver overrides: |
- virtual void ItemIconChanged() override { |
- owner_->OnItemIconLoaded(this); |
- // Note that IconLoader is released here. |
- } |
- |
- AppListMainView* owner_; |
- AppListItem* item_; |
- |
- DISALLOW_COPY_AND_ASSIGN(IconLoader); |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AppListMainView: |
- |
-AppListMainView::AppListMainView(AppListViewDelegate* delegate, |
- int initial_apps_page, |
- gfx::NativeView parent) |
- : delegate_(delegate), |
- model_(delegate->GetModel()), |
- search_box_view_(NULL), |
- contents_view_(NULL), |
- contents_switcher_view_(NULL), |
- weak_ptr_factory_(this) { |
- SetBorder( |
- views::Border::CreateEmptyBorder(kPadding, kPadding, kPadding, kPadding)); |
- SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
- |
- search_box_view_ = new SearchBoxView(this, delegate); |
- views::View* container = new SearchBoxContainerView(this, search_box_view_); |
- if (switches::IsExperimentalAppListEnabled()) { |
- container->SetBorder( |
- views::Border::CreateEmptyBorder(kExperimentalWindowPadding, |
- kExperimentalWindowPadding, |
- 0, |
- kExperimentalWindowPadding)); |
- } |
- AddChildView(container); |
- AddContentsViews(); |
- |
- // Switch the apps grid view to the specified page. |
- app_list::PaginationModel* pagination_model = GetAppsPaginationModel(); |
- if (pagination_model->is_valid_page(initial_apps_page)) |
- pagination_model->SelectPage(initial_apps_page, false); |
- |
- // Starts icon loading early. |
- PreloadIcons(parent); |
-} |
- |
-void AppListMainView::AddContentsViews() { |
- contents_view_ = new ContentsView(this); |
- if (app_list::switches::IsExperimentalAppListEnabled()) { |
- contents_switcher_view_ = new ContentsSwitcherView(contents_view_); |
- contents_view_->SetContentsSwitcherView(contents_switcher_view_); |
- } |
- contents_view_->InitNamedPages(model_, delegate_); |
- AddChildView(contents_view_); |
- if (contents_switcher_view_) |
- AddChildView(contents_switcher_view_); |
- |
- search_box_view_->set_contents_view(contents_view_); |
- |
- contents_view_->SetPaintToLayer(true); |
- contents_view_->SetFillsBoundsOpaquely(false); |
- contents_view_->layer()->SetMasksToBounds(true); |
- |
- delegate_->StartSearch(); |
-} |
- |
-AppListMainView::~AppListMainView() { |
- pending_icon_loaders_.clear(); |
-} |
- |
-void AppListMainView::ShowAppListWhenReady() { |
- if (pending_icon_loaders_.empty()) { |
- icon_loading_wait_timer_.Stop(); |
- GetWidget()->Show(); |
- return; |
- } |
- |
- if (icon_loading_wait_timer_.IsRunning()) |
- return; |
- |
- icon_loading_wait_timer_.Start( |
- FROM_HERE, |
- base::TimeDelta::FromMilliseconds(kMaxIconLoadingWaitTimeInMs), |
- this, &AppListMainView::OnIconLoadingWaitTimer); |
-} |
- |
-void AppListMainView::ResetForShow() { |
- if (switches::IsExperimentalAppListEnabled()) { |
- contents_view_->SetActivePage(contents_view_->GetPageIndexForNamedPage( |
- ContentsView::NAMED_PAGE_START)); |
- } |
- contents_view_->apps_container_view()->ResetForShowApps(); |
- // We clear the search when hiding so when app list appears it is not showing |
- // search results. |
- search_box_view_->ClearSearch(); |
-} |
- |
-void AppListMainView::Close() { |
- icon_loading_wait_timer_.Stop(); |
- contents_view_->CancelDrag(); |
-} |
- |
-void AppListMainView::Prerender() { |
- contents_view_->Prerender(); |
-} |
- |
-void AppListMainView::ModelChanged() { |
- pending_icon_loaders_.clear(); |
- model_ = delegate_->GetModel(); |
- search_box_view_->ModelChanged(); |
- delete contents_view_; |
- contents_view_ = NULL; |
- if (contents_switcher_view_) { |
- delete contents_switcher_view_; |
- contents_switcher_view_ = NULL; |
- } |
- AddContentsViews(); |
- Layout(); |
-} |
- |
-void AppListMainView::UpdateSearchBoxVisibility() { |
- bool visible = |
- !contents_view_->IsNamedPageActive(ContentsView::NAMED_PAGE_START) || |
- contents_view_->IsShowingSearchResults(); |
- search_box_view_->SetVisible(visible); |
- if (visible && GetWidget() && GetWidget()->IsVisible()) |
- search_box_view_->search_box()->RequestFocus(); |
-} |
- |
-void AppListMainView::OnStartPageSearchTextfieldChanged( |
- const base::string16& new_contents) { |
- search_box_view_->SetVisible(true); |
- search_box_view_->search_box()->SetText(new_contents); |
- search_box_view_->search_box()->RequestFocus(); |
-} |
- |
-void AppListMainView::SetDragAndDropHostOfCurrentAppList( |
- ApplicationDragAndDropHost* drag_and_drop_host) { |
- contents_view_->SetDragAndDropHostOfCurrentAppList(drag_and_drop_host); |
-} |
- |
-bool AppListMainView::ShouldCenterWindow() const { |
- return delegate_->ShouldCenterWindow(); |
-} |
- |
-PaginationModel* AppListMainView::GetAppsPaginationModel() { |
- return contents_view_->apps_container_view() |
- ->apps_grid_view() |
- ->pagination_model(); |
-} |
- |
-void AppListMainView::PreloadIcons(gfx::NativeView parent) { |
- float scale_factor = 1.0f; |
- if (parent) |
- scale_factor = ui::GetScaleFactorForNativeView(parent); |
- |
- // The PaginationModel could have -1 as the initial selected page and |
- // assumes first page (i.e. index 0) will be used in this case. |
- const int selected_page = |
- std::max(0, GetAppsPaginationModel()->selected_page()); |
- |
- const AppsGridView* const apps_grid_view = |
- contents_view_->apps_container_view()->apps_grid_view(); |
- const int tiles_per_page = |
- apps_grid_view->cols() * apps_grid_view->rows_per_page(); |
- |
- const int start_model_index = selected_page * tiles_per_page; |
- const int end_model_index = |
- std::min(static_cast<int>(model_->top_level_item_list()->item_count()), |
- start_model_index + tiles_per_page); |
- |
- pending_icon_loaders_.clear(); |
- for (int i = start_model_index; i < end_model_index; ++i) { |
- AppListItem* item = model_->top_level_item_list()->item_at(i); |
- if (item->icon().HasRepresentation(scale_factor)) |
- continue; |
- |
- pending_icon_loaders_.push_back(new IconLoader(this, item, scale_factor)); |
- } |
-} |
- |
-void AppListMainView::OnIconLoadingWaitTimer() { |
- GetWidget()->Show(); |
-} |
- |
-void AppListMainView::OnItemIconLoaded(IconLoader* loader) { |
- ScopedVector<IconLoader>::iterator it = std::find( |
- pending_icon_loaders_.begin(), pending_icon_loaders_.end(), loader); |
- DCHECK(it != pending_icon_loaders_.end()); |
- pending_icon_loaders_.erase(it); |
- |
- if (pending_icon_loaders_.empty() && icon_loading_wait_timer_.IsRunning()) { |
- icon_loading_wait_timer_.Stop(); |
- GetWidget()->Show(); |
- } |
-} |
- |
-void AppListMainView::NotifySearchBoxVisibilityChanged() { |
- // Repaint the AppListView's background which will repaint the background for |
- // the search box. This is needed because this view paints to a layer and |
- // won't propagate paints upward. |
- if (parent()) |
- parent()->SchedulePaint(); |
-} |
- |
-void AppListMainView::ActivateApp(AppListItem* item, int event_flags) { |
- // TODO(jennyz): Activate the folder via AppListModel notification. |
- if (item->GetItemType() == AppListFolderItem::kItemType) |
- contents_view_->ShowFolderContent(static_cast<AppListFolderItem*>(item)); |
- else |
- item->Activate(event_flags); |
-} |
- |
-void AppListMainView::GetShortcutPathForApp( |
- const std::string& app_id, |
- const base::Callback<void(const base::FilePath&)>& callback) { |
- delegate_->GetShortcutPathForApp(app_id, callback); |
-} |
- |
-void AppListMainView::CancelDragInActiveFolder() { |
- contents_view_->apps_container_view() |
- ->app_list_folder_view() |
- ->items_grid_view() |
- ->EndDrag(true); |
-} |
- |
-void AppListMainView::QueryChanged(SearchBoxView* sender) { |
- base::string16 query; |
- base::TrimWhitespace(model_->search_box()->text(), base::TRIM_ALL, &query); |
- bool should_show_search = !query.empty(); |
- contents_view_->ShowSearchResults(should_show_search); |
- UpdateSearchBoxVisibility(); |
- |
- delegate_->StartSearch(); |
-} |
- |
-void AppListMainView::OnResultInstalled(SearchResult* result) { |
- // Clears the search to show the apps grid. The last installed app |
- // should be highlighted and made visible already. |
- search_box_view_->ClearSearch(); |
-} |
- |
-void AppListMainView::OnResultUninstalled(SearchResult* result) { |
- // Resubmit the query via a posted task so that all observers for the |
- // uninstall notification are notified. |
- base::MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(&AppListMainView::QueryChanged, |
- weak_ptr_factory_.GetWeakPtr(), |
- search_box_view_)); |
-} |
- |
-} // namespace app_list |