[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