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;
92 unsigned _maxNumberOfRows;
93 unsigned _maxNumberOfColumns;
98 CPArray _backgroundColors;
103 BOOL _allowsMultipleSelection;
104 BOOL _allowsEmptySelection;
109 float _horizontalMargin;
110 float _verticalMargin;
112 unsigned _numberOfRows;
113 unsigned _numberOfColumns;
115 id <CPCollectionViewDelegate> _delegate;
116 unsigned _implementedDelegateMethods;
120 BOOL _needsMinMaxItemSizeUpdate;
121 CGSize _storedFrameSize;
123 BOOL _uniformSubviewsResizing;
126 CPInteger _currentDropIndex;
127 CPDragOperation _currentDragOperation;
129 _CPCollectionViewDropIndicator _dropView;
132 - (id)initWithFrame:(CGRect)aFrame
138 _maxNumberOfRows = 0;
139 _maxNumberOfColumns = 0;
141 _minItemSize = CGSizeMakeZero();
142 _maxItemSize = CGSizeMakeZero();
146 _verticalMargin = 5.0;
148 _allowsEmptySelection = YES;
166 _itemSize = CGSizeMakeZero();
170 _storedFrameSize = CGSizeMakeZero();
172 _needsMinMaxItemSizeUpdate = YES;
173 _uniformSubviewsResizing = NO;
176 _currentDropIndex = -1;
180 [
self setAutoresizesSubviews:NO];
181 [
self setAutoresizingMask:0];
187 #pragma mark Delegate
195 if (_delegate === aDelegate)
198 _delegate = aDelegate;
199 _implementedDelegateMethods = 0;
201 if ([_delegate respondsToSelector:
@selector(collectionView:acceptDrop:index:dropOperation:)])
204 if ([_delegate respondsToSelector:
@selector(collectionView:canDragItemsAtIndexes:withEvent:)])
207 if ([_delegate respondsToSelector:
@selector(collectionView:writeItemsAtIndexes:toPasteboard:)])
210 if ([_delegate respondsToSelector:
@selector(collectionView:dragTypesForItemsAtIndexes:)])
213 if ([_delegate respondsToSelector:
@selector(collectionView:dataForItemsAtIndexes:forType:)])
216 if ([_delegate respondsToSelector:
@selector(collectionView:validateDrop:proposedIndex:dropOperation:)])
219 if ([_delegate respondsToSelector:
@selector(collectionView:didDoubleClickOnItemAtIndex:)])
222 if ([_delegate respondsToSelector:
@selector(collectionView:menuForItemAtIndex:)])
225 if ([_delegate respondsToSelector:
@selector(collectionView:draggingViewForItemsAtIndexes:withEvent:offset:)])
277 _itemForDragging = nil;
278 _itemPrototype = anItem;
280 [
self _reloadContentCachingRemovedItems:NO];
288 return _itemPrototype;
299 if (_cachedItems.length)
300 item = _cachedItems.pop();
303 item = [_itemPrototype copy];
305 [item setRepresentedObject:anObject];
306 [[item view] setFrameSize:_itemSize];
315 - (BOOL)acceptsFirstResponder
323 - (BOOL)isFirstResponder
340 - (void)setContent:(CPArray)anArray
368 - (void)setSelectable:(BOOL)isSelectable
370 if (_isSelectable == isSelectable)
373 _isSelectable = isSelectable;
378 itemCount = [_items count];
381 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !=
CPNotFound && index < itemCount)
382 [_items[index] setSelected:NO];
392 return _isSelectable;
399 - (void)setAllowsEmptySelection:(BOOL)shouldAllowEmptySelection
401 _allowsEmptySelection = shouldAllowEmptySelection;
407 - (BOOL)allowsEmptySelection
409 return _allowsEmptySelection;
416 - (void)setAllowsMultipleSelection:(BOOL)shouldAllowMultipleSelection
418 _allowsMultipleSelection = shouldAllowMultipleSelection;
424 - (BOOL)allowsMultipleSelection
426 return _allowsMultipleSelection;
437 if (!_isSelectable || [_selectionIndexes
isEqual:anIndexSet])
441 itemCount = [_items count];
444 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !==
CPNotFound && index < itemCount)
445 [_items[index] setSelected:NO];
447 _selectionIndexes = anIndexSet;
451 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !==
CPNotFound)
452 [_items[index] setSelected:YES];
454 var binderClass = [[
self class] _binderClassForBinding:@"selectionIndexes"];
455 [[binderClass getBinding:@"selectionIndexes" forObject:self] reverseSetValueFor:@"selectionIndexes"];
463 return [_selectionIndexes copy];
466 - (void)reloadContent
468 [
self _reloadContentCachingRemovedItems:YES];
472 - (void)_reloadContentCachingRemovedItems:(BOOL)shouldCache
475 var count = _items.length;
479 [[_items[count] view] removeFromSuperview];
480 [_items[count] setSelected:NO];
483 _cachedItems.push(_items[count]);
493 count = _content.length;
495 for (; index < count; ++index)
497 _items.push([
self newItemForRepresentedObject:_content[index]]);
499 [
self addSubview:[_items[index] view]];
504 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !=
CPNotFound && index < count)
505 [_items[index] setSelected:YES];
507 [
self tileIfNeeded:NO];
510 - (void)resizeSubviewsWithOldSize:(CGSize)oldBoundsSize
515 - (void)resizeWithOldSuperviewSize:(CGSize)oldBoundsSize
532 - (void)tileIfNeeded:(BOOL)lazyFlag
535 count = _items.length,
536 oldNumberOfColumns = _numberOfColumns,
537 oldNumberOfRows = _numberOfRows,
538 oldItemSize = _itemSize,
539 storedFrameSize = _storedFrameSize;
545 [
self _updateMinMaxItemSizeIfNeeded];
547 [
self _computeGridWithSize:frameSize count:@ref(count)];
555 _numberOfColumns !== oldNumberOfColumns ||
556 _numberOfRows !== oldNumberOfRows ||
557 !CGSizeEqualToSize(_itemSize, oldItemSize))
562 - (void)_computeGridWithSize:(CGSize)aSuperviewSize count:(Function)countRef
564 var
width = aSuperviewSize.width,
565 height = aSuperviewSize.height,
566 itemSize = CGSizeMakeCopy(_minItemSize),
567 maxItemSizeWidth = _maxItemSize.width,
568 maxItemSizeHeight = _maxItemSize.height,
569 itemsCount = [_items count],
573 numberOfColumns = FLOOR(width / itemSize.width);
575 if (maxItemSizeWidth == 0)
576 numberOfColumns = MIN(numberOfColumns, _maxNumberOfColumns);
578 if (_maxNumberOfColumns > 0)
579 numberOfColumns = MIN(MIN(_maxNumberOfColumns, itemsCount), numberOfColumns);
581 numberOfColumns = MAX(1.0, numberOfColumns);
583 itemSize.width = FLOOR(width / numberOfColumns);
585 if (maxItemSizeWidth > 0)
587 itemSize.width = MIN(maxItemSizeWidth, itemSize.width);
589 if (numberOfColumns == 1)
590 itemSize.width = MIN(maxItemSizeWidth, width);
593 numberOfRows = CEIL(itemsCount / numberOfColumns);
595 if (_maxNumberOfRows > 0)
596 numberOfRows = MIN(numberOfRows, _maxNumberOfRows);
598 height = MAX(height, numberOfRows * (_minItemSize.height + _verticalMargin));
600 var itemSizeHeight = FLOOR(height / numberOfRows) - _verticalMargin;
602 if (maxItemSizeHeight > 0)
603 itemSizeHeight = MIN(itemSizeHeight, maxItemSizeHeight);
605 _itemSize = CGSizeMake(MAX(_minItemSize.width, itemSize.width), MAX(_minItemSize.height, itemSizeHeight));
606 _storedFrameSize = CGSizeMake(MAX(width, _minItemSize.width), height);
607 _numberOfColumns = numberOfColumns;
608 _numberOfRows = numberOfRows;
609 countRef(MIN(itemsCount, numberOfColumns * numberOfRows));
612 - (void)displayItems:(CPArray)displayItems frameSize:(CGSize)aFrameSize itemSize:(CGSize)anItemSize columns:(CPInteger)numberOfColumns rows:(CPInteger)numberOfRows count:(CPInteger)displayCount
616 _horizontalMargin = _uniformSubviewsResizing ? FLOOR((aFrameSize.width - numberOfColumns * anItemSize.width) / (numberOfColumns + 1)) :
HORIZONTAL_MARGIN;
618 var x = _horizontalMargin,
619 y = -anItemSize.height;
621 [displayItems enumerateObjectsUsingBlock:function(item, idx, stop)
623 var view = [item view];
625 if (idx >= displayCount)
627 [view setFrameOrigin:CGPointMake(-anItemSize.width, -anItemSize.height)];
631 if (idx % numberOfColumns == 0)
633 x = _horizontalMargin;
634 y += _verticalMargin + anItemSize.height;
637 [view setFrameOrigin:CGPointMake(x, y)];
638 [view setFrameSize:anItemSize];
640 x += anItemSize.width + _horizontalMargin;
644 - (void)_updateMinMaxItemSizeIfNeeded
646 if (!_needsMinMaxItemSizeUpdate)
651 if (_itemPrototype && (prototypeView = [_itemPrototype view]))
653 if (_minItemSize.width == 0)
654 _minItemSize.width = [prototypeView frameSize].width;
656 if (_minItemSize.height == 0)
657 _minItemSize.height = [prototypeView frameSize].height;
660 _maxItemSize.height = [prototypeView frameSize].height;
662 if (_maxItemSize.width == 0 && !([prototypeView autoresizingMask] &
CPViewWidthSizable))
663 _maxItemSize.width = [prototypeView frameSize].width;
665 _needsMinMaxItemSizeUpdate = NO;
674 - (void)setMaxNumberOfRows:(
unsigned)aMaxNumberOfRows
676 if (_maxNumberOfRows == aMaxNumberOfRows)
679 _maxNumberOfRows = aMaxNumberOfRows;
687 - (unsigned)maxNumberOfRows
689 return _maxNumberOfRows;
696 - (void)setMaxNumberOfColumns:(
unsigned)aMaxNumberOfColumns
698 if (_maxNumberOfColumns == aMaxNumberOfColumns)
701 _maxNumberOfColumns = aMaxNumberOfColumns;
709 - (unsigned)maxNumberOfColumns
711 return _maxNumberOfColumns;
717 - (unsigned)numberOfRows
719 return _numberOfRows;
726 - (unsigned)numberOfColumns
728 return _numberOfColumns;
735 - (void)setMinItemSize:(CGSize)aSize
737 if (aSize === nil || aSize === undefined)
740 if (CGSizeEqualToSize(_minItemSize, aSize))
743 _minItemSize = CGSizeMakeCopy(aSize);
745 if (CGSizeEqualToSize(_minItemSize, CGSizeMakeZero()))
746 _needsMinMaxItemSizeUpdate = YES;
754 - (CGSize)minItemSize
763 - (void)setMaxItemSize:(CGSize)aSize
765 if (CGSizeEqualToSize(_maxItemSize, aSize))
768 _maxItemSize = CGSizeMakeCopy(aSize);
779 - (CGSize)maxItemSize
784 - (void)setBackgroundColors:(CPArray)backgroundColors
786 if (_backgroundColors === backgroundColors)
789 _backgroundColors = backgroundColors;
791 if (!_backgroundColors)
794 if ([_backgroundColors count] === 1)
803 - (CPArray)backgroundColors
805 return _backgroundColors;
810 if ([_selectionIndexes count] && [anEvent clickCount] == 2)
811 [
self _sendDelegateDidDoubleClickOnItemAtIndex:[_selectionIndexes firstIndex]];
816 _mouseDownEvent = anEvent;
819 index = [
self _indexAtPoint:location];
821 if (index >= 0 && index < _items.length)
827 var indexes = [_selectionIndexes copy];
829 if ([indexes containsIndex:index])
830 [indexes removeIndex:index];
832 [indexes addIndex:index];
834 else if ([anEvent modifierFlags] & CPShiftKeyMask)
837 newSelectedRange = nil;
841 firstSelectedIndex = index;
843 if (index < firstSelectedIndex)
844 newSelectedRange =
CPMakeRange(index, (firstSelectedIndex - index) + 1);
846 newSelectedRange =
CPMakeRange(firstSelectedIndex, (index - firstSelectedIndex) + 1);
864 else if (_allowsEmptySelection)
875 - (void)setVerticalMargin:(
float)aVerticalMargin
877 if (_verticalMargin == aVerticalMargin)
880 _verticalMargin = aVerticalMargin;
885 - (void)setUniformSubviewsResizing:(BOOL)flag
887 _uniformSubviewsResizing = flag;
896 - (float)verticalMargin
898 return _verticalMargin;
914 if (![
self _delegateRespondsToCollectionViewMenuForItemAtIndex])
918 index = [
self _indexAtPoint:location];
920 return [
self _sendDelegateMenuForItemAtIndex:index];
923 - (int)_indexAtPoint:(CGPoint)thePoint
925 var column = FLOOR(thePoint.x / (_itemSize.width + _horizontalMargin));
927 if (column < _numberOfColumns)
929 var row = FLOOR(thePoint.y / (_itemSize.height + _verticalMargin));
931 if (row < _numberOfRows)
932 return (row * _numberOfColumns + column);
940 return [_items objectAtIndex:anIndex];
943 - (CGRect)frameForItemAtIndex:(CPUInteger)anIndex
956 count = [indexArray count];
958 for (; index < count; ++index)
959 frame = CGRectUnion(
frame, [
self frameForItemAtIndex:indexArray[index]]);
978 [aPasteboard
setData:[
self _sendDelegateDataForItemsAtIndexes:_selectionIndexes forType:aType]
forType:aType];
981 - (void)_createDropIndicatorIfNeeded
986 _dropView = [[_CPCollectionViewDropIndicator alloc] initWithFrame:CGRectMake(-8, -8, 0, 0)];
988 [_dropView setFrameSize:CGSizeMake(10, _itemSize.height + _verticalMargin)];
989 [
self addSubview:_dropView];
995 if (!_mouseDownEvent)
998 [
self _createDropIndicatorIfNeeded];
1001 mouseDownLocationInWindow = [_mouseDownEvent locationInWindow];
1004 if ((ABS(locationInWindow.x - mouseDownLocationInWindow.x) < 3) &&
1005 (ABS(locationInWindow.y - mouseDownLocationInWindow.y) < 3))
1008 if (![
self _delegateRespondsToCollectionViewDragTypesForItemsAtIndexes])
1012 if (![_selectionIndexes count])
1015 if (![
self _sendDelegateCanDragItemsAtIndexes:_selectionIndexes withEvent:_mouseDownEvent])
1019 var dragTypes = [
self _sendDelegateDragTypesForItemsAtIndexes:_selectionIndexes];
1023 var dragImageOffset = CGSizeMakeZero(),
1024 view = [
self _sendDelegateDraggingViewForItemsAtIndexes:_selectionIndexes withEvent:_mouseDownEvent offset:dragImageOffset];
1026 [view setFrameSize:_itemSize];
1027 [view setAlphaValue:0.7];
1030 dragPoint = CGPointMake(dragLocation.x - _itemSize.width / 2 , dragLocation.y - _itemSize.height / 2);
1035 event:_mouseDownEvent
1045 if (!_itemForDragging)
1048 [_itemForDragging setRepresentedObject:idx];
1050 return [_itemForDragging view];
1053 - (CPDragOperation)draggingEntered:(
id)draggingInfo
1056 dropIndexRef = @ref(dropIndex),
1057 dragOp = [
self _validateDragWithInfo:draggingInfo dropIndex:dropIndexRef dropOperation:1];
1059 dropIndex = dropIndexRef();
1061 [
self _createDropIndicatorIfNeeded];
1063 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:dragOp newDropIndex:dropIndex newDropOperation:1];
1065 return _currentDragOperation;
1068 - (CPDragOperation)draggingUpdated:(
id)draggingInfo
1070 if (![
self _dropIndexDidChange:draggingInfo])
1071 return _currentDragOperation;
1074 dropIndexRef = @ref(dropIndex);
1076 var dragOperation = [
self _validateDragWithInfo:draggingInfo dropIndex:dropIndexRef dropOperation:1];
1078 dropIndex = dropIndexRef();
1080 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:dragOperation newDropIndex:dropIndex newDropOperation:1];
1082 return dragOperation;
1085 - (CPDragOperation)_validateDragWithInfo:(
id)draggingInfo dropIndex:(Function)dropIndexRef dropOperation:(
int)dropOperation
1088 dropIndex = [
self _dropIndexForDraggingInfo:draggingInfo proposedDropOperation:dropOperation];
1090 if ([
self _delegateRespondsToCollectionViewValidateDropProposedIndexDropOperation])
1092 var dropIndexRef2 = @ref(dropIndex);
1094 result = [
self _sendDelegateValidateDrop:draggingInfo proposedIndex:dropIndexRef2 dropOperation:dropOperation];
1097 dropIndex = dropIndexRef2();
1100 dropIndexRef(dropIndex);
1105 - (void)draggingExited:(
id)draggingInfo
1107 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:0 newDropIndex:-1 newDropOperation:1];
1110 - (void)draggingEnded:(
id)draggingInfo
1112 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:0 newDropIndex:-1 newDropOperation:1];
1126 - (BOOL)performDragOperation:(
id)draggingInfo
1130 if (_currentDragOperation && _currentDropIndex !== -1)
1131 result = [
self _sendDelegateAcceptDrop:draggingInfo index:_currentDropIndex dropOperation:1];
1138 - (void)_updateDragAndDropStateWithDraggingInfo:(
id)draggingInfo newDragOperation:(CPDragOperation)dragOperation newDropIndex:(CPInteger)dropIndex newDropOperation:(CPInteger)dropOperation
1140 _currentDropIndex = dropIndex;
1141 _currentDragOperation = dragOperation;
1144 dropviewFrameWidth = CGRectGetWidth([_dropView
frame]);
1147 frameOrigin = CGPointMake(-dropviewFrameWidth, 0);
1148 else if (_currentDropIndex == 0)
1149 frameOrigin = CGPointMake(0, 0);
1154 if ((_currentDropIndex % _numberOfColumns) !== 0 || _currentDropIndex == [_items count])
1156 dropIndex = _currentDropIndex - 1;
1157 offset = (_horizontalMargin - dropviewFrameWidth) / 2;
1161 offset = - _itemSize.
width - dropviewFrameWidth - (_horizontalMargin - dropviewFrameWidth) / 2;
1164 var rect = [
self frameForItemAtIndex:dropIndex];
1166 frameOrigin = CGPointMake(CGRectGetMaxX(rect) + offset, rect.origin.y - _verticalMargin);
1169 [_dropView setFrameOrigin:frameOrigin];
1172 - (BOOL)_dropIndexDidChange:(
id)draggingInfo
1174 var dropIndex = [
self _dropIndexForDraggingInfo:draggingInfo proposedDropOperation:1];
1177 dropIndex = [[
self content] count];
1179 return (_currentDropIndex !== dropIndex)
1182 - (CPInteger)_dropIndexForDraggingInfo:(
id)draggingInfo proposedDropOperation:(
int)dropOperation
1184 var location = [
self convertPoint:[draggingInfo draggingLocation] fromView:nil],
1185 locationX = location.x + _itemSize.
width / 2;
1187 var column = MIN(FLOOR(locationX / (_itemSize.width + _horizontalMargin)), _numberOfColumns),
1188 row = FLOOR(location.y / (_itemSize.height + _verticalMargin));
1190 if (row >= _numberOfRows - 1)
1192 if (row >= _numberOfRows)
1194 row = _numberOfRows - 1;
1195 column = _numberOfColumns;
1198 return MIN((row * _numberOfColumns + column), [_items count]);
1201 return (row * _numberOfColumns + column);
1205 @implementation _CPCollectionViewDropIndicator :
CPView
1210 - (void)drawRect:(CGRect)aRect
1213 width = CGRectGetWidth(aRect),
1214 circleRect = CGRectMake(1, 1,
width - 2,
width - 2);
1237 - (void)_modifySelectionWithNewIndex:(
int)anIndex direction:(
int)aDirection expand:(BOOL)shouldExpand
1239 var count = [[
self items] count];
1244 anIndex = MIN(MAX(anIndex, 0), count - 1);
1246 if (_allowsMultipleSelection && shouldExpand)
1248 var indexes = [_selectionIndexes copy],
1249 bottomAnchor = [indexes firstIndex],
1250 topAnchor = [indexes lastIndex];
1253 if (aDirection === -1)
1254 [indexes addIndexesInRange:CPMakeRange(anIndex, bottomAnchor - anIndex + 1)];
1256 [indexes addIndexesInRange:CPMakeRange(topAnchor, anIndex - topAnchor + 1)];
1262 [
self _scrollToSelection];
1265 - (void)_scrollToSelection
1267 var
frame = [
self frameForItemsAtIndexes:[
self selectionIndexes]];
1269 if (!CGRectIsEmpty(frame))
1270 [
self scrollRectToVisible:frame];
1273 - (void)moveLeft:(
id)sender
1277 index = [[
self items] count];
1279 [
self _modifySelectionWithNewIndex:index - 1 direction:-1 expand:NO];
1282 - (void)moveLeftAndModifySelection:(
id)sender
1286 index = [[
self items] count];
1288 [
self _modifySelectionWithNewIndex:index - 1 direction:-1 expand:YES];
1291 - (void)moveRight:(
id)sender
1296 - (void)moveRightAndModifySelection:(
id)sender
1301 - (void)moveDown:(
id)sender
1306 - (void)moveDownAndModifySelection:(
id)sender
1311 - (void)moveUp:(
id)sender
1315 index = [[
self items] count];
1317 [
self _modifySelectionWithNewIndex:index - [
self numberOfColumns] direction:-1 expand:NO];
1320 - (void)moveUpAndModifySelection:(
id)sender
1324 index = [[
self items] count];
1326 [
self _modifySelectionWithNewIndex:index - [
self numberOfColumns] direction:-1 expand:YES];
1329 - (void)deleteBackward:(
id)sender
1331 if ([[
self delegate] respondsToSelector:
@selector(collectionView:shouldDeleteItemsAtIndexes:)])
1336 if (index > [[
self content] count] - 1)
1339 [
self _scrollToSelection];
1349 - (void)setAutoresizingMask:(
unsigned)aMask
1359 - (CGRect)rectForItemAtIndex:(
int)anIndex
1361 _CPReportLenientDeprecation([
self class], _cmd,
@selector(frameForItemAtIndex:));
1370 _CPReportLenientDeprecation([
self class], _cmd,
@selector(frameForItemsAtIndexes:));
1384 - (BOOL)_delegateRespondsToCollectionViewValidateDropProposedIndexDropOperation
1393 - (BOOL)_delegateRespondsToCollectionViewMenuForItemAtIndex
1402 - (BOOL)_delegateRespondsToCollectionViewDragTypesForItemsAtIndexes
1411 - (BOOL)_sendDelegateAcceptDrop:(
id)draggingInfo index:(CPInteger)index dropOperation:(CPCollectionViewDropOperation)dropOperation
1416 return [_delegate collectionView:self acceptDrop:draggingInfo index:index dropOperation:dropOperation];
1423 - (BOOL)_sendDelegateCanDragItemsAtIndexes:(
CPIndexSet)indexes withEvent:(
CPEvent)anEvent
1428 return [_delegate collectionView:self canDragItemsAtIndexes:indexes withEvent:anEvent];
1440 return [_delegate collectionView:self writeItemsAtIndexes:indexes toPasteboard:pasteboard];
1447 - (CPArray)_sendDelegateDragTypesForItemsAtIndexes:(
CPIndexSet)indexes
1452 return [_delegate collectionView:self dragTypesForItemsAtIndexes:indexes];
1464 return [_delegate collectionView:self dataForItemsAtIndexes:indexes forType:aType];
1471 - (CPDragOperation)_sendDelegateValidateDrop:(
id)draggingInfo proposedIndex:(CPInteger)proposedDropIndex dropOperation:(CPCollectionViewDropOperation)proposedDropOperation
1476 return [_delegate collectionView:self validateDrop:draggingInfo proposedIndex:proposedDropIndex dropOperation:proposedDropOperation];
1483 - (void)_sendDelegateDidDoubleClickOnItemAtIndex:(
int)index
1488 return [_delegate collectionView:self didDoubleClickOnItemAtIndex:index];
1496 - (void)_sendDelegateMenuForItemAtIndex:(CPInteger)anIndex
1501 return [_delegate collectionView:self menuForItemAtIndex:anIndex];
1508 - (
CPView)_sendDelegateDraggingViewForItemsAtIndexes:(
CPIndexSet)indexes withEvent:(
CPEvent)anEvent offset:(CGPoint)dragImageOffset
1511 return [
self draggingViewForItemsAtIndexes:indexes withEvent:anEvent offset:dragImageOffset];
1513 return [_delegate collectionView:self draggingViewForItemsAtIndexes:indexes withEvent:anEvent offset:dragImageOffset];
1537 _minItemSize = [aCoder decodeSizeForKey:CPCollectionViewMinItemSizeKey];
1538 _maxItemSize = [aCoder decodeSizeForKey:CPCollectionViewMaxItemSizeKey];
1540 _maxNumberOfRows = [aCoder decodeIntForKey:CPCollectionViewMaxNumberOfRowsKey];
1541 _maxNumberOfColumns = [aCoder decodeIntForKey:CPCollectionViewMaxNumberOfColumnsKey];
1543 _verticalMargin = [aCoder decodeFloatForKey:CPCollectionViewVerticalMarginKey];
1545 _isSelectable = [aCoder decodeBoolForKey:CPCollectionViewSelectableKey];
1546 _allowsMultipleSelection = [aCoder decodeBoolForKey:CPCollectionViewAllowsMultipleSelectionKey];
1548 [
self setBackgroundColors:[aCoder decodeObjectForKey:CPCollectionViewBackgroundColorsKey]];
1560 if (!CGSizeEqualToSize(_minItemSize, CGSizeMakeZero()))
1561 [aCoder encodeSize:_minItemSize forKey:CPCollectionViewMinItemSizeKey];
1563 if (!CGSizeEqualToSize(_maxItemSize, CGSizeMakeZero()))
1564 [aCoder encodeSize:_maxItemSize forKey:CPCollectionViewMaxItemSizeKey];
1566 [aCoder encodeInt:_maxNumberOfRows forKey:CPCollectionViewMaxNumberOfRowsKey];
1567 [aCoder encodeInt:_maxNumberOfColumns forKey:CPCollectionViewMaxNumberOfColumnsKey];
1569 [aCoder encodeBool:_isSelectable forKey:CPCollectionViewSelectableKey];
1570 [aCoder encodeBool:_allowsMultipleSelection forKey:CPCollectionViewAllowsMultipleSelectionKey];
1572 [aCoder encodeFloat:_verticalMargin forKey:CPCollectionViewVerticalMarginKey];
1574 [aCoder encodeObject:_backgroundColors forKey:CPCollectionViewBackgroundColorsKey];
1584 - (BOOL)uniformSubviewsResizing
1586 return _uniformSubviewsResizing;
1592 - (void)setUniformSubviewsResizing:(BOOL)aValue
1594 _uniformSubviewsResizing = aValue;