- add sources.
[platform/framework/web/crosswalk.git] / src / ui / app_list / cocoa / apps_grid_controller.h
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/mac/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
16 namespace app_list {
17 class AppListModel;
18 class AppListViewDelegate;
19 class AppsGridDelegateBridge;
20 }
21
22 @class AppsGridViewItem;
23 @protocol AppsPaginationModelObserver;
24 @class AppsCollectionViewDragManager;
25
26 // Controls a grid of views, representing AppListItemList sub models.
27 APP_LIST_EXPORT
28 @interface AppsGridController : NSViewController<GestureScrollDelegate,
29                                                  AppListPagerDelegate,
30                                                  NSCollectionViewDelegate> {
31  @private
32   scoped_ptr<app_list::AppListModel> model_;
33   app_list::AppListViewDelegate* delegate_;  // Weak. Owned by view controller.
34   scoped_ptr<app_list::AppsGridDelegateBridge> bridge_;
35
36   base::scoped_nsobject<AppsCollectionViewDragManager> dragManager_;
37   base::scoped_nsobject<NSMutableArray> pages_;
38   base::scoped_nsobject<NSMutableArray> items_;
39   base::scoped_nsobject<NSTimer> scrollWhileDraggingTimer_;
40
41   id<AppsPaginationModelObserver> paginationObserver_;
42
43   // Index of the currently visible page.
44   size_t visiblePage_;
45   // The page to which the view is currently animating a scroll.
46   size_t targetScrollPage_;
47   // The page to start scrolling to when the timer expires.
48   size_t scheduledScrollPage_;
49
50   // Whether we are currently animating a scroll to the nearest page.
51   BOOL animatingScroll_;
52 }
53
54 @property(assign, nonatomic) id<AppsPaginationModelObserver> paginationObserver;
55
56 + (void)setScrollAnimationDuration:(NSTimeInterval)duration;
57
58 // The amount the grid view has been extended to hold the sometimes present
59 // invisible scroller that allows for gesture scrolling.
60 + (CGFloat)scrollerPadding;
61
62 - (NSCollectionView*)collectionViewAtPageIndex:(size_t)pageIndex;
63 - (size_t)pageIndexForCollectionView:(NSCollectionView*)page;
64
65 - (AppsGridViewItem*)itemAtIndex:(size_t)itemIndex;
66
67 - (app_list::AppListModel*)model;
68
69 - (void)setModel:(scoped_ptr<app_list::AppListModel>)newModel;
70
71 - (void)setDelegate:(app_list::AppListViewDelegate*)newDelegate;
72
73 - (size_t)visiblePage;
74
75 // Calls item->Activate for the currently selected item by 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_