diff --git a/Headers/AppKit/NSCollectionView.h b/Headers/AppKit/NSCollectionView.h index 32b190e6a..a4eeaac05 100644 --- a/Headers/AppKit/NSCollectionView.h +++ b/Headers/AppKit/NSCollectionView.h @@ -49,11 +49,6 @@ @class NSMutableDictionary; @class NSMutableSet; -@class NSMapTable; -@class NSMutableArray; -@class NSMutableDictionary; -@class NSMutableSet; - @protocol NSPasteboardWriting; enum @@ -439,9 +434,10 @@ APPKIT_EXPORT_CLASS // Managing items NSMutableArray *_visibleItems; NSMutableSet *_indexPathsForVisibleItems; - NSDictionary *_visibleSupplementaryViews; + NSMutableDictionary *_visibleSupplementaryViews; NSMutableSet *_indexPathsForSupplementaryElementsOfKind; - + NSMutableDictionary *_itemsToAttributes; + // Registered class/nib for item identifier NSMapTable *_registeredNibs; NSMapTable *_registeredClasses; diff --git a/Headers/AppKit/NSCollectionViewCompositionalLayout.h b/Headers/AppKit/NSCollectionViewCompositionalLayout.h index 795d19ab2..d60021aa7 100644 --- a/Headers/AppKit/NSCollectionViewCompositionalLayout.h +++ b/Headers/AppKit/NSCollectionViewCompositionalLayout.h @@ -44,4 +44,3 @@ extern "C" { #endif /* GS_API_MACOSX */ #endif /* _NSCollectionViewCompositionalLayout_h_GNUSTEP_GUI_INCLUDE */ - diff --git a/Headers/AppKit/NSCollectionViewItem.h b/Headers/AppKit/NSCollectionViewItem.h index 63f699ac8..e70e51faf 100644 --- a/Headers/AppKit/NSCollectionViewItem.h +++ b/Headers/AppKit/NSCollectionViewItem.h @@ -42,7 +42,7 @@ APPKIT_EXPORT_CLASS -@interface NSCollectionViewItem : NSViewController +@interface NSCollectionViewItem : NSViewController { IBOutlet NSTextField *textField; IBOutlet NSImageView *imageView; diff --git a/Headers/AppKit/NSCollectionViewLayout.h b/Headers/AppKit/NSCollectionViewLayout.h index b1f55c5cb..e323cfaa5 100644 --- a/Headers/AppKit/NSCollectionViewLayout.h +++ b/Headers/AppKit/NSCollectionViewLayout.h @@ -53,6 +53,7 @@ NSCollectionViewSupplementaryElementKind NSCollectionElementKindInterItemGapIndi @class NSCollectionView; @class NSDictionary; @class NSIndexPath; +@class NSMutableDictionary; @class NSNib; @class NSSet; @@ -161,6 +162,7 @@ typedef NSInteger NSCollectionUpdateAction; { NSCollectionView *_collectionView; // weak BOOL _valid; + NSMutableDictionary *_itemsToAttributes; Class _layoutAttributesClass; Class _invalidationContextClass; diff --git a/Source/NSCollectionView.m b/Source/NSCollectionView.m index 4e6a8c9ec..08c42e359 100644 --- a/Source/NSCollectionView.m +++ b/Source/NSCollectionView.m @@ -130,8 +130,11 @@ static NSString *placeholderItem = nil; -(void) _initDefaults { + _itemSize = NSMakeSize(0, 0); + _tileWidth = -1.0; _draggingSourceOperationMaskForLocal = NSDragOperationGeneric | NSDragOperationMove | NSDragOperationCopy; _draggingSourceOperationMaskForRemote = NSDragOperationGeneric | NSDragOperationMove | NSDragOperationCopy; + [self _resetItemSize]; _content = [[NSArray alloc] init]; _items = [[NSMutableArray alloc] init]; @@ -145,6 +148,7 @@ static NSString *placeholderItem = nil; _indexPathsForVisibleItems = [[NSMutableSet alloc] init]; _visibleSupplementaryViews = [[NSMutableDictionary alloc] init]; _indexPathsForSupplementaryElementsOfKind = [[NSMutableSet alloc] init]; + _itemsToAttributes = [[NSMutableDictionary alloc] init]; // Registered nib/class _registeredNibs = RETAIN([NSMapTable weakToStrongObjectsMapTable]); @@ -441,7 +445,6 @@ static NSString *placeholderItem = nil; { ASSIGN(_collectionViewLayout, layout); - NSLog(@"layout = %@", layout); [_collectionViewLayout setCollectionView: self]; // weak reference [self reloadData]; } @@ -662,9 +665,7 @@ static NSString *placeholderItem = nil; if (self) { - _itemSize = NSMakeSize(0, 0); - _tileWidth = -1.0; - + [self _initDefaults]; if ([aCoder allowsKeyedCoding]) { if ([aCoder containsValueForKey: NSCollectionViewMinItemSizeKey]) @@ -720,7 +721,6 @@ static NSString *placeholderItem = nil; [self setCollectionViewLayout: [aCoder decodeObject]]; } } - [self _initDefaults]; return self; } @@ -1405,6 +1405,9 @@ static NSString *placeholderItem = nil; [v setFrame: frame]; [v setHidden: hidden]; [v setAlphaValue: alpha]; + + [_itemsToAttributes setObject: attrs + forKey: item]; // NSLog(@"v = %@, a = %@, l = %@", v, attrs, _collectionViewLayout); [self addSubview: v]; diff --git a/Source/NSCollectionViewFlowLayout.m b/Source/NSCollectionViewFlowLayout.m index 5ad97dd09..b62c09045 100644 --- a/Source/NSCollectionViewFlowLayout.m +++ b/Source/NSCollectionViewFlowLayout.m @@ -464,7 +464,7 @@ [attrs setSize: sz]; [attrs setHidden: NO]; [attrs setAlpha: 1.0]; - + return attrs; } diff --git a/Source/NSCollectionViewLayout.m b/Source/NSCollectionViewLayout.m index e095bd2e7..b2d030010 100644 --- a/Source/NSCollectionViewLayout.m +++ b/Source/NSCollectionViewLayout.m @@ -27,21 +27,14 @@ #import "GSFastEnumeration.h" -@interface NSCollectionViewItem (__NSCollectionViewLayout__) -- (NSCollectionViewLayoutAttributes *) attrs; +@interface NSCollectionView (__NSCollectionViewLayout__) +- (NSDictionary *) itemsToAttributes; @end -@implementation NSCollectionViewItem (__NSCollectionViewLayout__) -- (NSCollectionViewLayoutAttributes *) attrs +@implementation NSCollectionView (__NSCollectionViewLayout__) +- (NSDictionary *) itemsToAttributes { - NSCollectionViewLayoutAttributes *attrs = AUTORELEASE([[NSCollectionViewLayoutAttributes alloc] init]); - - [attrs setFrame: [[self view] frame]]; - [attrs setSize: [[self view] frame].size]; - [attrs setAlpha: [[self view] alphaValue]]; - [attrs setHidden: [[self view] isHidden]]; - - return attrs; + return _itemsToAttributes; } @end @@ -252,6 +245,11 @@ @implementation NSCollectionViewLayout // Initializers +- (void) _initDefaults +{ + _itemsToAttributes = [[NSMutableDictionary alloc] init]; +} + - (void)invalidateLayout { _valid = NO; @@ -292,6 +290,7 @@ self = [super init]; if (self != nil) { + [self _initDefaults]; } return self; } @@ -310,6 +309,7 @@ { NSMutableArray *result = [NSMutableArray array]; NSArray *items = [_collectionView visibleItems]; + NSDictionary *itemsToAttributes = [_collectionView itemsToAttributes]; FOR_IN(NSCollectionViewItem*, i, items) { @@ -319,7 +319,7 @@ if (intersects) { - NSCollectionViewLayoutAttributes *a = [i attrs]; + NSCollectionViewLayoutAttributes *a = [itemsToAttributes objectForKey: i]; [result addObject: a]; // add item since it intersects } }