Cocoa/ListView: vsList supported

This commit is contained in:
rich2014 2024-07-18 20:45:43 +08:00
parent 0e9c598529
commit 061384d7fe
2 changed files with 82 additions and 1 deletions

View File

@ -79,6 +79,12 @@ const
NSCollectionViewScrollPositionNearestVerticalEdge: NSUInteger = 1 shl 8;
NSCollectionViewScrollPositionNearestHorizontalEdge: NSUInteger = 1 shl 9;
type
NSCollectionViewScrollDirection = NSInteger; { available in 10_11 }
const
NSCollectionViewScrollDirectionVertical: NSInteger = 0;
NSCollectionViewScrollDirectionHorizontal: NSInteger = 1;
type
NSUserInterfaceItemIdentifier = NSString; { available in 10_12 }
NSCollectionViewSupplementaryElementKind = NSString; { available in 10_11 }
@ -95,6 +101,10 @@ type
function itemSize: NSSize; message 'itemSize'; { available in 10_11 }
procedure setItemSize( newValue:NSSize );
message 'setItemSize:'; { available in 10_11 }
function scrollDirection: NSCollectionViewScrollDirection;
message 'scrollDirection'; { available in 10_11 }
procedure setScrollDirection( newValue: NSCollectionViewScrollDirection );
message 'setScrollDirection:'; { available in 10_11 }
end;
NSCollectionViewGridLayout = objcclass external (NSCollectionViewLayout)

View File

@ -146,6 +146,14 @@ type
procedure onAdjustTextEditorRect( var aFrame: NSRect ); override;
end;
{ TCocoaListView_CollectionView_ListHandler }
TCocoaListView_CollectionView_ListHandler = class(TCocoaListView_CollectionView_StyleHandler)
procedure onInit; override;
procedure onUpdateItemValue(indexPath: NSIndexPath; cocoaItem: NSCollectionViewItem); override;
procedure onUpdateItemSize( baseSize: NSSize ); override;
procedure onUpdateItemLayout(item: NSCollectionViewItem); override;
procedure onAdjustTextEditorRect( var aFrame: NSRect ); override;
end;
function AllocCocoaCollectionView( style: TViewStyle ): TCocoaCollectionView;
var
@ -159,7 +167,7 @@ begin
vsSmallIcon:
styleHandler:= TCocoaListView_CollectionView_SmallIconHandler.Create( Result );
vsList:
styleHandler:= TCocoaListView_CollectionView_LargeIconHandler.Create( Result );
styleHandler:= TCocoaListView_CollectionView_ListHandler.Create( Result );
end;
Result.styleHandler:= styleHandler;
@ -359,6 +367,69 @@ begin
aFrame.size.height:= aFrame.size.height + 8;
end;
{ TCocoaListView_CollectionView_ListHandler }
procedure TCocoaListView_CollectionView_ListHandler.onInit;
var
layout: NSCollectionViewFlowLayout;
minSize: NSSize;
begin
layout:= NSCollectionViewFlowLayout(_collectionView.collectionViewLayout);
minSize.width:= 146;
minSize.height:= 24;
layout.setItemSize( minSize );
layout.setMinimumInteritemSpacing( 0 );
layout.setMinimumLineSpacing( 10 );
layout.setScrollDirection( NSCollectionViewScrollDirectionHorizontal );
end;
procedure TCocoaListView_CollectionView_ListHandler.onUpdateItemValue(
indexPath: NSIndexPath; cocoaItem: NSCollectionViewItem);
var
cv: TCocoaCollectionView;
cocoaImage: NSImage;
lclImageIndex: Integer;
lclText: String;
begin
cv:= TCocoaCollectionView(_collectionView);
cv.callback.GetItemTextAt( indexPath.item, 0, lclText );
cocoaItem.textField.setStringValue( StrToNSString(lclText) );
end;
procedure TCocoaListView_CollectionView_ListHandler.onUpdateItemSize(
baseSize: NSSize);
var
cv: TCocoaCollectionView;
begin
cv:= TCocoaCollectionView(_collectionView);
cv.itemSize.Width:= 146;
cv.itemSize.Height:= 24;
end;
procedure TCocoaListView_CollectionView_ListHandler.onUpdateItemLayout(
item: NSCollectionViewItem);
var
cv: TCocoaCollectionView;
aFrame: NSRect;
begin
cv:= TCocoaCollectionView(_collectionView);
aFrame.origin.x:= 4;
aFrame.origin.y:= (cv.itemSize.Height - 15) / 2;
aFrame.size.width:= 138;
aFrame.size.height:= 15;
item.textField.setFrame( aFrame );
end;
procedure TCocoaListView_CollectionView_ListHandler.onAdjustTextEditorRect(
var aFrame: NSRect);
begin
aFrame.origin.x:= aFrame.origin.x - 3;
aFrame.origin.y:= aFrame.origin.y - 3;
aFrame.size.width:= aFrame.size.width + 6;
aFrame.size.height:= aFrame.size.height + 6;
end;
{ TCocoaCollectionItem }
procedure TCocoaCollectionItem.loadView;