[vlc-commits] macosx/main menu: reimplement track handling
Felix Paul Kühne
git at videolan.org
Sat Mar 30 18:45:51 CET 2019
vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Sat Mar 30 18:43:36 2019 +0100| [4dafd8604a477f7535be025c12660fbe555728b1] | committer: Felix Paul Kühne
macosx/main menu: reimplement track handling
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4dafd8604a477f7535be025c12660fbe555728b1
---
modules/gui/macosx/menus/VLCMainMenu.m | 94 ++++++++++++++++++++++++++++------
1 file changed, 77 insertions(+), 17 deletions(-)
diff --git a/modules/gui/macosx/menus/VLCMainMenu.m b/modules/gui/macosx/menus/VLCMainMenu.m
index fd53a3295b..8c6d848b0c 100644
--- a/modules/gui/macosx/menus/VLCMainMenu.m
+++ b/modules/gui/macosx/menus/VLCMainMenu.m
@@ -98,8 +98,8 @@
_playerController = _playlistController.playerController;
/* check whether the user runs OSX with a RTL language */
- NSArray* languages = [NSLocale preferredLanguages];
- NSString* preferredLanguage = [languages firstObject];
+ NSArray *languages = [NSLocale preferredLanguages];
+ NSString *preferredLanguage = [languages firstObject];
if ([NSLocale characterDirectionForLanguage:preferredLanguage] == NSLocaleLanguageDirectionRightToLeft) {
msg_Dbg(getIntf(), "adapting interface since '%s' is a RTL language", [preferredLanguage UTF8String]);
@@ -126,6 +126,7 @@
_rendererMenuController = [[VLCRendererMenuController alloc] init];
_rendererMenuController.rendererNoneItem = _rendererNoneItem;
_rendererMenuController.rendererMenu = _rendererMenu;
+ [self updateTrackHandlingMenus:nil];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
@@ -147,11 +148,19 @@
[notificationCenter addObserver:self
selector:@selector(playModeChanged:)
name:VLCPlaybackRepeatChanged
- object:self];
+ object:nil];
[notificationCenter addObserver:self
selector:@selector(playOrderChanged:)
name:VLCPlaybackOrderChanged
- object:self];
+ object:nil];
+ [notificationCenter addObserver:self
+ selector:@selector(updateTrackHandlingMenus:)
+ name:VLCPlayerTrackListChanged
+ object:nil];
+ [notificationCenter addObserver:self
+ selector:@selector(updateTrackHandlingMenus:)
+ name:VLCPlayerCurrentMediaItemChanged
+ object:nil];
[self setupVarMenuItem:_add_intf
target:VLC_OBJECT(getIntf())
@@ -560,16 +569,7 @@
var:"title" selector: @selector(toggleVar:)];
[self setupVarMenuItem:_chapter target: (vlc_object_t *)p_input
- var:"chapter" selector: @selector(toggleVar:)];
-
- [self setupVarMenuItem:_audiotrack target: (vlc_object_t *)p_input
- var:"audio-es" selector: @selector(toggleVar:)];
-
- [self setupVarMenuItem:_videotrack target: (vlc_object_t *)p_input
- var:"video-es" selector: @selector(toggleVar:)];
-
- [self setupVarMenuItem:_subtitle_track target: (vlc_object_t *)p_input
- var:"spu-es" selector: @selector(toggleVar:)];*/
+ var:"chapter" selector: @selector(toggleVar:)];*/
audio_output_t *p_aout = [_playerController mainAudioOutput];
if (p_aout != NULL) {
@@ -639,10 +639,7 @@
[_program setEnabled: b_enabled];
[_title setEnabled: b_enabled];
[_chapter setEnabled: b_enabled];
- [_audiotrack setEnabled: b_enabled];
[_visual setEnabled: b_enabled];
- [_videotrack setEnabled: b_enabled];
- [_subtitle_track setEnabled: b_enabled];
[_channels setEnabled: b_enabled];
[_deinterlace setEnabled: b_enabled];
[_deinterlace_mode setEnabled: b_enabled];
@@ -867,6 +864,69 @@
[_rendererMenuController selectRenderer:sender];
}
+#pragma mark - track handling
+- (void)updateTrackHandlingMenus:(NSNotification *)aNotification
+{
+ size_t numberOfTracks = _playerController.numberOfAudioTracks;
+ NSMutableArray *tracks = [[NSMutableArray alloc] initWithCapacity:numberOfTracks];
+ for (size_t x = 0; x < numberOfTracks; x++) {
+ [tracks addObject:[_playerController audioTrackAtIndex:x]];
+ }
+ [self rebuildTracksMenu:_audiotrackMenu withMetadata:tracks count:numberOfTracks category:AUDIO_ES];
+ _audiotrack.enabled = numberOfTracks > 0 ? YES : NO;
+
+ numberOfTracks = _playerController.numberOfVideoTracks;
+ tracks = [[NSMutableArray alloc] initWithCapacity:numberOfTracks];
+ for (size_t x = 0; x < numberOfTracks; x++) {
+ [tracks addObject:[_playerController videoTrackAtIndex:x]];
+ }
+ [self rebuildTracksMenu:_videotrackMenu withMetadata:tracks count:numberOfTracks category:VIDEO_ES];
+ _videotrack.enabled = numberOfTracks > 0 ? YES : NO;
+
+ numberOfTracks = _playerController.numberOfSubtitleTracks;
+ tracks = [[NSMutableArray alloc] initWithCapacity:numberOfTracks];
+ for (size_t x = 0; x < numberOfTracks; x++) {
+ [tracks addObject:[_playerController subtitleTrackAtIndex:x]];
+ }
+ [self rebuildTracksMenu:_subtitle_tracksMenu withMetadata:tracks count:numberOfTracks category:SPU_ES];
+ _subtitle_track.enabled = numberOfTracks > 0 ? YES : NO;
+}
+
+- (void)rebuildTracksMenu:(NSMenu *)menu withMetadata:(NSArray *)metadataArray count:(size_t)count category:(enum es_format_category_e)category
+{
+ [menu removeAllItems];
+
+ NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:_NS("Disable")
+ action:@selector(unselectTrackCategory:)
+ keyEquivalent:@""];
+ [menuItem setTarget:self];
+ [menuItem setTag:category];
+ [menuItem setEnabled:YES];
+ [menu addItem:menuItem];
+
+ for (NSUInteger x = 0; x < count; x++) {
+ VLCTrackMetaData *metaDataItem = metadataArray[x];
+ menuItem = [[NSMenuItem alloc] initWithTitle:metaDataItem.name
+ action:@selector(selectTrack:)
+ keyEquivalent:@""];
+ [menuItem setTarget:self];
+ [menuItem setRepresentedObject:metaDataItem];
+ [menuItem setEnabled:YES];
+ [menuItem setState:metaDataItem.selected ? NSOnState : NSOffState];
+ [menu addItem:menuItem];
+ }
+}
+
+- (void)selectTrack:(NSMenuItem *)sender
+{
+ [_playerController selectTrack:[sender representedObject]];
+}
+
+- (void)unselectTrackCategory:(NSMenuItem *)sender
+{
+ [_playerController unselectTracksFromCategory:(enum es_format_category_e)sender.tag];
+}
+
#pragma mark - audio menu
- (void)refreshAudioDeviceList
More information about the vlc-commits
mailing list