apps_collection_view_drag_manager.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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