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;
125 CPInteger _currentDropIndex;
126 CPDragOperation _currentDragOperation;
128 _CPCollectionViewDropIndicator _dropView;
131 - (id)initWithFrame:(CGRect)aFrame
137 _maxNumberOfRows = 0;
138 _maxNumberOfColumns = 0;
140 _minItemSize = CGSizeMakeZero();
141 _maxItemSize = CGSizeMakeZero();
145 _verticalMargin = 5.0;
147 _allowsEmptySelection = YES;
165 _itemSize = CGSizeMakeZero();
169 _storedFrameSize = CGSizeMakeZero();
171 _needsMinMaxItemSizeUpdate = YES;
172 _uniformSubviewsResizing = NO;
175 _currentDropIndex = -1;
186 #pragma mark Delegate 194 if (_delegate === aDelegate)
197 _delegate = aDelegate;
198 _implementedDelegateMethods = 0;
200 if ([_delegate respondsToSelector:
@selector(collectionView:acceptDrop:index:dropOperation:)])
203 if ([_delegate respondsToSelector:
@selector(collectionView:canDragItemsAtIndexes:withEvent:)])
206 if ([_delegate respondsToSelector:
@selector(collectionView:writeItemsAtIndexes:toPasteboard:)])
209 if ([_delegate respondsToSelector:
@selector(collectionView:dragTypesForItemsAtIndexes:)])
212 if ([_delegate respondsToSelector:
@selector(collectionView:dataForItemsAtIndexes:forType:)])
215 if ([_delegate respondsToSelector:
@selector(collectionView:validateDrop:proposedIndex:dropOperation:)])
218 if ([_delegate respondsToSelector:
@selector(collectionView:didDoubleClickOnItemAtIndex:)])
221 if ([_delegate respondsToSelector:
@selector(collectionView:menuForItemAtIndex:)])
224 if ([_delegate respondsToSelector:
@selector(collectionView:draggingViewForItemsAtIndexes:withEvent:offset:)])
276 _itemForDragging = nil;
277 _itemPrototype = anItem;
279 [
self _reloadContentCachingRemovedItems:NO];
287 return _itemPrototype;
298 if (_cachedItems.length)
299 item = _cachedItems.pop();
302 item = [_itemPrototype copy];
304 [item setRepresentedObject:anObject];
305 [[item view] setFrameSize:_itemSize];
339 - (void)setContent:(CPArray)anArray
367 - (void)setSelectable:(BOOL)isSelectable
377 itemCount = [_items count];
380 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !=
CPNotFound && index < itemCount)
381 [_items[index] setSelected:NO];
391 return _isSelectable;
398 - (void)setAllowsEmptySelection:(BOOL)shouldAllowEmptySelection
400 _allowsEmptySelection = shouldAllowEmptySelection;
408 return _allowsEmptySelection;
415 - (void)setAllowsMultipleSelection:(BOOL)shouldAllowMultipleSelection
417 _allowsMultipleSelection = shouldAllowMultipleSelection;
425 return _allowsMultipleSelection;
436 if (!_isSelectable || [_selectionIndexes
isEqual:anIndexSet])
440 itemCount = [_items count];
443 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !==
CPNotFound && index < itemCount)
444 [_items[index] setSelected:NO];
446 _selectionIndexes = anIndexSet;
450 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !==
CPNotFound)
451 [_items[index] setSelected:YES];
453 var binderClass = [[
self class] _binderClassForBinding:@"selectionIndexes"];
454 [[binderClass getBinding:@"selectionIndexes" forObject:self] reverseSetValueFor:@"selectionIndexes"];
462 return [_selectionIndexes copy];
467 [
self _reloadContentCachingRemovedItems:YES];
471 - (void)_reloadContentCachingRemovedItems:(BOOL)shouldCache
474 var count = _items.length;
478 [[_items[count] view] removeFromSuperview];
479 [_items[count] setSelected:NO];
482 _cachedItems.push(_items[count]);
492 count = _content.length;
494 for (; index < count; ++index)
496 _items.push([
self newItemForRepresentedObject:_content[index]]);
503 while ((index = [_selectionIndexes indexGreaterThanIndex:index]) !=
CPNotFound && index < count)
504 [_items[index] setSelected:YES];
509 - (void)resizeSubviewsWithOldSize:(CGSize)oldBoundsSize
514 - (void)resizeWithOldSuperviewSize:(CGSize)oldBoundsSize
531 - (void)tileIfNeeded:(BOOL)lazyFlag
534 count = _items.length,
535 oldNumberOfColumns = _numberOfColumns,
536 oldNumberOfRows = _numberOfRows,
537 oldItemSize = _itemSize,
538 storedFrameSize = _storedFrameSize;
544 [
self _updateMinMaxItemSizeIfNeeded];
546 [
self _computeGridWithSize:frameSize count:@ref(count)];
554 _numberOfColumns !== oldNumberOfColumns ||
555 _numberOfRows !== oldNumberOfRows ||
556 !CGSizeEqualToSize(_itemSize, oldItemSize))
561 - (void)_computeGridWithSize:(CGSize)aSuperviewSize count:(Function)countRef
563 var
width = aSuperviewSize.width,
564 height = aSuperviewSize.height,
565 itemSize = CGSizeMakeCopy(_minItemSize),
566 maxItemSizeWidth = _maxItemSize.width,
567 maxItemSizeHeight = _maxItemSize.height,
568 itemsCount = [_items count],
572 numberOfColumns = FLOOR(width / itemSize.width);
574 if (maxItemSizeWidth == 0)
575 numberOfColumns = MIN(numberOfColumns, _maxNumberOfColumns);
577 if (_maxNumberOfColumns > 0)
578 numberOfColumns = MIN(MIN(_maxNumberOfColumns, itemsCount), numberOfColumns);
580 numberOfColumns = MAX(1.0, numberOfColumns);
582 itemSize.width = FLOOR(width / numberOfColumns);
584 if (maxItemSizeWidth > 0)
586 itemSize.width = MIN(maxItemSizeWidth, itemSize.width);
588 if (numberOfColumns == 1)
589 itemSize.width = MIN(maxItemSizeWidth, width);
594 if (_maxNumberOfRows > 0)
597 height = MAX(height,
numberOfRows * (_minItemSize.height + _verticalMargin));
599 var itemSizeHeight = FLOOR(height /
numberOfRows) - _verticalMargin;
601 if (maxItemSizeHeight > 0)
602 itemSizeHeight = MIN(itemSizeHeight, maxItemSizeHeight);
604 _itemSize = CGSizeMake(MAX(_minItemSize.width, itemSize.width), MAX(_minItemSize.height, itemSizeHeight));
605 _storedFrameSize = CGSizeMake(MAX(width, _minItemSize.width), height);
608 countRef(MIN(itemsCount, numberOfColumns *
numberOfRows));
611 - (void)displayItems:(CPArray)displayItems frameSize:(CGSize)aFrameSize itemSize:(CGSize)anItemSize columns:(CPInteger)numberOfColumns rows:(CPInteger)numberOfRows count:(CPInteger)displayCount
617 var x = _horizontalMargin,
618 y = -anItemSize.height;
620 [displayItems enumerateObjectsUsingBlock:function(item, idx, stop)
622 var view = [item view];
624 if (idx >= displayCount)
626 [view setFrameOrigin:CGPointMake(-anItemSize.width, -anItemSize.height)];
630 if (idx % numberOfColumns == 0)
632 x = _horizontalMargin;
633 y += _verticalMargin + anItemSize.height;
636 [view setFrameOrigin:CGPointMake(x, y)];
637 [view setFrameSize:anItemSize];
639 x += anItemSize.width + _horizontalMargin;
643 - (void)_updateMinMaxItemSizeIfNeeded
645 if (!_needsMinMaxItemSizeUpdate)
650 if (_itemPrototype && (prototypeView = [_itemPrototype view]))
652 if (_minItemSize.width == 0)
653 _minItemSize.width = [prototypeView frameSize].width;
655 if (_minItemSize.height == 0)
656 _minItemSize.height = [prototypeView frameSize].height;
659 _maxItemSize.height = [prototypeView
frameSize].height;
662 _maxItemSize.width = [prototypeView
frameSize].width;
664 _needsMinMaxItemSizeUpdate = NO;
673 - (void)setMaxNumberOfRows:(
unsigned)aMaxNumberOfRows
675 if (_maxNumberOfRows == aMaxNumberOfRows)
678 _maxNumberOfRows = aMaxNumberOfRows;
688 return _maxNumberOfRows;
695 - (void)setMaxNumberOfColumns:(
unsigned)aMaxNumberOfColumns
697 if (_maxNumberOfColumns == aMaxNumberOfColumns)
700 _maxNumberOfColumns = aMaxNumberOfColumns;
710 return _maxNumberOfColumns;
718 return _numberOfRows;
727 return _numberOfColumns;
734 - (void)setMinItemSize:(CGSize)aSize
736 if (aSize === nil || aSize === undefined)
739 if (CGSizeEqualToSize(_minItemSize, aSize))
742 _minItemSize = CGSizeMakeCopy(aSize);
744 if (CGSizeEqualToSize(_minItemSize, CGSizeMakeZero()))
745 _needsMinMaxItemSizeUpdate = YES;
762 - (void)setMaxItemSize:(CGSize)aSize
764 if (CGSizeEqualToSize(_maxItemSize, aSize))
767 _maxItemSize = CGSizeMakeCopy(aSize);
783 - (void)setBackgroundColors:(CPArray)backgroundColors
790 if (!_backgroundColors)
793 if ([_backgroundColors count] === 1)
804 return _backgroundColors;
809 if ([_selectionIndexes count] && [anEvent clickCount] == 2)
810 [
self _sendDelegateDidDoubleClickOnItemAtIndex:[_selectionIndexes firstIndex]];
815 _mouseDownEvent = anEvent;
818 index = [
self _indexAtPoint:location];
820 if (index >= 0 && index < _items.length)
826 var indexes = [_selectionIndexes copy];
828 if ([indexes containsIndex:index])
829 [indexes removeIndex:index];
831 [indexes addIndex:index];
833 else if ([anEvent modifierFlags] & CPShiftKeyMask)
836 newSelectedRange = nil;
840 firstSelectedIndex = index;
842 if (index < firstSelectedIndex)
843 newSelectedRange =
CPMakeRange(index, (firstSelectedIndex - index) + 1);
845 newSelectedRange =
CPMakeRange(firstSelectedIndex, (index - firstSelectedIndex) + 1);
863 else if (_allowsEmptySelection)
874 - (void)setVerticalMargin:(
float)aVerticalMargin
876 if (_verticalMargin == aVerticalMargin)
879 _verticalMargin = aVerticalMargin;
884 - (void)setUniformSubviewsResizing:(BOOL)flag
886 _uniformSubviewsResizing = flag;
897 return _verticalMargin;
913 if (![
self _delegateRespondsToCollectionViewMenuForItemAtIndex])
917 index = [
self _indexAtPoint:location];
919 return [
self _sendDelegateMenuForItemAtIndex:index];
922 - (int)_indexAtPoint:(CGPoint)thePoint
924 var column = FLOOR(thePoint.x / (_itemSize.width + _horizontalMargin));
926 if (column < _numberOfColumns)
928 var row = FLOOR(thePoint.y / (_itemSize.height + _verticalMargin));
930 if (row < _numberOfRows)
931 return (row * _numberOfColumns + column);
939 return [_items objectAtIndex:anIndex];
942 - (CGRect)frameForItemAtIndex:(CPUInteger)anIndex
955 count = [indexArray count];
957 for (; index < count; ++index)
958 frame = CGRectUnion(
frame, [
self frameForItemAtIndex:indexArray[index]]);
977 [aPasteboard
setData:[
self _sendDelegateDataForItemsAtIndexes:_selectionIndexes forType:aType]
forType:aType];
980 - (void)_createDropIndicatorIfNeeded
985 _dropView = [[_CPCollectionViewDropIndicator alloc] initWithFrame:CGRectMake(-8, -8, 0, 0)];
987 [_dropView setFrameSize:CGSizeMake(10, _itemSize.height + _verticalMargin)];
994 if (!_mouseDownEvent)
997 [
self _createDropIndicatorIfNeeded];
1000 mouseDownLocationInWindow = [_mouseDownEvent locationInWindow];
1003 if ((ABS(locationInWindow.x - mouseDownLocationInWindow.x) < 3) &&
1004 (ABS(locationInWindow.y - mouseDownLocationInWindow.y) < 3))
1007 if (![
self _delegateRespondsToCollectionViewDragTypesForItemsAtIndexes])
1011 if (![_selectionIndexes count])
1014 if (![
self _sendDelegateCanDragItemsAtIndexes:_selectionIndexes withEvent:_mouseDownEvent])
1018 var dragTypes = [
self _sendDelegateDragTypesForItemsAtIndexes:_selectionIndexes];
1022 var dragImageOffset = CGSizeMakeZero(),
1023 view = [
self _sendDelegateDraggingViewForItemsAtIndexes:_selectionIndexes withEvent:_mouseDownEvent offset:dragImageOffset];
1025 [view setFrameSize:_itemSize];
1026 [view setAlphaValue:0.7];
1029 dragPoint = CGPointMake(dragLocation.x - _itemSize.width / 2 , dragLocation.y - _itemSize.height / 2);
1034 event:_mouseDownEvent
1044 if (!_itemForDragging)
1047 [_itemForDragging setRepresentedObject:idx];
1049 return [_itemForDragging view];
1052 - (CPDragOperation)draggingEntered:(
id)draggingInfo
1055 dropIndexRef = @ref(dropIndex),
1056 dragOp = [
self _validateDragWithInfo:draggingInfo dropIndex:dropIndexRef dropOperation:1];
1058 dropIndex = dropIndexRef();
1060 [
self _createDropIndicatorIfNeeded];
1062 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:dragOp newDropIndex:dropIndex newDropOperation:1];
1064 return _currentDragOperation;
1067 - (CPDragOperation)draggingUpdated:(
id)draggingInfo
1069 if (![
self _dropIndexDidChange:draggingInfo])
1070 return _currentDragOperation;
1073 dropIndexRef = @ref(dropIndex);
1075 var dragOperation = [
self _validateDragWithInfo:draggingInfo dropIndex:dropIndexRef dropOperation:1];
1077 dropIndex = dropIndexRef();
1079 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:dragOperation newDropIndex:dropIndex newDropOperation:1];
1081 return dragOperation;
1084 - (CPDragOperation)_validateDragWithInfo:(
id)draggingInfo dropIndex:(Function)dropIndexRef dropOperation:(
int)dropOperation
1087 dropIndex = [
self _dropIndexForDraggingInfo:draggingInfo proposedDropOperation:dropOperation];
1089 if ([
self _delegateRespondsToCollectionViewValidateDropProposedIndexDropOperation])
1091 var dropIndexRef2 = @ref(dropIndex);
1093 result = [
self _sendDelegateValidateDrop:draggingInfo proposedIndex:dropIndexRef2 dropOperation:dropOperation];
1096 dropIndex = dropIndexRef2();
1099 dropIndexRef(dropIndex);
1104 - (void)draggingExited:(
id)draggingInfo
1106 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:0 newDropIndex:-1 newDropOperation:1];
1109 - (void)draggingEnded:(
id)draggingInfo
1111 [
self _updateDragAndDropStateWithDraggingInfo:draggingInfo newDragOperation:0 newDropIndex:-1 newDropOperation:1];
1125 - (BOOL)performDragOperation:(
id)draggingInfo
1129 if (_currentDragOperation && _currentDropIndex !== -1)
1130 result = [
self _sendDelegateAcceptDrop:draggingInfo index:_currentDropIndex dropOperation:1];
1137 - (void)_updateDragAndDropStateWithDraggingInfo:(
id)draggingInfo newDragOperation:(CPDragOperation)dragOperation newDropIndex:(CPInteger)dropIndex newDropOperation:(CPInteger)dropOperation
1139 _currentDropIndex = dropIndex;
1140 _currentDragOperation = dragOperation;
1143 dropviewFrameWidth = CGRectGetWidth([_dropView
frame]);
1146 frameOrigin = CGPointMake(-dropviewFrameWidth, 0);
1147 else if (_currentDropIndex == 0)
1148 frameOrigin = CGPointMake(0, 0);
1153 if ((_currentDropIndex % _numberOfColumns) !== 0 || _currentDropIndex == [_items count])
1155 dropIndex = _currentDropIndex - 1;
1156 offset = (_horizontalMargin - dropviewFrameWidth) / 2;
1160 offset = - _itemSize.width - dropviewFrameWidth - (_horizontalMargin - dropviewFrameWidth) / 2;
1165 frameOrigin = CGPointMake(CGRectGetMaxX(rect) + offset, rect.origin.y - _verticalMargin);
1168 [_dropView setFrameOrigin:frameOrigin];
1171 - (BOOL)_dropIndexDidChange:(
id)draggingInfo
1173 var dropIndex = [
self _dropIndexForDraggingInfo:draggingInfo proposedDropOperation:1];
1176 dropIndex = [[
self content] count];
1178 return (_currentDropIndex !== dropIndex)
1181 - (CPInteger)_dropIndexForDraggingInfo:(
id)draggingInfo proposedDropOperation:(int)dropOperation
1184 locationX = location.x + _itemSize.width / 2;
1186 var column = MIN(FLOOR(locationX / (_itemSize.width + _horizontalMargin)), _numberOfColumns),
1187 row = FLOOR(location.y / (_itemSize.height + _verticalMargin));
1189 if (row >= _numberOfRows - 1)
1191 if (row >= _numberOfRows)
1193 row = _numberOfRows - 1;
1194 column = _numberOfColumns;
1197 return MIN((row * _numberOfColumns + column), [_items count]);
1200 return (row * _numberOfColumns + column);
1204 @implementation _CPCollectionViewDropIndicator :
CPView 1209 - (void)drawRect:(CGRect)aRect
1212 width = CGRectGetWidth(aRect),
1213 circleRect = CGRectMake(1, 1,
width - 2,
width - 2);
1236 - (void)_modifySelectionWithNewIndex:(
int)anIndex direction:(
int)aDirection expand:(BOOL)shouldExpand
1238 var count = [[
self items] count];
1243 anIndex = MIN(MAX(anIndex, 0), count - 1);
1245 if (_allowsMultipleSelection && shouldExpand)
1247 var indexes = [_selectionIndexes copy],
1248 bottomAnchor = [indexes firstIndex],
1249 topAnchor = [indexes lastIndex];
1252 if (aDirection === -1)
1253 [indexes addIndexesInRange:CPMakeRange(anIndex, bottomAnchor - anIndex + 1)];
1255 [indexes addIndexesInRange:CPMakeRange(topAnchor, anIndex - topAnchor + 1)];
1261 [
self _scrollToSelection];
1264 - (void)_scrollToSelection
1268 if (!CGRectIsEmpty(frame))
1269 [
self scrollRectToVisible:frame];
1272 - (void)moveLeft:(
id)sender
1276 index = [[
self items] count];
1278 [
self _modifySelectionWithNewIndex:index - 1 direction:-1 expand:NO];
1281 - (void)moveLeftAndModifySelection:(
id)sender
1285 index = [[
self items] count];
1287 [
self _modifySelectionWithNewIndex:index - 1 direction:-1 expand:YES];
1290 - (void)moveRight:(
id)sender
1295 - (void)moveRightAndModifySelection:(
id)sender
1300 - (void)moveDown:(
id)sender
1305 - (void)moveDownAndModifySelection:(
id)sender
1310 - (void)moveUp:(
id)sender
1314 index = [[
self items] count];
1316 [
self _modifySelectionWithNewIndex:index - [
self numberOfColumns] direction:-1 expand:NO];
1319 - (void)moveUpAndModifySelection:(
id)sender
1323 index = [[
self items] count];
1325 [
self _modifySelectionWithNewIndex:index - [
self numberOfColumns] direction:-1 expand:YES];
1328 - (void)deleteBackward:(
id)sender
1330 if ([[
self delegate] respondsToSelector:
@selector(collectionView:shouldDeleteItemsAtIndexes:)])
1335 if (index > [[
self content] count] - 1)
1338 [
self _scrollToSelection];
1345 [
self interpretKeyEvents:[anEvent]];
1348 - (void)setAutoresizingMask:(
unsigned)aMask
1358 - (CGRect)rectForItemAtIndex:(
int)anIndex
1360 _CPReportLenientDeprecation([
self class], _cmd,
@selector(frameForItemAtIndex:));
1369 _CPReportLenientDeprecation([
self class], _cmd,
@selector(frameForItemsAtIndexes:));
1383 - (BOOL)_delegateRespondsToCollectionViewValidateDropProposedIndexDropOperation
1392 - (BOOL)_delegateRespondsToCollectionViewMenuForItemAtIndex
1401 - (BOOL)_delegateRespondsToCollectionViewDragTypesForItemsAtIndexes
1410 - (BOOL)_sendDelegateAcceptDrop:(
id)draggingInfo index:(CPInteger)index dropOperation:(CPCollectionViewDropOperation)dropOperation
1415 return [_delegate collectionView:self acceptDrop:draggingInfo index:index dropOperation:dropOperation];
1422 - (BOOL)_sendDelegateCanDragItemsAtIndexes:(
CPIndexSet)indexes withEvent:(
CPEvent)anEvent
1427 return [_delegate collectionView:self canDragItemsAtIndexes:indexes withEvent:anEvent];
1439 return [_delegate collectionView:self writeItemsAtIndexes:indexes toPasteboard:pasteboard];
1446 - (CPArray)_sendDelegateDragTypesForItemsAtIndexes:(
CPIndexSet)indexes
1451 return [_delegate collectionView:self dragTypesForItemsAtIndexes:indexes];
1463 return [_delegate collectionView:self dataForItemsAtIndexes:indexes forType:aType];
1470 - (CPDragOperation)_sendDelegateValidateDrop:(
id)draggingInfo proposedIndex:(CPInteger)proposedDropIndex dropOperation:(CPCollectionViewDropOperation)proposedDropOperation
1475 return [_delegate collectionView:self validateDrop:draggingInfo proposedIndex:proposedDropIndex dropOperation:proposedDropOperation];
1482 - (void)_sendDelegateDidDoubleClickOnItemAtIndex:(
int)index
1487 return [_delegate collectionView:self didDoubleClickOnItemAtIndex:index];
1495 - (void)_sendDelegateMenuForItemAtIndex:(CPInteger)anIndex
1500 return [_delegate collectionView:self menuForItemAtIndex:anIndex];
1507 - (
CPView)_sendDelegateDraggingViewForItemsAtIndexes:(
CPIndexSet)indexes withEvent:(
CPEvent)anEvent offset:(CGPoint)dragImageOffset
1510 return [
self draggingViewForItemsAtIndexes:indexes withEvent:anEvent offset:dragImageOffset];
1512 return [_delegate collectionView:self draggingViewForItemsAtIndexes:indexes withEvent:anEvent offset:dragImageOffset];
1536 _minItemSize = [aCoder decodeSizeForKey:CPCollectionViewMinItemSizeKey];
1537 _maxItemSize = [aCoder decodeSizeForKey:CPCollectionViewMaxItemSizeKey];
1539 _maxNumberOfRows = [aCoder decodeIntForKey:CPCollectionViewMaxNumberOfRowsKey];
1540 _maxNumberOfColumns = [aCoder decodeIntForKey:CPCollectionViewMaxNumberOfColumnsKey];
1542 _verticalMargin = [aCoder decodeFloatForKey:CPCollectionViewVerticalMarginKey];
1544 _isSelectable = [aCoder decodeBoolForKey:CPCollectionViewSelectableKey];
1545 _allowsMultipleSelection = [aCoder decodeBoolForKey:CPCollectionViewAllowsMultipleSelectionKey];
1547 [
self setBackgroundColors:[aCoder decodeObjectForKey:CPCollectionViewBackgroundColorsKey]];
1559 if (!CGSizeEqualToSize(_minItemSize, CGSizeMakeZero()))
1560 [aCoder encodeSize:_minItemSize forKey:CPCollectionViewMinItemSizeKey];
1562 if (!CGSizeEqualToSize(_maxItemSize, CGSizeMakeZero()))
1563 [aCoder encodeSize:_maxItemSize forKey:CPCollectionViewMaxItemSizeKey];
1565 [aCoder encodeInt:_maxNumberOfRows forKey:CPCollectionViewMaxNumberOfRowsKey];
1566 [aCoder encodeInt:_maxNumberOfColumns forKey:CPCollectionViewMaxNumberOfColumnsKey];
1568 [aCoder encodeBool:_isSelectable forKey:CPCollectionViewSelectableKey];
1569 [aCoder encodeBool:_allowsMultipleSelection forKey:CPCollectionViewAllowsMultipleSelectionKey];
1571 [aCoder encodeFloat:_verticalMargin forKey:CPCollectionViewVerticalMarginKey];
1573 [aCoder encodeObject:_backgroundColors forKey:CPCollectionViewBackgroundColorsKey];
1585 return _uniformSubviewsResizing;
1591 - (void)setUniformSubviewsResizing:(BOOL)aValue
1593 _uniformSubviewsResizing = aValue;
id initWithFrame:(CGRect aFrame)
Used to implement exception handling (creating & raising).
BOOL makeFirstResponder:(CPResponder aResponder)
function CGContextStrokeEllipseInRect(aContext, aRect)
void addSubview:(CPView aSubview)
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)
A CALayer is similar to a CPView
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()
BOOL allowsEmptySelection()
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
void setAutoresizingMask:(unsigned aMask)
CPIndexSet selectionIndexes()
An immutable string (collection of characters).
CGPoint convertPoint:fromView:(CGPoint aPoint, [fromView] CPView aView)
unsigned maxNumberOfColumns()
if(CPFeatureIsCompatible(CPHTMLCanvasFeature))
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 setAutoresizesSubviews:(BOOL aFlag)
void setBackgroundColors:(CPArray backgroundColors)
var CPCollectionViewDelegate_collectionView_validateDrop_proposedIndex_dropOperation_
var CPCollectionViewDelegate_collectionView_canDragItemsAtIndexes_withEvent_
Defines methods for use when archiving & restoring (enc/decoding).
BOOL uniformSubviewsResizing()
unsigned declareTypes:owner:(CPArray types, [owner] id anOwner)
CPCollectionViewItem itemPrototype()
var CPCollectionViewBackgroundColorsKey
void setBackgroundColor:(CPColor aColor)
var CPCollectionViewDelegate_collectionView_dragTypesForItemsAtIndexes_
var CPCollectionViewMaxNumberOfRowsKey
void setFrameSize:(CGSize aSize)
void addIndexesInRange:(CPRange aRange)
function CGContextFillRect(aContext, aRect)
CPArray backgroundColors()
unsigned autoresizingMask()
void draggingEnded:(id draggingInfo)
id indexSetWithIndex:(int anIndex)
function CGContextMoveToPoint(aContext, x, y)
CGRect frameForItemsAtIndexes:(CPIndexSet anIndexSet)
BOOL acceptsFirstResponder()
var CPCollectionViewAllowsMultipleSelectionKey
CPRange function CPMakeRange(location, length)
void setSelectionIndexes:(CPIndexSet anIndexSet)
BOOL allowsMultipleSelection()
id pasteboardWithName:(CPString aName)
unsigned maxNumberOfRows()
CPCollectionViewItem itemAtIndex:(CPUInteger anIndex)