1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_APP_LIST_VIEWS_SEARCH_RESULT_LIST_VIEW_H_ 6 #define UI_APP_LIST_VIEWS_SEARCH_RESULT_LIST_VIEW_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/weak_ptr.h" 10 #include "ui/app_list/app_list_model.h" 11 #include "ui/base/models/list_model_observer.h" 12 #include "ui/gfx/animation/animation_delegate.h" 13 #include "ui/views/view.h" 14 15 namespace gfx { 16 class LinearAnimation; 17 } 18 19 namespace app_list { 20 namespace test { 21 class SearchResultListViewTest; 22 } 23 24 class AppListViewDelegate; 25 class SearchResultListViewDelegate; 26 class SearchResultView; 27 28 // SearchResultListView displays SearchResultList with a list of 29 // SearchResultView. 30 class APP_LIST_EXPORT SearchResultListView : public views::View, 31 public gfx::AnimationDelegate, 32 public ui::ListModelObserver { 33 public: 34 SearchResultListView(SearchResultListViewDelegate* delegate, 35 AppListViewDelegate* view_delegate); 36 virtual ~SearchResultListView(); 37 38 void SetResults(AppListModel::SearchResults* results); 39 40 void SetSelectedIndex(int selected_index); 41 42 void UpdateAutoLaunchState(); 43 44 bool IsResultViewSelected(const SearchResultView* result_view) const; 45 46 void SearchResultActivated(SearchResultView* view, int event_flags); 47 48 void SearchResultActionActivated(SearchResultView* view, 49 size_t action_index, 50 int event_flags); 51 52 void OnSearchResultInstalled(SearchResultView* view); 53 54 void OnSearchResultUninstalled(SearchResultView* view); 55 56 // Overridden from views::View: 57 virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; 58 virtual gfx::Size GetPreferredSize() const OVERRIDE; 59 60 private: 61 friend class test::SearchResultListViewTest; 62 63 // Updates the auto launch states. 64 void SetAutoLaunchTimeout(const base::TimeDelta& timeout); 65 void CancelAutoLaunchTimeout(); 66 67 // Helper function to get SearchResultView at given |index|. 68 SearchResultView* GetResultViewAt(int index); 69 70 // Updates UI with model. 71 void Update(); 72 73 // Schedules an Update call using |update_factory_|. Do nothing if there is a 74 // pending call. 75 void ScheduleUpdate(); 76 77 // Forcibly auto-launch for test if it is in auto-launching state. 78 void ForceAutoLaunchForTest(); 79 80 // Overridden from views::View: 81 virtual void Layout() OVERRIDE; 82 virtual int GetHeightForWidth(int w) const OVERRIDE; 83 virtual void VisibilityChanged( 84 views::View* starting_from, bool is_visible) OVERRIDE; 85 86 // Overridden from gfx::AnimationDelegate: 87 virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE; 88 virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; 89 90 // Overridden from ui::ListModelObserver: 91 virtual void ListItemsAdded(size_t start, size_t count) OVERRIDE; 92 virtual void ListItemsRemoved(size_t start, size_t count) OVERRIDE; 93 virtual void ListItemMoved(size_t index, size_t target_index) OVERRIDE; 94 virtual void ListItemsChanged(size_t start, size_t count) OVERRIDE; 95 96 SearchResultListViewDelegate* delegate_; // Not owned. 97 AppListViewDelegate* view_delegate_; // Not owned. 98 AppListModel::SearchResults* results_; // Owned by AppListModel. 99 100 views::View* results_container_; 101 views::View* auto_launch_indicator_; 102 scoped_ptr<gfx::LinearAnimation> auto_launch_animation_; 103 104 int last_visible_index_; 105 int selected_index_; 106 107 // The factory that consolidates multiple Update calls into one. 108 base::WeakPtrFactory<SearchResultListView> update_factory_; 109 110 DISALLOW_COPY_AND_ASSIGN(SearchResultListView); 111 }; 112 113 } // namespace app_list 114 115 #endif // UI_APP_LIST_VIEWS_SEARCH_RESULT_LIST_VIEW_H_ 116