Commit 4c47033e authored by Felix Paul Kühne's avatar Felix Paul Kühne

macosx: add alternative audio library representation based on a collection view

parent bd580ade
......@@ -156,6 +156,7 @@
7DD2F5C52081B73B007EE187 /* VLCRemoteControlService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DD2F5C42081B73B007EE187 /* VLCRemoteControlService.m */; };
7DE2F0442282C84A0040DD0A /* VLCLibraryAudioDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE2F0432282C84A0040DD0A /* VLCLibraryAudioDataSource.m */; };
7DE2F0472282D5D10040DD0A /* VLCLibraryTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE2F0462282D5D10040DD0A /* VLCLibraryTableCellView.m */; };
7DE7E72F228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE7E72E228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.m */; };
7DE82E7922843781002D341A /* VLCLibraryAlbumTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE82E7822843781002D341A /* VLCLibraryAlbumTableCellView.m */; };
7DE9C7DD220728420089108F /* VLCPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE9C7DC220728420089108F /* VLCPlayerController.m */; };
7DF14FBD2270CB1C0008ABE4 /* VLCMediaSourceCollectionViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF14FBB2270CB1C0008ABE4 /* VLCMediaSourceCollectionViewItem.m */; };
......@@ -544,6 +545,8 @@
7DE2F0452282D5D10040DD0A /* VLCLibraryTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryTableCellView.h; sourceTree = "<group>"; };
7DE2F0462282D5D10040DD0A /* VLCLibraryTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryTableCellView.m; sourceTree = "<group>"; };
7DE2F0482282D7980040DD0A /* VLCLibraryTableCellView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCLibraryTableCellView.xib; sourceTree = "<group>"; };
7DE7E72D228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryAlternativeAudioViewController.h; sourceTree = "<group>"; };
7DE7E72E228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryAlternativeAudioViewController.m; sourceTree = "<group>"; };
7DE82E7722843781002D341A /* VLCLibraryAlbumTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryAlbumTableCellView.h; sourceTree = "<group>"; };
7DE82E7822843781002D341A /* VLCLibraryAlbumTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryAlbumTableCellView.m; sourceTree = "<group>"; };
7DE82E7A228437AA002D341A /* VLCLibraryAlbumTableCellView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCLibraryAlbumTableCellView.xib; sourceTree = "<group>"; };
......@@ -1003,6 +1006,8 @@
7DBB7638227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m */,
7D713D302201AE350042BEB7 /* VLCLibraryWindow.h */,
7D713D312201AE350042BEB7 /* VLCLibraryWindow.m */,
7DE7E72D228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.h */,
7DE7E72E228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.m */,
7DFBDCA62269E77400B700A5 /* VLCLibraryController.h */,
7DFBDCA72269E77500B700A5 /* VLCLibraryController.m */,
7DFBDCA92269E77F00B700A5 /* VLCLibraryModel.h */,
......@@ -1731,6 +1736,7 @@
1C3113D31E508C6900D4DD76 /* VLCResumeDialogController.m in Sources */,
7D2FFA40227B8A5B0085D649 /* VLCLinearProgressIndicator.m in Sources */,
7DFBDCB1226A518400B700A5 /* VLCLibraryMenuController.m in Sources */,
7DE7E72F228C795B00D6EA38 /* VLCLibraryAlternativeAudioViewController.m in Sources */,
1C3113D51E508C6900D4DD76 /* VLCTextfieldPanelController.m in Sources */,
7DFBDCAE2269ED0C00B700A5 /* VLCLibraryVideoDataSource.m in Sources */,
1C3113D71E508C6900D4DD76 /* VLCPopupPanelController.m in Sources */,
......
......@@ -54,6 +54,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/library/VLCInputItem.m \
gui/macosx/library/VLCLibraryAlbumTableCellView.h \
gui/macosx/library/VLCLibraryAlbumTableCellView.m \
gui/macosx/library/VLCLibraryAlternativeAudioViewController.h \
gui/macosx/library/VLCLibraryAlternativeAudioViewController.m \
gui/macosx/library/VLCLibraryAudioDataSource.h \
gui/macosx/library/VLCLibraryAudioDataSource.m \
gui/macosx/library/VLCLibraryCollectionViewItem.h \
......
......@@ -312,6 +312,9 @@
</constraints>
</view>
<connections>
<outlet property="alternativeAudioCollectionView" destination="QAt-jP-zE7" id="269-UN-dfM"/>
<outlet property="alternativeAudioSegmentedControl" destination="nzi-H5-fyv" id="AmI-6s-ALm"/>
<outlet property="alternativeAudioView" destination="k7f-ic-LrF" id="8Cp-d2-3UJ"/>
<outlet property="audioCategorySelectionTableView" destination="dNP-8u-8iI" id="KiD-PX-T2p"/>
<outlet property="audioCollectionSelectionTableView" destination="LNt-ot-2wU" id="eJS-WZ-Ri7"/>
<outlet property="audioGroupSelectionTableView" destination="4ll-T2-J16" id="bjS-a8-ePC"/>
......@@ -646,6 +649,59 @@
</holdingPriorities>
<point key="canvasLocation" x="109" y="-224.5"/>
</splitView>
<customView id="k7f-ic-LrF">
<rect key="frame" x="0.0" y="0.0" width="500" height="302"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nzi-H5-fyv">
<rect key="frame" x="10" y="280" width="52" height="23"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="smallSquare" trackingMode="selectOne" id="ic1-QN-Oy2">
<font key="font" metaFont="system"/>
<segments>
<segment/>
<segment selected="YES" tag="1"/>
<segment>
<nil key="label"/>
</segment>
</segments>
</segmentedCell>
</segmentedControl>
<scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AYf-gS-P66">
<rect key="frame" x="0.0" y="0.0" width="500" height="271"/>
<clipView key="contentView" id="2oa-WL-dxA">
<rect key="frame" x="0.0" y="0.0" width="500" height="271"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView id="QAt-jP-zE7">
<rect key="frame" x="0.0" y="0.0" width="500" height="158"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="oKT-Ic-UdV">
<size key="itemSize" width="50" height="50"/>
</collectionViewFlowLayout>
<color key="primaryBackgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</collectionView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Wb8-r8-xfF">
<rect key="frame" x="1" y="144" width="233" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="Lae-xQ-39f">
<rect key="frame" x="234" y="1" width="15" height="143"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</subviews>
<constraints>
<constraint firstItem="nzi-H5-fyv" firstAttribute="top" secondItem="k7f-ic-LrF" secondAttribute="top" id="Hub-0d-koP"/>
<constraint firstItem="AYf-gS-P66" firstAttribute="top" secondItem="nzi-H5-fyv" secondAttribute="bottom" constant="10" id="IpM-PQ-9Lk"/>
<constraint firstAttribute="trailing" secondItem="AYf-gS-P66" secondAttribute="trailing" id="KEG-os-Mk9"/>
<constraint firstAttribute="bottom" secondItem="AYf-gS-P66" secondAttribute="bottom" id="Wkc-LW-FiO"/>
<constraint firstItem="nzi-H5-fyv" firstAttribute="leading" secondItem="k7f-ic-LrF" secondAttribute="leading" constant="10" id="thF-Jr-QPO"/>
<constraint firstItem="AYf-gS-P66" firstAttribute="leading" secondItem="k7f-ic-LrF" secondAttribute="leading" id="tqb-gA-coA"/>
</constraints>
<point key="canvasLocation" x="247" y="771"/>
</customView>
</objects>
<resources>
<image name="backward-3btns" width="29" height="23"/>
......
/*****************************************************************************
* VLCLibraryAlternativeAudioViewController.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2019 VLC authors and VideoLAN
*
* Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
*
* 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>
NS_ASSUME_NONNULL_BEGIN
@class VLCLibraryModel;
@interface VLCLibraryAlternativeAudioViewController : NSObject
@property (readwrite, assign) NSCollectionView *collectionView;
@property (readwrite, assign) NSSegmentedControl *segmentedControl;
@property (readwrite, assign) VLCLibraryModel *libraryModel;
- (void)setupAppearance;
- (void)reloadAppearance;
@end
NS_ASSUME_NONNULL_END
/*****************************************************************************
* VLCLibraryAlternativeAudioViewController.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2019 VLC authors and VideoLAN
*
* Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
*
* 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 "VLCLibraryAlternativeAudioViewController.h"
#import "library/VLCLibraryModel.h"
#import "library/VLCLibraryCollectionViewItem.h"
#import "library/VLCLibraryDataTypes.h"
#import "extensions/NSString+Helpers.h"
#import "views/VLCImageView.h"
@interface VLCLibraryAlternativeAudioViewController () <NSCollectionViewDelegate, NSCollectionViewDataSource>
{
NSArray *_displayedCollection;
enum vlc_ml_parent_type _currentParentType;
}
@end
@implementation VLCLibraryAlternativeAudioViewController
- (void)setupAppearance
{
NSArray *availableCollections = [VLCLibraryModel availableAudioCollections];
NSUInteger availableCollectionsCount = availableCollections.count;
self.segmentedControl.segmentCount = availableCollectionsCount;
for (NSUInteger x = 0; x < availableCollectionsCount; x++) {
[self.segmentedControl setLabel:availableCollections[x] forSegment:x];
}
[self.segmentedControl setTarget:self];
[self.segmentedControl setAction:@selector(segmentedControlAction:)];
_collectionView.dataSource = self;
_collectionView.delegate = self;
[_collectionView registerClass:[VLCLibraryCollectionViewItem class] forItemWithIdentifier:VLCLibraryCellIdentifier];
NSCollectionViewFlowLayout *flowLayout = _collectionView.collectionViewLayout;
flowLayout.itemSize = CGSizeMake(214., 260.);
flowLayout.sectionInset = NSEdgeInsetsMake(20., 20., 20., 20.);
flowLayout.minimumLineSpacing = 20.;
flowLayout.minimumInteritemSpacing = 20.;
[self segmentedControlAction:nil];
}
- (void)reloadAppearance
{
[self.collectionView reloadData];
}
- (IBAction)segmentedControlAction:(id)sender
{
// FIXME: this relies on knowledge internal to VLCLibraryModel
switch (_segmentedControl.selectedSegment) {
case 0:
_displayedCollection = [self.libraryModel listOfArtists];
_currentParentType = VLC_ML_PARENT_ARTIST;
break;
case 1:
_displayedCollection = [self.libraryModel listOfAlbums];
_currentParentType = VLC_ML_PARENT_ALBUM;
break;
case 2:
_displayedCollection = [self.libraryModel listOfAudioMedia];
_currentParentType = VLC_ML_PARENT_UNKNOWN;
break;
case 3:
_displayedCollection = [self.libraryModel listOfGenres];
_currentParentType = VLC_ML_PARENT_GENRE;
break;
default:
NSAssert(1, @"reached the unreachable");
break;
}
[self.collectionView reloadData];
}
- (NSInteger)collectionView:(NSCollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section
{
return _displayedCollection.count;
}
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView
{
return 1;
}
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView
itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
{
VLCLibraryCollectionViewItem *viewItem = [collectionView makeItemWithIdentifier:VLCLibraryCellIdentifier forIndexPath:indexPath];
switch (_currentParentType) {
case VLC_ML_PARENT_ARTIST:
{
VLCMediaLibraryArtist *artist = _displayedCollection[indexPath.item];
viewItem.mediaTitleTextField.stringValue = artist.name;
viewItem.durationTextField.stringValue = [NSString stringWithFormat:_NS("%u albums, %u songs"), artist.numberOfAlbums, artist.numberOfTracks];
NSImage *image;
if (artist.artworkMRL.length > 0) {
image = [[NSImage alloc] initWithContentsOfURL:[NSURL URLWithString:artist.artworkMRL]];
}
if (!image) {
image = [NSImage imageNamed: @"noart.png"];
}
viewItem.mediaImageView.image = image;
break;
}
case VLC_ML_PARENT_ALBUM:
{
VLCMediaLibraryAlbum *album = _displayedCollection[indexPath.item];
viewItem.mediaTitleTextField.stringValue = album.title;
viewItem.durationTextField.stringValue = [NSString stringWithFormat:_NS("%u songs"), album.numberOfTracks];
NSImage *image;
if (album.artworkMRL.length > 0) {
image = [[NSImage alloc] initWithContentsOfURL:[NSURL URLWithString:album.artworkMRL]];
}
if (!image) {
image = [NSImage imageNamed: @"noart.png"];
}
viewItem.mediaImageView.image = image;
break;
}
case VLC_ML_PARENT_UNKNOWN:
{
VLCMediaLibraryMediaItem *mediaItem = _displayedCollection[indexPath.item];
viewItem.representedMediaItem = mediaItem;
break;
}
case VLC_ML_PARENT_GENRE:
{
VLCMediaLibraryGenre *genre = _displayedCollection[indexPath.item];
viewItem.mediaTitleTextField.stringValue = genre.name;
viewItem.durationTextField.stringValue = [NSString stringWithFormat:_NS("%u items"), genre.numberOfTracks];
viewItem.mediaImageView.image = [NSImage imageNamed: @"noart.png"];
}
default:
break;
}
return viewItem;
}
- (void)collectionView:(NSCollectionView *)collectionView didSelectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
{
NSLog(@"library selection changed: %@", indexPaths);
}
@end
......@@ -44,7 +44,7 @@ static NSString *VLCAudioLibraryCellIdentifier = @"VLCAudioLibraryCellIdentifier
{
self = [super init];
if (self) {
_availableCollectionsArray = @[_NS("Artists"), _NS("Albums"), _NS("Songs"), _NS("Genres")];
_availableCollectionsArray = [VLCLibraryModel availableAudioCollections];
}
return self;
}
......
......@@ -46,6 +46,8 @@ extern NSString *VLCLibraryModelMediaItemUpdated;
@interface VLCLibraryModel : NSObject
+ (NSArray *)availableAudioCollections;
- (instancetype)initWithLibrary:(vlc_medialibrary_t *)library;
@property (readwrite) VLCLibraryMode libraryMode;
......
......@@ -24,6 +24,7 @@
#import "main/VLCMain.h"
#import "library/VLCLibraryDataTypes.h"
#import "extensions/NSString+Helpers.h"
NSString *VLCLibraryModelAudioMediaListUpdated = @"VLCLibraryModelAudioMediaListUpdated";
NSString *VLCLibraryModelArtistListUpdated = @"VLCLibraryModelArtistListUpdated";
......@@ -123,6 +124,11 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event)
[_defaultNotificationCenter removeObserver:self];
}
+ (NSArray *)availableAudioCollections
{
return @[_NS("Artists"), _NS("Albums"), _NS("Songs"), _NS("Genres")];
}
- (void)mediaItemWasUpdated:(VLCMediaLibraryMediaItem *)mediaItem
{
[_defaultNotificationCenter postNotificationName:VLCLibraryModelMediaItemUpdated object:mediaItem];
......
......@@ -51,6 +51,9 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, weak) IBOutlet NSBox *clearPlaylistSeparator;
@property (readwrite, weak) IBOutlet NSButton *repeatPlaylistButton;
@property (readwrite, weak) IBOutlet NSButton *shufflePlaylistButton;
@property (readwrite, weak) IBOutlet NSView *alternativeAudioView;
@property (readwrite, weak) IBOutlet NSCollectionView *alternativeAudioCollectionView;
@property (readwrite, weak) IBOutlet NSSegmentedControl *alternativeAudioSegmentedControl;
@property (readonly) BOOL nativeFullscreenMode;
@property (readwrite) BOOL nonembedded;
......
......@@ -36,6 +36,7 @@
#import "library/VLCLibraryCollectionViewItem.h"
#import "library/VLCLibraryModel.h"
#import "library/VLCLibraryCollectionViewSupplementaryElementView.h"
#import "library/VLCLibraryAlternativeAudioViewController.h"
#import "media-source/VLCMediaSourceCollectionViewItem.h"
#import "media-source/VLCMediaSourceDataSource.h"
......@@ -58,6 +59,7 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
VLCLibraryAudioDataSource *_libraryAudioDataSource;
VLCLibraryGroupDataSource *_libraryAudioGroupDataSource;
VLCMediaSourceDataSource *_mediaSourceDataSource;
VLCLibraryAlternativeAudioViewController *_alternativeAudioViewController;
VLCPlaylistController *_playlistController;
......@@ -119,13 +121,14 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
_fspanel = [[VLCFSPanelController alloc] init];
[_fspanel showWindow:self];
_segmentedTitleControl.segmentCount = 4;
_segmentedTitleControl.segmentCount = 5;
[_segmentedTitleControl setTarget:self];
[_segmentedTitleControl setAction:@selector(segmentedControlAction:)];
[_segmentedTitleControl setLabel:_NS("Video") forSegment:0];
[_segmentedTitleControl setLabel:_NS("Music") forSegment:1];
[_segmentedTitleControl setLabel:_NS("Local Network") forSegment:2];
[_segmentedTitleControl setLabel:_NS("Internet") forSegment:3];
[_segmentedTitleControl setLabel:_NS("Music") forSegment:2];
[_segmentedTitleControl setLabel:_NS("Local Network") forSegment:3];
[_segmentedTitleControl setLabel:_NS("Internet") forSegment:4];
[_segmentedTitleControl sizeToFit];
[_segmentedTitleControl setSelectedSegment:0];
......@@ -185,6 +188,12 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
self.clearPlaylistButton.attributedTitle = attributedTitle;
[self updateColorsBasedOnAppearance];
_alternativeAudioViewController = [[VLCLibraryAlternativeAudioViewController alloc] init];
_alternativeAudioViewController.collectionView = self.alternativeAudioCollectionView;
_alternativeAudioViewController.segmentedControl = self.alternativeAudioSegmentedControl;
_alternativeAudioViewController.libraryModel = mainInstance.libraryController.libraryModel;
[_alternativeAudioViewController setupAppearance];
[self segmentedControlAction:nil];
[self repeatStateUpdated:nil];
[self shuffleStateUpdated:nil];
......@@ -286,6 +295,9 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
if (_audioLibrarySplitView.superview != nil) {
[_audioLibrarySplitView removeFromSuperview];
}
if (_alternativeAudioView.superview != nil) {
[_alternativeAudioView removeFromSuperview];
}
if (_videoLibraryStackView.superview == nil) {
_videoLibraryStackView.translatesAutoresizingMaskIntoConstraints = NO;
[_libraryTargetView addSubview:_videoLibraryStackView];
......@@ -305,6 +317,9 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
if (_videoLibraryStackView.superview != nil) {
[_videoLibraryStackView removeFromSuperview];
}
if (_alternativeAudioView.superview != nil) {
[_alternativeAudioView removeFromSuperview];
}
if (_audioLibrarySplitView.superview == nil) {
_audioLibrarySplitView.translatesAutoresizingMaskIntoConstraints = NO;
[_libraryTargetView addSubview:_audioLibrarySplitView];
......@@ -316,6 +331,27 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
[_audioCollectionSelectionTableView reloadData];
break;
case 2:
_libraryVideoDataSource.libraryModel.libraryMode = VLCLibraryModeAudio;
if (_mediaSourceScrollView.superview != nil) {
[_mediaSourceScrollView removeFromSuperview];
}
if (_videoLibraryStackView.superview != nil) {
[_videoLibraryStackView removeFromSuperview];
}
if (_audioLibrarySplitView.superview != nil) {
[_audioLibrarySplitView removeFromSuperview];
}
if (_alternativeAudioView.superview == nil) {
_alternativeAudioView.translatesAutoresizingMaskIntoConstraints = NO;
[_libraryTargetView addSubview:_alternativeAudioView];
NSDictionary *dict = NSDictionaryOfVariableBindings(_alternativeAudioView);
[_libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_alternativeAudioView(>=572.)]|" options:0 metrics:0 views:dict]];
[_libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_alternativeAudioView(>=444.)]|" options:0 metrics:0 views:dict]];
}
[_alternativeAudioViewController reloadAppearance];
break;
default:
if (_videoLibraryStackView.superview != nil) {
[_videoLibraryStackView removeFromSuperview];
......@@ -323,6 +359,9 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.;
if (_audioLibrarySplitView.superview != nil) {
[_audioLibrarySplitView removeFromSuperview];
}
if (_alternativeAudioView.superview != nil) {
[_alternativeAudioView removeFromSuperview];
}
if (_mediaSourceScrollView.superview == nil) {
_mediaSourceScrollView.translatesAutoresizingMaskIntoConstraints = NO;
[_libraryTargetView addSubview:_mediaSourceScrollView];
......
......@@ -462,6 +462,8 @@ modules/gui/macosx/library/VLCInputItem.h
modules/gui/macosx/library/VLCInputItem.m
modules/gui/macosx/library/VLCLibraryAlbumTableCellView.h
modules/gui/macosx/library/VLCLibraryAlbumTableCellView.m
modules/gui/macosx/library/VLCLibraryAlternativeAudioViewController.h
modules/gui/macosx/library/VLCLibraryAlternativeAudioViewController.m
modules/gui/macosx/library/VLCLibraryAudioDataSource.h
modules/gui/macosx/library/VLCLibraryAudioDataSource.m
modules/gui/macosx/library/VLCLibraryCollectionViewItem.h
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment