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

Reply via email to