[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Move video library view setup to VLCLibraryVideoDataSource, matching...
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Sat Nov 5 09:10:23 UTC 2022
Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC
Commits:
856e27a4 by Claudio Cambra at 2022-11-05T08:46:48+00:00
macosx: Move video library view setup to VLCLibraryVideoDataSource, matching VLCLibraryAudioDataSource
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
f554b28f by Claudio Cambra at 2022-11-05T08:46:48+00:00
macosx: Use VLCLibraryCollectionViewFlowLayout in video library
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
d136a63e by Claudio Cambra at 2022-11-05T08:46:48+00:00
macosx: Add supplementary detail view for video library view
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
4 changed files:
- modules/gui/macosx/library/VLCLibraryCollectionViewFlowLayout.m
- modules/gui/macosx/library/VLCLibraryVideoDataSource.h
- modules/gui/macosx/library/VLCLibraryVideoDataSource.m
- modules/gui/macosx/library/VLCLibraryWindow.m
Changes:
=====================================
modules/gui/macosx/library/VLCLibraryCollectionViewFlowLayout.m
=====================================
@@ -23,6 +23,7 @@
#import "VLCLibraryCollectionViewFlowLayout.h"
#import "VLCLibraryAudioDataSource.h"
+#import "VLCLibraryVideoDataSource.h"
#import "VLCLibraryCollectionViewAlbumSupplementaryDetailView.h"
#import "VLCLibraryCollectionViewAudioGroupSupplementaryDetailView.h"
#import "VLCLibraryCollectionViewMediaItemSupplementaryDetailView.h"
@@ -176,6 +177,9 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
[layoutAttributesArray addObject:[self layoutAttributesForSupplementaryViewOfKind:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind atIndexPath:self.selectedIndexPath]];
break;
}
+ } else if([self.collectionView.dataSource isKindOfClass:[VLCLibraryVideoDataSource class]]) {
+ VLCLibraryVideoDataSource *videoDataSource = (VLCLibraryVideoDataSource *)self.collectionView.dataSource;
+ [layoutAttributesArray addObject:[self layoutAttributesForSupplementaryViewOfKind:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind atIndexPath:self.selectedIndexPath]];
}
return layoutAttributesArray;
=====================================
modules/gui/macosx/library/VLCLibraryVideoDataSource.h
=====================================
@@ -36,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, assign) VLCLibraryModel *libraryModel;
@property (readwrite, assign) NSCollectionView *libraryMediaCollectionView;
+- (void)setupAppearance;
- (void)reloadData;
@end
=====================================
modules/gui/macosx/library/VLCLibraryVideoDataSource.m
=====================================
@@ -22,7 +22,9 @@
#import "VLCLibraryVideoDataSource.h"
+#import "library/VLCLibraryCollectionViewFlowLayout.h"
#import "library/VLCLibraryCollectionViewItem.h"
+#import "library/VLCLibraryCollectionViewMediaItemSupplementaryDetailView.h"
#import "library/VLCLibraryCollectionViewSupplementaryElementView.h"
#import "library/VLCLibraryModel.h"
#import "library/VLCLibraryDataTypes.h"
@@ -34,6 +36,7 @@
{
NSArray *_recentsArray;
NSArray *_libraryArray;
+ VLCLibraryCollectionViewFlowLayout *_collectionViewFlowLayout;
}
@end
@@ -68,6 +71,8 @@
return;
}
+ [_collectionViewFlowLayout resetLayout];
+
dispatch_async(dispatch_get_main_queue(), ^{
_recentsArray = [_libraryModel listOfRecentMedia];
_libraryArray = [_libraryModel listOfVideoMedia];
@@ -75,6 +80,26 @@
});
}
+- (void)setupAppearance
+{
+ _libraryMediaCollectionView.dataSource = self;
+ _libraryMediaCollectionView.delegate = self;
+
+ [_libraryMediaCollectionView registerClass:[VLCLibraryCollectionViewItem class] forItemWithIdentifier:VLCLibraryCellIdentifier];
+ [_libraryMediaCollectionView registerClass:[VLCLibraryCollectionViewSupplementaryElementView class]
+ forSupplementaryViewOfKind:NSCollectionElementKindSectionHeader
+ withIdentifier:VLCLibrarySupplementaryElementViewIdentifier];
+
+ NSNib *mediaItemSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewMediaItemSupplementaryDetailView" bundle:nil];
+ [_libraryMediaCollectionView registerNib:mediaItemSupplementaryDetailView
+ forSupplementaryViewOfKind:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind
+ withIdentifier:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewIdentifier];
+
+ _collectionViewFlowLayout = [[VLCLibraryCollectionViewFlowLayout alloc] init];
+ _collectionViewFlowLayout.headerReferenceSize = [VLCLibraryCollectionViewSupplementaryElementView defaultHeaderSize];
+ _libraryMediaCollectionView.collectionViewLayout = _collectionViewFlowLayout;
+}
+
- (NSInteger)collectionView:(NSCollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section
{
@@ -114,25 +139,65 @@
return viewItem;
}
+- (void)collectionView:(NSCollectionView *)collectionView didSelectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
+{
+ NSIndexPath *indexPath = indexPaths.anyObject;
+ if (!indexPath) {
+ return;
+ }
+
+ [_collectionViewFlowLayout expandDetailSectionAtIndex:indexPath];
+}
+
+- (void)collectionView:(NSCollectionView *)collectionView didDeselectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
+{
+ NSIndexPath *indexPath = indexPaths.anyObject;
+ if (!indexPath) {
+ return;
+ }
+
+ [_collectionViewFlowLayout collapseDetailSectionAtIndex:indexPath];
+}
+
- (NSView *)collectionView:(NSCollectionView *)collectionView
viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
atIndexPath:(NSIndexPath *)indexPath
{
- VLCLibraryCollectionViewSupplementaryElementView *view = [collectionView makeSupplementaryViewOfKind:kind
- withIdentifier:VLCLibrarySupplementaryElementViewIdentifier
- forIndexPath:indexPath];
-
- switch(indexPath.section) {
- case VLCVideoLibraryRecentsSection:
- view.stringValue = _NS("Recent");
- break;
- case VLCVideoLibraryLibrarySection:
- default:
- view.stringValue = _NS("Library");
- break;
+ if([kind isEqualToString:NSCollectionElementKindSectionHeader]) {
+ VLCLibraryCollectionViewSupplementaryElementView *sectionHeadingView = [collectionView makeSupplementaryViewOfKind:kind
+ withIdentifier:VLCLibrarySupplementaryElementViewIdentifier
+ forIndexPath:indexPath];
+
+ switch(indexPath.section) {
+ case VLCVideoLibraryRecentsSection:
+ sectionHeadingView.stringValue = _NS("Recent");
+ break;
+ case VLCVideoLibraryLibrarySection:
+ default:
+ sectionHeadingView.stringValue = _NS("Library");
+ break;
+ }
+
+ return sectionHeadingView;
+
+ } else if ([kind isEqualToString:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind]) {
+ VLCLibraryCollectionViewMediaItemSupplementaryDetailView* mediaItemSupplementaryDetailView = [collectionView makeSupplementaryViewOfKind:kind withIdentifier:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind forIndexPath:indexPath];
+
+ switch(indexPath.section) {
+ case VLCVideoLibraryRecentsSection:
+ mediaItemSupplementaryDetailView.representedMediaItem = _recentsArray[indexPath.item];
+ break;
+ case VLCVideoLibraryLibrarySection:
+ default:
+ mediaItemSupplementaryDetailView.representedMediaItem = _libraryArray[indexPath.item];
+ break;
+ }
+
+ mediaItemSupplementaryDetailView.selectedItem = [collectionView itemAtIndexPath:indexPath];
+ return mediaItemSupplementaryDetailView;
}
- return view;
+ return nil;
}
#pragma mark - drag and drop support
=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -292,14 +292,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
_libraryVideoDataSource = [[VLCLibraryVideoDataSource alloc] init];
_libraryVideoDataSource.libraryModel = mainInstance.libraryController.libraryModel;
_libraryVideoDataSource.libraryMediaCollectionView = _videoLibraryCollectionView;
- _videoLibraryCollectionView.dataSource = _libraryVideoDataSource;
- _videoLibraryCollectionView.delegate = _libraryVideoDataSource;
- [_videoLibraryCollectionView registerClass:[VLCLibraryCollectionViewItem class] forItemWithIdentifier:VLCLibraryCellIdentifier];
- [_videoLibraryCollectionView registerClass:[VLCLibraryCollectionViewSupplementaryElementView class]
- forSupplementaryViewOfKind:NSCollectionElementKindSectionHeader
- withIdentifier:VLCLibrarySupplementaryElementViewIdentifier];
- [(NSCollectionViewFlowLayout *)_videoLibraryCollectionView.collectionViewLayout setHeaderReferenceSize:[VLCLibraryCollectionViewSupplementaryElementView defaultHeaderSize]];
- [_libraryVideoDataSource reloadData];
+ [_libraryVideoDataSource setupAppearance];
_libraryAudioDataSource = [[VLCLibraryAudioDataSource alloc] init];
_libraryAudioDataSource.libraryModel = mainInstance.libraryController.libraryModel;
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/244a76a900d5877857bdd85bc566a21307ae0caf...d136a63eac85315937fd6437b787bcba50e1962f
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/244a76a900d5877857bdd85bc566a21307ae0caf...d136a63eac85315937fd6437b787bcba50e1962f
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list