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

Unified Diff: ui/app_list/app_list_view.cc

Issue 11784034: Skeleton for app_list on OSX, and refactoring for enable_app_list=1 on OS=="mac". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase for 175876 and 175961 Created 7 years, 11 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/app_list_view.h ('k') | ui/app_list/apps_grid_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/app_list_view.cc
diff --git a/ui/app_list/app_list_view.cc b/ui/app_list/app_list_view.cc
deleted file mode 100644
index 1b5bf521f7cf62c2ee15bb50bdd60347c61f2221..0000000000000000000000000000000000000000
--- a/ui/app_list/app_list_view.cc
+++ /dev/null
@@ -1,306 +0,0 @@
-// Copyright (c) 2012 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/app_list_view.h"
-
-#include <algorithm>
-
-#include "base/string_util.h"
-#include "ui/app_list/app_list_background.h"
-#include "ui/app_list/app_list_constants.h"
-#include "ui/app_list/app_list_item_model.h"
-#include "ui/app_list/app_list_item_view.h"
-#include "ui/app_list/app_list_model.h"
-#include "ui/app_list/app_list_view_delegate.h"
-#include "ui/app_list/contents_view.h"
-#include "ui/app_list/pagination_model.h"
-#include "ui/app_list/search_box_model.h"
-#include "ui/app_list/search_box_view.h"
-#include "ui/base/events/event.h"
-#include "ui/gfx/insets.h"
-#include "ui/gfx/path.h"
-#include "ui/gfx/skia_util.h"
-#include "ui/views/bubble/bubble_frame_view.h"
-#include "ui/views/controls/textfield/textfield.h"
-#include "ui/views/layout/box_layout.h"
-#include "ui/views/widget/widget.h"
-
-namespace app_list {
-
-namespace {
-
-// Inner padding space in pixels of bubble contents.
-const int kInnerPadding = 1;
-
-// The distance between the arrow tip and edge of the anchor view.
-const int kArrowOffset = 10;
-
-// The maximum allowed time to wait for icon loading in milliseconds.
-const int kMaxIconLoadingWaitTimeInMs = 50;
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// AppListView::IconLoader
-
-class AppListView::IconLoader : public AppListItemModelObserver {
- public:
- IconLoader(AppListView* owner,
- AppListItemModel* item,
- ui::ScaleFactor scale_factor)
- : owner_(owner),
- item_(item) {
- item_->AddObserver(this);
-
- // Triggers icon loading for given |scale_factor|.
- item_->icon().GetRepresentation(scale_factor);
- }
-
- virtual ~IconLoader() {
- item_->RemoveObserver(this);
- }
-
- private:
- // AppListItemModelObserver overrides:
- virtual void ItemIconChanged() OVERRIDE {
- owner_->OnItemIconLoaded(this);
- // Note that IconLoader is released here.
- }
- virtual void ItemTitleChanged() OVERRIDE {}
- virtual void ItemHighlightedChanged() OVERRIDE {}
-
- AppListView* owner_;
- AppListItemModel* item_;
-
- DISALLOW_COPY_AND_ASSIGN(IconLoader);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// AppListView:
-
-AppListView::AppListView(AppListViewDelegate* delegate)
- : model_(new AppListModel),
- delegate_(delegate),
- search_box_view_(NULL),
- contents_view_(NULL) {
- if (delegate_)
- delegate_->SetModel(model_.get());
-}
-
-AppListView::~AppListView() {
- // Models are going away, ensure their references are cleared.
- RemoveAllChildViews(true);
- pending_icon_loaders_.clear();
-}
-
-void AppListView::InitAsBubble(
- gfx::NativeView parent,
- PaginationModel* pagination_model,
- views::View* anchor,
- const gfx::Point& anchor_point,
- views::BubbleBorder::ArrowLocation arrow_location) {
- // Starts icon loading early.
- PreloadIcons(pagination_model, anchor);
-
- SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical,
- kInnerPadding,
- kInnerPadding,
- kInnerPadding));
-
- search_box_view_ = new SearchBoxView(this);
- AddChildView(search_box_view_);
-
- contents_view_ = new ContentsView(this, pagination_model);
- AddChildView(contents_view_);
-
- search_box_view_->set_contents_view(contents_view_);
-
- set_anchor_view(anchor);
- set_anchor_point(anchor_point);
- set_color(kContentsBackgroundColor);
- set_margins(gfx::Insets());
- set_move_with_anchor(true);
- set_parent_window(parent);
- set_close_on_deactivate(false);
- set_close_on_esc(false);
- set_anchor_insets(gfx::Insets(kArrowOffset, kArrowOffset,
- kArrowOffset, kArrowOffset));
- set_shadow(views::BubbleBorder::BIG_SHADOW);
- views::BubbleDelegateView::CreateBubble(this);
- SetBubbleArrowLocation(arrow_location);
-
-#if defined(USE_AURA)
- GetBubbleFrameView()->set_background(new AppListBackground(
- GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius(),
- search_box_view_));
-
- contents_view_->SetPaintToLayer(true);
- contents_view_->SetFillsBoundsOpaquely(false);
- contents_view_->layer()->SetMasksToBounds(true);
- set_background(NULL);
-#else
- set_background(new AppListBackground(
- GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius(),
- search_box_view_));
-#endif
-
- search_box_view_->SetModel(model_->search_box());
- contents_view_->SetModel(model_.get());
-}
-
-void AppListView::SetBubbleArrowLocation(
- views::BubbleBorder::ArrowLocation arrow_location) {
- GetBubbleFrameView()->bubble_border()->set_arrow_location(arrow_location);
- SizeToContents(); // Recalcuates with new border.
- GetBubbleFrameView()->SchedulePaint();
-}
-
-void AppListView::SetAnchorPoint(const gfx::Point& anchor_point) {
- set_anchor_point(anchor_point);
- SizeToContents(); // Repositions view relative to the anchor.
-}
-
-void AppListView::ShowWhenReady() {
- 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, &AppListView::OnIconLoadingWaitTimer);
-}
-
-void AppListView::Close() {
- icon_loading_wait_timer_.Stop();
-
- if (delegate_.get())
- delegate_->Dismiss();
- else
- GetWidget()->Close();
-}
-
-void AppListView::UpdateBounds() {
- SizeToContents();
-}
-
-void AppListView::PreloadIcons(PaginationModel* pagination_model,
- views::View* anchor) {
- ui::ScaleFactor scale_factor = ui::SCALE_FACTOR_100P;
- if (anchor && anchor->GetWidget()) {
- scale_factor = ui::GetScaleFactorForNativeView(
- anchor->GetWidget()->GetNativeView());
- }
-
- // |pagination_model| 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, pagination_model->selected_page());
-
- const int tiles_per_page = kPreferredCols * kPreferredRows;
- const int start_model_index = selected_page * tiles_per_page;
- const int end_model_index = std::min(
- static_cast<int>(model_->apps()->item_count()),
- start_model_index + tiles_per_page);
-
- pending_icon_loaders_.clear();
- for (int i = start_model_index; i < end_model_index; ++i) {
- AppListItemModel* item = model_->apps()->GetItemAt(i);
- if (item->icon().HasRepresentation(scale_factor))
- continue;
-
- pending_icon_loaders_.push_back(new IconLoader(this, item, scale_factor));
- }
-}
-
-void AppListView::OnIconLoadingWaitTimer() {
- GetWidget()->Show();
-}
-
-void AppListView::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();
- }
-}
-
-views::View* AppListView::GetInitiallyFocusedView() {
- return search_box_view_->search_box();
-}
-
-bool AppListView::WidgetHasHitTestMask() const {
- return true;
-}
-
-void AppListView::GetWidgetHitTestMask(gfx::Path* mask) const {
- DCHECK(mask);
- mask->addRect(gfx::RectToSkRect(
- GetBubbleFrameView()->GetContentsBounds()));
-}
-
-bool AppListView::AcceleratorPressed(const ui::Accelerator& accelerator) {
- // The accelerator is added by BubbleDelegateView.
- if (accelerator.key_code() == ui::VKEY_ESCAPE) {
- Close();
- return true;
- }
-
- return false;
-}
-
-void AppListView::ActivateApp(AppListItemModel* item, int event_flags) {
- if (delegate_.get())
- delegate_->ActivateAppListItem(item, event_flags);
-}
-
-void AppListView::QueryChanged(SearchBoxView* sender) {
- string16 query;
- TrimWhitespace(model_->search_box()->text(), TRIM_ALL, &query);
- bool should_show_search = !query.empty();
- contents_view_->ShowSearchResults(should_show_search);
-
- if (delegate_.get()) {
- if (should_show_search)
- delegate_->StartSearch();
- else
- delegate_->StopSearch();
- }
-}
-
-void AppListView::OpenResult(const SearchResult& result, int event_flags) {
- if (delegate_.get())
- delegate_->OpenSearchResult(result, event_flags);
-}
-
-void AppListView::InvokeResultAction(const SearchResult& result,
- int action_index,
- int event_flags) {
- if (delegate_.get())
- delegate_->InvokeSearchResultAction(result, action_index, event_flags);
-}
-
-void AppListView::OnWidgetClosing(views::Widget* widget) {
- BubbleDelegateView::OnWidgetClosing(widget);
- if (delegate_.get() && widget == GetWidget())
- delegate_->ViewClosing();
-}
-
-void AppListView::OnWidgetActivationChanged(views::Widget* widget,
- bool active) {
- // Do not called inherited function as the bubble delegate auto close
- // functionality is not used.
- if (delegate_.get() && widget == GetWidget())
- delegate_->ViewActivationChanged(active);
-}
-
-} // namespace app_list
« no previous file with comments | « ui/app_list/app_list_view.h ('k') | ui/app_list/apps_grid_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698