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_COLLECTION_VIEW_DRAG_MANAGER_H_ 6 #define UI_APP_LIST_COCOA_APPS_COLLECTION_VIEW_DRAG_MANAGER_H_ 7 8 #import <Cocoa/Cocoa.h> 9 10 #include "base/mac/scoped_nsobject.h" 11 #include "ui/app_list/app_list_export.h" 12 13 @class AppsGridController; 14 @class ItemDragController; 15 16 // Manager for the state associated with dragging an NSCollectionViewItem in the 17 // AppsGridController. It is also a factory for the NSCollectionView pages in 18 // the grid, allowing items to be dragged between pages. 19 APP_LIST_EXPORT 20 @interface AppsCollectionViewDragManager : NSObject { 21 @private 22 base::scoped_nsobject<ItemDragController> itemDragController_; 23 AppsGridController* gridController_; // Weak. Owns us. 24 25 NSSize cellSize_; 26 size_t rows_; 27 size_t columns_; 28 29 // Index of the last known position of the item currently being dragged. 30 size_t itemDragIndex_; 31 32 // Model index of the item being dragged, or NSNotFound if nothing was hit on 33 // the last mouseDown. 34 size_t itemHitIndex_; 35 36 // Location in the window of the last mouseDown event. 37 NSPoint mouseDownLocation_; 38 39 // Whether the current mouse action has converted into an item drag. 40 BOOL dragging_; 41 } 42 43 - (id)initWithCellSize:(NSSize)cellSize 44 rows:(size_t)rows 45 columns:(size_t)columns 46 gridController:(AppsGridController*)gridController; 47 48 // Make an empty NSCollectionView with draggable items in the given |pageFrame|. 49 - (NSCollectionView*)makePageWithFrame:(NSRect)pageFrame; 50 51 - (void)cancelDrag; 52 53 @end 54 55 @interface AppsCollectionViewDragManager (TestingAPI) 56 57 - (void)onMouseDownInPage:(NSCollectionView*)page 58 withEvent:(NSEvent*)theEvent; 59 - (void)onMouseDragged:(NSEvent*)theEvent; 60 - (void)onMouseUp:(NSEvent*)theEvent; 61 62 @end 63 64 #endif // UI_APP_LIST_COCOA_APPS_COLLECTION_VIEW_DRAG_MANAGER_H_ 65