[vlc-commits] [Git][videolan/vlc][master] 7 commits: macosx: Add VLCLibraryVideoViewController class

Felix Paul Kühne (@fkuehne) gitlab at videolan.org
Tue Jan 3 15:39:30 UTC 2023



Felix Paul Kühne pushed to branch master at VideoLAN / VLC


Commits:
4d9ed749 by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: Add VLCLibraryVideoViewController class

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
269ec734 by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: Grab needed objects from library window in VLCLibraryVideoViewController

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
933387c7 by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: Setup video library view data sources and controllers in VLCLibraryVideoViewController

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
7fdaa4ae by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: USe VLCLibraryVideoViewController for video library setup in VLCLibraryWindow

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
67b8c0ad by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: Move video library placeholder view setup to VLCLibraryVideoViewController

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
d08774e4 by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: Move presentation of video library view into VLCLibraryVideoViewController

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
cbdb999c by Claudio Cambra at 2023-01-03T14:59:29+00:00
macosx: Extract parts of presentVideoView in VLCLibraryVideoViewController into separate methods

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -


8 changed files:

- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- modules/gui/macosx/library/VLCLibraryWindow.h
- modules/gui/macosx/library/VLCLibraryWindow.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioViewController.h
- modules/gui/macosx/library/audio-library/VLCLibraryAudioViewController.m
- + modules/gui/macosx/library/video-library/VLCLibraryVideoViewController.h
- + modules/gui/macosx/library/video-library/VLCLibraryVideoViewController.m


Changes:

=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -93,6 +93,7 @@
 		53628402291147C500640C15 /* VLCBasicView.m in Sources */ = {isa = PBXBuildFile; fileRef = 536283FF291147C500640C15 /* VLCBasicView.m */; };
 		53628403291147C500640C15 /* VLCSubScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53628400291147C500640C15 /* VLCSubScrollView.m */; };
 		536EFBF5295BCB8300F4CB13 /* VLCLibraryUIUnits.m in Sources */ = {isa = PBXBuildFile; fileRef = 536EFBF4295BCB8300F4CB13 /* VLCLibraryUIUnits.m */; };
+		536EFC39295E521600F4CB13 /* VLCLibraryVideoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 536EFC38295E521600F4CB13 /* VLCLibraryVideoViewController.m */; };
 		53B447CA2939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53B447C92939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.m */; };
 		53B447F6293BB47B00857588 /* VLCLibraryVideoCollectionViewContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53B447EC293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerView.m */; };
 		53B447F7293BB47B00857588 /* VLCLibraryVideoCollectionViewContainerViewDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 53B447ED293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerViewDataSource.m */; };
@@ -274,6 +275,8 @@
 		53628401291147C500640C15 /* VLCSubScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCSubScrollView.h; sourceTree = "<group>"; };
 		536EFBF3295BCB8300F4CB13 /* VLCLibraryUIUnits.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryUIUnits.h; sourceTree = "<group>"; };
 		536EFBF4295BCB8300F4CB13 /* VLCLibraryUIUnits.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryUIUnits.m; sourceTree = "<group>"; };
+		536EFC37295E521600F4CB13 /* VLCLibraryVideoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryVideoViewController.h; sourceTree = "<group>"; };
+		536EFC38295E521600F4CB13 /* VLCLibraryVideoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryVideoViewController.m; sourceTree = "<group>"; };
 		53B447C82939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibrarySongsTableViewSongPlayingTableCellView.h; sourceTree = "<group>"; };
 		53B447C92939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibrarySongsTableViewSongPlayingTableCellView.m; sourceTree = "<group>"; };
 		53B447EC293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryVideoCollectionViewContainerView.m; sourceTree = "<group>"; };
@@ -1311,6 +1314,8 @@
 		53B447EB293BB47A00857588 /* video-library */ = {
 			isa = PBXGroup;
 			children = (
+				536EFC37295E521600F4CB13 /* VLCLibraryVideoViewController.h */,
+				536EFC38295E521600F4CB13 /* VLCLibraryVideoViewController.m */,
 				53B447F1293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerView.h */,
 				53B447EC293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerView.m */,
 				53B447F2293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerViewDataSource.h */,
@@ -1846,6 +1851,7 @@
 				1CCC88FE2078A3D500E5626F /* PlaylistAccessoryView.xib in Sources */,
 				1CCC89002078A3D500E5626F /* PopupPanel.xib in Sources */,
 				5317FE04294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m in Sources */,
+				536EFC39295E521600F4CB13 /* VLCLibraryVideoViewController.m in Sources */,
 				53628402291147C500640C15 /* VLCBasicView.m in Sources */,
 				7DFBDCAB2269E77F00B700A5 /* VLCLibraryModel.m in Sources */,
 				1CCC89012078A3D500E5626F /* Preferences.xib in Sources */,


=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -99,6 +99,8 @@ libmacosx_plugin_la_SOURCES = \
 	gui/macosx/library/VLCLibraryWindow.m \
 	gui/macosx/library/VLCLibraryWindowController.h \
 	gui/macosx/library/VLCLibraryWindowController.m \
+	gui/macosx/library/video-library/VLCLibraryVideoViewController.h \
+	gui/macosx/library/video-library/VLCLibraryVideoViewController.m \
 	gui/macosx/library/video-library/VLCLibraryVideoCollectionViewsStackViewController.h \
 	gui/macosx/library/video-library/VLCLibraryVideoCollectionViewsStackViewController.m \
 	gui/macosx/library/video-library/VLCLibraryVideoCollectionViewContainerView.h \


=====================================
modules/gui/macosx/library/VLCLibraryWindow.h
=====================================
@@ -28,8 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
 @class VLCRoundedCornerTextField;
 @class VLCLibraryNavigationStack;
 @class VLCLibraryAudioViewController;
- at class VLCLibraryVideoCollectionViewsStackViewController;
- at class VLCLibraryVideoTableViewDataSource;
+ at class VLCLibraryVideoViewController;
 @class VLCLibrarySortingMenuController;
 @class VLCMediaSourceBaseDataSource;
 @class VLCPlaylistDataSource;
@@ -118,8 +117,7 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
 @property (readwrite) BOOL nonembedded;
 @property (readwrite) VLCLibraryNavigationStack *navigationStack;
 @property (readonly) VLCLibraryAudioViewController *libraryAudioViewController;
- at property (readonly) VLCLibraryVideoTableViewDataSource *libraryVideoTableViewDataSource;
- at property (readonly) VLCLibraryVideoCollectionViewsStackViewController *libraryVideoCollectionViewsStackViewController;
+ at property (readonly) VLCLibraryVideoViewController *libraryVideoViewController;
 @property (readonly) VLCLibrarySortingMenuController *librarySortingMenuController;
 @property (readonly) VLCMediaSourceBaseDataSource *mediaSourceDataSource;
 @property (readonly) VLCPlaylistDataSource *playlistDataSource;
@@ -127,8 +125,6 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
 @property (readonly) VLCPlaylistController *playlistController;
 @property (readonly) VLCFSPanelController *fspanel;
 
- at property (readonly) NSArray<NSLayoutConstraint *> *videoPlaceholderImageViewSizeConstraints;
-
 - (void)videoPlaybackWillBeStarted;
 - (void)reopenVideoView;
 - (void)togglePlaylist;


=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -43,6 +43,7 @@
 
 #import "library/video-library/VLCLibraryVideoCollectionViewsStackViewController.h"
 #import "library/video-library/VLCLibraryVideoTableViewDataSource.h"
+#import "library/video-library/VLCLibraryVideoViewController.h"
 
 #import "library/audio-library/VLCLibraryAlbumTableCellView.h"
 #import "library/audio-library/VLCLibraryAudioViewController.h"
@@ -69,9 +70,6 @@ const CGFloat VLCLibraryWindowDefaultPlaylistWidth = 340.;
 const CGFloat VLCLibraryWindowMinimalPlaylistWidth = 170.;
 const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier = @"VLCLibraryWindow";
 
-static NSArray<NSLayoutConstraint *> *videoPlaceholderImageViewSizeConstraints;
-static NSArray<NSLayoutConstraint *> *audioPlaceholderImageViewSizeConstraints;
-
 @interface VLCLibraryWindow () <VLCDragDropTarget, NSSplitViewDelegate>
 {
     NSRect _windowFrameBeforePlayback;
@@ -143,23 +141,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
 
     self.videoView = [[VLCVoutView alloc] initWithFrame:self.mainSplitView.frame];
     self.videoView.hidden = YES;
-    
-    _videoPlaceholderImageViewSizeConstraints = @[
-        [NSLayoutConstraint constraintWithItem:_placeholderImageView
-                                     attribute:NSLayoutAttributeWidth
-                                     relatedBy:NSLayoutRelationEqual
-                                        toItem:nil
-                                     attribute:NSLayoutAttributeNotAnAttribute
-                                    multiplier:0.f
-                                      constant:182.f],
-        [NSLayoutConstraint constraintWithItem:_placeholderImageView
-                                     attribute:NSLayoutAttributeHeight
-                                     relatedBy:NSLayoutRelationEqual
-                                        toItem:nil
-                                     attribute:NSLayoutAttributeNotAnAttribute
-                                    multiplier:0.f
-                                      constant:114.f],
-    ];
 
     [self.gridVsListSegmentedControl setToolTip: _NS("Grid View or List View")];
     [self.librarySortButton setToolTip: _NS("Select Sorting Mode")];
@@ -243,17 +224,9 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     [self updateViewCellDimensionsBasedOnSetting:nil];
     [_playlistTableView reloadData];
 
-    _libraryVideoTableViewDataSource = [[VLCLibraryVideoTableViewDataSource alloc] init];
-    _libraryVideoTableViewDataSource.libraryModel = mainInstance.libraryController.libraryModel;
-    _libraryVideoTableViewDataSource.groupsTableView = _videoLibraryGroupsTableView;
-    _libraryVideoTableViewDataSource.groupSelectionTableView = _videoLibraryGroupSelectionTableView;
+    _libraryVideoViewController = [[VLCLibraryVideoViewController alloc] initWithLibraryWindow:self];
     _videoLibraryGroupsTableView.rowHeight = [VLCLibraryUIUnits mediumTableViewRowHeight];
     _videoLibraryGroupSelectionTableView.rowHeight = [VLCLibraryUIUnits mediumTableViewRowHeight];
-    [_libraryVideoTableViewDataSource setup];
-
-    _libraryVideoCollectionViewsStackViewController = [[VLCLibraryVideoCollectionViewsStackViewController alloc] init];
-    _libraryVideoCollectionViewsStackViewController.collectionsStackViewScrollView = _videoLibraryCollectionViewsStackViewScrollView;
-    _libraryVideoCollectionViewsStackViewController.collectionsStackView = _videoLibraryCollectionViewsStackView;
 
     _libraryAudioViewController = [[VLCLibraryAudioViewController alloc] initWithLibraryWindow:self];
     _audioCollectionSelectionTableView.rowHeight = [VLCLibraryUIUnits mediumTableViewRowHeight];
@@ -349,10 +322,11 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     audioLibraryCollectionViewLayout.minimumInteritemSpacing = collectionItemSpacing;
     audioLibraryCollectionViewLayout.sectionInset = collectionViewSectionInset;
 
-    _libraryVideoCollectionViewsStackViewController.collectionViewItemSize = [VLCLibraryCollectionViewItem defaultSize];
-    _libraryVideoCollectionViewsStackViewController.collectionViewMinimumLineSpacing = collectionItemSpacing;
-    _libraryVideoCollectionViewsStackViewController.collectionViewMinimumInteritemSpacing = collectionItemSpacing;
-    _libraryVideoCollectionViewsStackViewController.collectionViewSectionInset = collectionViewSectionInset;
+    VLCLibraryVideoCollectionViewsStackViewController *videoLibraryStackViewController = _libraryVideoViewController.libraryVideoCollectionViewsStackViewController;
+    videoLibraryStackViewController.collectionViewItemSize = [VLCLibraryCollectionViewItem defaultSize];
+    videoLibraryStackViewController.collectionViewMinimumLineSpacing = collectionItemSpacing;
+    videoLibraryStackViewController.collectionViewMinimumInteritemSpacing = collectionItemSpacing;
+    videoLibraryStackViewController.collectionViewSectionInset = collectionViewSectionInset;
 
     NSCollectionViewFlowLayout *mediaSourceCollectionViewLayout = _mediaSourceCollectionView.collectionViewLayout;
     mediaSourceCollectionViewLayout.itemSize = [VLCLibraryCollectionViewItem defaultSize];
@@ -523,48 +497,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
 
 - (void)showVideoLibrary
 {
-    for (NSView *subview in _libraryTargetView.subviews) {
-        [subview removeFromSuperview];
-    }
-    
-    if (_libraryVideoTableViewDataSource.libraryModel.numberOfVideoMedia == 0) { // empty library
-        for (NSLayoutConstraint *constraint in _libraryAudioViewController.audioPlaceholderImageViewSizeConstraints) {
-            constraint.active = NO;
-        }
-        for (NSLayoutConstraint *constraint in _videoPlaceholderImageViewSizeConstraints) {
-            constraint.active = YES;
-        }
-        
-        _emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
-        [_libraryTargetView addSubview:_emptyLibraryView];
-        NSDictionary *dict = NSDictionaryOfVariableBindings(_emptyLibraryView);
-        [_libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
-        [_libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
-        
-        _placeholderImageView.image = [NSImage imageNamed:@"placeholder-video"];
-        _placeholderLabel.stringValue = _NS("Your favorite videos will appear here.\nGo to the Browse section to add videos you love.");
-    } else {
-        _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]];
-        
-        if (self.gridVsListSegmentedControl.selectedSegment == VLCGridViewModeSegment) {
-            _videoLibrarySplitView.hidden = YES;
-            _videoLibraryCollectionViewsStackViewScrollView.hidden = NO;
-            [_libraryVideoCollectionViewsStackViewController reloadData];
-        } else {
-            _videoLibrarySplitView.hidden = NO;
-            _videoLibraryCollectionViewsStackViewScrollView.hidden = YES;
-            [_libraryVideoTableViewDataSource reloadData];
-        }
-    }
-    
-    _librarySortButton.hidden = NO;
-    _librarySearchField.enabled = YES;
-    _optionBarView.hidden = YES;
-    _audioSegmentedControl.hidden = YES;
+    [_libraryVideoViewController presentVideoView];
 
     self.gridVsListSegmentedControl.target = self;
     self.gridVsListSegmentedControl.action = @selector(segmentedControlAction:);


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioViewController.h
=====================================
@@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface VLCLibraryAudioViewController : NSObject
 
+ at property (readonly) VLCLibraryWindow *libraryWindow;
 @property (readonly) NSView *libraryTargetView;
 @property (readonly) NSView *audioLibraryView;
 @property (readonly) NSSplitView *audioLibrarySplitView;


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioViewController.m
=====================================
@@ -22,16 +22,21 @@
 
 #import "VLCLibraryAudioViewController.h"
 
-#import "main/VLCMain.h"
 #import "extensions/NSString+Helpers.h"
+
 #import "library/VLCLibraryCollectionViewDelegate.h"
 #import "library/VLCLibraryCollectionViewFlowLayout.h"
 #import "library/VLCLibraryController.h"
 #import "library/VLCLibraryModel.h"
 #import "library/VLCLibraryNavigationStack.h"
 #import "library/VLCLibraryWindow.h"
+
 #import "library/audio-library/VLCLibraryAudioDataSource.h"
 
+#import "library/video-library/VLCLibraryVideoViewController.h"
+
+#import "main/VLCMain.h"
+
 @interface VLCLibraryAudioViewController()
 {
     NSArray<NSString *> *_placeholderImageNames;
@@ -62,8 +67,9 @@
 
 - (void)setupPropertiesFromLibraryWindow:(VLCLibraryWindow*)libraryWindow
 {
-    NSAssert(libraryWindow, @"Cannot setup audio view controller with invalid library window");
+    NSParameterAssert(libraryWindow);
 
+    _libraryWindow = libraryWindow;
     _libraryTargetView = libraryWindow.libraryTargetView;
     _audioLibraryView = libraryWindow.audioLibraryView;
     _audioLibrarySplitView = libraryWindow.audioLibrarySplitView;
@@ -193,7 +199,7 @@
 
 - (void)presentPlaceholderAudioView
 {
-    for (NSLayoutConstraint *constraint in [VLCMain sharedInstance].libraryWindow.videoPlaceholderImageViewSizeConstraints) {
+    for (NSLayoutConstraint *constraint in _libraryWindow.libraryVideoViewController.videoPlaceholderImageViewSizeConstraints) {
         constraint.active = NO;
     }
     for (NSLayoutConstraint *constraint in _audioPlaceholderImageViewSizeConstraints) {


=====================================
modules/gui/macosx/library/video-library/VLCLibraryVideoViewController.h
=====================================
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * VLCLibraryVideoViewController.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2022 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+ at class VLCLibraryWindow;
+ at class VLCLibraryVideoTableViewDataSource;
+ at class VLCLibraryVideoCollectionViewsStackViewController;
+
+NS_ASSUME_NONNULL_BEGIN
+
+// Controller for the video library views
+
+ at interface VLCLibraryVideoViewController : NSObject
+
+ at property (readonly) VLCLibraryWindow *libraryWindow;
+ at property (readonly) NSView *libraryTargetView;
+ at property (readonly) NSView *videoLibraryView;
+ at property (readonly) NSSplitView *videoLibrarySplitView;
+ at property (readonly) NSScrollView *videoLibraryCollectionViewsStackViewScrollView;
+ at property (readonly) NSStackView *videoLibraryCollectionViewsStackView;
+ at property (readonly) NSScrollView *videoLibraryGroupSelectionTableViewScrollView;
+ at property (readonly) NSTableView *videoLibraryGroupSelectionTableView;
+ at property (readonly) NSScrollView *videoLibraryGroupsTableViewScrollView;
+ at property (readonly) NSTableView *videoLibraryGroupsTableView;
+ at property (readonly) NSSegmentedControl *gridVsListSegmentedControl;
+ at property (readonly) NSButton *librarySortButton;
+ at property (readonly) NSSearchField *librarySearchField;
+ at property (readonly) NSVisualEffectView *optionBarView;
+ at property (readonly) NSImageView *placeholderImageView;
+ at property (readonly) NSTextField *placeholderLabel;
+ at property (readonly) NSView *emptyLibraryView;
+
+ at property (readonly) VLCLibraryVideoTableViewDataSource *libraryVideoTableViewDataSource;
+ at property (readonly) VLCLibraryVideoCollectionViewsStackViewController *libraryVideoCollectionViewsStackViewController;
+
+ at property (readonly) NSArray<NSLayoutConstraint *> *videoPlaceholderImageViewSizeConstraints;
+
+- (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow;
+- (void)presentVideoView;
+
+
+ at end
+
+NS_ASSUME_NONNULL_END


=====================================
modules/gui/macosx/library/video-library/VLCLibraryVideoViewController.m
=====================================
@@ -0,0 +1,172 @@
+/*****************************************************************************
+ * VLCLibraryVideoViewController.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2022 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "VLCLibraryVideoViewController.h"
+
+#import "extensions/NSString+Helpers.h"
+
+#import "library/VLCLibraryController.h"
+#import "library/VLCLibraryModel.h"
+#import "library/VLCLibraryWindow.h"
+
+#import "library/audio-library/VLCLibraryAudioViewController.h"
+
+#import "library/video-library/VLCLibraryVideoCollectionViewsStackViewController.h"
+#import "library/video-library/VLCLibraryVideoTableViewDataSource.h"
+
+#import "main/VLCMain.h"
+
+ at implementation VLCLibraryVideoViewController
+
+- (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow
+{
+    self = [super init];
+
+    if(self) {
+        [self setupPropertiesFromLibraryWindow:libraryWindow];
+        [self setupTableViewDataSource];
+        [self setupGridViewController];
+        [self setupVideoPlaceholderView];
+    }
+
+    return self;
+}
+
+- (void)setupPropertiesFromLibraryWindow:(VLCLibraryWindow *)libraryWindow
+{
+    NSParameterAssert(libraryWindow);
+    _libraryWindow = libraryWindow;
+    _libraryTargetView = libraryWindow.libraryTargetView;
+    _videoLibraryView = libraryWindow.videoLibraryView;
+    _videoLibrarySplitView = libraryWindow.videoLibrarySplitView;
+    _videoLibraryCollectionViewsStackViewScrollView = libraryWindow.videoLibraryCollectionViewsStackViewScrollView;
+    _videoLibraryCollectionViewsStackView = libraryWindow.videoLibraryCollectionViewsStackView;
+    _videoLibraryGroupSelectionTableViewScrollView = libraryWindow.videoLibraryGroupSelectionTableViewScrollView;
+    _videoLibraryGroupSelectionTableView = libraryWindow.videoLibraryGroupSelectionTableView;
+    _videoLibraryGroupsTableViewScrollView = libraryWindow.videoLibraryGroupsTableViewScrollView;
+    _videoLibraryGroupsTableView = libraryWindow.videoLibraryGroupsTableView;
+
+    _gridVsListSegmentedControl = libraryWindow.gridVsListSegmentedControl;
+    _optionBarView = libraryWindow.optionBarView;
+    _librarySortButton = libraryWindow.librarySortButton;
+    _librarySearchField = libraryWindow.librarySearchField;
+    _placeholderImageView = libraryWindow.placeholderImageView;
+    _placeholderLabel = libraryWindow.placeholderLabel;
+    _emptyLibraryView = libraryWindow.emptyLibraryView;
+}
+
+- (void)setupTableViewDataSource
+{
+    _libraryVideoTableViewDataSource = [[VLCLibraryVideoTableViewDataSource alloc] init];
+    _libraryVideoTableViewDataSource.libraryModel = VLCMain.sharedInstance.libraryController.libraryModel;
+    _libraryVideoTableViewDataSource.groupsTableView = _videoLibraryGroupsTableView;
+    _libraryVideoTableViewDataSource.groupSelectionTableView = _videoLibraryGroupSelectionTableView;
+
+    [_libraryVideoTableViewDataSource setup];
+}
+
+- (void)setupGridViewController
+{
+    _libraryVideoCollectionViewsStackViewController = [[VLCLibraryVideoCollectionViewsStackViewController alloc] init];
+    _libraryVideoCollectionViewsStackViewController.collectionsStackViewScrollView = _videoLibraryCollectionViewsStackViewScrollView;
+    _libraryVideoCollectionViewsStackViewController.collectionsStackView = _videoLibraryCollectionViewsStackView;
+}
+
+- (void)setupVideoPlaceholderView
+{
+    _videoPlaceholderImageViewSizeConstraints = @[
+        [NSLayoutConstraint constraintWithItem:_placeholderImageView
+                                     attribute:NSLayoutAttributeWidth
+                                     relatedBy:NSLayoutRelationEqual
+                                        toItem:nil
+                                     attribute:NSLayoutAttributeNotAnAttribute
+                                    multiplier:0.f
+                                      constant:182.f],
+        [NSLayoutConstraint constraintWithItem:_placeholderImageView
+                                     attribute:NSLayoutAttributeHeight
+                                     relatedBy:NSLayoutRelationEqual
+                                        toItem:nil
+                                     attribute:NSLayoutAttributeNotAnAttribute
+                                    multiplier:0.f
+                                      constant:114.f],
+    ];
+}
+
+
+#pragma mark - Show the video library view
+
+- (void)presentVideoView
+{
+    for (NSView *subview in _libraryTargetView.subviews) {
+        [subview removeFromSuperview];
+    }
+
+    if (_libraryVideoTableViewDataSource.libraryModel.numberOfVideoMedia == 0) { // empty library
+        [self presentPlaceholderVideoLibraryView];
+    } else {
+        [self presentVideoLibraryView];
+    }
+
+    _librarySortButton.hidden = NO;
+    _librarySearchField.enabled = YES;
+    _optionBarView.hidden = YES;
+}
+
+- (void)presentPlaceholderVideoLibraryView
+{
+    for (NSLayoutConstraint *constraint in _libraryWindow.libraryAudioViewController.audioPlaceholderImageViewSizeConstraints) {
+        constraint.active = NO;
+    }
+    for (NSLayoutConstraint *constraint in _videoPlaceholderImageViewSizeConstraints) {
+        constraint.active = YES;
+    }
+
+    _emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
+    [_libraryTargetView addSubview:_emptyLibraryView];
+    NSDictionary *dict = NSDictionaryOfVariableBindings(_emptyLibraryView);
+    [_libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
+    [_libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
+
+    _placeholderImageView.image = [NSImage imageNamed:@"placeholder-video"];
+    _placeholderLabel.stringValue = _NS("Your favorite videos will appear here.\nGo to the Browse section to add videos you love.");
+}
+
+- (void)presentVideoLibraryView
+{
+    _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]];
+
+    if (self.gridVsListSegmentedControl.selectedSegment == VLCGridViewModeSegment) {
+        _videoLibrarySplitView.hidden = YES;
+        _videoLibraryCollectionViewsStackViewScrollView.hidden = NO;
+        [_libraryVideoCollectionViewsStackViewController reloadData];
+    } else {
+        _videoLibrarySplitView.hidden = NO;
+        _videoLibraryCollectionViewsStackViewScrollView.hidden = YES;
+        [_libraryVideoTableViewDataSource reloadData];
+    }
+}
+
+ at end



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c44f61245d2b37f2256f738947211d509c95368e...cbdb999cb7140d2bb85b884848b67ec6592e49e8

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c44f61245d2b37f2256f738947211d509c95368e...cbdb999cb7140d2bb85b884848b67ec6592e49e8
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