| Index: ui/app_list/views/search_result_list_view.cc
|
| diff --git a/ui/app_list/views/search_result_list_view.cc b/ui/app_list/views/search_result_list_view.cc
|
| deleted file mode 100644
|
| index 76e7898a536092801cd0c3291005f54d698bf45f..0000000000000000000000000000000000000000
|
| --- a/ui/app_list/views/search_result_list_view.cc
|
| +++ /dev/null
|
| @@ -1,298 +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/views/search_result_list_view.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/time/time.h"
|
| -#include "third_party/skia/include/core/SkColor.h"
|
| -#include "ui/app_list/app_list_switches.h"
|
| -#include "ui/app_list/app_list_view_delegate.h"
|
| -#include "ui/app_list/search_result.h"
|
| -#include "ui/app_list/views/search_result_list_view_delegate.h"
|
| -#include "ui/app_list/views/search_result_view.h"
|
| -#include "ui/events/event.h"
|
| -#include "ui/gfx/animation/linear_animation.h"
|
| -#include "ui/views/background.h"
|
| -#include "ui/views/layout/box_layout.h"
|
| -
|
| -namespace {
|
| -
|
| -const int kMaxResults = 6;
|
| -const int kExperimentAppListMaxResults = 3;
|
| -const int kTimeoutIndicatorHeight = 2;
|
| -const int kTimeoutFramerate = 60;
|
| -const SkColor kTimeoutIndicatorColor = SkColorSetRGB(30, 144, 255);
|
| -
|
| -} // namespace
|
| -
|
| -namespace app_list {
|
| -
|
| -SearchResultListView::SearchResultListView(
|
| - SearchResultListViewDelegate* delegate,
|
| - AppListViewDelegate* view_delegate)
|
| - : delegate_(delegate),
|
| - view_delegate_(view_delegate),
|
| - results_(NULL),
|
| - results_container_(new views::View),
|
| - auto_launch_indicator_(new views::View),
|
| - last_visible_index_(0),
|
| - selected_index_(-1),
|
| - update_factory_(this) {
|
| - results_container_->SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
|
| -
|
| - int max_results = kMaxResults;
|
| - if (app_list::switches::IsExperimentalAppListEnabled())
|
| - max_results = kExperimentAppListMaxResults;
|
| -
|
| - for (int i = 0; i < max_results; ++i)
|
| - results_container_->AddChildView(new SearchResultView(this));
|
| - AddChildView(results_container_);
|
| -
|
| - auto_launch_indicator_->set_background(
|
| - views::Background::CreateSolidBackground(kTimeoutIndicatorColor));
|
| - auto_launch_indicator_->SetVisible(false);
|
| -
|
| - AddChildView(auto_launch_indicator_);
|
| -}
|
| -
|
| -SearchResultListView::~SearchResultListView() {
|
| - if (results_)
|
| - results_->RemoveObserver(this);
|
| -}
|
| -
|
| -void SearchResultListView::SetResults(AppListModel::SearchResults* results) {
|
| - if (results_)
|
| - results_->RemoveObserver(this);
|
| -
|
| - results_ = results;
|
| - if (results_)
|
| - results_->AddObserver(this);
|
| -
|
| - Update();
|
| -}
|
| -
|
| -void SearchResultListView::SetSelectedIndex(int selected_index) {
|
| - if (selected_index_ == selected_index)
|
| - return;
|
| -
|
| - if (selected_index_ >= 0) {
|
| - SearchResultView* selected_view = GetResultViewAt(selected_index_);
|
| - selected_view->ClearSelectedAction();
|
| - selected_view->SchedulePaint();
|
| - }
|
| -
|
| - selected_index_ = selected_index;
|
| -
|
| - if (selected_index_ >= 0) {
|
| - SearchResultView* selected_view = GetResultViewAt(selected_index_);
|
| - selected_view->ClearSelectedAction();
|
| - selected_view->SchedulePaint();
|
| - selected_view->NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS,
|
| - true);
|
| - }
|
| - if (auto_launch_animation_)
|
| - CancelAutoLaunchTimeout();
|
| -}
|
| -
|
| -bool SearchResultListView::IsResultViewSelected(
|
| - const SearchResultView* result_view) const {
|
| - if (selected_index_ < 0)
|
| - return false;
|
| -
|
| - return static_cast<const SearchResultView*>(
|
| - results_container_->child_at(selected_index_)) == result_view;
|
| -}
|
| -
|
| -void SearchResultListView::UpdateAutoLaunchState() {
|
| - SetAutoLaunchTimeout(view_delegate_->GetAutoLaunchTimeout());
|
| -}
|
| -
|
| -bool SearchResultListView::OnKeyPressed(const ui::KeyEvent& event) {
|
| - if (selected_index_ >= 0 &&
|
| - results_container_->child_at(selected_index_)->OnKeyPressed(event)) {
|
| - return true;
|
| - }
|
| -
|
| - switch (event.key_code()) {
|
| - case ui::VKEY_TAB:
|
| - if (event.IsShiftDown())
|
| - SetSelectedIndex(std::max(selected_index_ - 1, 0));
|
| - else
|
| - SetSelectedIndex(std::min(selected_index_ + 1, last_visible_index_));
|
| - return true;
|
| - case ui::VKEY_UP:
|
| - SetSelectedIndex(std::max(selected_index_ - 1, 0));
|
| - return true;
|
| - case ui::VKEY_DOWN:
|
| - SetSelectedIndex(std::min(selected_index_ + 1, last_visible_index_));
|
| - return true;
|
| - default:
|
| - break;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -void SearchResultListView::SetAutoLaunchTimeout(
|
| - const base::TimeDelta& timeout) {
|
| - if (timeout > base::TimeDelta()) {
|
| - auto_launch_indicator_->SetVisible(true);
|
| - auto_launch_indicator_->SetBounds(0, 0, 0, kTimeoutIndicatorHeight);
|
| - auto_launch_animation_.reset(new gfx::LinearAnimation(
|
| - timeout.InMilliseconds(), kTimeoutFramerate, this));
|
| - auto_launch_animation_->Start();
|
| - } else {
|
| - auto_launch_indicator_->SetVisible(false);
|
| - auto_launch_animation_.reset();
|
| - }
|
| -}
|
| -
|
| -void SearchResultListView::CancelAutoLaunchTimeout() {
|
| - SetAutoLaunchTimeout(base::TimeDelta());
|
| - view_delegate_->AutoLaunchCanceled();
|
| -}
|
| -
|
| -SearchResultView* SearchResultListView::GetResultViewAt(int index) {
|
| - DCHECK(index >= 0 && index < results_container_->child_count());
|
| - return static_cast<SearchResultView*>(results_container_->child_at(index));
|
| -}
|
| -
|
| -void SearchResultListView::Update() {
|
| - std::vector<SearchResult*> display_results =
|
| - AppListModel::FilterSearchResultsByDisplayType(
|
| - results_,
|
| - SearchResult::DISPLAY_LIST,
|
| - results_container_->child_count());
|
| - last_visible_index_ = display_results.size() - 1;
|
| -
|
| - for (size_t i = 0; i < static_cast<size_t>(results_container_->child_count());
|
| - ++i) {
|
| - SearchResultView* result_view = GetResultViewAt(i);
|
| - if (i < display_results.size()) {
|
| - result_view->SetResult(display_results[i]);
|
| - result_view->SetVisible(true);
|
| - } else {
|
| - result_view->SetResult(NULL);
|
| - result_view->SetVisible(false);
|
| - }
|
| - }
|
| - if (selected_index_ > last_visible_index_)
|
| - SetSelectedIndex(last_visible_index_);
|
| -
|
| - Layout();
|
| - update_factory_.InvalidateWeakPtrs();
|
| - UpdateAutoLaunchState();
|
| -}
|
| -
|
| -void SearchResultListView::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(&SearchResultListView::Update,
|
| - update_factory_.GetWeakPtr()));
|
| - }
|
| -}
|
| -
|
| -void SearchResultListView::ForceAutoLaunchForTest() {
|
| - if (auto_launch_animation_)
|
| - AnimationEnded(auto_launch_animation_.get());
|
| -}
|
| -
|
| -void SearchResultListView::Layout() {
|
| - results_container_->SetBoundsRect(GetLocalBounds());
|
| -}
|
| -
|
| -gfx::Size SearchResultListView::GetPreferredSize() const {
|
| - return results_container_->GetPreferredSize();
|
| -}
|
| -
|
| -int SearchResultListView::GetHeightForWidth(int w) const {
|
| - return results_container_->GetHeightForWidth(w);
|
| -}
|
| -
|
| -void SearchResultListView::VisibilityChanged(views::View* starting_from,
|
| - bool is_visible) {
|
| - if (is_visible)
|
| - UpdateAutoLaunchState();
|
| - else
|
| - CancelAutoLaunchTimeout();
|
| -}
|
| -
|
| -void SearchResultListView::AnimationEnded(const gfx::Animation* animation) {
|
| - DCHECK_EQ(auto_launch_animation_.get(), animation);
|
| - view_delegate_->OpenSearchResult(results_->GetItemAt(0), true, ui::EF_NONE);
|
| -
|
| - // The auto-launch has to be canceled explicitly. Think that one of searcher
|
| - // is extremely slow. Sometimes the events would happen in the following
|
| - // order:
|
| - // 1. The search results arrive, auto-launch is dispatched
|
| - // 2. Timed out and auto-launch the first search result
|
| - // 3. Then another searcher adds search results more
|
| - // At the step 3, we shouldn't dispatch the auto-launch again.
|
| - CancelAutoLaunchTimeout();
|
| -}
|
| -
|
| -void SearchResultListView::AnimationProgressed(
|
| - const gfx::Animation* animation) {
|
| - DCHECK_EQ(auto_launch_animation_.get(), animation);
|
| - int indicator_width = auto_launch_animation_->CurrentValueBetween(0, width());
|
| - auto_launch_indicator_->SetBounds(
|
| - 0, 0, indicator_width, kTimeoutIndicatorHeight);
|
| -}
|
| -
|
| -void SearchResultListView::ListItemsAdded(size_t start, size_t count) {
|
| - ScheduleUpdate();
|
| -}
|
| -
|
| -void SearchResultListView::ListItemsRemoved(size_t start, size_t count) {
|
| - size_t last = std::min(
|
| - start + count,
|
| - static_cast<size_t>(results_container_->child_count()));
|
| - for (size_t i = start; i < last; ++i)
|
| - GetResultViewAt(i)->ClearResultNoRepaint();
|
| -
|
| - ScheduleUpdate();
|
| -}
|
| -
|
| -void SearchResultListView::ListItemMoved(size_t index, size_t target_index) {
|
| - NOTREACHED();
|
| -}
|
| -
|
| -void SearchResultListView::ListItemsChanged(size_t start, size_t count) {
|
| - NOTREACHED();
|
| -}
|
| -
|
| -void SearchResultListView::SearchResultActivated(SearchResultView* view,
|
| - int event_flags) {
|
| - if (view_delegate_ && view->result())
|
| - view_delegate_->OpenSearchResult(view->result(), false, event_flags);
|
| -}
|
| -
|
| -void SearchResultListView::SearchResultActionActivated(SearchResultView* view,
|
| - size_t action_index,
|
| - int event_flags) {
|
| - if (view_delegate_ && view->result()) {
|
| - view_delegate_->InvokeSearchResultAction(
|
| - view->result(), action_index, event_flags);
|
| - }
|
| -}
|
| -
|
| -void SearchResultListView::OnSearchResultInstalled(SearchResultView* view) {
|
| - if (delegate_ && view->result())
|
| - delegate_->OnResultInstalled(view->result());
|
| -}
|
| -
|
| -void SearchResultListView::OnSearchResultUninstalled(SearchResultView* view) {
|
| - if (delegate_ && view->result())
|
| - delegate_->OnResultUninstalled(view->result());
|
| -}
|
| -
|
| -} // namespace app_list
|
|
|