1 // Copyright 2013 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_APPS_CONTAINER_VIEW_H_ 6 #define UI_APP_LIST_VIEWS_APPS_CONTAINER_VIEW_H_ 7 8 #include <vector> 9 10 #include "ui/app_list/app_list_folder_item.h" 11 #include "ui/app_list/views/top_icon_animation_view.h" 12 #include "ui/views/view.h" 13 14 namespace app_list { 15 16 class AppsGridView; 17 class ApplicationDragAndDropHost; 18 class AppListFolderItem; 19 class AppListFolderView; 20 class AppListMainView; 21 class AppListModel; 22 class ContentsView; 23 class FolderBackgroundView; 24 25 // AppsContainerView contains a root level AppsGridView to render the root level 26 // app items, and a AppListFolderView to render the app items inside the 27 // active folder. Only one if them is visible to user at any time. 28 class AppsContainerView : public views::View, 29 public TopIconAnimationObserver { 30 public: 31 AppsContainerView(AppListMainView* app_list_main_view, 32 AppListModel* model); 33 virtual ~AppsContainerView(); 34 35 // Shows the active folder content specified by |folder_item|. 36 void ShowActiveFolder(AppListFolderItem* folder_item); 37 38 // Shows the root level apps list. This is called when UI navigate back from 39 // a folder view with |folder_item|. If |folder_item| is NULL skips animation. 40 void ShowApps(AppListFolderItem* folder_item); 41 42 // Resets the app list to a state where it shows the main grid view. This is 43 // called when the user opens the launcher for the first time or when the user 44 // hides and then shows it. This is necessary because we only hide and show 45 // the launcher on Windows and Linux so we need to reset to a fresh state. 46 void ResetForShowApps(); 47 48 // Sets |drag_and_drop_host_| for the current app list in both 49 // app_list_folder_view_ and root level apps_grid_view_. 50 void SetDragAndDropHostOfCurrentAppList( 51 ApplicationDragAndDropHost* drag_and_drop_host); 52 53 // Transits the UI from folder view to root lelve apps grid view when 54 // re-parenting a child item of |folder_item|. 55 void ReparentFolderItemTransit(AppListFolderItem* folder_item); 56 57 // Returns true if it is currently showing an active folder page. 58 bool IsInFolderView() const; 59 60 // views::View overrides: 61 virtual gfx::Size GetPreferredSize() const OVERRIDE; 62 virtual void Layout() OVERRIDE; 63 virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; 64 65 // TopIconAnimationObserver overrides: 66 virtual void OnTopIconAnimationsComplete() OVERRIDE; 67 68 AppsGridView* apps_grid_view() { return apps_grid_view_; } 69 FolderBackgroundView* folder_background_view() { 70 return folder_background_view_; 71 } 72 AppListFolderView* app_list_folder_view() { return app_list_folder_view_; } 73 74 private: 75 enum ShowState { 76 SHOW_NONE, // initial state 77 SHOW_APPS, 78 SHOW_ACTIVE_FOLDER, 79 SHOW_ITEM_REPARENT, 80 }; 81 82 void SetShowState(ShowState show_state, bool show_apps_with_animation); 83 84 // Calculates the top item icon bounds in the active folder icon. The bounds 85 // is relative to AppsContainerView. 86 // Returns the bounds of top items' icon in sequence of top left, top right, 87 // bottom left, bottom right. 88 Rects GetTopItemIconBoundsInActiveFolder(); 89 90 // Creates the transitional views for animating the top items in the folder 91 // when opening or closing a folder. 92 void CreateViewsForFolderTopItemsAnimation( 93 AppListFolderItem* active_folder, bool open_folder); 94 95 void PrepareToShowApps(AppListFolderItem* folder_item); 96 97 AppListModel* model_; 98 AppsGridView* apps_grid_view_; // Owned by views hierarchy. 99 AppListFolderView* app_list_folder_view_; // Owned by views hierarchy. 100 FolderBackgroundView* folder_background_view_; // Owned by views hierarchy. 101 ShowState show_state_; 102 103 // The transitional views for animating the top items in folder 104 // when opening or closing a folder. 105 std::vector<views::View*> top_icon_views_; 106 107 size_t top_icon_animation_pending_count_; 108 109 DISALLOW_COPY_AND_ASSIGN(AppsContainerView); 110 }; 111 112 } // namespace app_list 113 114 115 #endif // UI_APP_LIST_VIEWS_APPS_CONTAINER_VIEW_H_ 116