12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef UI_APP_LIST_VIEWS_APP_LIST_MAIN_VIEW_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define UI_APP_LIST_VIEWS_APP_LIST_MAIN_VIEW_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include <string> 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_vector.h" 11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/memory/weak_ptr.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/app_list/app_list_export.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/app_list/views/apps_grid_view_delegate.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/app_list/views/search_box_view_delegate.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/app_list/views/search_result_list_view_delegate.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/view.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Widget; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace app_list { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AppListItem; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AppListModel; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AppListViewDelegate; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ApplicationDragAndDropHost; 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ContentsSwitcherView; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ContentsView; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PaginationModel; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SearchBoxView; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// AppListMainView contains the normal view of the app list, which is shown 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// when the user is signed in. 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class APP_LIST_EXPORT AppListMainView : public views::View, 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public AppsGridViewDelegate, 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public SearchBoxViewDelegate, 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public SearchResultListViewDelegate { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Takes ownership of |delegate|. 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit AppListMainView(AppListViewDelegate* delegate, 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int initial_apps_page, 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::NativeView parent); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AppListMainView(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ShowAppListWhenReady(); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 494ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch void ResetForShow(); 504ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Close(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Prerender(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void ModelChanged(); 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UpdateSearchBoxVisibility(); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void OnStartPageSearchTextfieldChanged(const base::string16& new_contents); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) SearchBoxView* search_box_view() const { return search_box_view_; } 62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // If |drag_and_drop_host| is not NULL it will be called upon drag and drop 64b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // operations outside the application list. 65b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void SetDragAndDropHostOfCurrentAppList( 66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ApplicationDragAndDropHost* drag_and_drop_host); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentsView* contents_view() const { return contents_view_; } 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsSwitcherView* contents_switcher_view() const { 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return contents_switcher_view_; 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AppListModel* model() { return model_; } 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Returns true if the app list should be centered and in landscape mode. 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool ShouldCenterWindow() const; 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Called when the search box's visibility is changed. 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void NotifySearchBoxVisibilityChanged(); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class IconLoader; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Adds the ContentsView and the ContentsSwitcherView. 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void AddContentsViews(); 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Gets the PaginationModel owned by the AppsGridView. 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PaginationModel* GetAppsPaginationModel(); 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Loads icon image for the apps in the selected page of |pagination_model_|. 90424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |parent| is used to determine the image scale factor to use. 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void PreloadIcons(gfx::NativeView parent); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invoked when |icon_loading_wait_timer_| fires. 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnIconLoadingWaitTimer(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invoked from an IconLoader when icon loading is finished. 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnItemIconLoaded(IconLoader* loader); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from AppsGridViewDelegate: 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void ActivateApp(AppListItem* item, int event_flags) OVERRIDE; 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void GetShortcutPathForApp( 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& app_id, 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::Callback<void(const base::FilePath&)>& callback) OVERRIDE; 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void CancelDragInActiveFolder() OVERRIDE; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from SearchBoxViewDelegate: 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void QueryChanged(SearchBoxView* sender) OVERRIDE; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from SearchResultListViewDelegate: 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void OnResultInstalled(SearchResult* result) OVERRIDE; 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual void OnResultUninstalled(SearchResult* result) OVERRIDE; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AppListViewDelegate* delegate_; // Owned by parent view (AppListView). 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AppListModel* model_; // Unowned; ownership is handled by |delegate_|. 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchBoxView* search_box_view_; // Owned by views hierarchy. 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentsView* contents_view_; // Owned by views hierarchy. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Owned by views hierarchy. NULL in the non-experimental app list. 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsSwitcherView* contents_switcher_view_; 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A timer that fires when maximum allowed time to wait for icon loading has 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // passed. 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::OneShotTimer<AppListMainView> icon_loading_wait_timer_; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<IconLoader> pending_icon_loaders_; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::WeakPtrFactory<AppListMainView> weak_ptr_factory_; 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppListMainView); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace app_list 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // UI_APP_LIST_VIEWS_APP_LIST_MAIN_VIEW_H_ 136