Add code to return the item properly from layoutAttributesForElementsInRect:, add missing NSCopying declaration to NSCollectionViewItem.h, minor cleanup in NSCollectionViewCompositionalLayout

This commit is contained in:
Gregory John Casamento 2022-07-19 09:08:13 -04:00
parent f3672c31e9
commit 5108348ca6
7 changed files with 28 additions and 28 deletions

View file

@ -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;

View file

@ -44,4 +44,3 @@ extern "C" {
#endif /* GS_API_MACOSX */
#endif /* _NSCollectionViewCompositionalLayout_h_GNUSTEP_GUI_INCLUDE */

View file

@ -42,7 +42,7 @@
APPKIT_EXPORT_CLASS
@interface NSCollectionViewItem : NSViewController
@interface NSCollectionViewItem : NSViewController <NSCopying>
{
IBOutlet NSTextField *textField;
IBOutlet NSImageView *imageView;

View file

@ -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;

View file

@ -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];

View file

@ -464,7 +464,7 @@
[attrs setSize: sz];
[attrs setHidden: NO];
[attrs setAlpha: 1.0];
return attrs;
}

View file

@ -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
}
}