// // PSCollectionView.m // Perforce // // Created by Adam Czubernat on 12.07.2013. // Copyright (c) 2013 Perforce Software, Inc. All rights reserved. // #import "PSCollectionView.h" @interface PSCollectionView () { NSInteger _clickedIndex; } - (NSInteger)indexForEvent:(NSEvent *)event; @end @implementation PSCollectionView - (void)keyDown:(NSEvent *)event { unichar keyChar = [[event charactersIgnoringModifiers] characterAtIndex:0]; NSUInteger flags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask; if (keyChar == ' ' && flags == 0) { // Send space bar notification [self.nextResponder doCommandBySelector:@selector(toggleQuickLookPreviewPanel:)]; } else { [super keyDown:event]; } } - (void)rightMouseDown:(NSEvent *)event { _clickedIndex = [self indexForEvent:event]; [super rightMouseDown:event]; } - (void)mouseDown:(NSEvent *)event { _clickedIndex = [self indexForEvent:event]; [super mouseDown:event]; } #pragma mark - Private - (NSInteger)indexForEvent:(NSEvent *)event { NSPoint location = [self convertPoint:event.locationInWindow fromView:nil]; return [self indexOfItemAtPoint:location]; } #pragma mark - Public - (NSInteger)indexOfItemAtPoint:(NSPoint)point { NSSize size = [self frameForItemAtIndex:0].size; if (!size.width || !size.height) return NSNotFound; NSInteger numberOfCols = (NSInteger)(self.frame.size.width / size.width); NSInteger col = (int)point.x / (int)size.width; if (col < numberOfCols) { NSInteger row = (int)point.y / (int)size.height; NSInteger index = col + row * numberOfCols; if (index < self.content.count) return index; } return NSNotFound; } - (NSInteger)clickedIndex { return _clickedIndex; } @end