Rémi Denis-Courmont pushed to branch master at VideoLAN / VLC
Commits:
db807b51 by Claudio Cambra at 2022-08-02T16:30:16+00:00
macosx: Unify the video library view into one collection view with sections
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
5 changed files:
- modules/gui/macosx/UI/VLCLibraryWindow.xib
- modules/gui/macosx/library/VLCLibraryVideoDataSource.h
- modules/gui/macosx/library/VLCLibraryVideoDataSource.m
- modules/gui/macosx/library/VLCLibraryWindow.h
- modules/gui/macosx/library/VLCLibraryWindow.m
Changes:
=====================================
modules/gui/macosx/UI/VLCLibraryWindow.xib
=====================================
@@ -699,7 +699,6 @@
<outlet property="playlistDragDropView"
destination="VFI-oW-dMZ" id="gVc-mu-f8T"/>
<outlet property="playlistTableView" destination="Fr1-af-8gb"
id="yaB-Ab-jrx"/>
<outlet property="playlistView" destination="dus-WQ-AmE"
id="fTF-HP-Chb"/>
- <outlet property="recentVideoLibraryCollectionView"
destination="hnE-Hj-MZo" id="Fko-5v-1bC"/>
<outlet property="repeatPlaylistButton"
destination="8zF-Wo-H79" id="6bH-HF-arx"/>
<outlet property="segmentedTitleControl"
destination="W1M-0o-qYG" id="Gw1-T6-78k"/>
<outlet property="segmentedTitleControlToolbarItem"
destination="KnW-Lr-R1d" id="Wg1-Y2-34a"/>
@@ -707,7 +706,8 @@
<outlet property="upNextLabel" destination="TET-5r-zHx"
id="3oI-LK-NDP"/>
<outlet property="upNextSeparator" destination="qmL-Ar-cj1"
id="GRX-ZE-2UG"/>
<outlet property="videoLibraryCollectionView"
destination="B8x-e8-7zp" id="u1I-gn-IU1"/>
- <outlet property="videoLibraryStackView"
destination="vak-Gp-ljo" id="ulu-pc-ctF"/>
+ <outlet property="videoLibraryView" destination="vak-Gp-ljo"
id="ulu-pc-ctF"/>
+ <outlet property="videoLibraryScrollView"
destination="nXS-11-7iK" id="v1d-30-scr"/>
</connections>
<point key="canvasLocation" x="-609" y="325"/>
</window>
@@ -733,48 +733,18 @@
<outlet property="volumeUpButton" destination="75c-FF-mgb"
id="xRz-F4-n0Z"/>
</connections>
</customObject>
- <stackView distribution="fill" orientation="vertical"
alignment="leading" spacing="0.0"
horizontalStackHuggingPriority="249.99998474121094"
verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES"
id="vak-Gp-ljo">
- <rect key="frame" x="0.0" y="0.0" width="242" height="808"/>
+ <customView id="vak-Gp-ljo">
+ <rect key="frame" x="0.0" y="0.0" width="869" height="808"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES"
flexibleMinY="YES"/>
<subviews>
- <scrollView wantsLayer="YES" borderType="none"
autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10"
verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO"
usesPredominantAxisScrolling="NO"
translatesAutoresizingMaskIntoConstraints="NO" id="HmU-mL-Tjk">
- <rect key="frame" x="0.0" y="498" width="242"
height="310"/>
- <clipView key="contentView" copiesOnScroll="NO"
id="J5s-sy-il6">
- <rect key="frame" x="0.0" y="0.0" width="242"
height="310"/>
- <autoresizingMask key="autoresizingMask"
widthSizable="YES" heightSizable="YES"/>
- <subviews>
- <collectionView selectable="YES" id="hnE-Hj-MZo">
- <rect key="frame" x="0.0" y="0.0" width="242"
height="310"/>
- <autoresizingMask key="autoresizingMask"
heightSizable="YES"/>
- <collectionViewFlowLayout
key="collectionViewLayout" minimumInteritemSpacing="20" minimumLineSpacing="20"
scrollDirection="horizontal" id="N2a-bI-WQc">
- <size key="itemSize" width="354"
height="270"/>
- <edgeInsets key="sectionInset" left="20"
right="20" top="20" bottom="20"/>
- </collectionViewFlowLayout>
- <color key="primaryBackgroundColor"
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- <color key="secondaryBackgroundColor"
name="controlAlternatingRowColor" catalog="System" colorSpace="catalog"/>
- </collectionView>
- </subviews>
- </clipView>
- <constraints>
- <constraint firstAttribute="height" constant="310"
id="Htb-Ql-chZ"/>
- </constraints>
- <scroller key="horizontalScroller" hidden="YES"
wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="f2z-AL-CFF">
- <rect key="frame" x="-100" y="-100" width="233"
height="15"/>
- <autoresizingMask key="autoresizingMask"/>
- </scroller>
- <scroller key="verticalScroller" hidden="YES"
wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="psR-Xx-0YH">
- <rect key="frame" x="-100" y="-100" width="16"
height="218"/>
- <autoresizingMask key="autoresizingMask"/>
- </scroller>
- </scrollView>
<scrollView wantsLayer="YES" borderType="none"
autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10"
verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO"
usesPredominantAxisScrolling="NO"
translatesAutoresizingMaskIntoConstraints="NO" id="nXS-11-7iK">
- <rect key="frame" x="0.0" y="0.0" width="242"
height="498"/>
+ <rect key="frame" x="0.0" y="0.0" width="869"
height="808"/>
<clipView key="contentView" copiesOnScroll="NO"
id="OKa-dt-1yY">
- <rect key="frame" x="0.0" y="0.0" width="242"
height="498"/>
+ <rect key="frame" x="0.0" y="0.0" width="869"
height="808"/>
<autoresizingMask key="autoresizingMask"
widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView selectable="YES" id="B8x-e8-7zp">
- <rect key="frame" x="0.0" y="0.0" width="242"
height="498"/>
+ <rect key="frame" x="0.0" y="0.0" width="869"
height="808"/>
<autoresizingMask key="autoresizingMask"
widthSizable="YES"/>
<collectionViewFlowLayout
key="collectionViewLayout" minimumInteritemSpacing="20" minimumLineSpacing="20"
id="Rag-cM-k1g">
<size key="itemSize" width="256"
height="214"/>
@@ -796,24 +766,13 @@
</scrollView>
</subviews>
<constraints>
- <constraint firstItem="HmU-mL-Tjk" firstAttribute="leading"
secondItem="vak-Gp-ljo" secondAttribute="leading" id="5co-en-4Uf"/>
- <constraint firstAttribute="trailing" secondItem="HmU-mL-Tjk"
secondAttribute="trailing" id="9Wn-DC-CFC"/>
+ <constraint firstItem="nXS-11-7iK" firstAttribute="top"
secondItem="vak-Gp-ljo" secondAttribute="top" id="KNa-C4-CIY"/>
<constraint firstItem="nXS-11-7iK" firstAttribute="leading"
secondItem="vak-Gp-ljo" secondAttribute="leading" id="LP8-Hf-WCx"/>
- <constraint firstItem="HmU-mL-Tjk" firstAttribute="top"
secondItem="vak-Gp-ljo" secondAttribute="top" id="XE0-gE-X8v"/>
<constraint firstAttribute="trailing" secondItem="nXS-11-7iK"
secondAttribute="trailing" id="kmc-KU-iRY"/>
<constraint firstAttribute="bottom" secondItem="nXS-11-7iK"
secondAttribute="bottom" id="tpH-Q7-TH4"/>
- <constraint firstItem="nXS-11-7iK" firstAttribute="top"
secondItem="HmU-mL-Tjk" secondAttribute="bottom" id="w6G-g6-ZtO"/>
</constraints>
- <visibilityPriorities>
- <integer value="1000"/>
- <integer value="1000"/>
- </visibilityPriorities>
- <customSpacing>
- <real value="3.4028234663852886e+38"/>
- <real value="3.4028234663852886e+38"/>
- </customSpacing>
- <point key="canvasLocation" x="585" y="10"/>
- </stackView>
+ <point key="canvasLocation" x="748.5" y="10"/>
+ </customView>
<customView id="eHd-Q9-F8D">
<rect key="frame" x="0.0" y="0.0" width="528" height="411"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES"
flexibleMinY="YES"/>
=====================================
modules/gui/macosx/library/VLCLibraryVideoDataSource.h
=====================================
@@ -22,6 +22,11 @@
#import <Cocoa/Cocoa.h>
+typedef NS_ENUM(NSUInteger, VLCVideoLibrarySection) {
+ VLCVideoLibraryRecentsSection = 0,
+ VLCVideoLibraryLibrarySection,
+};
+
NS_ASSUME_NONNULL_BEGIN
@class VLCLibraryModel;
@@ -29,7 +34,6 @@ NS_ASSUME_NONNULL_BEGIN
@interface VLCLibraryVideoDataSource : NSObject <NSCollectionViewDataSource,
NSCollectionViewDelegate>
@property (readwrite, assign) VLCLibraryModel *libraryModel;
-@property (readwrite, assign) NSCollectionView *recentMediaCollectionView;
@property (readwrite, assign) NSCollectionView *libraryMediaCollectionView;
@end
=====================================
modules/gui/macosx/library/VLCLibraryVideoDataSource.m
=====================================
@@ -38,16 +38,19 @@
if (!_libraryModel) {
return 0;
}
- if (collectionView == self.recentMediaCollectionView) {
- return [_libraryModel numberOfRecentMedia];
- }
- return [_libraryModel numberOfVideoMedia];
+ switch(section) {
+ case VLCVideoLibraryRecentsSection:
+ return [_libraryModel numberOfRecentMedia];
+ case VLCVideoLibraryLibrarySection:
+ default:
+ return [_libraryModel numberOfVideoMedia];
+ }
}
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView
*)collectionView
{
- return 1;
+ return 2;
}
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView
@@ -56,10 +59,14 @@
VLCLibraryCollectionViewItem *viewItem = [collectionView
makeItemWithIdentifier:VLCLibraryCellIdentifier forIndexPath:indexPath];
NSArray *mediaArray;
- if (collectionView == self.recentMediaCollectionView) {
- mediaArray = [_libraryModel listOfRecentMedia];
- } else {
- mediaArray = [_libraryModel listOfVideoMedia];
+ switch(indexPath.section) {
+ case VLCVideoLibraryRecentsSection:
+ mediaArray = [_libraryModel listOfRecentMedia];
+ break;
+ case VLCVideoLibraryLibrarySection:
+ default:
+ mediaArray = [_libraryModel listOfVideoMedia];
+ break;
}
viewItem.representedItem = mediaArray[indexPath.item];
@@ -74,11 +81,17 @@
viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
VLCLibraryCollectionViewSupplementaryElementView *view = [collectionView
makeSupplementaryViewOfKind:kind
withIdentifier:VLCLibrarySupplementaryElementViewIdentifier
forIndexPath:indexPath];
- if (collectionView == self.recentMediaCollectionView) {
- view.stringValue = _NS("Recent");
- } else {
- view.stringValue = _NS("Library");
+
+ switch(indexPath.section) {
+ case VLCVideoLibraryRecentsSection:
+ view.stringValue = _NS("Recent");
+ break;
+ case VLCVideoLibraryLibrarySection:
+ default:
+ view.stringValue = _NS("Library");
+ break;
}
+
return view;
}
@@ -95,12 +108,7 @@ canDragItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
writeItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
toPasteboard:(NSPasteboard *)pasteboard
{
- NSArray *mediaArray;
- if (collectionView == self.recentMediaCollectionView) {
- mediaArray = [_libraryModel listOfRecentMedia];
- } else {
- mediaArray = [_libraryModel listOfVideoMedia];
- }
+ NSArray *mediaArray = [_libraryModel listOfVideoMedia];
NSUInteger numberOfIndexPaths = indexPaths.count;
NSMutableArray *encodedLibraryItemsArray = [NSMutableArray
arrayWithCapacity:numberOfIndexPaths];
=====================================
modules/gui/macosx/library/VLCLibraryWindow.h
=====================================
@@ -49,10 +49,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, weak) IBOutlet NSToolbarItem
*segmentedTitleControlToolbarItem;
@property (readwrite, weak) IBOutlet NSSegmentedControl
*gridVsListSegmentedControl;
@property (readwrite, weak) IBOutlet NSSplitView *mainSplitView;
-@property (readwrite, weak) IBOutlet NSStackView *videoLibraryStackView;
+@property (readwrite, weak) IBOutlet NSView *videoLibraryView;
+@property (readwrite, weak) IBOutlet NSScrollView *videoLibraryScrollView;
@property (readwrite, strong) IBOutlet NSView *playlistView;
@property (readwrite, weak) IBOutlet NSCollectionView
*videoLibraryCollectionView;
-@property (readwrite, weak) IBOutlet NSCollectionView
*recentVideoLibraryCollectionView;
@property (readwrite, weak) IBOutlet NSCollectionView
*mediaSourceCollectionView;
@property (readwrite, weak) IBOutlet NSView *audioLibraryView;
@property (readwrite, weak) IBOutlet NSSplitView *audioLibrarySplitView;
=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -280,7 +280,6 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
_libraryVideoDataSource = [[VLCLibraryVideoDataSource alloc] init];
_libraryVideoDataSource.libraryModel =
mainInstance.libraryController.libraryModel;
- _libraryVideoDataSource.recentMediaCollectionView =
_recentVideoLibraryCollectionView;
_libraryVideoDataSource.libraryMediaCollectionView =
_videoLibraryCollectionView;
_videoLibraryCollectionView.dataSource = _libraryVideoDataSource;
_videoLibraryCollectionView.delegate = _libraryVideoDataSource;
@@ -289,14 +288,6 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
forSupplementaryViewOfKind:NSCollectionElementKindSectionHeader
withIdentifier:VLCLibrarySupplementaryElementViewIdentifier];
[(NSCollectionViewFlowLayout
*)_videoLibraryCollectionView.collectionViewLayout
setHeaderReferenceSize:[VLCLibraryCollectionViewSupplementaryElementView
defaultHeaderSize]];
- _recentVideoLibraryCollectionView.dataSource = _libraryVideoDataSource;
- _recentVideoLibraryCollectionView.delegate = _libraryVideoDataSource;
- [_recentVideoLibraryCollectionView
registerClass:[VLCLibraryCollectionViewItem class]
forItemWithIdentifier:VLCLibraryCellIdentifier];
- [_recentVideoLibraryCollectionView
registerClass:[VLCLibraryCollectionViewSupplementaryElementView class]
- forSupplementaryViewOfKind:NSCollectionElementKindSectionHeader
-
withIdentifier:VLCLibrarySupplementaryElementViewIdentifier];
- [(NSCollectionViewFlowLayout
*)_recentVideoLibraryCollectionView.collectionViewLayout
setHeaderReferenceSize:[VLCLibraryCollectionViewSupplementaryElementView
defaultHeaderSize]];
- [_recentVideoLibraryCollectionView
setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO];
_libraryAudioDataSource = [[VLCLibraryAudioDataSource alloc] init];
_libraryAudioDataSource.libraryModel =
mainInstance.libraryController.libraryModel;
@@ -348,6 +339,10 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
const CGFloat scrollViewRightInset = 0.;
const CGFloat scrollViewBottomInset = 16.;
const CGFloat scrollViewLeftInset = 16.;
+ const NSEdgeInsets defaultInsets = NSEdgeInsetsMake(scrollViewTopInset,
+ scrollViewLeftInset,
+ scrollViewBottomInset,
+ scrollViewRightInset);
_audioCollectionViewScrollView.automaticallyAdjustsContentInsets = NO;
_audioCollectionViewScrollView.contentInsets =
NSEdgeInsetsMake(audioCollectionScrollViewTopInset,
@@ -355,11 +350,11 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
scrollViewBottomInset,
scrollViewRightInset);
+ _videoLibraryScrollView.automaticallyAdjustsContentInsets = NO;
+ _videoLibraryScrollView.contentInsets = defaultInsets;
+
_mediaSourceCollectionViewScrollView.automaticallyAdjustsContentInsets =
NO;
- _mediaSourceCollectionViewScrollView.contentInsets =
NSEdgeInsetsMake(scrollViewTopInset,
-
scrollViewLeftInset,
-
scrollViewBottomInset,
-
scrollViewRightInset);
+ _mediaSourceCollectionViewScrollView.contentInsets = defaultInsets;
const CGFloat collectionItemSpacing = 20.;
const NSEdgeInsets collectionViewSectionInset = NSEdgeInsetsMake(20., 20.,
20., 20.);
@@ -370,6 +365,12 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
audioLibraryCollectionViewLayout.minimumInteritemSpacing =
collectionItemSpacing;
audioLibraryCollectionViewLayout.sectionInset = collectionViewSectionInset;
+ NSCollectionViewFlowLayout *videoLibraryCollectionViewLayout =
_videoLibraryCollectionView.collectionViewLayout;
+ videoLibraryCollectionViewLayout.itemSize = CGSizeMake(214., 260.);
+ videoLibraryCollectionViewLayout.minimumLineSpacing =
collectionItemSpacing;
+ videoLibraryCollectionViewLayout.minimumInteritemSpacing =
collectionItemSpacing;
+ videoLibraryCollectionViewLayout.sectionInset = collectionViewSectionInset;
+
NSCollectionViewFlowLayout *mediaSourceCollectionViewLayout =
_mediaSourceCollectionView.collectionViewLayout;
mediaSourceCollectionViewLayout.itemSize = CGSizeMake(214., 246.);
mediaSourceCollectionViewLayout.minimumLineSpacing = collectionItemSpacing;
@@ -544,15 +545,13 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
_placeholderLabel.stringValue = _NS("Your favorite videos will appear
here.\nGo to the Browse section to add videos you love.");
}
else {
- _videoLibraryStackView.translatesAutoresizingMaskIntoConstraints = NO;
- [_libraryTargetView addSubview:_videoLibraryStackView];
- NSDictionary *dict =
NSDictionaryOfVariableBindings(_videoLibraryStackView);
- [_libraryTargetView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|[_videoLibraryStackView(>=572.)]|" options:0
metrics:0 views:dict]];
- [_libraryTargetView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|[_videoLibraryStackView(>=444.)]|" options:0
metrics:0 views:dict]];
-
+ _videoLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
+ [_libraryTargetView addSubview:_videoLibraryView];
+ NSDictionary *dict = NSDictionaryOfVariableBindings(_videoLibraryView);
+ [_libraryTargetView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|[_videoLibraryView(>=572.)]|" options:0
metrics:0 views:dict]];
+ [_libraryTargetView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|[_videoLibraryView(>=444.)]|" options:0
metrics:0 views:dict]];
[_videoLibraryCollectionView reloadData];
- [_recentVideoLibraryCollectionView reloadData];
}
_librarySortButton.hidden = NO;
@@ -618,8 +617,8 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
- (void)showMediaSourceAppearance
{
- if (_videoLibraryStackView.superview != nil) {
- [_videoLibraryStackView removeFromSuperview];
+ if (_videoLibraryView.superview != nil) {
+ [_videoLibraryView removeFromSuperview];
}
if (_audioLibraryView.superview != nil) {
[_audioLibraryView removeFromSuperview];
@@ -810,7 +809,7 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
- (void)enableVideoPlaybackAppearance
{
[_mediaSourceView removeFromSuperviewWithoutNeedingDisplay];
- [_videoLibraryStackView removeFromSuperviewWithoutNeedingDisplay];
+ [_videoLibraryView removeFromSuperviewWithoutNeedingDisplay];
[_audioLibraryView removeFromSuperviewWithoutNeedingDisplay];
[self.videoView setHidden:NO];
@@ -868,9 +867,8 @@ static void addShadow(NSImageView *__unsafe_unretained
imageView)
#pragma mark - library representation and interaction
- (void)updateLibraryRepresentation:(NSNotification *)aNotification
{
- if (_videoLibraryStackView.superview != nil) {
+ if (_videoLibraryView.superview != nil) {
[_videoLibraryCollectionView reloadData];
- [_recentVideoLibraryCollectionView reloadData];
} else if (_audioLibraryView.superview != nil) {
[_libraryAudioDataSource reloadAppearance];
}
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/commit/db807b51249b950813bb25b8f30d7ed153b194ff
--
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/commit/db807b51249b950813bb25b8f30d7ed153b194ff
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits