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 <[email protected]>

- - - - -
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 <[email protected]>

- - - - -
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 <[email protected]>

- - - - -
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 <[email protected]>

- - - - -
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 <[email protected]>

- - - - -
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 <[email protected]>

- - - - -
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 <[email protected]>

- - - - -


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;
-@class VLCLibraryVideoCollectionViewsStackViewController;
-@class VLCLibraryVideoTableViewDataSource;
+@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;
-@property (readonly) VLCLibraryVideoTableViewDataSource 
*libraryVideoTableViewDataSource;
-@property (readonly) VLCLibraryVideoCollectionViewsStackViewController 
*libraryVideoCollectionViewsStackViewController;
+@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;
 
-@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
 
+@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 <[email protected]>
+ *
+ * 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>
+
+@class VLCLibraryWindow;
+@class VLCLibraryVideoTableViewDataSource;
+@class VLCLibraryVideoCollectionViewsStackViewController;
+
+NS_ASSUME_NONNULL_BEGIN
+
+// Controller for the video library views
+
+@interface VLCLibraryVideoViewController : NSObject
+
+@property (readonly) VLCLibraryWindow *libraryWindow;
+@property (readonly) NSView *libraryTargetView;
+@property (readonly) NSView *videoLibraryView;
+@property (readonly) NSSplitView *videoLibrarySplitView;
+@property (readonly) NSScrollView 
*videoLibraryCollectionViewsStackViewScrollView;
+@property (readonly) NSStackView *videoLibraryCollectionViewsStackView;
+@property (readonly) NSScrollView 
*videoLibraryGroupSelectionTableViewScrollView;
+@property (readonly) NSTableView *videoLibraryGroupSelectionTableView;
+@property (readonly) NSScrollView *videoLibraryGroupsTableViewScrollView;
+@property (readonly) NSTableView *videoLibraryGroupsTableView;
+@property (readonly) NSSegmentedControl *gridVsListSegmentedControl;
+@property (readonly) NSButton *librarySortButton;
+@property (readonly) NSSearchField *librarySearchField;
+@property (readonly) NSVisualEffectView *optionBarView;
+@property (readonly) NSImageView *placeholderImageView;
+@property (readonly) NSTextField *placeholderLabel;
+@property (readonly) NSView *emptyLibraryView;
+
+@property (readonly) VLCLibraryVideoTableViewDataSource 
*libraryVideoTableViewDataSource;
+@property (readonly) VLCLibraryVideoCollectionViewsStackViewController 
*libraryVideoCollectionViewsStackViewController;
+
+@property (readonly) NSArray<NSLayoutConstraint *> 
*videoPlaceholderImageViewSizeConstraints;
+
+- (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow;
+- (void)presentVideoView;
+
+
+@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 <[email protected]>
+ *
+ * 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"
+
+@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];
+    }
+}
+
+@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
_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to