+#pragma mark - Subtitles Menu
+- (IBAction)addSubtitleFile:(id)sender
+{
+ NSInteger i_returnValue = 0;
+ input_thread_t * p_input = pl_CurrentInput(VLCIntf);
+ if (!p_input)
+ return;
+
+ input_item_t *p_item = input_GetItem(p_input);
+ if (!p_item) {
+ vlc_object_release(p_input);
+ return;
+ }
+
+ char *path = input_item_GetURI(p_item);
+
+ if (!path)
+ path = strdup("");
+
+ NSOpenPanel * openPanel = [NSOpenPanel openPanel];
+ [openPanel setCanChooseFiles: YES];
+ [openPanel setCanChooseDirectories: NO];
+ [openPanel setAllowsMultipleSelection: YES];
+
+ [openPanel setAllowedFileTypes: [NSArray arrayWithObjects:@"cdg",@"idx",@"srt",@"sub",@"utf",@"ass",@"ssa",@"aqt",@"jss",@"psb",@"rt",@"smi",@"txt",@"smil",nil]];
+
+ NSURL *o_url = [NSURL URLWithString:[[NSString stringWithUTF8String:path] stringByExpandingTildeInPath]];
+ o_url = [o_url URLByDeletingLastPathComponent];
+ [openPanel setDirectoryURL: o_url];
+ free(path);
+
+ i_returnValue = [openPanel runModal];
+
+ if (i_returnValue == NSOKButton) {
+ NSUInteger c = 0;
+ if (!p_input)
+ return;
+
+ c = [[openPanel URLs] count];
+
+ for (int i = 0; i < c ; i++) {
+ msg_Dbg(VLCIntf, "loading subs from %s", [[[[openPanel URLs] objectAtIndex:i] path] UTF8String]);
+ if (input_AddSubtitle(p_input, [[[[openPanel URLs] objectAtIndex:i] path] UTF8String], TRUE))
+ msg_Warn(VLCIntf, "unable to load subtitles from '%s'",
+ [[[[openPanel URLs] objectAtIndex:i] path] UTF8String]);
+ }
+ }
+ vlc_object_release(p_input);
+}
+
+- (IBAction)switchSubtitleOption:(id)sender
+{
+ int intValue = [sender tag];
+ NSString *representedObject = [sender representedObject];
+
+ config_PutInt(p_intf, [representedObject UTF8String], intValue);
+
+ NSMenu *menu = [sender menu];
+ NSUInteger count = [menu numberOfItems];
+ for (NSUInteger x = 0; x < count; x++)
+ [[menu itemAtIndex:x] setState:NSOffState];
+ [[menu itemWithTag:intValue] setState:NSOnState];
+}
+
+- (IBAction)switchSubtitleBackgroundOpacity:(id)sender
+{
+ config_PutInt(p_intf, "freetype-background-opacity", [sender intValue]);
+}
+
+- (IBAction)telxTransparent:(id)sender
+{
+ vlc_object_t *p_vbi;
+ p_vbi = (vlc_object_t *) vlc_object_find_name(pl_Get(VLCIntf), "zvbi");
+ if (p_vbi) {
+ var_SetBool(p_vbi, "vbi-opaque", [sender state]);
+ [sender setState: ![sender state]];
+ vlc_object_release(p_vbi);
+ }
+}
+
+- (IBAction)telxNavLink:(id)sender
+{
+ intf_thread_t * p_intf = VLCIntf;
+ vlc_object_t *p_vbi;
+ int i_page = 0;
+
+ if ([[sender title] isEqualToString: _NS("Index")])
+ i_page = 'i' << 16;
+ else if ([[sender title] isEqualToString: _NS("Red")])
+ i_page = 'r' << 16;
+ else if ([[sender title] isEqualToString: _NS("Green")])
+ i_page = 'g' << 16;
+ else if ([[sender title] isEqualToString: _NS("Yellow")])
+ i_page = 'y' << 16;
+ else if ([[sender title] isEqualToString: _NS("Blue")])
+ i_page = 'b' << 16;
+ if (i_page == 0) return;
+
+ p_vbi = (vlc_object_t *) vlc_object_find_name(pl_Get(VLCIntf), "zvbi");
+ if (p_vbi) {
+ var_SetInteger(p_vbi, "vbi-page", i_page);
+ vlc_object_release(p_vbi);
+ }
+}
+