This repository has been archived by the owner on Aug 18, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial commit after separated from Fontcase
- Loading branch information
Pieter Omvlee
committed
Nov 25, 2010
0 parents
commit 0106cd3
Showing
9 changed files
with
785 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// | ||
// BCCollectionView+Keyboard.h | ||
// Fontcase | ||
// | ||
// Created by Pieter Omvlee on 25/11/2010. | ||
// Copyright 2010 Bohemian Coding. All rights reserved. | ||
// | ||
|
||
#import "BCCollectionView.h" | ||
|
||
@interface BCCollectionView (BCCollectionView_Keyboard) | ||
- (void)keyDown:(NSEvent *)theEvent; | ||
|
||
- (void)moveLeft:(id)sender; | ||
- (void)moveLeftAndModifySelection:(id)sender; | ||
|
||
- (void)moveRight:(id)sender; | ||
- (void)moveRightAndModifySelection:(id)sender; | ||
|
||
- (void)moveUp:(id)sender; | ||
- (void)moveUpAndModifySelection:(id)sender; | ||
|
||
- (void)moveDown:(id)sender; | ||
- (void)moveDownAndModifySelection:(id)sender; | ||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
// | ||
// BCCollectionView+Keyboard.m | ||
// Fontcase | ||
// | ||
// Created by Pieter Omvlee on 25/11/2010. | ||
// Copyright 2010 Bohemian Coding. All rights reserved. | ||
// | ||
|
||
#import "BCCollectionView+Keyboard.h" | ||
|
||
@implementation BCCollectionView (BCCollectionView_Keyboard) | ||
|
||
- (void)keyDown:(NSEvent *)theEvent | ||
{ | ||
[self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; | ||
} | ||
|
||
- (void)moveLeft:(id)sender | ||
{ | ||
NSUInteger index = lastSelectionIndex; | ||
if (index % [self numberOfItemsPerRow] != 0) { | ||
[self deselectAllItems]; | ||
[self selectItemAtIndex:index-1]; | ||
} | ||
} | ||
|
||
- (void)moveLeftAndModifySelection:(id)sender | ||
{ | ||
if (lastSelectionIndex % [self numberOfItemsPerRow] != 0) { | ||
NSUInteger index = lastSelectionIndex-1; | ||
if ([selectionIndexes containsIndex:index]) | ||
[self deselectItemAtIndex:lastSelectionIndex]; | ||
else | ||
[self selectItemAtIndex:index]; | ||
self.lastSelectionIndex = index; | ||
} | ||
} | ||
|
||
- (void)moveRight:(id)sender | ||
{ | ||
NSUInteger index = lastSelectionIndex; | ||
if (index % [self numberOfItemsPerRow] != [self numberOfItemsPerRow]-1) { | ||
[self deselectAllItems]; | ||
[self selectItemAtIndex:index+1]; | ||
} | ||
} | ||
|
||
- (void)moveRightAndModifySelection:(id)sender | ||
{ | ||
if (lastSelectionIndex % [self numberOfItemsPerRow] != [self numberOfItemsPerRow]-1) { | ||
NSUInteger index = lastSelectionIndex+1; | ||
if ([selectionIndexes containsIndex:index]) | ||
[self deselectItemAtIndex:lastSelectionIndex]; | ||
else | ||
[self selectItemAtIndex:index]; | ||
self.lastSelectionIndex = index; | ||
} | ||
} | ||
|
||
- (void)moveUp:(id)sender | ||
{ | ||
NSUInteger index = lastSelectionIndex; | ||
if (index > [self numberOfItemsPerRow]-1) { | ||
[self deselectAllItems]; | ||
[self selectItemAtIndex:index-[self numberOfItemsPerRow]]; | ||
} | ||
} | ||
|
||
- (void)moveUpAndModifySelection:(id)sender | ||
{ | ||
if (lastSelectionIndex > [self numberOfItemsPerRow]-1) { | ||
NSUInteger index = lastSelectionIndex - [self numberOfItemsPerRow]; | ||
NSRange range = NSMakeRange(index, [self numberOfItemsPerRow]); | ||
if ([selectionIndexes containsIndex:index]) { | ||
range.location++; | ||
[self deselectItemsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]; | ||
} else | ||
[self selectItemsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]; | ||
self.lastSelectionIndex = index; | ||
} | ||
} | ||
|
||
- (void)moveDown:(id)sender | ||
{ | ||
NSUInteger index = lastSelectionIndex; | ||
if (index + [self numberOfItemsPerRow] < [contentArray count]) { | ||
[self deselectAllItems]; | ||
[self selectItemAtIndex:index + [self numberOfItemsPerRow]]; | ||
} | ||
} | ||
|
||
- (void)moveDownAndModifySelection:(id)sender | ||
{ | ||
NSUInteger index = lastSelectionIndex; | ||
if (index + [self numberOfItemsPerRow] < [contentArray count]) { | ||
NSUInteger index = lastSelectionIndex + [self numberOfItemsPerRow]; | ||
NSRange range = NSMakeRange(lastSelectionIndex, [self numberOfItemsPerRow]); | ||
if ([selectionIndexes containsIndex:index]) | ||
[self deselectItemsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]; | ||
else { | ||
range.length++; | ||
[self selectItemsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]; | ||
} | ||
self.lastSelectionIndex = index; | ||
} | ||
} | ||
|
||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
// | ||
// BCCollectionView+Mouse.h | ||
// Fontcase | ||
// | ||
// Created by Pieter Omvlee on 25/11/2010. | ||
// Copyright 2010 Bohemian Coding. All rights reserved. | ||
// | ||
|
||
#import "BCCollectionView.h" | ||
|
||
@interface BCCollectionView (BCCollectionView_Mouse) | ||
- (void)mouseDown:(NSEvent *)theEvent; | ||
- (void)mouseDragged:(NSEvent *)theEvent; | ||
- (void)mouseUp:(NSEvent *)theEvent; | ||
|
||
- (BOOL)shiftOrCommandKeyPressed; | ||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
// | ||
// BCCollectionView+Mouse.m | ||
// Fontcase | ||
// | ||
// Created by Pieter Omvlee on 25/11/2010. | ||
// Copyright 2010 Bohemian Coding. All rights reserved. | ||
// | ||
|
||
#import "BCCollectionView+Mouse.h" | ||
#import "BCGeometryExtensions.h" | ||
|
||
@implementation BCCollectionView (BCCollectionView_Mouse) | ||
|
||
- (BOOL)shiftOrCommandKeyPressed | ||
{ | ||
return [NSEvent modifierFlags] & NSShiftKeyMask || [NSEvent modifierFlags] & NSCommandKeyMask; | ||
} | ||
|
||
- (void)mouseDown:(NSEvent *)theEvent | ||
{ | ||
[[self window] makeFirstResponder:self]; | ||
|
||
if (![self shiftOrCommandKeyPressed]) | ||
[self deselectAllItems]; | ||
|
||
self.originalSelectionIndexes = [[selectionIndexes copy] autorelease]; | ||
|
||
mouseDownLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil]; | ||
mouseDraggedLocation = mouseDownLocation; | ||
|
||
NSUInteger index = [self indexOfItemAtPoint:mouseDownLocation]; | ||
if ([self shiftOrCommandKeyPressed] && [self.originalSelectionIndexes containsIndex:index]) | ||
[self deselectItemAtIndex:index]; | ||
else | ||
[self selectItemAtIndex:index]; | ||
} | ||
|
||
- (void)mouseDragged:(NSEvent *)theEvent | ||
{ | ||
[self deselectAllItems]; | ||
if ([self shiftOrCommandKeyPressed]) { | ||
[self.originalSelectionIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { | ||
[self selectItemAtIndex:idx]; | ||
}]; | ||
} | ||
[self setNeedsDisplayInRect:BCRectFromTwoPoints(mouseDownLocation, mouseDraggedLocation)]; | ||
|
||
mouseDraggedLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil]; | ||
|
||
NSIndexSet *newIndexes = [self indexesOfItemsInRect:BCRectFromTwoPoints(mouseDownLocation, mouseDraggedLocation)]; | ||
[newIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { | ||
if ([self.originalSelectionIndexes containsIndex:idx]) | ||
[self deselectItemAtIndex:idx]; | ||
else | ||
[self selectItemAtIndex:idx]; | ||
}]; | ||
|
||
[self setNeedsDisplayInRect:BCRectFromTwoPoints(mouseDownLocation, mouseDraggedLocation)]; | ||
} | ||
|
||
- (void)mouseUp:(NSEvent *)theEvent | ||
{ | ||
[self setNeedsDisplayInRect:BCRectFromTwoPoints(mouseDownLocation, mouseDraggedLocation)]; | ||
|
||
mouseDownLocation = NSZeroPoint; | ||
mouseDraggedLocation = NSZeroPoint; | ||
|
||
self.originalSelectionIndexes = nil; | ||
} | ||
|
||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
// | ||
// BCCollectionView.h | ||
// Fontcase | ||
// | ||
// Created by Pieter Omvlee on 24/11/2010. | ||
// Copyright 2010 Bohemian Coding. All rights reserved. | ||
// | ||
|
||
#import <Cocoa/Cocoa.h> | ||
#import "BCCollectionViewDelegate.h" | ||
|
||
@interface BCCollectionView : NSView | ||
{ | ||
IBOutlet id<BCCollectionViewDelegate> delegate; | ||
|
||
NSArray *contentArray; | ||
|
||
NSMutableArray *reusableViewControllers; | ||
NSMutableDictionary *visibleViewControllers; | ||
|
||
NSMutableIndexSet *selectionIndexes; | ||
NSIndexSet *originalSelectionIndexes; | ||
|
||
NSPoint mouseDownLocation; | ||
NSPoint mouseDraggedLocation; | ||
|
||
NSColor *backgroundColor; | ||
|
||
NSUInteger lastSelectionIndex; | ||
} | ||
@property (nonatomic, assign) id<BCCollectionViewDelegate> delegate; | ||
@property (nonatomic, retain) NSColor *backgroundColor; | ||
|
||
//by setting the contentArray, the view will load itself up. | ||
@property (nonatomic, copy) NSArray *contentArray; | ||
|
||
//private | ||
@property (nonatomic, copy) NSIndexSet *originalSelectionIndexes; | ||
@property (nonatomic) NSUInteger lastSelectionIndex; | ||
|
||
- (void)reloadData; | ||
|
||
//Managing Selections | ||
- (void)selectItemAtIndex:(NSUInteger)index; | ||
- (void)selectItemsAtIndexes:(NSIndexSet *)indexes; | ||
- (void)deselectItemAtIndex:(NSUInteger)index; | ||
- (void)deselectItemsAtIndexes:(NSIndexSet *)indexes; | ||
- (void)deselectAllItems; | ||
|
||
//Basic Cell Information | ||
- (NSUInteger)numberOfRows; | ||
- (NSUInteger)numberOfItemsPerRow; | ||
- (NSSize)cellSize; | ||
- (NSRect)rectOfItemAtIndex:(NSUInteger)anIndex; | ||
- (NSIndexSet *)indexesOfItemsInRect:(NSRect)aRect; | ||
- (NSUInteger)indexOfItemAtPoint:(NSPoint)p; | ||
- (NSUInteger)indexOfItemAtPointOrClosestGuess:(NSPoint)p; | ||
|
||
//Querying ViewControllers | ||
- (NSIndexSet *)indexesOfViewControllers; | ||
- (NSIndexSet *)indexesOfInvisibleViewControllers; | ||
@end |
Oops, something went wrong.