| Index: ui/app_list/cocoa/apps_collection_view_drag_manager.mm
|
| diff --git a/ui/app_list/cocoa/apps_collection_view_drag_manager.mm b/ui/app_list/cocoa/apps_collection_view_drag_manager.mm
|
| deleted file mode 100644
|
| index 74e23c4e0ece15dce5684e467edf25aa3d3ed28b..0000000000000000000000000000000000000000
|
| --- a/ui/app_list/cocoa/apps_collection_view_drag_manager.mm
|
| +++ /dev/null
|
| @@ -1,263 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#import "ui/app_list/cocoa/apps_collection_view_drag_manager.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/mac/foundation_util.h"
|
| -#import "ui/app_list/cocoa/apps_grid_controller.h"
|
| -#import "ui/app_list/cocoa/apps_grid_view_item.h"
|
| -#import "ui/app_list/cocoa/item_drag_controller.h"
|
| -
|
| -namespace {
|
| -
|
| -// Distance cursor must travel in either x or y direction to start a drag.
|
| -const CGFloat kDragThreshold = 5;
|
| -
|
| -} // namespace
|
| -
|
| -@interface AppsCollectionViewDragManager ()
|
| -
|
| -// Returns the item index that |theEvent| would hit in the page at |pageIndex|
|
| -// or NSNotFound if no item is hit.
|
| -- (size_t)itemIndexForPage:(size_t)pageIndex
|
| - hitWithEvent:(NSEvent*)theEvent;
|
| -
|
| -- (void)initiateDrag:(NSEvent*)theEvent;
|
| -- (void)updateDrag:(NSEvent*)theEvent;
|
| -- (void)completeDrag;
|
| -
|
| -- (NSMenu*)menuForEvent:(NSEvent*)theEvent
|
| - inPage:(NSCollectionView*)page;
|
| -
|
| -@end
|
| -
|
| -// An NSCollectionView that forwards mouse events to the factory they share.
|
| -@interface GridCollectionView : NSCollectionView {
|
| - @private
|
| - AppsCollectionViewDragManager* factory_;
|
| -}
|
| -
|
| -@property(assign, nonatomic) AppsCollectionViewDragManager* factory;
|
| -
|
| -@end
|
| -
|
| -@implementation AppsCollectionViewDragManager
|
| -
|
| -- (id)initWithCellSize:(NSSize)cellSize
|
| - rows:(size_t)rows
|
| - columns:(size_t)columns
|
| - gridController:(AppsGridController*)gridController {
|
| - if ((self = [super init])) {
|
| - cellSize_ = cellSize;
|
| - rows_ = rows;
|
| - columns_ = columns;
|
| - gridController_ = gridController;
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (NSCollectionView*)makePageWithFrame:(NSRect)pageFrame {
|
| - base::scoped_nsobject<GridCollectionView> itemCollectionView(
|
| - [[GridCollectionView alloc] initWithFrame:pageFrame]);
|
| - [itemCollectionView setFactory:self];
|
| - [itemCollectionView setMaxNumberOfRows:rows_];
|
| - [itemCollectionView setMinItemSize:cellSize_];
|
| - [itemCollectionView setMaxItemSize:cellSize_];
|
| - [itemCollectionView setSelectable:YES];
|
| - [itemCollectionView setFocusRingType:NSFocusRingTypeNone];
|
| - [itemCollectionView setBackgroundColors:
|
| - [NSArray arrayWithObject:[NSColor clearColor]]];
|
| - [itemCollectionView setDelegate:gridController_];
|
| -
|
| - base::scoped_nsobject<AppsGridViewItem> itemPrototype(
|
| - [[AppsGridViewItem alloc] initWithSize:cellSize_]);
|
| - [[itemPrototype button] setTarget:gridController_];
|
| - [[itemPrototype button] setAction:@selector(onItemClicked:)];
|
| -
|
| - [itemCollectionView setItemPrototype:itemPrototype];
|
| - return itemCollectionView.autorelease();
|
| -}
|
| -
|
| -- (void)onMouseDownInPage:(NSCollectionView*)page
|
| - withEvent:(NSEvent*)theEvent {
|
| - size_t pageIndex = [gridController_ pageIndexForCollectionView:page];
|
| - itemHitIndex_ = [self itemIndexForPage:pageIndex
|
| - hitWithEvent:theEvent];
|
| - if (itemHitIndex_ == NSNotFound)
|
| - return;
|
| -
|
| - mouseDownLocation_ = [theEvent locationInWindow];
|
| - [[[gridController_ itemAtIndex:itemHitIndex_] view] mouseDown:theEvent];
|
| -}
|
| -
|
| -- (void)onMouseDragged:(NSEvent*)theEvent {
|
| - if (itemHitIndex_ == NSNotFound)
|
| - return;
|
| -
|
| - if (dragging_) {
|
| - [self updateDrag:theEvent];
|
| - return;
|
| - }
|
| -
|
| - NSPoint mouseLocation = [theEvent locationInWindow];
|
| - CGFloat deltaX = mouseLocation.x - mouseDownLocation_.x;
|
| - CGFloat deltaY = mouseLocation.y - mouseDownLocation_.y;
|
| - if (deltaX * deltaX + deltaY * deltaY > kDragThreshold * kDragThreshold) {
|
| - [self initiateDrag:theEvent];
|
| - return;
|
| - }
|
| -
|
| - [[[gridController_ itemAtIndex:itemHitIndex_] view] mouseDragged:theEvent];
|
| -}
|
| -
|
| -- (void)onMouseUp:(NSEvent*)theEvent {
|
| - if (itemHitIndex_ == NSNotFound)
|
| - return;
|
| -
|
| - if (dragging_) {
|
| - [self completeDrag];
|
| - return;
|
| - }
|
| -
|
| - [[[gridController_ itemAtIndex:itemHitIndex_] view] mouseUp:theEvent];
|
| -}
|
| -
|
| -- (size_t)itemIndexForPage:(size_t)pageIndex
|
| - hitWithEvent:(NSEvent*)theEvent {
|
| - NSCollectionView* page =
|
| - [gridController_ collectionViewAtPageIndex:pageIndex];
|
| - NSPoint pointInView = [page convertPoint:[theEvent locationInWindow]
|
| - fromView:nil];
|
| -
|
| - const size_t itemsInPage = [[page content] count];
|
| - for (size_t indexInPage = 0; indexInPage < itemsInPage; ++indexInPage) {
|
| - if ([page mouse:pointInView
|
| - inRect:[page frameForItemAtIndex:indexInPage]]) {
|
| - return indexInPage + pageIndex * rows_ * columns_;
|
| - }
|
| - }
|
| -
|
| - return NSNotFound;
|
| -}
|
| -
|
| -- (void)initiateDrag:(NSEvent*)theEvent {
|
| - DCHECK_LT(itemHitIndex_, [gridController_ itemCount]);
|
| - dragging_ = YES;
|
| -
|
| - if (!itemDragController_) {
|
| - itemDragController_.reset(
|
| - [[ItemDragController alloc] initWithGridCellSize:cellSize_]);
|
| - [[[gridController_ view] superview] addSubview:[itemDragController_ view]];
|
| - }
|
| -
|
| - [itemDragController_ initiate:[gridController_ itemAtIndex:itemHitIndex_]
|
| - mouseDownLocation:mouseDownLocation_
|
| - currentLocation:[theEvent locationInWindow]
|
| - timestamp:[theEvent timestamp]];
|
| -
|
| - itemDragIndex_ = itemHitIndex_;
|
| - [self updateDrag:theEvent];
|
| -}
|
| -
|
| -- (void)updateDrag:(NSEvent*)theEvent {
|
| - [itemDragController_ update:[theEvent locationInWindow]
|
| - timestamp:[theEvent timestamp]];
|
| - [gridController_ maybeChangePageForPoint:[theEvent locationInWindow]];
|
| -
|
| - size_t visiblePage = [gridController_ visiblePage];
|
| - size_t itemIndexOver = [self itemIndexForPage:visiblePage
|
| - hitWithEvent:theEvent];
|
| - DCHECK_NE(0u, [gridController_ itemCount]);
|
| - if (itemIndexOver == NSNotFound) {
|
| - if (visiblePage != [gridController_ pageCount] - 1)
|
| - return;
|
| -
|
| - // If nothing was hit, but the last page is shown, move to the end.
|
| - itemIndexOver = [gridController_ itemCount] - 1;
|
| - }
|
| -
|
| - if (itemDragIndex_ == itemIndexOver)
|
| - return;
|
| -
|
| - [gridController_ moveItemInView:itemDragIndex_
|
| - toItemIndex:itemIndexOver];
|
| - // A new item may be created when moving between pages. Ensure it is hidden.
|
| - [[[gridController_ itemAtIndex:itemIndexOver] button] setHidden:YES];
|
| - itemDragIndex_ = itemIndexOver;
|
| -}
|
| -
|
| -- (void)cancelDrag {
|
| - if (!dragging_)
|
| - return;
|
| -
|
| - [gridController_ moveItemInView:itemDragIndex_
|
| - toItemIndex:itemHitIndex_];
|
| - itemDragIndex_ = itemHitIndex_;
|
| - [self completeDrag];
|
| - itemHitIndex_ = NSNotFound; // Ignore future mouse events for this drag.
|
| -}
|
| -
|
| -- (void)completeDrag {
|
| - DCHECK_GE(itemDragIndex_, 0u);
|
| - [gridController_ cancelScrollTimer];
|
| - AppsGridViewItem* item = [gridController_ itemAtIndex:itemDragIndex_];
|
| -
|
| - // The item could still be animating in the NSCollectionView, so ask it where
|
| - // it would place the item.
|
| - NSCollectionView* pageView = base::mac::ObjCCastStrict<NSCollectionView>(
|
| - [[item view] superview]);
|
| - size_t indexInPage = itemDragIndex_ % (rows_ * columns_);
|
| - NSPoint targetOrigin = [[[itemDragController_ view] superview]
|
| - convertPoint:[pageView frameForItemAtIndex:indexInPage].origin
|
| - fromView:pageView];
|
| -
|
| - [itemDragController_ complete:item
|
| - targetOrigin:targetOrigin];
|
| - [gridController_ moveItemWithIndex:itemHitIndex_
|
| - toModelIndex:itemDragIndex_];
|
| -
|
| - dragging_ = NO;
|
| -}
|
| -
|
| -- (NSMenu*)menuForEvent:(NSEvent*)theEvent
|
| - inPage:(NSCollectionView*)page {
|
| - size_t pageIndex = [gridController_ pageIndexForCollectionView:page];
|
| - size_t itemIndex = [self itemIndexForPage:pageIndex
|
| - hitWithEvent:theEvent];
|
| - if (itemIndex == NSNotFound)
|
| - return nil;
|
| -
|
| - return [[gridController_ itemAtIndex:itemIndex] contextMenu];
|
| -}
|
| -
|
| -@end
|
| -
|
| -@implementation GridCollectionView
|
| -
|
| -@synthesize factory = factory_;
|
| -
|
| -- (NSMenu*)menuForEvent:(NSEvent*)theEvent {
|
| - return [factory_ menuForEvent:theEvent
|
| - inPage:self];
|
| -}
|
| -
|
| -- (void)mouseDown:(NSEvent*)theEvent {
|
| - [factory_ onMouseDownInPage:self
|
| - withEvent:theEvent];
|
| -}
|
| -
|
| -- (void)mouseDragged:(NSEvent*)theEvent {
|
| - [factory_ onMouseDragged:theEvent];
|
| -}
|
| -
|
| -- (void)mouseUp:(NSEvent*)theEvent {
|
| - [factory_ onMouseUp:theEvent];
|
| -}
|
| -
|
| -- (BOOL)acceptsFirstResponder {
|
| - return NO;
|
| -}
|
| -
|
| -@end
|
|
|