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.
5 #ifndef UI_APP_LIST_COCOA_APPS_COLLECTION_VIEW_DRAG_MANAGER_H_
6 #define UI_APP_LIST_COCOA_APPS_COLLECTION_VIEW_DRAG_MANAGER_H_
8 #import <Cocoa/Cocoa.h>
10 #include "base/mac/scoped_nsobject.h"
11 #include "ui/app_list/app_list_export.h"
13 @
class AppsGridController
;
14 @
class ItemDragController
;
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.
20 @interface AppsCollectionViewDragManager
: NSObject
{
22 base::scoped_nsobject
<ItemDragController
> itemDragController_
;
23 AppsGridController
* gridController_
; // Weak. Owns us.
29 // Index of the last known position of the item currently being dragged.
30 size_t itemDragIndex_
;
32 // Model index of the item being dragged, or NSNotFound if nothing was hit on
33 // the last mouseDown.
36 // Location in the window of the last mouseDown event.
37 NSPoint mouseDownLocation_
;
39 // Whether the current mouse action has converted into an item drag.
43 - (id
)initWithCellSize
:(NSSize
)cellSize
45 columns
:(size_t)columns
46 gridController
:(AppsGridController
*)gridController
;
48 // Make an empty NSCollectionView with draggable items in the given |pageFrame|.
49 - (NSCollectionView
*)makePageWithFrame
:(NSRect
)pageFrame
;
55 @interface
AppsCollectionViewDragManager (TestingAPI
)
57 - (void)onMouseDownInPage
:(NSCollectionView
*)page
58 withEvent
:(NSEvent
*)theEvent
;
59 - (void)onMouseDragged
:(NSEvent
*)theEvent
;
60 - (void)onMouseUp
:(NSEvent
*)theEvent
;
64 #endif // UI_APP_LIST_COCOA_APPS_COLLECTION_VIEW_DRAG_MANAGER_H_