apps_grid_controller.h revision 868fa2fe829687343ffae624259930155e16dbd8
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_COCOA_APPS_GRID_CONTROLLER_H_ 6#define UI_APP_LIST_COCOA_APPS_GRID_CONTROLLER_H_ 7 8#import <Cocoa/Cocoa.h> 9 10#include "base/memory/scoped_nsobject.h" 11#include "base/memory/scoped_ptr.h" 12#include "ui/app_list/app_list_export.h" 13#import "ui/app_list/cocoa/app_list_pager_view.h" 14#import "ui/app_list/cocoa/scroll_view_with_no_scrollbars.h" 15 16namespace app_list { 17class AppListModel; 18class AppListViewDelegate; 19class AppsGridDelegateBridge; 20} 21 22@class AppsGridViewItem; 23@protocol AppsPaginationModelObserver; 24@class AppsCollectionViewDragManager; 25 26// Controls a grid of views, representing AppListModel::Apps sub models. 27APP_LIST_EXPORT 28@interface AppsGridController : NSViewController<GestureScrollDelegate, 29 AppListPagerDelegate> { 30 @private 31 scoped_ptr<app_list::AppListModel> model_; 32 app_list::AppListViewDelegate* delegate_; // Weak. Owned by view controller. 33 scoped_ptr<app_list::AppsGridDelegateBridge> bridge_; 34 35 scoped_nsobject<AppsCollectionViewDragManager> dragManager_; 36 scoped_nsobject<NSMutableArray> pages_; 37 scoped_nsobject<NSMutableArray> items_; 38 scoped_nsobject<NSTimer> scrollWhileDraggingTimer_; 39 40 id<AppsPaginationModelObserver> paginationObserver_; 41 42 // Index of the currently visible page. 43 size_t visiblePage_; 44 // The page to which the view is currently animating a scroll. 45 size_t targetScrollPage_; 46 // The page to start scrolling to when the timer expires. 47 size_t scheduledScrollPage_; 48 49 // Whether we are currently animating a scroll to the nearest page. 50 BOOL animatingScroll_; 51} 52 53@property(assign, nonatomic) id<AppsPaginationModelObserver> paginationObserver; 54 55+ (void)setScrollAnimationDuration:(NSTimeInterval)duration; 56 57// The amount the grid view has been extended to hold the sometimes present 58// invisible scroller that allows for gesture scrolling. 59+ (CGFloat)scrollerPadding; 60 61- (NSCollectionView*)collectionViewAtPageIndex:(size_t)pageIndex; 62- (size_t)pageIndexForCollectionView:(NSCollectionView*)page; 63 64- (AppsGridViewItem*)itemAtIndex:(size_t)itemIndex; 65 66- (app_list::AppListModel*)model; 67 68- (void)setModel:(scoped_ptr<app_list::AppListModel>)newModel; 69 70- (void)setDelegate:(app_list::AppListViewDelegate*)newDelegate; 71 72- (size_t)visiblePage; 73 74// Calls delegate_->ActivateAppListItem for the currently selected item by 75// simulating a click. 76- (void)activateSelection; 77 78// Return the number of pages of icons in the grid. 79- (size_t)pageCount; 80 81// Return the number of items over all pages in the grid. 82- (size_t)itemCount; 83 84// Scroll to a page in the grid view with an animation. 85- (void)scrollToPage:(size_t)pageIndex; 86 87// Start a timer to scroll to a new page, if |locationInWindow| is to the left 88// or the right of the view, or if it is over a pager segment. Cancels any 89// existing timer if the target page changes. 90- (void)maybeChangePageForPoint:(NSPoint)locationInWindow; 91 92// Cancel a timer that may have been set by maybeChangePageForPoint(). 93- (void)cancelScrollTimer; 94 95// Moves an item within the view only, for dragging or in response to model 96// changes. 97- (void)moveItemInView:(size_t)fromIndex 98 toItemIndex:(size_t)toIndex; 99 100// Moves an item in the item model. Does not adjust the view. 101- (void)moveItemWithIndex:(size_t)itemIndex 102 toModelIndex:(size_t)modelIndex; 103 104// Return the index of the selected item. 105- (NSUInteger)selectedItemIndex; 106 107// Moves the selection to the given index. 108- (void)selectItemAtIndex:(NSUInteger)index; 109 110// Handle key actions. Similar to doCommandBySelector from NSResponder but that 111// requires this class to be in the responder chain. Instead this method is 112// invoked by the AppListViewController. 113// Returns YES if this handled navigation or launched an app. 114- (BOOL)handleCommandBySelector:(SEL)command; 115 116@end 117 118@interface AppsGridController(TestingAPI) 119 120- (AppsCollectionViewDragManager*)dragManager; 121- (size_t)scheduledScrollPage; 122 123@end 124 125#endif // UI_APP_LIST_COCOA_APPS_GRID_CONTROLLER_H_ 126