40 - (BOOL)collectionView:(
CPCollectionView)collectionView acceptDrop:(
id)draggingInfo index:(CPInteger)index dropOperation:(CPCollectionViewDropOperation)dropOperation;
45 - (CPDragOperation)collectionView:(
CPCollectionView)collectionView validateDrop:(
id)draggingInfo proposedIndex:(CPInteger)proposedDropIndex dropOperation:(CPCollectionViewDropOperation)proposedDropOperation;
48 - (void)collectionView:(
CPCollectionView)collectionView didDoubleClickOnItemAtIndex:(
int)index;
91 unsigned _maxNumberOfRows;
92 unsigned _maxNumberOfColumns;
97 CPArray _backgroundColors;
102 BOOL _allowsMultipleSelection;
103 BOOL _allowsEmptySelection;
108 float _horizontalMargin;
109 float _verticalMargin;
111 unsigned _numberOfRows;
112 unsigned _numberOfColumns;
114 id <CPCollectionViewDelegate> _delegate;
115 unsigned _implementedDelegateMethods;
119 BOOL _needsMinMaxItemSizeUpdate;
120 CGSize _storedFrameSize;
122 BOOL _uniformSubviewsResizing;
124 CPInteger _currentDropIndex;
125 CPDragOperation _currentDragOperation;
127 _CPCollectionViewDropIndicator _dropView;
130 + (Class)_binderClassForBinding:(
CPString)aBinding
132 if (aBinding == CPContentBinding)
133 return [_CPCollectionViewContentBinder class];
135 return [
super _binderClassForBinding:aBinding];
138 - (id)initWithFrame:(CGRect)aFrame
144 _maxNumberOfRows = 0;
145 _maxNumberOfColumns = 0;
147 _minItemSize = CGSizeMakeZero();
148 _maxItemSize = CGSizeMakeZero();
152 _verticalMargin = 5.0;
154 _allowsEmptySelection = YES;
172 _itemSize = CGSizeMakeZero();
176 _storedFrameSize = CGSizeMakeZero();
178 _needsMinMaxItemSizeUpdate = YES;
179 _uniformSubviewsResizing = NO;
182 _currentDropIndex = -1;
186 [
self setAutoresizesSubviews:NO];
187 [
self setAutoresizingMask:0];
193 #pragma mark Delegate 199 - (void)setDelegate:(
id <CPCollectionViewDelegate>)aDelegate
201 if (_delegate === aDelegate)
204 _delegate = aDelegate;
205 _implementedDelegateMethods = 0;
207 if ([_delegate respondsToSelector:
@selector(collectionView:acceptDrop:index:dropOperation:)])
210 if ([_delegate respondsToSelector:
@selector(collectionView:canDragItemsAtIndexes:withEvent:)])
213 if ([_delegate respondsToSelector:
@selector(collectionView:writeItemsAtIndexes:toPasteboard:)])
216 if ([_delegate respondsToSelector:
@selector(collectionView:dragTypesForItemsAtIndexes:)])
219 if ([_delegate respondsToSelector:
@selector(collectionView:dataForItemsAtIndexes:forType:)])
222 if ([_delegate respondsToSelector:
@selector(collectionView:validateDrop:proposedIndex:dropOperation:)])
225 if ([_delegate respondsToSelector:
@selector(collectionView:didDoubleClickOnItemAtIndex:)])
228 if ([_delegate respondsToSelector:
@selector(collectionView:menuForItemAtIndex:)])
231 if ([_delegate respondsToSelector:
@selector(collectionView:draggingViewForItemsAtIndexes:withEvent:offset:)])
283 _itemForDragging = nil;
284 _itemPrototype = anItem;
286 [
self _reloadContentCachingRemovedItems:NO];
294 return _itemPrototype;
305 if (_cachedItems.length)
306 item = _cachedItems.pop();
309 item = [_itemPrototype copy];
311 [item setRepresentedObject:anObject];
312 [[item view] setFrameSize:_itemSize];
321 - (BOOL)acceptsFirstResponder
329 - (BOOL)isFirstResponder
346 - (void)setContent:(CPArray)anArray
374 - (void)setSelectable:(BOOL)isSelectable
376 if (_isSelectable == isSelectable)
379 _isSelectable = isSelectable;
382 [
self _applySelectionToItems:NO];
391 return _isSelectable;
398 - (void)setAllowsEmptySelection:(BOOL)shouldAllowEmptySelection
400 _allowsEmptySelection = shouldAllowEmptySelection;
406 - (BOOL)allowsEmptySelection
408 return _allowsEmptySelection;
415 - (void)setAllowsMultipleSelection:(BOOL)shouldAllowMultipleSelection
417 _allowsMultipleSelection = shouldAllowMultipleSelection;
423 - (BOOL)allowsMultipleSelection
425 return _allowsMultipleSelection;
437 if (!_isSelectable || [_selectionIndexes
isEqual:anIndexSet])
440 [
self _applySelectionToItems:NO];
442 _selectionIndexes = anIndexSet;
444 [
self _applySelectionToItems:YES];
446 var binderClass = [[
self class] _binderClassForBinding:@"selectionIndexes"];
447 [[binderClass getBinding:@"selectionIndexes" forObject:self] reverseSetValueFor:@"selectionIndexes"];
455 return [_selectionIndexes copy];
458 - (void)reloadContent
460 [
self _reloadContentCachingRemovedItems:YES];
464 - (void)_reloadContentCachingRemovedItems:(BOOL)shouldCache
467 var count = _items.length;
471 [[_items[count] view] removeFromSuperview];
472 [_items[count] setSelected:NO];
475 _cachedItems.push(_items[count]);
485 count = _content.length;
487 for (; index < count; ++index)
489 _items.push([
self newItemForRepresentedObject:_content[index]]);
491 [
self addSubview:[_items[index] view]];
496 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !=
CPNotFound && index < count)
497 [_items[index] setSelected:YES];
499 [
self tileIfNeeded:NO];
502 - (void)resizeSubviewsWithOldSize:(CGSize)oldBoundsSize
507 - (void)resizeWithOldSuperviewSize:(CGSize)oldBoundsSize
524 - (void)tileIfNeeded:(BOOL)lazyFlag
527 count = _items.length,
528 oldNumberOfColumns = _numberOfColumns,
529 oldNumberOfRows = _numberOfRows,
530 oldItemSize = _itemSize,
531 storedFrameSize = _storedFrameSize;
537 [
self _updateMinMaxItemSizeIfNeeded];
539 [
self _computeGridWithSize:frameSize count:@ref(count)];
547 _numberOfColumns !== oldNumberOfColumns ||
548 _numberOfRows !== oldNumberOfRows ||
549 !CGSizeEqualToSize(_itemSize, oldItemSize))
554 - (void)_computeGridWithSize:(CGSize)aSuperviewSize count:(Function)countRef
556 var
width = aSuperviewSize.width,
557 height = aSuperviewSize.height,
558 itemSize = CGSizeMakeCopy(_minItemSize),
559 maxItemSizeWidth = _maxItemSize.width,
560 maxItemSizeHeight = _maxItemSize.height,
561 itemsCount = [_items count],
565 numberOfColumns = FLOOR(
width / itemSize.width);
567 if (maxItemSizeWidth == 0)
568 numberOfColumns = MIN(numberOfColumns, _maxNumberOfColumns);
570 if (_maxNumberOfColumns > 0)
571 numberOfColumns = MIN(MIN(_maxNumberOfColumns, itemsCount), numberOfColumns);
573 numberOfColumns = MAX(1.0, numberOfColumns);
575 itemSize.width = FLOOR(
width / numberOfColumns);
577 if (maxItemSizeWidth > 0)
579 itemSize.width = MIN(maxItemSizeWidth, itemSize.width);
581 if (numberOfColumns == 1)
582 itemSize.width = MIN(maxItemSizeWidth,
width);
585 numberOfRows = CEIL(itemsCount / numberOfColumns);
587 if (_maxNumberOfRows > 0)
588 numberOfRows = MIN(numberOfRows, _maxNumberOfRows);
590 height = MAX(height, numberOfRows * (_minItemSize.height + _verticalMargin));
592 var itemSizeHeight = FLOOR(height / numberOfRows) - _verticalMargin;
594 if (maxItemSizeHeight > 0)
595 itemSizeHeight = MIN(itemSizeHeight, maxItemSizeHeight);
597 _itemSize = CGSizeMake(MAX(_minItemSize.width, itemSize.width), MAX(_minItemSize.height, itemSizeHeight));
598 _storedFrameSize = CGSizeMake(MAX(
width, _minItemSize.width), height);
599 _numberOfColumns = numberOfColumns;
600 _numberOfRows = numberOfRows;
601 countRef(MIN(itemsCount, numberOfColumns * numberOfRows));
604 - (void)displayItems:(CPArray)displayItems frameSize:(CGSize)aFrameSize itemSize:(CGSize)anItemSize columns:(CPInteger)numberOfColumns rows:(CPInteger)numberOfRows count:(CPInteger)displayCount
608 _horizontalMargin = _uniformSubviewsResizing ? FLOOR((aFrameSize.width - numberOfColumns * anItemSize.width) / (numberOfColumns + 1)) :
HORIZONTAL_MARGIN;
610 var x = _horizontalMargin,
611 y = -anItemSize.height;
613 [displayItems enumerateObjectsUsingBlock:function(item, idx, stop)
615 var view = [item view];
617 if (idx >= displayCount)
619 [view setFrameOrigin:CGPointMake(-anItemSize.width, -anItemSize.height)];
623 if (idx % numberOfColumns == 0)
625 x = _horizontalMargin;
626 y += _verticalMargin + anItemSize.height;
629 [view setFrameOrigin:CGPointMake(x, y)];
630 [view setFrameSize:anItemSize];
632 x += anItemSize.width + _horizontalMargin;
636 - (void)_updateMinMaxItemSizeIfNeeded
638 if (!_needsMinMaxItemSizeUpdate)
643 if (_itemPrototype && (prototypeView = [_itemPrototype view]))
645 if (_minItemSize.width == 0)
646 _minItemSize.width = [prototypeView frameSize].width;
648 if (_minItemSize.height == 0)
649 _minItemSize.height = [prototypeView frameSize].height;
652 _maxItemSize.height = [prototypeView frameSize].height;
654 if (_maxItemSize.width == 0 && !([prototypeView autoresizingMask] &
CPViewWidthSizable))
655 _maxItemSize.width = [prototypeView frameSize].width;
657 _needsMinMaxItemSizeUpdate = NO;
666 - (void)setMaxNumberOfRows:(
unsigned)aMaxNumberOfRows
668 if (_maxNumberOfRows == aMaxNumberOfRows)
671 _maxNumberOfRows = aMaxNumberOfRows;
679 - (unsigned)maxNumberOfRows
681 return _maxNumberOfRows;
688 - (void)setMaxNumberOfColumns:(
unsigned)aMaxNumberOfColumns
690 if (_maxNumberOfColumns == aMaxNumberOfColumns)
693 _maxNumberOfColumns = aMaxNumberOfColumns;
701 - (unsigned)maxNumberOfColumns
703 return _maxNumberOfColumns;
709 - (unsigned)numberOfRows
711 return _numberOfRows;
718 - (unsigned)numberOfColumns
720 return _numberOfColumns;
727 - (void)setMinItemSize:(CGSize)aSize
729 if (aSize === nil || aSize === undefined)
732 if (CGSizeEqualToSize(_minItemSize, aSize))
735 _minItemSize = CGSizeMakeCopy(aSize);
737 if (CGSizeEqualToSize(_minItemSize, CGSizeMakeZero()))
738 _needsMinMaxItemSizeUpdate = YES;
746 - (CGSize)minItemSize
755 - (void)setMaxItemSize:(CGSize)aSize
757 if (CGSizeEqualToSize(_maxItemSize, aSize))
760 _maxItemSize = CGSizeMakeCopy(aSize);
771 - (CGSize)maxItemSize
776 - (void)setBackgroundColors:(CPArray)backgroundColors
778 if (_backgroundColors === backgroundColors)
781 _backgroundColors = backgroundColors;
783 if (!_backgroundColors)
786 if ([_backgroundColors count] === 1)
795 - (CPArray)backgroundColors
797 return _backgroundColors;
802 if ([_selectionIndexes count] && [anEvent clickCount] == 2)
803 [
self _sendDelegateDidDoubleClickOnItemAtIndex:[_selectionIndexes firstIndex]];
808 _mouseDownEvent = anEvent;
811 index = [
self _indexAtPoint:location];
813 if (index >= 0 && index < _items.length)
819 var indexes = [_selectionIndexes copy];
821 if ([indexes containsIndex:index])
822 [indexes removeIndex:index];
824 [indexes addIndex:index];
829 newSelectedRange = nil;
833 firstSelectedIndex = index;
835 if (index < firstSelectedIndex)
836 newSelectedRange =
CPMakeRange(index, (firstSelectedIndex - index) + 1);
838 newSelectedRange =
CPMakeRange(firstSelectedIndex, (index - firstSelectedIndex) + 1);
856 else if (_allowsEmptySelection)
867 - (void)setVerticalMargin:(
float)aVerticalMargin
869 if (_verticalMargin == aVerticalMargin)
872 _verticalMargin = aVerticalMargin;
877 - (void)setUniformSubviewsResizing:(BOOL)flag
879 _uniformSubviewsResizing = flag;
888 - (float)verticalMargin
890 return _verticalMargin;
906 if (![
self _delegateRespondsToCollectionViewMenuForItemAtIndex])
910 index = [
self _indexAtPoint:location];
912 return [
self _sendDelegateMenuForItemAtIndex:index];
915 - (int)_indexAtPoint:(CGPoint)thePoint
917 var column = FLOOR(thePoint.x / (_itemSize.width + _horizontalMargin));
919 if (column < _numberOfColumns)
921 var row = FLOOR(thePoint.y / (_itemSize.height + _verticalMargin));
923 if (row < _numberOfRows)
924 return (row * _numberOfColumns + column);
932 return [_items objectAtIndex:anIndex];
935 - (CGRect)frameForItemAtIndex:(CPUInteger)anIndex
948 count = [indexArray count];
950 for (; index < count; ++index)
951 frame = CGRectUnion(
frame, [
self frameForItemAtIndex:indexArray[index]]);
956 - (void)_applySelectionToItems:(BOOL)select
958 var numberOfItems = [_items count];
960 [_selectionIndexes enumerateIndexesUsingBlock:function(idx, stop)
962 if (idx < numberOfItems)
963 [[_items objectAtIndex:idx] setSelected:select];
984 [aPasteboard
setData:[
self _sendDelegateDataForItemsAtIndexes:_selectionIndexes forType:aType]
forType:aType];
987 - (void)_createDropIndicatorIfNeeded
992 _dropView = [[_CPCollectionViewDropIndicator alloc] initWithFrame:CGRectMake(-8, -8, 0, 0)];
994 [_dropView setFrameSize:CGSizeMake(10, _itemSize.height + _verticalMargin)];
995 [
self addSubview:_dropView];
1001 if (!_mouseDownEvent)
1004 [
self _createDropIndicatorIfNeeded];
1007 mouseDownLocationInWindow = [_mouseDownEvent locationInWindow];
1010 if ((ABS(locationInWindow.x - mouseDownLocationInWindow.x) < 3) &&
1011 (ABS(locationInWindow.y - mouseDownLocationInWindow.y) < 3))
1014 if (![
self _delegateRespondsToCollectionViewDragTypesForItemsAtIndexes])
1018 if (![_selectionIndexes count])
1021 if (![
self _sendDelegateCanDragItemsAtIndexes:_selectionIndexes withEvent:_mouseDownEvent])
1025 var dragTypes = [
self _sendDelegateDragTypesForItemsAtIndexes:_selectionIndexes];
1029 var dragImageOffset = CGSizeMakeZero(),
1030 view = [
self _sendDelegateDraggingViewForItemsAtIndexes:_selectionIndexes withEvent:_mouseDownEvent offset:dragImageOffset];
1032 [view setFrameSize:_itemSize];
1033 [view setAlphaValue:0.7];
1036 dragPoint = CGPointMake(dragLocation.x - _itemSize.width / 2 , dragLocation.y - _itemSize.height / 2);
1041 event:_mouseDownEvent
1051 if (!_itemForDragging)
1054 [_itemForDragging setRepresentedObject:idx];
1056 return [_itemForDragging view];
1059 - (CPDragOperation)draggingEntered:(
id)draggingInfo
1062 dropIndexRef = @ref(dropIndex),
1063 dragOp = [
self _validateDragWithInfo:draggingInfo dropIndex:dropIndexRef dropOperation:1];
1065 dropIndex = dropIndexRef();
1067 [
self _createDropIndicatorIfNeeded];
1069 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:dragOp newDropIndex:dropIndex newDropOperation:1];
1071 return _currentDragOperation;
1074 - (CPDragOperation)draggingUpdated:(
id)draggingInfo
1076 if (![
self _dropIndexDidChange:draggingInfo])
1077 return _currentDragOperation;
1080 dropIndexRef = @ref(dropIndex);
1082 var dragOperation = [
self _validateDragWithInfo:draggingInfo dropIndex:dropIndexRef dropOperation:1];
1084 dropIndex = dropIndexRef();
1086 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:dragOperation newDropIndex:dropIndex newDropOperation:1];
1088 return dragOperation;
1091 - (CPDragOperation)_validateDragWithInfo:(
id)draggingInfo dropIndex:(Function)dropIndexRef dropOperation:(
int)dropOperation
1094 dropIndex = [
self _dropIndexForDraggingInfo:draggingInfo proposedDropOperation:dropOperation];
1096 if ([
self _delegateRespondsToCollectionViewValidateDropProposedIndexDropOperation])
1098 var dropIndexRef2 = @ref(dropIndex);
1100 result = [
self _sendDelegateValidateDrop:draggingInfo proposedIndex:dropIndexRef2 dropOperation:dropOperation];
1103 dropIndex = dropIndexRef2();
1106 dropIndexRef(dropIndex);
1111 - (void)draggingExited:(
id)draggingInfo
1113 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:0 newDropIndex:-1 newDropOperation:1];
1116 - (void)draggingEnded:(
id)draggingInfo
1118 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:0 newDropIndex:-1 newDropOperation:1];
1132 - (BOOL)performDragOperation:(
id)draggingInfo
1136 if (_currentDragOperation && _currentDropIndex !== -1)
1137 result = [
self _sendDelegateAcceptDrop:draggingInfo index:_currentDropIndex dropOperation:1];
1144 - (void)_updateDragAndDropStateWithDraggingInfo:(
id)draggingInfo newDragOperation:(CPDragOperation)dragOperation newDropIndex:(CPInteger)dropIndex newDropOperation:(CPInteger)dropOperation
1146 _currentDropIndex = dropIndex;
1147 _currentDragOperation = dragOperation;
1150 dropviewFrameWidth = CGRectGetWidth([_dropView
frame]);
1153 frameOrigin = CGPointMake(-dropviewFrameWidth, 0);
1154 else if (_currentDropIndex == 0)
1155 frameOrigin = CGPointMake(0, 0);
1160 if ((_currentDropIndex % _numberOfColumns) !== 0 || _currentDropIndex == [_items count])
1162 dropIndex = _currentDropIndex - 1;
1163 offset = (_horizontalMargin - dropviewFrameWidth) / 2;
1167 offset = - _itemSize.
width - dropviewFrameWidth - (_horizontalMargin - dropviewFrameWidth) / 2;
1170 var rect = [
self frameForItemAtIndex:dropIndex];
1172 frameOrigin = CGPointMake(CGRectGetMaxX(rect) + offset, rect.origin.y - _verticalMargin);
1175 [_dropView setFrameOrigin:frameOrigin];
1178 - (BOOL)_dropIndexDidChange:(
id)draggingInfo
1180 var dropIndex = [
self _dropIndexForDraggingInfo:draggingInfo proposedDropOperation:1];
1183 dropIndex = [[
self content] count];
1185 return (_currentDropIndex !== dropIndex)
1188 - (CPInteger)_dropIndexForDraggingInfo:(
id)draggingInfo proposedDropOperation:(
int)dropOperation
1190 var location = [
self convertPoint:[draggingInfo draggingLocation] fromView:nil],
1191 locationX = location.x + _itemSize.
width / 2;
1193 var column = MIN(FLOOR(locationX / (_itemSize.width + _horizontalMargin)), _numberOfColumns),
1194 row = FLOOR(location.y / (_itemSize.height + _verticalMargin));
1196 if (row >= _numberOfRows - 1)
1198 if (row >= _numberOfRows)
1200 row = _numberOfRows - 1;
1201 column = _numberOfColumns;
1204 return MIN((row * _numberOfColumns + column), [_items count]);
1207 return (row * _numberOfColumns + column);
1211 @implementation _CPCollectionViewDropIndicator :
CPView 1216 - (void)drawRect:(CGRect)aRect
1219 width = CGRectGetWidth(aRect),
1220 circleRect = CGRectMake(1, 1,
width - 2,
width - 2);
1243 - (void)_modifySelectionWithNewIndex:(
int)anIndex direction:(
int)aDirection expand:(BOOL)shouldExpand
1245 var count = [[
self items] count];
1250 anIndex = MIN(MAX(anIndex, 0), count - 1);
1252 if (_allowsMultipleSelection && shouldExpand)
1254 var indexes = [_selectionIndexes copy],
1255 bottomAnchor = [indexes firstIndex],
1256 topAnchor = [indexes lastIndex];
1259 if (aDirection === -1)
1260 [indexes addIndexesInRange:CPMakeRange(anIndex, bottomAnchor - anIndex + 1)];
1262 [indexes addIndexesInRange:CPMakeRange(topAnchor, anIndex - topAnchor + 1)];
1268 [
self _scrollToSelection];
1271 - (void)_scrollToSelection
1273 var
frame = [
self frameForItemsAtIndexes:[
self selectionIndexes]];
1275 if (!CGRectIsEmpty(
frame))
1276 [
self scrollRectToVisible:frame];
1279 - (void)moveLeft:(
id)sender
1283 index = [[
self items] count];
1285 [
self _modifySelectionWithNewIndex:index - 1 direction:-1 expand:NO];
1288 - (void)moveLeftAndModifySelection:(
id)sender
1292 index = [[
self items] count];
1294 [
self _modifySelectionWithNewIndex:index - 1 direction:-1 expand:YES];
1297 - (void)moveRight:(
id)sender
1302 - (void)moveRightAndModifySelection:(
id)sender
1307 - (void)moveDown:(
id)sender
1312 - (void)moveDownAndModifySelection:(
id)sender
1317 - (void)moveUp:(
id)sender
1321 index = [[
self items] count];
1323 [
self _modifySelectionWithNewIndex:index - [
self numberOfColumns] direction:-1 expand:NO];
1326 - (void)moveUpAndModifySelection:(
id)sender
1330 index = [[
self items] count];
1332 [
self _modifySelectionWithNewIndex:index - [
self numberOfColumns] direction:-1 expand:YES];
1335 - (void)deleteBackward:(
id)sender
1337 if ([[
self delegate] respondsToSelector:
@selector(collectionView:shouldDeleteItemsAtIndexes:)])
1342 if (index > [[
self content] count] - 1)
1345 [
self _scrollToSelection];
1352 [
self interpretKeyEvents:[anEvent]];
1355 - (void)setAutoresizingMask:(
unsigned)aMask
1365 - (CGRect)rectForItemAtIndex:(
int)anIndex
1367 _CPReportLenientDeprecation([
self class], _cmd,
@selector(frameForItemAtIndex:));
1376 _CPReportLenientDeprecation([
self class], _cmd,
@selector(frameForItemsAtIndexes:));
1390 - (BOOL)_delegateRespondsToCollectionViewValidateDropProposedIndexDropOperation
1399 - (BOOL)_delegateRespondsToCollectionViewMenuForItemAtIndex
1408 - (BOOL)_delegateRespondsToCollectionViewDragTypesForItemsAtIndexes
1417 - (BOOL)_sendDelegateAcceptDrop:(
id)draggingInfo index:(CPInteger)index dropOperation:(CPCollectionViewDropOperation)dropOperation
1422 return [_delegate collectionView:self acceptDrop:draggingInfo index:index dropOperation:dropOperation];
1429 - (BOOL)_sendDelegateCanDragItemsAtIndexes:(
CPIndexSet)indexes withEvent:(
CPEvent)anEvent
1434 return [_delegate collectionView:self canDragItemsAtIndexes:indexes withEvent:anEvent];
1446 return [_delegate collectionView:self writeItemsAtIndexes:indexes toPasteboard:pasteboard];
1453 - (CPArray)_sendDelegateDragTypesForItemsAtIndexes:(
CPIndexSet)indexes
1458 return [_delegate collectionView:self dragTypesForItemsAtIndexes:indexes];
1470 return [_delegate collectionView:self dataForItemsAtIndexes:indexes forType:aType];
1477 - (CPDragOperation)_sendDelegateValidateDrop:(
id)draggingInfo proposedIndex:(CPInteger)proposedDropIndex dropOperation:(CPCollectionViewDropOperation)proposedDropOperation
1482 return [_delegate collectionView:self validateDrop:draggingInfo proposedIndex:proposedDropIndex dropOperation:proposedDropOperation];
1489 - (void)_sendDelegateDidDoubleClickOnItemAtIndex:(
int)index
1494 return [_delegate collectionView:self didDoubleClickOnItemAtIndex:index];
1502 - (void)_sendDelegateMenuForItemAtIndex:(CPInteger)anIndex
1507 return [_delegate collectionView:self menuForItemAtIndex:anIndex];
1514 - (
CPView)_sendDelegateDraggingViewForItemsAtIndexes:(
CPIndexSet)indexes withEvent:(
CPEvent)anEvent offset:(CGPoint)dragImageOffset
1517 return [
self draggingViewForItemsAtIndexes:indexes withEvent:anEvent offset:dragImageOffset];
1519 return [_delegate collectionView:self draggingViewForItemsAtIndexes:indexes withEvent:anEvent offset:dragImageOffset];
1543 _minItemSize = [aCoder decodeSizeForKey:CPCollectionViewMinItemSizeKey];
1544 _maxItemSize = [aCoder decodeSizeForKey:CPCollectionViewMaxItemSizeKey];
1546 _maxNumberOfRows = [aCoder decodeIntForKey:CPCollectionViewMaxNumberOfRowsKey];
1547 _maxNumberOfColumns = [aCoder decodeIntForKey:CPCollectionViewMaxNumberOfColumnsKey];
1549 _verticalMargin = [aCoder decodeFloatForKey:CPCollectionViewVerticalMarginKey];
1551 _isSelectable = [aCoder decodeBoolForKey:CPCollectionViewSelectableKey];
1552 _allowsMultipleSelection = [aCoder decodeBoolForKey:CPCollectionViewAllowsMultipleSelectionKey];
1554 [
self setBackgroundColors:[aCoder decodeObjectForKey:CPCollectionViewBackgroundColorsKey]];
1566 if (!CGSizeEqualToSize(_minItemSize, CGSizeMakeZero()))
1567 [aCoder encodeSize:_minItemSize forKey:CPCollectionViewMinItemSizeKey];
1569 if (!CGSizeEqualToSize(_maxItemSize, CGSizeMakeZero()))
1570 [aCoder encodeSize:_maxItemSize forKey:CPCollectionViewMaxItemSizeKey];
1572 [aCoder encodeInt:_maxNumberOfRows forKey:CPCollectionViewMaxNumberOfRowsKey];
1573 [aCoder encodeInt:_maxNumberOfColumns forKey:CPCollectionViewMaxNumberOfColumnsKey];
1575 [aCoder encodeBool:_isSelectable forKey:CPCollectionViewSelectableKey];
1576 [aCoder encodeBool:_allowsMultipleSelection forKey:CPCollectionViewAllowsMultipleSelectionKey];
1578 [aCoder encodeFloat:_verticalMargin forKey:CPCollectionViewVerticalMarginKey];
1580 [aCoder encodeObject:_backgroundColors forKey:CPCollectionViewBackgroundColorsKey];
1584 @implementation _CPCollectionViewContentBinder :
CPBinder 1589 - (void)setValue:(
id)aValue forBinding:(
CPString)aBinding
1591 [_source setContent:aValue];
1601 - (BOOL)uniformSubviewsResizing
1603 return _uniformSubviewsResizing;
1609 - (void)setUniformSubviewsResizing:(BOOL)aValue
1611 _uniformSubviewsResizing = aValue;
id initWithFrame:(CGRect aFrame)
Used to implement exception handling (creating & raising).
BOOL makeFirstResponder:(CPResponder aResponder)
function CGContextStrokeEllipseInRect(aContext, aRect)
void dragView:at:offset:event:pasteboard:source:slideBack:(CPView aView, [at] CGPoint aLocation, [offset] CGSize mouseOffset, [event] CPEvent anEvent, [pasteboard] CPPasteboard aPasteboard, [source] id aSourceObject, [slideBack] BOOL slideBack)
var CPCollectionViewMaxNumberOfColumnsKey
unsigned numberOfColumns()
var CPCollectionViewDelegate_collectionView_didDoubleClickOnItemAtIndex_
void tileIfNeeded:(BOOL lazyFlag)
CPGraphicsContext currentContext()
id initWithCoder:(CPCoder aCoder)
CPDragOperation CPDragOperationNone
var CPCollectionViewDelegate_collectionView_writeItemsAtIndexes_toPasteboard_
function CGContextSetStrokeColor(aContext, aColor)
BOOL setData:forType:(CPData aData, [forType] CPString aType)
CPResponder firstResponder()
CGPoint locationInWindow()
CPCollectionViewItem newItemForRepresentedObject:(id anObject)
CPInteger getIndexes:maxCount:inIndexRange:(CPArray anArray, [maxCount] CPInteger aMaxCount, [inIndexRange] CPRange aRange)
void displayItems:frameSize:itemSize:columns:rows:count:(CPArray displayItems, [frameSize] CGSize aFrameSize, [itemSize] CGSize anItemSize, [columns] CPInteger numberOfColumns, [rows] CPInteger numberOfRows, [count] CPInteger displayCount)
A Cappuccino wrapper for any data type.
void raise:reason:(CPString aName, [reason] CPString aReason)
A collection of unique integers.
function CGContextAddLineToPoint(aContext, x, y)
function CGContextStrokePath(aContext)
var CPCollectionViewDelegate_collectionView_menuForItemAtIndex_
function CGContextSetLineWidth(aContext, aLineWidth)
var CPCollectionViewDelegate_collectionView_acceptDrop_index_dropOperation_
var CPCollectionViewMinItemSizeKey
var CPCollectionViewDelegate_collectionView_draggingViewForItemsAtIndexes_withEvent_offset
CPIndexSet selectionIndexes()
An immutable string (collection of characters).
CGPoint convertPoint:fromView:(CGPoint aPoint, [fromView] CPView aView)
var CPCollectionViewVerticalMarginKey
CGRect frameForItemAtIndex:(CPUInteger anIndex)
var CPCollectionViewSelectableKey
function CGContextSetFillColor(aContext, aColor)
void setAutoresizingMask:(unsigned aMask)
void setNeedsDisplay:(BOOL aFlag)
CPMenu menuForEvent:(CPEvent anEvent)
void encodeWithCoder:(CPCoder aCoder)
function CGContextBeginPath(aContext)
var CPCollectionViewDelegate_collectionView_dataForItemsAtIndexes_forType_
var CPCollectionViewMaxItemSizeKey
void setBackgroundColors:(CPArray backgroundColors)
var CPCollectionViewDelegate_collectionView_validateDrop_proposedIndex_dropOperation_
var CPCollectionViewDelegate_collectionView_canDragItemsAtIndexes_withEvent_
Defines methods for use when archiving & restoring (enc/decoding).
unsigned declareTypes:owner:(CPArray types, [owner] id anOwner)
var CPCollectionViewBackgroundColorsKey
void setBackgroundColor:(CPColor aColor)
var CPCollectionViewDelegate_collectionView_dragTypesForItemsAtIndexes_
var CPCollectionViewMaxNumberOfRowsKey
void setFrameSize:(CGSize aSize)
void addIndexesInRange:(CPRange aRange)
function CGContextFillRect(aContext, aRect)
void draggingEnded:(id draggingInfo)
id indexSetWithIndex:(int anIndex)
function CGContextMoveToPoint(aContext, x, y)
CGRect frameForItemsAtIndexes:(CPIndexSet anIndexSet)
var CPCollectionViewAllowsMultipleSelectionKey
CPRange function CPMakeRange(location, length)
void setSelectionIndexes:(CPIndexSet anIndexSet)
id pasteboardWithName:(CPString aName)
CPCollectionViewItem itemAtIndex:(CPUInteger anIndex)