Home | History | Annotate | Download | only in cocoa
      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