From a31d272bcaad1d9dab997ae56d0238808f6d7b21 Mon Sep 17 00:00:00 2001 From: Claudio Cambra <developer@claudiocambra.com> Date: Sun, 26 May 2024 18:20:58 +0800 Subject: [PATCH] macosx: Change represented object properties in library menu controller to use arrays Signed-off-by: Claudio Cambra <developer@claudiocambra.com> --- .../library/VLCLibraryCollectionViewItem.m | 4 +- .../macosx/library/VLCLibraryMenuController.h | 4 +- .../macosx/library/VLCLibraryMenuController.m | 59 ++++++++++--------- .../gui/macosx/library/VLCLibraryTableView.m | 4 +- .../VLCMediaSourceCollectionViewItem.m | 4 +- 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m b/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m index 1bb2e0c49dca..9b8f001fc37e 100644 --- a/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m +++ b/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m @@ -290,7 +290,7 @@ const CGFloat VLCLibraryCollectionViewItemMaximumDisplayedProgress = 0.95; _menuController = [[VLCLibraryMenuController alloc] init]; } - [_menuController setRepresentedItem:self.representedItem]; + [_menuController setRepresentedItems:@[self.representedItem]]; [_menuController popupMenuWithEvent:theEvent forView:self.view]; } else if (self.deselectWhenClickedIfSelected && self.selected && @@ -320,7 +320,7 @@ const CGFloat VLCLibraryCollectionViewItemMaximumDisplayedProgress = 0.95; _menuController = [[VLCLibraryMenuController alloc] init]; } - [_menuController setRepresentedItem:self.representedItem]; + [_menuController setRepresentedItems:@[self.representedItem]]; [_menuController popupMenuWithEvent:theEvent forView:self.view]; [super rightMouseDown:theEvent]; diff --git a/modules/gui/macosx/library/VLCLibraryMenuController.h b/modules/gui/macosx/library/VLCLibraryMenuController.h index ec40ba3a1e90..ccf696e332ad 100644 --- a/modules/gui/macosx/library/VLCLibraryMenuController.h +++ b/modules/gui/macosx/library/VLCLibraryMenuController.h @@ -31,8 +31,8 @@ NS_ASSUME_NONNULL_BEGIN @interface VLCLibraryMenuController : NSObject @property (readonly) NSMenu *libraryMenu; -@property (readwrite, strong, nonatomic) VLCLibraryRepresentedItem *representedItem; -@property (readwrite, strong, nonatomic) VLCInputItem *representedInputItem; +@property (readwrite, strong, nonatomic) NSArray<VLCLibraryRepresentedItem *> *representedItems; +@property (readwrite, strong, nonatomic) NSArray<VLCInputItem *> *representedInputItems; - (void)popupMenuWithEvent:(NSEvent *)theEvent forView:(NSView *)theView; diff --git a/modules/gui/macosx/library/VLCLibraryMenuController.m b/modules/gui/macosx/library/VLCLibraryMenuController.m index 2c7ee7303616..cba6b4370425 100644 --- a/modules/gui/macosx/library/VLCLibraryMenuController.m +++ b/modules/gui/macosx/library/VLCLibraryMenuController.m @@ -108,15 +108,16 @@ - (void)updateMenuItems { - if (_representedItem != nil) { + if (self.representedItems != nil && self.representedItems.count > 0) { [self menuItems:_inputItemRequiringMenuItems setHidden:YES]; [self menuItems:_localInputItemRequiringMenuItems setHidden:YES]; [self menuItems:_mediaItemRequiringMenuItems setHidden:NO]; - } else if (_representedInputItem != nil) { + } else if (_representedInputItems != nil && self.representedInputItems.count > 0) { [self menuItems:_mediaItemRequiringMenuItems setHidden:YES]; [self menuItems:_inputItemRequiringMenuItems setHidden:NO]; - [self menuItems:_localInputItemRequiringMenuItems setHidden:_representedInputItem.isStream]; + [self menuItems:_localInputItemRequiringMenuItems + setHidden:self.representedInputItems.firstObject.isStream]; } } @@ -131,27 +132,27 @@ playImmediately:(BOOL)playImmediately { NSParameterAssert(inputItem); - [VLCMain.sharedInstance.playlistController addInputItem:_representedInputItem.vlcInputItem + [VLCMain.sharedInstance.playlistController addInputItem:_representedInputItems.firstObject.vlcInputItem atPosition:-1 startPlayback:playImmediately]; } - (void)play:(id)sender { - if (self.representedItem != nil) { - [self.representedItem play]; - } else if (self.representedInputItem != nil) { - [self addInputItemToPlaylist:self.representedInputItem + if (self.representedItems != nil && self.representedItems.count > 0) { + [self.representedItems.firstObject play]; + } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) { + [self addInputItemToPlaylist:self.representedInputItems.firstObject playImmediately:YES]; } } - (void)appendToPlaylist:(id)sender { - if (self.representedInputItem != nil) { - [self.representedItem queue]; - } else if (self.representedInputItem != nil) { - [self addInputItemToPlaylist:self.representedInputItem + if (self.representedInputItems != nil && self.representedInputItems.count > 0) { + [self.representedItems.firstObject queue]; + } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) { + [self addInputItemToPlaylist:self.representedInputItems.firstObject playImmediately:NO]; } } @@ -175,19 +176,19 @@ - (void)revealInFinder:(id)sender { - if (self.representedItem != nil) { - [self.representedItem revealInFinder]; - } else if (_representedInputItem != nil) { - [_representedInputItem revealInFinder]; + if (self.representedItems != nil && self.representedItems.count > 0) { + [self.representedItems.firstObject revealInFinder]; + } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) { + [self.representedInputItems.firstObject revealInFinder]; } } - (void)moveToTrash:(id)sender { - if (self.representedItem != nil) { - [self.representedItem moveToTrash]; - } else if (_representedInputItem != nil) { - [_representedInputItem moveToTrash]; + if (self.representedItems != nil && self.representedItems.count > 0) { + [self.representedItems.firstObject moveToTrash]; + } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) { + [self.representedInputItems.firstObject moveToTrash]; } } @@ -197,31 +198,31 @@ _informationWindowController = [[VLCInformationWindowController alloc] init]; } - const id<VLCMediaLibraryItemProtocol> actualItem = self.representedItem.item; + const id<VLCMediaLibraryItemProtocol> actualItem = self.representedItems.firstObject.item; if (actualItem != nil) { if ([actualItem isKindOfClass:VLCAbstractMediaLibraryAudioGroup.class]) { [_informationWindowController setRepresentedMediaLibraryAudioGroup:(VLCAbstractMediaLibraryAudioGroup *)actualItem]; } else { [_informationWindowController setRepresentedInputItem:actualItem.firstMediaItem.inputItem]; } - } else if (_representedInputItem != nil) { - _informationWindowController.representedInputItem = _representedInputItem; + } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) { + _informationWindowController.representedInputItem = self.representedInputItems.firstObject; } [_informationWindowController toggleWindow:sender]; } -- (void)setRepresentedItem:(VLCLibraryRepresentedItem *)item +- (void)setRepresentedItems:(NSArray<VLCLibraryRepresentedItem *> *)items { - _representedItem = item; - _representedInputItem = nil; + _representedItems = items; + _representedInputItems = nil; [self updateMenuItems]; } -- (void)setRepresentedInputItem:(VLCInputItem *)representedInputItem +- (void)setRepresentedInputItem:(NSArray<VLCInputItem *> *)representedInputItems { - _representedInputItem = representedInputItem; - _representedItem = nil; + _representedInputItems = representedInputItems; + _representedItems = nil; [self updateMenuItems]; } diff --git a/modules/gui/macosx/library/VLCLibraryTableView.m b/modules/gui/macosx/library/VLCLibraryTableView.m index ec57b7dfba2e..2d55072ec7f6 100644 --- a/modules/gui/macosx/library/VLCLibraryTableView.m +++ b/modules/gui/macosx/library/VLCLibraryTableView.m @@ -89,7 +89,7 @@ [[VLCLibraryRepresentedItem alloc] initWithItem:mediaItem parentType:parentType]; [representedItems addObject:representedItem]; }]; - [_menuController setRepresentedItem:representedItems.firstObject]; + _menuController.representedItems = representedItems; } else if (self.dataSource.class == VLCMediaSourceDataSource.class) { NSMutableArray<VLCInputItem *> * const mediaSourceInputItems = NSMutableArray.array; @@ -102,7 +102,7 @@ [mediaSourceDataSource mediaSourceInputItemAtRow:index]; [mediaSourceInputItems addObject:mediaSourceInputItem]; }]; - [_menuController setRepresentedInputItem:mediaSourceInputItems.firstObject]; + _menuController.representedInputItems = mediaSourceInputItems; } } diff --git a/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m b/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m index f1b9c0567c23..15384a4cab8a 100644 --- a/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m +++ b/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m @@ -171,7 +171,7 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier"; _menuController = [[VLCLibraryMenuController alloc] init]; } - [_menuController setRepresentedInputItem:_representedInputItem]; + [_menuController setRepresentedInputItems:@[_representedInputItem]]; [_menuController popupMenuWithEvent:theEvent forView:self.view]; } @@ -184,7 +184,7 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier"; _menuController = [[VLCLibraryMenuController alloc] init]; } - [_menuController setRepresentedInputItem:_representedInputItem]; + [_menuController setRepresentedInputItems:@[_representedInputItem]]; [_menuController popupMenuWithEvent:theEvent forView:self.view]; [super rightMouseDown:theEvent]; -- GitLab