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. 19APP_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