Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
405 results
Show changes
Commits on Source (34)
Showing
with 198 additions and 556 deletions
...@@ -39,6 +39,8 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -39,6 +39,8 @@ NS_ASSUME_NONNULL_BEGIN
@class VLCCustomEmptyLibraryBrowseButton; @class VLCCustomEmptyLibraryBrowseButton;
@class VLCLibraryWindowSplitViewController; @class VLCLibraryWindowSplitViewController;
@class VLCLibraryWindowToolbarDelegate; @class VLCLibraryWindowToolbarDelegate;
@class VLCLoadingOverlayView;
@class VLCNoResultsLabel;
@protocol VLCMediaLibraryItemProtocol; @protocol VLCMediaLibraryItemProtocol;
...@@ -113,6 +115,11 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier; ...@@ -113,6 +115,11 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
@property (nonatomic, readwrite, strong) IBOutlet NSTextField *placeholderLabel; @property (nonatomic, readwrite, strong) IBOutlet NSTextField *placeholderLabel;
@property (nonatomic, readwrite, strong) IBOutlet VLCCustomEmptyLibraryBrowseButton *placeholderGoToBrowseButton; @property (nonatomic, readwrite, strong) IBOutlet VLCCustomEmptyLibraryBrowseButton *placeholderGoToBrowseButton;
@property (readonly) VLCLoadingOverlayView *loadingOverlayView;
@property (readonly) NSArray<NSLayoutConstraint *> *loadingOverlayViewConstraints;
@property (readonly) NSArray<NSLayoutConstraint *> *placeholderImageViewConstraints;
@property (readonly) VLCNoResultsLabel *noResultsLabel;
@property (readwrite, nonatomic) NSInteger librarySegmentType; @property (readwrite, nonatomic) NSInteger librarySegmentType;
@property (readwrite) BOOL nonembedded; @property (readwrite) BOOL nonembedded;
...@@ -130,7 +137,14 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier; ...@@ -130,7 +137,14 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
- (void)updateGridVsListViewModeSegmentedControl; - (void)updateGridVsListViewModeSegmentedControl;
- (void)updateFilterString; - (void)updateFilterString;
- (void)clearFilterString; - (void)clearFilterString;
- (void)showLoadingOverlay;
- (void)hideLoadingOverlay;
- (void)displayLibraryView:(NSView *)view;
- (void)displayLibraryPlaceholderViewWithImage:(NSImage *)image
usingConstraints:(NSArray<NSLayoutConstraint *> *)constraints
displayingMessage:(NSString *)message;
- (void)displayNoResultsMessage;
- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem; - (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
- (void)goToLocalFolderMrl:(NSString *)mrl; - (void)goToLocalFolderMrl:(NSString *)mrl;
......
...@@ -71,6 +71,8 @@ ...@@ -71,6 +71,8 @@
#import "views/VLCBottomBarView.h" #import "views/VLCBottomBarView.h"
#import "views/VLCCustomWindowButton.h" #import "views/VLCCustomWindowButton.h"
#import "views/VLCDragDropView.h" #import "views/VLCDragDropView.h"
#import "views/VLCLoadingOverlayView.h"
#import "views/VLCNoResultsLabel.h"
#import "views/VLCRoundedCornerTextField.h" #import "views/VLCRoundedCornerTextField.h"
#import "windows/controlsbar/VLCControlsBarCommon.h" #import "windows/controlsbar/VLCControlsBarCommon.h"
...@@ -186,6 +188,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView) ...@@ -186,6 +188,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
_libraryMediaSourceViewController = [[VLCLibraryMediaSourceViewController alloc] initWithLibraryWindow:self]; _libraryMediaSourceViewController = [[VLCLibraryMediaSourceViewController alloc] initWithLibraryWindow:self];
[self setViewForSelectedSegment]; [self setViewForSelectedSegment];
[self setupLoadingOverlayView];
} }
- (void)dealloc - (void)dealloc
...@@ -206,6 +209,42 @@ static void addShadow(NSImageView *__unsafe_unretained imageView) ...@@ -206,6 +209,42 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
[coder encodeInteger:_librarySegmentType forKey:@"macosx-library-selected-segment"]; [coder encodeInteger:_librarySegmentType forKey:@"macosx-library-selected-segment"];
} }
- (void)setupLoadingOverlayView
{
_loadingOverlayView = [[VLCLoadingOverlayView alloc] init];
self.loadingOverlayView.translatesAutoresizingMaskIntoConstraints = NO;
_loadingOverlayViewConstraints = @[
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeRight
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]
];
}
#pragma mark - misc. user interactions #pragma mark - misc. user interactions
- (void)updateGridVsListViewModeSegmentedControl - (void)updateGridVsListViewModeSegmentedControl
...@@ -449,6 +488,59 @@ static void addShadow(NSImageView *__unsafe_unretained imageView) ...@@ -449,6 +488,59 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
_librarySegmentViewController = lvc; _librarySegmentViewController = lvc;
} }
- (void)displayLibraryView:(NSView *)view
{
view.translatesAutoresizingMaskIntoConstraints = NO;
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[view, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[view];
}
[NSLayoutConstraint activateConstraints:@[
[view.topAnchor constraintEqualToAnchor:self.libraryTargetView.topAnchor],
[view.bottomAnchor constraintEqualToAnchor:self.libraryTargetView.bottomAnchor],
[view.leftAnchor constraintEqualToAnchor:self.libraryTargetView.leftAnchor],
[view.rightAnchor constraintEqualToAnchor:self.libraryTargetView.rightAnchor]
]];
}
- (void)displayLibraryPlaceholderViewWithImage:(NSImage *)image
usingConstraints:(NSArray<NSLayoutConstraint *> *)constraints
displayingMessage:(NSString *)message
{
for (NSLayoutConstraint * const constraint in self.placeholderImageViewConstraints) {
constraint.active = NO;
}
_placeholderImageViewConstraints = constraints;
for (NSLayoutConstraint * const constraint in constraints) {
constraint.active = YES;
}
[self displayLibraryView:self.emptyLibraryView];
self.placeholderImageView.image = image;
self.placeholderLabel.stringValue = message;
}
- (void)displayNoResultsMessage
{
if (self.noResultsLabel == nil) {
_noResultsLabel = [[VLCNoResultsLabel alloc] init];
_noResultsLabel.translatesAutoresizingMaskIntoConstraints = NO;
}
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.noResultsLabel, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[_noResultsLabel];
}
[NSLayoutConstraint activateConstraints:@[
[self.noResultsLabel.centerXAnchor constraintEqualToAnchor:self.libraryTargetView.centerXAnchor],
[self.noResultsLabel.centerYAnchor constraintEqualToAnchor:self.libraryTargetView.centerYAnchor]
]];
}
- (void)presentAudioLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem - (void)presentAudioLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
{ {
[self showAudioLibrary]; [self showAudioLibrary];
...@@ -743,6 +835,48 @@ static void addShadow(NSImageView *__unsafe_unretained imageView) ...@@ -743,6 +835,48 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
self.splitViewController.multifunctionSidebarViewController.mainVideoModeEnabled = NO; self.splitViewController.multifunctionSidebarViewController.mainVideoModeEnabled = NO;
} }
- (void)showLoadingOverlay
{
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 0.0;
NSArray * const views = [self.libraryTargetView.subviews arrayByAddingObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views;
[self.libraryTargetView addConstraints:self.loadingOverlayViewConstraints];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 0.5;
self.loadingOverlayView.animator.alphaValue = 1.0;
} completionHandler:nil];
[self.loadingOverlayView.indicator startAnimation:self];
}
- (void)hideLoadingOverlay
{
if (![self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 1.0;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 1.0;
self.loadingOverlayView.animator.alphaValue = 0.0;
} completionHandler:^{
[self.libraryTargetView removeConstraints:self.loadingOverlayViewConstraints];
NSMutableArray * const views = self.libraryTargetView.subviews.mutableCopy;
[views removeObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views.copy;
[self.loadingOverlayView.indicator stopAnimation:self];
}];
}
- (void)mouseMoved:(NSEvent *)o_event - (void)mouseMoved:(NSEvent *)o_event
{ {
if (!self.videoViewController.view.hidden) { if (!self.videoViewController.view.hidden) {
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
@class VLCLibraryAudioDataSource; @class VLCLibraryAudioDataSource;
@class VLCLibraryAudioGroupDataSource; @class VLCLibraryAudioGroupDataSource;
@class VLCLoadingOverlayView;
@class VLCLibraryWindow; @class VLCLibraryWindow;
@protocol VLCMediaLibraryItemProtocol; @protocol VLCMediaLibraryItemProtocol;
...@@ -52,8 +51,6 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -52,8 +51,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (readonly, weak) NSScrollView *audioLibraryGridModeSplitViewListSelectionCollectionViewScrollView; @property (readonly, weak) NSScrollView *audioLibraryGridModeSplitViewListSelectionCollectionViewScrollView;
@property (readonly, weak) NSCollectionView *audioLibraryGridModeSplitViewListSelectionCollectionView; @property (readonly, weak) NSCollectionView *audioLibraryGridModeSplitViewListSelectionCollectionView;
@property (readonly) VLCLoadingOverlayView *loadingOverlayView;
@property (readonly) VLCLibraryAudioDataSource *audioDataSource; @property (readonly) VLCLibraryAudioDataSource *audioDataSource;
@property (readonly) VLCLibraryAudioGroupDataSource *audioGroupDataSource; @property (readonly) VLCLibraryAudioGroupDataSource *audioGroupDataSource;
......
...@@ -51,9 +51,6 @@ ...@@ -51,9 +51,6 @@
#import "main/VLCMain.h" #import "main/VLCMain.h"
#import "views/VLCLoadingOverlayView.h"
#import "views/VLCNoResultsLabel.h"
#import "windows/video/VLCVoutView.h" #import "windows/video/VLCVoutView.h"
#import "windows/video/VLCMainVideoViewController.h" #import "windows/video/VLCMainVideoViewController.h"
...@@ -71,10 +68,6 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -71,10 +68,6 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
VLCLibraryAudioTableViewDelegate *_audioLibraryTableViewDelegate; VLCLibraryAudioTableViewDelegate *_audioLibraryTableViewDelegate;
VLCLibraryAudioGroupTableViewDelegate *_audioGroupLibraryTableViewDelegate; VLCLibraryAudioGroupTableViewDelegate *_audioGroupLibraryTableViewDelegate;
VLCLibraryTwoPaneSplitViewDelegate *_splitViewDelegate; VLCLibraryTwoPaneSplitViewDelegate *_splitViewDelegate;
NSArray<NSLayoutConstraint *> *_loadingOverlayViewConstraints;
VLCNoResultsLabel *_noResultsLabel;
} }
@end @end
...@@ -96,7 +89,6 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -96,7 +89,6 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
_splitViewDelegate = [[VLCLibraryTwoPaneSplitViewDelegate alloc] init]; _splitViewDelegate = [[VLCLibraryTwoPaneSplitViewDelegate alloc] init];
[self setupAudioPlaceholderView]; [self setupAudioPlaceholderView];
[self setupLoadingOverlayView];
[self setupAudioCollectionView]; [self setupAudioCollectionView];
[self setupGridModeSplitView]; [self setupGridModeSplitView];
[self setupAudioTableViews]; [self setupAudioTableViews];
...@@ -261,42 +253,6 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -261,42 +253,6 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
]; ];
} }
- (void)setupLoadingOverlayView
{
_loadingOverlayView = [[VLCLoadingOverlayView alloc] init];
self.loadingOverlayView.translatesAutoresizingMaskIntoConstraints = NO;
_loadingOverlayViewConstraints = @[
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeRight
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]
];
}
- (void)setupAudioLibraryViews - (void)setupAudioLibraryViews
{ {
_audioCollectionSelectionTableView.rowHeight = VLCLibraryUIUnits.mediumTableViewRowHeight; _audioCollectionSelectionTableView.rowHeight = VLCLibraryUIUnits.mediumTableViewRowHeight;
...@@ -341,78 +297,18 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -341,78 +297,18 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
- (void)presentAudioView - (void)presentAudioView
{ {
self.libraryTargetView.subviews = @[];
[self updatePresentedView]; [self updatePresentedView];
} }
- (void)presentPlaceholderAudioView - (void)presentPlaceholderAudioView
{ {
NSArray<NSLayoutConstraint *> * const oldViewPlaceholderConstraints =
self.libraryWindow.librarySegmentViewController.placeholderImageViewSizeConstraints;
for (NSLayoutConstraint * const constraint in oldViewPlaceholderConstraints) {
constraint.active = NO;
}
for (NSLayoutConstraint * const constraint in self.placeholderImageViewSizeConstraints) {
constraint.active = YES;
}
const NSInteger selectedLibrarySegment = self.audioDataSource.audioLibrarySegment; const NSInteger selectedLibrarySegment = self.audioDataSource.audioLibrarySegment;
NSAssert(selectedLibrarySegment != VLCAudioLibraryRecentsSegment && NSAssert(selectedLibrarySegment != VLCAudioLibraryRecentsSegment &&
selectedLibrarySegment != VLCAudioLibraryUnknownSegment, selectedLibrarySegment != VLCAudioLibraryUnknownSegment,
@"Received invalid audio library segment from audio data source!"); @"Received invalid audio library segment from audio data source!");
[self.libraryWindow displayLibraryPlaceholderViewWithImage:[NSImage imageNamed:_placeholderImageNames[selectedLibrarySegment]]
if(selectedLibrarySegment < _placeholderImageNames.count && selectedLibrarySegment >= 0) { usingConstraints:self.placeholderImageViewSizeConstraints
self.placeholderImageView.image = [NSImage imageNamed:_placeholderImageNames[selectedLibrarySegment]]; displayingMessage:_placeholderLabelStrings[selectedLibrarySegment]];
}
if(selectedLibrarySegment < _placeholderLabelStrings.count && selectedLibrarySegment >= 0) {
self.placeholderLabel.stringValue = _placeholderLabelStrings[selectedLibrarySegment];
}
self.emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.emptyLibraryView, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[self.emptyLibraryView];
}
NSView * const emptyLibraryView = self.emptyLibraryView;
NSDictionary * const dict = NSDictionaryOfVariableBindings(emptyLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
self.emptyLibraryView.identifier = VLCLibraryPlaceholderAudioViewIdentifier;
}
- (void)presentNoResultsView
{
if (_noResultsLabel == nil) {
_noResultsLabel = [[VLCNoResultsLabel alloc] init];
_noResultsLabel.translatesAutoresizingMaskIntoConstraints = NO;
}
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[_noResultsLabel, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[_noResultsLabel];
}
[NSLayoutConstraint activateConstraints:@[
[_noResultsLabel.centerXAnchor constraintEqualToAnchor:self.libraryTargetView.centerXAnchor],
[_noResultsLabel.centerYAnchor constraintEqualToAnchor:self.libraryTargetView.centerYAnchor]
]];
}
- (void)prepareAudioLibraryView
{
self.audioLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.audioLibraryView, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[self.audioLibraryView];
}
NSDictionary *dict = NSDictionaryOfVariableBindings(_audioLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_audioLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_audioLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
} }
- (void)hideAllViews - (void)hideAllViews
...@@ -489,7 +385,7 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -489,7 +385,7 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
const BOOL anyAudioMedia = self.audioDataSource.libraryModel.numberOfAudioMedia > 0; const BOOL anyAudioMedia = self.audioDataSource.libraryModel.numberOfAudioMedia > 0;
if (anyAudioMedia) { if (anyAudioMedia) {
[self prepareAudioLibraryView]; [self.libraryWindow displayLibraryView:self.audioLibraryView];
[self hideAllViews]; [self hideAllViews];
const VLCLibraryViewModeSegment viewModeSegment = [self viewModeSegmentForCurrentLibrarySegment]; const VLCLibraryViewModeSegment viewModeSegment = [self viewModeSegmentForCurrentLibrarySegment];
...@@ -504,7 +400,7 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -504,7 +400,7 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
[VLCMain.sharedInstance.libraryWindow updateGridVsListViewModeSegmentedControl]; [VLCMain.sharedInstance.libraryWindow updateGridVsListViewModeSegmentedControl];
} else if (self.audioDataSource.libraryModel.filterString.length > 0) { } else if (self.audioDataSource.libraryModel.filterString.length > 0) {
[self presentNoResultsView]; [self.libraryWindow displayNoResultsMessage];
} else { } else {
[self presentPlaceholderAudioView]; [self presentPlaceholderAudioView];
} }
...@@ -638,53 +534,22 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi ...@@ -638,53 +534,22 @@ NSString *VLCLibraryPlaceholderAudioViewIdentifier = @"VLCLibraryPlaceholderAudi
- (void)libraryModelLongLoadStarted:(NSNotification *)notification - (void)libraryModelLongLoadStarted:(NSNotification *)notification
{ {
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.audioDataSource disconnect]; [self.audioDataSource disconnect];
[self.audioGroupDataSource disconnect]; [self.audioGroupDataSource disconnect];
} }
self.loadingOverlayView.wantsLayer = YES; [self.libraryWindow showLoadingOverlay];
self.loadingOverlayView.alphaValue = 0.0;
NSArray * const views = [self.libraryTargetView.subviews arrayByAddingObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views;
[self.libraryTargetView addConstraints:_loadingOverlayViewConstraints];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 0.5;
self.loadingOverlayView.animator.alphaValue = 1.0;
} completionHandler:nil];
[self.loadingOverlayView.indicator startAnimation:self];
} }
- (void)libraryModelLongLoadFinished:(NSNotification *)notification - (void)libraryModelLongLoadFinished:(NSNotification *)notification
{ {
if (![self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.audioDataSource connect]; [self.audioDataSource connect];
[self.audioGroupDataSource connect]; [self.audioGroupDataSource connect];
} }
self.loadingOverlayView.wantsLayer = YES; [self.libraryWindow hideLoadingOverlay];
self.loadingOverlayView.alphaValue = 1.0;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 1.0;
self.loadingOverlayView.animator.alphaValue = 0.0;
} completionHandler:^{
[self.libraryTargetView removeConstraints:_loadingOverlayViewConstraints];
NSMutableArray * const views = self.libraryTargetView.subviews.mutableCopy;
[views removeObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views.copy;
[self.loadingOverlayView.indicator stopAnimation:self];
}];
} }
@end @end
...@@ -230,51 +230,27 @@ ...@@ -230,51 +230,27 @@
- (void)presentPlaceholderGroupsView - (void)presentPlaceholderGroupsView
{ {
NSArray<NSLayoutConstraint *> * const oldViewPlaceholderConstraints = [self.libraryWindow displayLibraryPlaceholderViewWithImage:[NSImage imageNamed:@"placeholder-video"]
self.libraryWindow.librarySegmentViewController.placeholderImageViewSizeConstraints; usingConstraints:self.placeholderImageViewSizeConstraints
for (NSLayoutConstraint * const constraint in oldViewPlaceholderConstraints) { displayingMessage:_NS("Your favorite groups will appear here.")];
constraint.active = NO;
}
for (NSLayoutConstraint *constraint in self.placeholderImageViewSizeConstraints) {
constraint.active = YES;
}
self.emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
self.libraryTargetView.subviews = @[self.emptyLibraryView];
NSView * const emptyLibraryView = self.emptyLibraryView;
NSDictionary * const dict = NSDictionaryOfVariableBindings(emptyLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
self.placeholderImageView.image = [NSImage imageNamed:@"placeholder-video"];
self.placeholderLabel.stringValue = _NS("Your favorite groups will appear here.");
} }
- (void)presentGroupsView - (void)presentGroupsView
{ {
if (self.dataSource.libraryModel.numberOfGroups == 0) {
[self presentPlaceholderGroupsView];
return;
}
const VLCLibraryViewModeSegment viewModeSegment = const VLCLibraryViewModeSegment viewModeSegment =
VLCLibraryWindowPersistentPreferences.sharedInstance.groupsLibraryViewMode; VLCLibraryWindowPersistentPreferences.sharedInstance.groupsLibraryViewMode;
NSView *viewToPresent = nil;
if (viewModeSegment == VLCLibraryGridViewModeSegment) { if (self.dataSource.libraryModel.numberOfGroups > 0) {
viewToPresent = self.collectionViewScrollView; if (viewModeSegment == VLCLibraryGridViewModeSegment) {
[self.libraryWindow displayLibraryView:self.collectionViewScrollView];
} else {
[self.libraryWindow displayLibraryView:self.listViewSplitView];
}
} else if (self.dataSource.libraryModel.filterString.length > 0) {
[self.libraryWindow displayNoResultsMessage];
} else { } else {
viewToPresent = self.listViewSplitView; [self presentPlaceholderGroupsView];
} }
NSParameterAssert(viewToPresent != nil);
self.libraryTargetView.subviews = @[viewToPresent];
[NSLayoutConstraint activateConstraints:@[
[self.libraryTargetView.topAnchor constraintEqualToAnchor:viewToPresent.topAnchor],
[self.libraryTargetView.bottomAnchor constraintEqualToAnchor:viewToPresent.bottomAnchor],
[self.libraryTargetView.leadingAnchor constraintEqualToAnchor:viewToPresent.leadingAnchor],
[self.libraryTargetView.trailingAnchor constraintEqualToAnchor:viewToPresent.trailingAnchor]
]];
} }
- (void)presentGroup:(VLCMediaLibraryGroup *)group - (void)presentGroup:(VLCMediaLibraryGroup *)group
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#import "library/VLCLibraryAbstractSegmentViewController.h" #import "library/VLCLibraryAbstractSegmentViewController.h"
@class VLCLoadingOverlayView;
@class VLCLibraryWindow; @class VLCLibraryWindow;
@class VLCLibraryHomeViewStackViewController; @class VLCLibraryHomeViewStackViewController;
...@@ -40,7 +39,6 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -40,7 +39,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (readonly, weak) NSScrollView *homeLibraryStackViewScrollView; @property (readonly, weak) NSScrollView *homeLibraryStackViewScrollView;
@property (readonly, weak) NSStackView *homeLibraryStackView; @property (readonly, weak) NSStackView *homeLibraryStackView;
@property (readonly) VLCLoadingOverlayView *loadingOverlayView;
@property (readonly) VLCLibraryHomeViewStackViewController *stackViewController; @property (readonly) VLCLibraryHomeViewStackViewController *stackViewController;
- (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow; - (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow;
......
...@@ -43,15 +43,12 @@ ...@@ -43,15 +43,12 @@
#import "main/VLCMain.h" #import "main/VLCMain.h"
#import "views/VLCLoadingOverlayView.h"
#import "windows/video/VLCMainVideoViewController.h" #import "windows/video/VLCMainVideoViewController.h"
@interface VLCLibraryHomeViewController () @interface VLCLibraryHomeViewController ()
{ {
id<VLCMediaLibraryItemProtocol> _awaitingPresentingLibraryItem; id<VLCMediaLibraryItemProtocol> _awaitingPresentingLibraryItem;
NSMutableSet<NSString *> *_ongoingLongLoadingNotifications; NSMutableSet<NSString *> *_ongoingLongLoadingNotifications;
NSArray<NSLayoutConstraint *> *_loadingOverlayViewConstraints;
NSArray<NSLayoutConstraint *> *_internalPlaceholderImageViewSizeConstraints; NSArray<NSLayoutConstraint *> *_internalPlaceholderImageViewSizeConstraints;
} }
@end @end
...@@ -64,7 +61,6 @@ ...@@ -64,7 +61,6 @@
if(self) { if(self) {
[self setupPropertiesFromLibraryWindow:libraryWindow]; [self setupPropertiesFromLibraryWindow:libraryWindow];
[self setupLoadingOverlayView];
[self setupGridViewController]; [self setupGridViewController];
[self setupHomePlaceholderView]; [self setupHomePlaceholderView];
[self setupHomeLibraryViews]; [self setupHomeLibraryViews];
...@@ -110,42 +106,6 @@ ...@@ -110,42 +106,6 @@
_homeLibraryStackView = libraryWindow.homeLibraryStackView; _homeLibraryStackView = libraryWindow.homeLibraryStackView;
} }
- (void)setupLoadingOverlayView
{
_loadingOverlayView = [[VLCLoadingOverlayView alloc] init];
self.loadingOverlayView.translatesAutoresizingMaskIntoConstraints = NO;
_loadingOverlayViewConstraints = @[
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeRight
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]
];
}
- (void)setupGridViewController - (void)setupGridViewController
{ {
_stackViewController = [[VLCLibraryHomeViewStackViewController alloc] init]; _stackViewController = [[VLCLibraryHomeViewStackViewController alloc] init];
...@@ -201,51 +161,19 @@ ...@@ -201,51 +161,19 @@
- (void)presentHomeView - (void)presentHomeView
{ {
self.libraryTargetView.subviews = @[];
[self updatePresentedView]; [self updatePresentedView];
} }
- (void)presentPlaceholderHomeLibraryView - (void)presentPlaceholderHomeLibraryView
{ {
NSArray<NSLayoutConstraint *> * const oldViewPlaceholderConstraints = [self.libraryWindow displayLibraryPlaceholderViewWithImage:[NSImage imageNamed:@"placeholder-video"]
self.libraryWindow.librarySegmentViewController.placeholderImageViewSizeConstraints; usingConstraints:self.placeholderImageViewSizeConstraints
for (NSLayoutConstraint * const constraint in oldViewPlaceholderConstraints) { displayingMessage:_NS("Your favorite videos will appear here.\nGo to the Browse section to add videos you love.")];
constraint.active = NO;
}
for (NSLayoutConstraint *constraint in self.placeholderImageViewSizeConstraints) {
constraint.active = YES;
}
self.emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.emptyLibraryView, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[self.emptyLibraryView];
}
NSView * const emptyLibraryView = self.emptyLibraryView;
NSDictionary * const dict = NSDictionaryOfVariableBindings(emptyLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
self.placeholderImageView.image = [NSImage imageNamed:@"placeholder-video"];
self.placeholderLabel.stringValue = _NS("Your favorite videos will appear here.\nGo to the Browse section to add videos you love.");
} }
- (void)presentHomeLibraryView - (void)presentHomeLibraryView
{ {
self.homeLibraryView.translatesAutoresizingMaskIntoConstraints = NO; [self.libraryWindow displayLibraryView:self.homeLibraryView];
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.homeLibraryView, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[self.homeLibraryView];
}
NSDictionary * const dict = NSDictionaryOfVariableBindings(_homeLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_homeLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_homeLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
const VLCLibraryViewModeSegment viewModeSegment = VLCLibraryWindowPersistentPreferences.sharedInstance.homeLibraryViewMode;
self.homeLibraryStackViewScrollView.hidden = NO; self.homeLibraryStackViewScrollView.hidden = NO;
[self.stackViewController reloadData]; [self.stackViewController reloadData];
} }
...@@ -278,27 +206,10 @@ ...@@ -278,27 +206,10 @@
} }
[_ongoingLongLoadingNotifications addObject:notification.name]; [_ongoingLongLoadingNotifications addObject:notification.name];
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.stackViewController disconnectContainers]; [self.stackViewController disconnectContainers];
} }
[self.libraryWindow showLoadingOverlay];
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 0.0;
NSArray * const views = [self.libraryTargetView.subviews arrayByAddingObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views;
[self.libraryTargetView addConstraints:_loadingOverlayViewConstraints];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 0.5;
self.loadingOverlayView.animator.alphaValue = 1.0;
} completionHandler:nil];
[self.loadingOverlayView.indicator startAnimation:self];
} }
- (void)libraryModelLongLoadFinished:(NSNotification *)notification - (void)libraryModelLongLoadFinished:(NSNotification *)notification
...@@ -307,28 +218,10 @@ ...@@ -307,28 +218,10 @@
if (_ongoingLongLoadingNotifications.count > 0) { if (_ongoingLongLoadingNotifications.count > 0) {
return; return;
} }
if (![self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.stackViewController connectContainers]; [self.stackViewController connectContainers];
} }
[self.libraryWindow hideLoadingOverlay];
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 1.0;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 1.0;
self.loadingOverlayView.animator.alphaValue = 0.0;
} completionHandler:^{
[self.libraryTargetView removeConstraints:_loadingOverlayViewConstraints];
NSMutableArray * const views = self.libraryTargetView.subviews.mutableCopy;
[views removeObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views.copy;
[self.loadingOverlayView.indicator stopAnimation:self];
}];
} }
- (void)connect - (void)connect
......
...@@ -168,16 +168,7 @@ ...@@ -168,16 +168,7 @@
- (void)presentMediaSourceView:(VLCLibrarySegmentType)viewSegment - (void)presentMediaSourceView:(VLCLibrarySegmentType)viewSegment
{ {
self.libraryTargetView.subviews = @[]; [self.libraryWindow displayLibraryView:self.mediaSourceView];
if (_mediaSourceView.superview == nil) {
_mediaSourceView.translatesAutoresizingMaskIntoConstraints = NO;
self.libraryTargetView.subviews = @[_mediaSourceView];
NSDictionary *dict = NSDictionaryOfVariableBindings(_mediaSourceView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_mediaSourceView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_mediaSourceView(>=444.)]|" options:0 metrics:0 views:dict]];
}
_baseDataSource.mediaSourceMode = viewSegment == VLCLibraryBrowseSegment ? VLCMediaSourceModeLAN : VLCMediaSourceModeInternet; _baseDataSource.mediaSourceMode = viewSegment == VLCLibraryBrowseSegment ? VLCMediaSourceModeLAN : VLCMediaSourceModeInternet;
[_baseDataSource reloadViews]; [_baseDataSource reloadViews];
} }
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@class VLCLibraryCollectionViewDelegate; @class VLCLibraryCollectionViewDelegate;
@class VLCLoadingOverlayView;
@class VLCLibraryMasterDetailViewTableViewDelegate; @class VLCLibraryMasterDetailViewTableViewDelegate;
@class VLCLibraryPlaylistDataSource; @class VLCLibraryPlaylistDataSource;
@class VLCLibraryTableView; @class VLCLibraryTableView;
...@@ -44,8 +43,6 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -44,8 +43,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (readonly) VLCLibraryTableView *detailTableView; @property (readonly) VLCLibraryTableView *detailTableView;
@property (readonly) NSScrollView *collectionViewScrollView; @property (readonly) NSScrollView *collectionViewScrollView;
@property (readonly) NSCollectionView *collectionView; @property (readonly) NSCollectionView *collectionView;
@property (readonly) VLCLoadingOverlayView *loadingOverlayView;
@property (readonly) NSArray<NSLayoutConstraint *> *loadingOverlayViewConstraints;
@property (readonly) VLCLibraryPlaylistDataSource *dataSource; @property (readonly) VLCLibraryPlaylistDataSource *dataSource;
@property (readonly) VLCLibraryCollectionViewDelegate *collectionViewDelegate; @property (readonly) VLCLibraryCollectionViewDelegate *collectionViewDelegate;
......
...@@ -43,7 +43,6 @@ ...@@ -43,7 +43,6 @@
#import "main/VLCMain.h" #import "main/VLCMain.h"
#import "views/VLCLoadingOverlayView.h"
#import "windows/video/VLCMainVideoViewController.h" #import "windows/video/VLCMainVideoViewController.h"
...@@ -214,42 +213,6 @@ ...@@ -214,42 +213,6 @@
]; ];
} }
- (void)setupLoadingOverlayView
{
_loadingOverlayView = [[VLCLoadingOverlayView alloc] init];
self.loadingOverlayView.translatesAutoresizingMaskIntoConstraints = NO;
_loadingOverlayViewConstraints = @[
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeRight
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]
];
}
- (NSArray<NSLayoutConstraint *> *)placeholderImageViewSizeConstraints - (NSArray<NSLayoutConstraint *> *)placeholderImageViewSizeConstraints
{ {
return _internalPlaceholderImageViewSizeConstraints; return _internalPlaceholderImageViewSizeConstraints;
...@@ -260,26 +223,8 @@ ...@@ -260,26 +223,8 @@
return self.dataSource; return self.dataSource;
} }
// TODO: This is duplicated almost verbatim across all the library view
// controllers. Ideally we should have the placeholder view handle this
// itself, or move this into a common superclass
- (void)presentPlaceholderPlaylistLibraryView - (void)presentPlaceholderPlaylistLibraryView
{ {
NSArray<NSLayoutConstraint *> * const oldViewPlaceholderConstraints =
self.libraryWindow.librarySegmentViewController.placeholderImageViewSizeConstraints;
for (NSLayoutConstraint * const constraint in oldViewPlaceholderConstraints) {
constraint.active = NO;
}
for (NSLayoutConstraint * const constraint in self.placeholderImageViewSizeConstraints) {
constraint.active = YES;
}
self.libraryWindow.emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
self.libraryWindow.libraryTargetView.subviews = @[self.libraryWindow.emptyLibraryView];
NSDictionary * const dict = @{@"emptyLibraryView": self.libraryWindow.emptyLibraryView};
[self.libraryWindow.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryWindow.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
const vlc_ml_playlist_type_t playlistType = self.dataSource.playlistType; const vlc_ml_playlist_type_t playlistType = self.dataSource.playlistType;
NSString *placeholderPlaylistsString = nil; NSString *placeholderPlaylistsString = nil;
switch (playlistType) { switch (playlistType) {
...@@ -302,8 +247,9 @@ ...@@ -302,8 +247,9 @@
break; break;
} }
self.libraryWindow.placeholderImageView.image = [NSImage imageNamed:@"placeholder-group2"]; [self.libraryWindow displayLibraryPlaceholderViewWithImage:[NSImage imageNamed:@"placeholder-group2"]
self.libraryWindow.placeholderLabel.stringValue = placeholderPlaylistsString; usingConstraints:self.placeholderImageViewSizeConstraints
displayingMessage:placeholderPlaylistsString];
} }
- (void)presentPlaylistLibraryView - (void)presentPlaylistLibraryView
...@@ -318,30 +264,24 @@ ...@@ -318,30 +264,24 @@
viewToPresent = self.listViewSplitView; viewToPresent = self.listViewSplitView;
} }
NSParameterAssert(viewToPresent != nil); NSParameterAssert(viewToPresent != nil);
[self.libraryWindow displayLibraryView:viewToPresent];
self.libraryTargetView.subviews = @[viewToPresent];
[NSLayoutConstraint activateConstraints:@[
[self.libraryTargetView.topAnchor constraintEqualToAnchor:viewToPresent.topAnchor],
[self.libraryTargetView.bottomAnchor constraintEqualToAnchor:viewToPresent.bottomAnchor],
[self.libraryTargetView.leadingAnchor constraintEqualToAnchor:viewToPresent.leadingAnchor],
[self.libraryTargetView.trailingAnchor constraintEqualToAnchor:viewToPresent.trailingAnchor]
]];
} }
- (void)updatePresentedView - (void)updatePresentedView
{ {
const vlc_ml_playlist_type_t playlistType = self.dataSource.playlistType; const vlc_ml_playlist_type_t playlistType = self.dataSource.playlistType;
VLCLibraryModel * const libraryModel = VLCMain.sharedInstance.libraryController.libraryModel; VLCLibraryModel * const libraryModel = VLCMain.sharedInstance.libraryController.libraryModel;
if ([libraryModel numberOfPlaylistsOfType:playlistType] <= 0) { if ([libraryModel numberOfPlaylistsOfType:playlistType] > 0) {
[self presentPlaceholderPlaylistLibraryView];
} else {
[self presentPlaylistLibraryView]; [self presentPlaylistLibraryView];
} else if (self.dataSource.libraryModel.filterString.length > 0) {
[self.libraryWindow displayNoResultsMessage];
} else {
[self presentPlaceholderPlaylistLibraryView];
} }
} }
- (void)presentPlaylistsView - (void)presentPlaylistsView
{ {
self.libraryWindow.libraryTargetView.subviews = @[];
[self updatePresentedView]; [self updatePresentedView];
} }
...@@ -368,54 +308,20 @@ ...@@ -368,54 +308,20 @@
} }
} }
// TODO: Duplicated a lot, move to abstract view controller?
- (void)libraryModelLongLoadStarted:(NSNotification *)notification - (void)libraryModelLongLoadStarted:(NSNotification *)notification
{ {
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.dataSource disconnect]; [self.dataSource disconnect];
} }
[self.libraryWindow showLoadingOverlay];
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 0.0;
NSArray * const views = [self.libraryTargetView.subviews arrayByAddingObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views;
[self.libraryTargetView addConstraints:_loadingOverlayViewConstraints];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 0.5;
self.loadingOverlayView.animator.alphaValue = 1.0;
} completionHandler:nil];
[self.loadingOverlayView.indicator startAnimation:self];
} }
- (void)libraryModelLongLoadFinished:(NSNotification *)notification - (void)libraryModelLongLoadFinished:(NSNotification *)notification
{ {
if (![self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.dataSource connect]; [self.dataSource connect];
} }
[self.libraryWindow hideLoadingOverlay];
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 1.0;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 1.0;
self.loadingOverlayView.animator.alphaValue = 0.0;
} completionHandler:^{
[self.libraryTargetView removeConstraints:_loadingOverlayViewConstraints];
NSMutableArray * const views = self.libraryTargetView.subviews.mutableCopy;
[views removeObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views.copy;
[self.loadingOverlayView.indicator stopAnimation:self];
}];
} }
#pragma mark - NSSplitViewDelegate #pragma mark - NSSplitViewDelegate
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#import "library/VLCLibraryAbstractSegmentViewController.h" #import "library/VLCLibraryAbstractSegmentViewController.h"
@class VLCLoadingOverlayView;
@class VLCLibraryWindow; @class VLCLibraryWindow;
@class VLCLibraryVideoDataSource; @class VLCLibraryVideoDataSource;
@class VLCLibraryShowsDataSource; @class VLCLibraryShowsDataSource;
...@@ -46,8 +45,6 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -46,8 +45,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (readonly, weak) NSScrollView *videoLibraryGroupsTableViewScrollView; @property (readonly, weak) NSScrollView *videoLibraryGroupsTableViewScrollView;
@property (readonly, weak) NSTableView *videoLibraryGroupsTableView; @property (readonly, weak) NSTableView *videoLibraryGroupsTableView;
@property (readonly) VLCLoadingOverlayView *loadingOverlayView;
@property (readonly, nullable) VLCLibraryVideoDataSource *libraryVideoDataSource; @property (readonly, nullable) VLCLibraryVideoDataSource *libraryVideoDataSource;
@property (readonly, nullable) VLCLibraryShowsDataSource *libraryShowsDataSource; @property (readonly, nullable) VLCLibraryShowsDataSource *libraryShowsDataSource;
......
...@@ -50,9 +50,6 @@ ...@@ -50,9 +50,6 @@
#import "main/VLCMain.h" #import "main/VLCMain.h"
#import "views/VLCLoadingOverlayView.h"
#import "views/VLCNoResultsLabel.h"
#import "windows/video/VLCVoutView.h" #import "windows/video/VLCVoutView.h"
#import "windows/video/VLCMainVideoViewController.h" #import "windows/video/VLCMainVideoViewController.h"
...@@ -66,9 +63,6 @@ ...@@ -66,9 +63,6 @@
id<VLCMediaLibraryItemProtocol> _awaitingPresentingLibraryItem; id<VLCMediaLibraryItemProtocol> _awaitingPresentingLibraryItem;
NSArray<NSLayoutConstraint *> *_internalPlaceholderImageViewSizeConstraints; NSArray<NSLayoutConstraint *> *_internalPlaceholderImageViewSizeConstraints;
NSArray<NSLayoutConstraint *> *_loadingOverlayViewConstraints;
VLCNoResultsLabel *_noResultsLabel;
} }
@end @end
...@@ -87,7 +81,6 @@ ...@@ -87,7 +81,6 @@
[self setupCollectionView]; [self setupCollectionView];
[self setupVideoPlaceholderView]; [self setupVideoPlaceholderView];
[self setupVideoLibraryViews]; [self setupVideoLibraryViews];
[self setupLoadingOverlayView];
NSNotificationCenter *notificationCenter = NSNotificationCenter.defaultCenter; NSNotificationCenter *notificationCenter = NSNotificationCenter.defaultCenter;
[notificationCenter addObserver:self [notificationCenter addObserver:self
...@@ -248,42 +241,6 @@ ...@@ -248,42 +241,6 @@
_videoLibraryGroupSelectionTableViewScrollView.scrollerInsets = scrollerInsets; _videoLibraryGroupSelectionTableViewScrollView.scrollerInsets = scrollerInsets;
} }
- (void)setupLoadingOverlayView
{
_loadingOverlayView = [[VLCLoadingOverlayView alloc] init];
self.loadingOverlayView.translatesAutoresizingMaskIntoConstraints = NO;
_loadingOverlayViewConstraints = @[
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeRight
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:self.loadingOverlayView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.libraryTargetView
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]
];
}
#pragma mark - Show the video library view #pragma mark - Show the video library view
- (NSArray<NSLayoutConstraint *> *)placeholderImageViewSizeConstraints - (NSArray<NSLayoutConstraint *> *)placeholderImageViewSizeConstraints
...@@ -324,7 +281,7 @@ ...@@ -324,7 +281,7 @@
const VLCLibraryViewModeSegment viewModeSegment = VLCLibraryWindowPersistentPreferences.sharedInstance.videoLibraryViewMode; const VLCLibraryViewModeSegment viewModeSegment = VLCLibraryWindowPersistentPreferences.sharedInstance.videoLibraryViewMode;
[self presentVideoLibraryView:viewModeSegment]; [self presentVideoLibraryView:viewModeSegment];
} else if (self.libraryVideoDataSource.libraryModel.filterString.length > 0) { } else if (self.libraryVideoDataSource.libraryModel.filterString.length > 0) {
[self presentNoResultsView]; [self.libraryWindow displayNoResultsMessage];
} else { } else {
[self presentPlaceholderVideoLibraryView]; [self presentPlaceholderVideoLibraryView];
} }
...@@ -351,7 +308,7 @@ ...@@ -351,7 +308,7 @@
const VLCLibraryViewModeSegment viewModeSegment = VLCLibraryWindowPersistentPreferences.sharedInstance.showsLibraryViewMode; const VLCLibraryViewModeSegment viewModeSegment = VLCLibraryWindowPersistentPreferences.sharedInstance.showsLibraryViewMode;
[self presentVideoLibraryView:viewModeSegment]; [self presentVideoLibraryView:viewModeSegment];
} else if (self.libraryShowsDataSource.libraryModel.filterString.length > 0) { } else if (self.libraryShowsDataSource.libraryModel.filterString.length > 0) {
[self presentNoResultsView]; [self.libraryWindow displayNoResultsMessage];
} else { } else {
[self presentPlaceholderVideoLibraryView]; [self presentPlaceholderVideoLibraryView];
} }
...@@ -359,80 +316,30 @@ ...@@ -359,80 +316,30 @@
- (void)presentVideoView - (void)presentVideoView
{ {
self.libraryTargetView.subviews = @[];
[self updatePresentedVideoLibraryView]; [self updatePresentedVideoLibraryView];
} }
- (void)presentShowsView - (void)presentShowsView
{ {
self.libraryTargetView.subviews = @[];
[self updatePresentedShowsLibraryView]; [self updatePresentedShowsLibraryView];
} }
- (void)presentPlaceholderVideoLibraryView - (void)presentPlaceholderVideoLibraryView
{ {
NSArray<NSLayoutConstraint *> * const oldViewPlaceholderConstraints = [self.libraryWindow displayLibraryPlaceholderViewWithImage:[NSImage imageNamed:@"placeholder-video"]
self.libraryWindow.librarySegmentViewController.placeholderImageViewSizeConstraints; usingConstraints:self.placeholderImageViewSizeConstraints
for (NSLayoutConstraint * const constraint in oldViewPlaceholderConstraints) { displayingMessage:_NS("Your favorite videos will appear here.\nGo to the Browse section to add videos you love.")];
constraint.active = NO;
}
for (NSLayoutConstraint * const constraint in self.placeholderImageViewSizeConstraints) {
constraint.active = YES;
}
self.emptyLibraryView.translatesAutoresizingMaskIntoConstraints = NO;
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.emptyLibraryView, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[self.emptyLibraryView];
}
NSView * const emptyLibraryView = self.emptyLibraryView;
NSDictionary *dict = NSDictionaryOfVariableBindings(emptyLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[emptyLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[emptyLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
self.placeholderImageView.image = [NSImage imageNamed:@"placeholder-video"];
self.placeholderLabel.stringValue = _NS("Your favorite videos will appear here.\nGo to the Browse section to add videos you love.");
}
- (void)presentNoResultsView
{
if (_noResultsLabel == nil) {
_noResultsLabel = [[VLCNoResultsLabel alloc] init];
_noResultsLabel.translatesAutoresizingMaskIntoConstraints = NO;
}
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[_noResultsLabel, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[_noResultsLabel];
}
[NSLayoutConstraint activateConstraints:@[
[_noResultsLabel.centerXAnchor constraintEqualToAnchor:self.libraryTargetView.centerXAnchor],
[_noResultsLabel.centerYAnchor constraintEqualToAnchor:self.libraryTargetView.centerYAnchor]
]];
} }
- (void)presentVideoLibraryView:(VLCLibraryViewModeSegment)viewModeSegment - (void)presentVideoLibraryView:(VLCLibraryViewModeSegment)viewModeSegment
{ {
_videoLibraryView.translatesAutoresizingMaskIntoConstraints = NO; [self.libraryWindow displayLibraryView:self.videoLibraryView];
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
self.libraryTargetView.subviews = @[self.videoLibraryView, self.loadingOverlayView];
} else {
self.libraryTargetView.subviews = @[self.videoLibraryView];
}
NSDictionary *dict = NSDictionaryOfVariableBindings(_videoLibraryView);
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_videoLibraryView(>=572.)]|" options:0 metrics:0 views:dict]];
[self.libraryTargetView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_videoLibraryView(>=444.)]|" options:0 metrics:0 views:dict]];
if (viewModeSegment == VLCLibraryGridViewModeSegment) { if (viewModeSegment == VLCLibraryGridViewModeSegment) {
_videoLibrarySplitView.hidden = YES; self.videoLibrarySplitView.hidden = YES;
_videoLibraryCollectionViewScrollView.hidden = NO; self.videoLibraryCollectionViewScrollView.hidden = NO;
} else if (viewModeSegment == VLCLibraryListViewModeSegment) { } else if (viewModeSegment == VLCLibraryListViewModeSegment) {
_videoLibrarySplitView.hidden = NO; self.videoLibrarySplitView.hidden = NO;
_videoLibraryCollectionViewScrollView.hidden = YES; self.videoLibraryCollectionViewScrollView.hidden = YES;
} else { } else {
NSAssert(false, @"View mode must be grid or list mode"); NSAssert(false, @"View mode must be grid or list mode");
} }
...@@ -515,51 +422,18 @@ ...@@ -515,51 +422,18 @@
- (void)libraryModelLongLoadStarted:(NSNotification *)notification - (void)libraryModelLongLoadStarted:(NSNotification *)notification
{ {
if ([self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.libraryVideoDataSource disconnect]; [self.libraryVideoDataSource disconnect];
} }
[self.libraryWindow showLoadingOverlay];
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 0.0;
NSArray * const views = [self.libraryTargetView.subviews arrayByAddingObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views;
[self.libraryTargetView addConstraints:_loadingOverlayViewConstraints];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 0.5;
self.loadingOverlayView.animator.alphaValue = 1.0;
} completionHandler:nil];
[self.loadingOverlayView.indicator startAnimation:self];
} }
- (void)libraryModelLongLoadFinished:(NSNotification *)notification - (void)libraryModelLongLoadFinished:(NSNotification *)notification
{ {
if (![self.libraryTargetView.subviews containsObject:self.loadingOverlayView]) {
return;
}
if (self.connected) { if (self.connected) {
[self.libraryVideoDataSource connect]; [self.libraryVideoDataSource connect];
} }
[self.libraryWindow hideLoadingOverlay];
self.loadingOverlayView.wantsLayer = YES;
self.loadingOverlayView.alphaValue = 1.0;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * const context) {
context.duration = 1.0;
self.loadingOverlayView.animator.alphaValue = 0.0;
} completionHandler:^{
[self.libraryTargetView removeConstraints:_loadingOverlayViewConstraints];
NSMutableArray * const views = self.libraryTargetView.subviews.mutableCopy;
[views removeObject:self.loadingOverlayView];
self.libraryTargetView.subviews = views.copy;
[self.loadingOverlayView.indicator stopAnimation:self];
}];
} }
@end @end