Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(439)

Unified Diff: ui/app_list/views/app_list_main_view.cc

Issue 645853013: Remove some platform specific stuff from views. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/app_list/views/app_list_main_view.h ('k') | ui/app_list/views/app_list_main_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ui/app_list/views/app_list_main_view.h ('k') | ui/app_list/views/app_list_main_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698