Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
fc961c99 by Serhii Bykov at 2026-05-09T19:15:49+02:00
macosx: move nib loading helper to NSView category

- - - - -


26 changed files:

- modules/gui/macosx/extensions/NSView+VLCAdditions.h
- modules/gui/macosx/extensions/NSView+VLCAdditions.m
- modules/gui/macosx/library/VLCLibraryCarouselViewItemView.h
- modules/gui/macosx/library/VLCLibraryCarouselViewItemView.m
- modules/gui/macosx/library/VLCLibraryHeroView.h
- modules/gui/macosx/library/VLCLibraryHeroView.m
- modules/gui/macosx/library/VLCLibraryTableCellView.h
- modules/gui/macosx/library/VLCLibraryTableCellView.m
- modules/gui/macosx/library/VLCLibraryTableViewDelegate.h
- modules/gui/macosx/library/VLCLibraryTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.h
- modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.m
- 
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTracksTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
- 
modules/gui/macosx/library/audio-library/VLCLibraryAudioGroupTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.h
- modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.m
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.h
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.m
- 
modules/gui/macosx/library/home-library/VLCLibraryHomeViewStackViewController.m
- 
modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerViewDataSource.m
- modules/gui/macosx/library/video-library/VLCLibraryVideoTableViewDelegate.m
- modules/gui/macosx/playqueue/VLCPlayQueueDataSource.m
- modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h
- modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m


Changes:

=====================================
modules/gui/macosx/extensions/NSView+VLCAdditions.h
=====================================
@@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
 @interface NSView (VLCAdditions)
 
 + (instancetype)fromNibNamed:(NSString *)nibName withClass:(Class)viewClass 
withOwner:(id)owner;
++ (instancetype)fromNibWithOwner:(id)owner;
 
 @property (readonly) BOOL shouldShowDarkAppearance;
 


=====================================
modules/gui/macosx/extensions/NSView+VLCAdditions.m
=====================================
@@ -27,6 +27,11 @@
 
 @implementation NSView (VLCAdditions)
 
++ (instancetype)fromNibWithOwner:(id)owner
+{
+    return [self fromNibNamed:NSStringFromClass(self) withClass:self 
withOwner:owner];
+}
+
 + (instancetype)fromNibNamed:(NSString *)nibName withClass:(Class)viewClass 
withOwner:(id)owner
 {
     /* the following code saves us an instance of NSViewController which we 
don't need */


=====================================
modules/gui/macosx/library/VLCLibraryCarouselViewItemView.h
=====================================
@@ -44,8 +44,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (readwrite, nonatomic) BOOL selected;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 - (void)playRepresentedItem;
 
 @end


=====================================
modules/gui/macosx/library/VLCLibraryCarouselViewItemView.m
=====================================
@@ -46,13 +46,6 @@
 
 @implementation VLCLibraryCarouselViewItemView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryCarouselViewItemView *)[NSView 
fromNibNamed:@"VLCLibraryCarouselViewItemView"
-                                                        
withClass:VLCLibraryCarouselViewItemView.class
-                                                        withOwner:owner];
-}
-
 - (instancetype)init
 {
     self = [super init];


=====================================
modules/gui/macosx/library/VLCLibraryHeroView.h
=====================================
@@ -38,8 +38,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (readwrite, nonatomic) VLCLibraryRepresentedItem *representedItem;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 - (IBAction)playRepresentedItem:(id)sender;
 - (void)setOptimalRepresentedItem;
 


=====================================
modules/gui/macosx/library/VLCLibraryHeroView.m
=====================================
@@ -45,13 +45,6 @@
 
 @implementation VLCLibraryHeroView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryHeroView*)[NSView fromNibNamed:@"VLCLibraryHeroView"
-                                                     
withClass:VLCLibraryHeroView.class
-                                                     withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     self.largeImageView.contentGravity = 
VLCImageViewContentGravityResizeAspectFill;


=====================================
modules/gui/macosx/library/VLCLibraryTableCellView.h
=====================================
@@ -36,8 +36,6 @@ extern NSString * const VLCLibraryTableCellViewIdentifier;
 
 @interface VLCLibraryTableCellView : 
NSTableCellView<VLCLibraryTableCellViewProtocol>
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 @property (readwrite, weak) IBOutlet VLCTrackingView *trackingView;
 @property (readwrite, weak) IBOutlet NSTextField *singlePrimaryTitleTextField;
 @property (readwrite, weak) IBOutlet NSTextField *secondaryTitleTextField;


=====================================
modules/gui/macosx/library/VLCLibraryTableCellView.m
=====================================
@@ -47,13 +47,6 @@ NSString * const VLCLibraryTableCellViewIdentifier = 
@"VLCLibraryTableCellViewId
 
 @implementation VLCLibraryTableCellView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryTableCellView*)[NSView 
fromNibNamed:NSStringFromClass(VLCLibraryTableCellView.class)
-                                                
withClass:[VLCLibraryTableCellView class]
-                                                withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     [self prepareForReuse];


=====================================
modules/gui/macosx/library/VLCLibraryTableViewDelegate.h
=====================================
@@ -22,12 +22,15 @@
 
 #import <Cocoa/Cocoa.h>
 
+#import "library/VLCLibraryTableCellViewProtocol.h"
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface VLCLibraryTableViewDelegate : NSObject <NSTableViewDelegate>
 
 @property (readwrite, assign) NSString *cellViewIdentifier;
-@property (readwrite, assign) Class cellViewClass;
+
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView;
 
 @end
 


=====================================
modules/gui/macosx/library/VLCLibraryTableViewDelegate.m
=====================================
@@ -23,6 +23,7 @@
 #import "VLCLibraryTableViewDelegate.h"
 
 #import "extensions/NSColor+VLCAdditions.h"
+#import "extensions/NSView+VLCAdditions.h"
 #import "extensions/NSString+Helpers.h"
 
 #import "library/VLCInputItem.h"
@@ -44,11 +45,15 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = @"VLCLibraryTableViewCellIdentifier";
-        self.cellViewClass = [VLCLibraryTableCellView class];
     }
     return self;
 }
 
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView
+{
+    return [VLCLibraryTableCellView fromNibWithOwner:self];
+}
+
 - (NSView *)tableView:(NSTableView *)tableView 
viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
 {
     if (![tableView.dataSource 
conformsToProtocol:@protocol(VLCLibraryTableViewDataSource)]) {
@@ -60,8 +65,8 @@
 
     NSView<VLCLibraryTableCellViewProtocol> * cellView = 
(NSView<VLCLibraryTableCellViewProtocol> *)[tableView 
makeViewWithIdentifier:self.cellViewIdentifier owner:self];
 
-    if (cellView == nil && [self.cellViewClass 
respondsToSelector:@selector(fromNibWithOwner:)]) {
-        cellView = [self.cellViewClass fromNibWithOwner:self];
+    if (cellView == nil) {
+        cellView = [self makeCellView];
         cellView.identifier = self.cellViewIdentifier;
     }
 


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.h
=====================================
@@ -38,7 +38,6 @@ extern NSString * const 
VLCLibraryAlbumTableCellTableViewColumnIdentifier;
 
 @property (class, readonly) CGFloat defaultHeight;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
 + (CGFloat)heightForAlbum:(VLCMediaLibraryAlbum *)album;
 
 @property (readwrite, weak) IBOutlet VLCTrackingView *trackingView;


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.m
=====================================
@@ -80,13 +80,6 @@ const CGFloat VLCLibraryAlbumTableCellViewDefaultHeight = 
168.;
 
 @implementation VLCLibraryAlbumTableCellView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryAlbumTableCellView*)[NSView 
fromNibNamed:@"VLCLibraryAlbumTableCellView"
-                                                     
withClass:[VLCLibraryAlbumTableCellView class]
-                                                     withOwner:owner];
-}
-
 + (CGFloat)defaultHeight
 {
     return VLCLibraryAlbumTableCellViewDefaultHeight;


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTracksTableViewDelegate.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryAlbumTracksTableViewDelegate.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "library/audio-library/VLCLibrarySongTableCellView.h"
 
 @implementation VLCLibraryAlbumTracksTableViewDelegate
@@ -31,10 +33,14 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = VLCAudioLibrarySongCellIdentifier;
-        self.cellViewClass = [VLCLibrarySongTableCellView class];
     }
     return self;
 }
 
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView
+{
+    return [VLCLibrarySongTableCellView fromNibWithOwner:self];
+}
+
 
 @end


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryAudioDataSource.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "main/VLCMain.h"
 
 #import "library/VLCInputItem.h"


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioGroupTableViewDelegate.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryAudioGroupTableViewDelegate.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "VLCLibraryAlbumTableCellView.h"
 #import "VLCLibraryAudioDataSource.h"
 
@@ -35,11 +37,15 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = VLCAudioLibraryCellIdentifier;
-        self.cellViewClass = [VLCLibraryAlbumTableCellView class];
     }
     return self;
 }
 
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView
+{
+    return [VLCLibraryAlbumTableCellView fromNibWithOwner:self];
+}
+
 - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)rowIndex
 {
     // We use this with nested table views, since the table view cell is the 
VLCLibraryAlbumTableCellView.


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioTableViewDelegate.m
=====================================
@@ -38,7 +38,6 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = VLCAudioLibraryCellIdentifier;
-        self.cellViewClass = [VLCLibraryTableCellView class];
     }
     return self;
 }


=====================================
modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.h
=====================================
@@ -34,8 +34,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 extern NSString *VLCAudioLibrarySongCellIdentifier;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 @property (readwrite, weak) IBOutlet VLCTrackingView *trackingView;
 @property (readwrite, weak) IBOutlet NSTextField *songNameTextField;
 @property (readwrite, weak) IBOutlet NSTextField *durationTextField;


=====================================
modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.m
=====================================
@@ -52,13 +52,6 @@ NSString *VLCAudioLibrarySongCellIdentifier = 
@"VLCAudioLibrarySongCellIdentifie
 
 @implementation VLCLibrarySongTableCellView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibrarySongTableCellView*)[NSView 
fromNibNamed:@"VLCLibrarySongTableCellView"
-                                                     
withClass:[VLCLibrarySongTableCellView class]
-                                                     withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     self.playInstantlyButton.target = self;


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.h
=====================================
@@ -32,8 +32,6 @@ NS_ASSUME_NONNULL_BEGIN
 @property (readwrite, weak) IBOutlet NSButton *openCaptureDeviceButton;
 @property (readwrite, weak) IBOutlet NSButton *openBrowseButton;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 - (IBAction)openFileAction:(id)sender;
 - (IBAction)openDiscAction:(id)sender;
 - (IBAction)openUrlAction:(id)sender;


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.m
=====================================
@@ -30,14 +30,6 @@
 
 @implementation VLCLibraryHomeViewActionsView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryHomeViewActionsView*)[NSView 
fromNibNamed:@"VLCLibraryHomeViewActionsView"
-                                                      
withClass:VLCLibraryHomeViewActionsView.class
-                                                      withOwner:owner];
-}
-
-
 - (void)awakeFromNib
 {
     [super awakeFromNib];


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewStackViewController.m
=====================================
@@ -25,6 +25,8 @@
 #import "library/VLCLibraryCollectionViewDelegate.h"
 #import "library/VLCLibraryCollectionViewFlowLayout.h"
 #import "library/VLCLibraryCollectionViewSupplementaryElementView.h"
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "library/VLCLibraryController.h"
 #import "library/VLCLibraryHeroView.h"
 #import "library/VLCLibraryModel.h"


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerViewDataSource.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryHomeViewVideoContainerViewDataSource.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "library/VLCLibraryCarouselViewItemView.h"
 #import "library/VLCLibraryCollectionViewFlowLayout.h"
 #import "library/VLCLibraryCollectionViewItem.h"


=====================================
modules/gui/macosx/library/video-library/VLCLibraryVideoTableViewDelegate.m
=====================================
@@ -41,7 +41,6 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = @"VLCVideoLibraryTableViewCellIdentifier";
-        self.cellViewClass = [VLCLibraryTableCellView class];
     }
     return self;
 }


=====================================
modules/gui/macosx/playqueue/VLCPlayQueueDataSource.m
=====================================
@@ -23,6 +23,7 @@
 #import "VLCPlayQueueDataSource.h"
 
 #import "extensions/NSString+Helpers.h"
+#import "extensions/NSView+VLCAdditions.h"
 #import "main/VLCMain.h"
 #import "playqueue/VLCPlayQueueController.h"
 #import "playqueue/VLCPlayQueueTableCellView.h"
@@ -72,20 +73,11 @@ static NSString *VLCPlayQueueCellIdentifier = 
@"VLCPlayQueueCellIdentifier";
         [tableView makeViewWithIdentifier:VLCPlayQueueCellIdentifier 
owner:self];
 
     if (cellView == nil) {
-        /* the following code saves us an instance of NSViewController which 
we don't need */
-        NSNib *nib = [[NSNib alloc] 
initWithNibNamed:@"VLCPlayQueueTableCellView" bundle:nil];
-        NSArray *topLevelObjects;
-        if (![nib instantiateWithOwner:self topLevelObjects:&topLevelObjects]) 
{
+        cellView = [VLCPlayQueueTableCellView fromNibWithOwner:self];
+        if (cellView == nil) {
             msg_Err(getIntf(), "Failed to load nib file to show playlist 
items");
             return nil;
         }
-
-        for (id topLevelObject in topLevelObjects) {
-            if ([topLevelObject isKindOfClass:[VLCPlayQueueTableCellView 
class]]) {
-                cellView = topLevelObject;
-                break;
-            }
-        }
         cellView.identifier = VLCPlayQueueCellIdentifier;
     }
 


=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h
=====================================
@@ -26,8 +26,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface VLCMainVideoViewAudioMediaDecorativeView : NSView
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 @property (readwrite, strong) IBOutlet NSImageView *foregroundCoverArtView;
 @property (readwrite, strong) IBOutlet NSImageView *backgroundCoverArtView;
 @property (readwrite, strong) IBOutlet NSVisualEffectView 
*backgroundVisualEffectView;


=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m
=====================================
@@ -44,13 +44,6 @@
 
 @implementation VLCMainVideoViewAudioMediaDecorativeView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCMainVideoViewAudioMediaDecorativeView*)[NSView 
fromNibNamed:@"VLCMainVideoViewAudioMediaDecorativeView"
-                                                                 
withClass:[VLCMainVideoViewAudioMediaDecorativeView class]
-                                                                 
withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     _lyricsEntries = @[];



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/fc961c9941054d751760dbd60ab68d2251f558b4

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/fc961c9941054d751760dbd60ab68d2251f558b4
You're receiving this email because of your account on code.videolan.org.


_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to