* intf_vlc_wrapper.c: MacOS X plugin for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: intf_vlc_wrapper.c,v 1.13 2002/05/09 16:15:15 jlj Exp $
+ * $Id: intf_vlc_wrapper.c,v 1.14 2002/05/12 01:39:36 massiot Exp $
*
* Authors: Florian G. Pflug <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
return( 1 );
}
-#if 0
if( p_input_bank->pp_input[0] != NULL )
{
vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );
vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );
}
- else
+ else if ( !p_main->p_intf->p_sys->b_disabled_menus )
{
[self setupMenus];
}
-#endif
return( 0 );
}
config_PutIntVariable( "channel_port", i_port );
}
+- (void)toggleProgram:(id)sender
+{
+ NSMenuItem * o_item = (NSMenuItem *)sender;
+ input_thread_t * p_input = p_input_bank->pp_input[0];
+
+ if( [o_item state] == NSOffState )
+ {
+ u16 i_program_id = [o_item tag];
+
+ input_ChangeProgram( p_input, i_program_id );
+
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+ [self setupMenus];
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+ input_SetStatus( p_input, INPUT_STATUS_PLAY );
+ }
+}
+
+- (void)toggleTitle:(id)sender
+{
+ NSMenuItem * o_item = (NSMenuItem *)sender;
+ input_thread_t * p_input = p_input_bank->pp_input[0];
+
+ if( [o_item state] == NSOffState )
+ {
+ int i_title = [o_item tag];
+
+ input_ChangeArea( p_input,
+ p_input->stream.pp_areas[i_title] );
+
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+ [self setupMenus];
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+ input_SetStatus( p_input, INPUT_STATUS_PLAY );
+ }
+}
+
+- (void)toggleChapter:(id)sender
+{
+ NSMenuItem * o_item = (NSMenuItem *)sender;
+ input_thread_t * p_input = p_input_bank->pp_input[0];
+
+ if( [o_item state] == NSOffState )
+ {
+ int i_chapter = [o_item tag];
+
+ p_input->stream.p_selected_area->i_part = i_chapter;
+ input_ChangeArea( p_input,
+ p_input->stream.p_selected_area );
+
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+ [self setupMenus];
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+ input_SetStatus( p_input, INPUT_STATUS_PLAY );
+ }
+}
+
+- (void)toggleLanguage:(id)sender
+{
+ NSMenuItem * o_item = (NSMenuItem *)sender;
+ input_thread_t * p_input = p_input_bank->pp_input[0];
+
+ int i_es = [o_item tag];
+
+ input_ToggleES( p_input, p_input->stream.pp_es[i_es],
+ [o_item state] == NSOffState );
+
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+ [self setupMenus];
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+ input_SetStatus( p_input, INPUT_STATUS_PLAY );
+}
+
+- (void)toggleSubtitle:(id)sender
+{
+ NSMenuItem * o_item = (NSMenuItem *)sender;
+ input_thread_t * p_input = p_input_bank->pp_input[0];
+
+ int i_es = [o_item tag];
+
+ input_ToggleES( p_input, p_input->stream.pp_es[i_es],
+ [o_item state] == NSOffState );
+
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+ [self setupMenus];
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+ input_SetStatus( p_input, INPUT_STATUS_PLAY );
+}
+
- (void)setupMenus
{
-#if 0
NSMenu *o_main_menu;
NSMenuItem *o_controls_item;
- NSMenuItem *o_program_item;
+ NSMenuItem *o_program_item, *o_title_item, *o_chapter_item, *o_language_item,
+ *o_subtitle_item;
+ input_thread_t * p_input = p_input_bank->pp_input[0];
o_main_menu = [NSApp mainMenu];
o_controls_item = [o_main_menu itemWithTitle: @"Controls"];
o_program_item = [[o_controls_item submenu] itemWithTitle: @"Program"];
-
- if( p_input_bank->pp_input[0] == NULL )
- {
- NSMenu * o_program = [o_program_item submenu];
-// [o_program_item setEnabled:0];
-// [o_program removeItemAtIndex:0];
- [o_program addItemWithTitle: @"Toto" action: nil keyEquivalent: @""];
+ o_title_item = [[o_controls_item submenu] itemWithTitle: @"Title"];
+ o_chapter_item = [[o_controls_item submenu] itemWithTitle: @"Chapter"];
+ o_language_item = [[o_controls_item submenu] itemWithTitle: @"Language"];
+ o_subtitle_item = [[o_controls_item submenu] itemWithTitle: @"Subtitles"];
+
+ if( p_input == NULL )
+ {
+ [o_program_item setEnabled:0];
+ [o_title_item setEnabled:0];
+ [o_chapter_item setEnabled:0];
+ [o_language_item setEnabled:0];
+ [o_subtitle_item setEnabled:0];
}
else
{
- NSMenu * o_program = [o_program_item submenu];
-// [o_program_item setEnabled:1];
-// [o_program removeItemAtIndex:0];
- [o_program addItemWithTitle: @"Toto" action: nil keyEquivalent: @""];
+ NSMenu *o_program, *o_title, *o_chapter, *o_language, *o_subtitle;
+ SEL pf_toggle_program, pf_toggle_title, pf_toggle_chapter,
+ pf_toggle_language, pf_toggle_subtitle;
+
+ int i, i_nb_items;
+ pgrm_descriptor_t * p_pgrm;
+
+ /* ----- PROGRAMS ----- */
+ if( p_input->stream.i_pgrm_number < 2 )
+ {
+ [o_program_item setEnabled:0];
+ }
+ else
+ {
+ [o_program_item setEnabled:1];
+ o_program = [o_program_item submenu];
+ pf_toggle_program = @selector(toggleProgram:);
+
+ /* Remove previous program menu */
+ i_nb_items = [o_program numberOfItems];
+ for( i = 0; i < i_nb_items; i++ )
+ {
+ [o_program removeItemAtIndex:0];
+ }
+
+ if( p_input->stream.p_new_program )
+ {
+ p_pgrm = p_input->stream.p_new_program;
+ }
+ else
+ {
+ p_pgrm = p_input->stream.p_selected_program;
+ }
+
+ /* Create program menu */
+ for( i = 0 ; i < p_input->stream.i_pgrm_number ; i++ )
+ {
+ char psz_title[ 256 ];
+ NSString * o_menu_title;
+ NSMenuItem * o_item;
+
+ snprintf( psz_title, sizeof(psz_title), "id %d",
+ p_input->stream.pp_programs[i]->i_number );
+ psz_title[sizeof(psz_title) - 1] = '\0';
+
+ o_menu_title = [NSString stringWithCString: psz_title];
+
+ o_item = [o_program addItemWithTitle: o_menu_title
+ action: pf_toggle_program keyEquivalent: @""];
+ [o_item setTarget: self];
+ [o_item setTag: p_input->stream.pp_programs[i]->i_number];
+ if( p_pgrm == p_input->stream.pp_programs[i] )
+ {
+ [o_item setState: 1];
+ }
+ }
+ }
+
+ /* ----- TITLES ----- */
+ if( p_input->stream.i_area_nb < 2 )
+ {
+ [o_title_item setEnabled:0];
+ }
+ else
+ {
+ [o_title_item setEnabled:1];
+ o_title = [o_title_item submenu];
+ pf_toggle_title = @selector(toggleTitle:);
+
+ /* Remove previous title menu */
+ i_nb_items = [o_title numberOfItems];
+ for( i = 0; i < i_nb_items; i++ )
+ {
+ [o_title removeItemAtIndex:0];
+ }
+
+ /* Create title menu */
+ for( i = 1 ; i < p_input->stream.i_area_nb ; i++ )
+ {
+ char psz_title[ 256 ];
+ NSString * o_menu_title;
+ NSMenuItem * o_item;
+
+ snprintf( psz_title, sizeof(psz_title), "Title %d (%d)", i,
+ p_input->stream.pp_areas[i]->i_part_nb );
+ psz_title[sizeof(psz_title) - 1] = '\0';
+
+ o_menu_title = [NSString stringWithCString: psz_title];
+
+ o_item = [o_title addItemWithTitle: o_menu_title
+ action: pf_toggle_title keyEquivalent: @""];
+ [o_item setTag: i];
+ [o_item setTarget: self];
+ if( ( p_input->stream.pp_areas[i] ==
+ p_input->stream.p_selected_area ) )
+ {
+ [o_item setState: 1];
+ }
+ }
+ }
+
+ /* ----- CHAPTERS ----- */
+ if( p_input->stream.p_selected_area->i_part_nb < 2 )
+ {
+ [o_chapter_item setEnabled:0];
+ }
+ else
+ {
+ [o_chapter_item setEnabled:1];
+ o_chapter = [o_chapter_item submenu];
+ pf_toggle_chapter = @selector(toggleChapter:);
+
+ /* Remove previous chapter menu */
+ i_nb_items = [o_chapter numberOfItems];
+ for( i = 0; i < i_nb_items; i++ )
+ {
+ [o_chapter removeItemAtIndex:0];
+ }
+
+ /* Create chapter menu */
+ for( i = 0 ; i < p_input->stream.p_selected_area->i_part_nb ; i++ )
+ {
+ char psz_title[ 256 ];
+ NSString * o_menu_title;
+ NSMenuItem * o_item;
+
+ snprintf( psz_title, sizeof(psz_title), "Chapter %d", i + 1 );
+ psz_title[sizeof(psz_title) - 1] = '\0';
+
+ o_menu_title = [NSString stringWithCString: psz_title];
+
+ o_item = [o_chapter addItemWithTitle: o_menu_title
+ action: pf_toggle_chapter keyEquivalent: @""];
+ [o_item setTag: i];
+ [o_item setTarget: self];
+ if( ( p_input->stream.p_selected_area->i_part == i + 1 ) )
+ {
+ [o_item setState: 1];
+ }
+ }
+ }
+ p_main->p_intf->p_sys->i_part = p_input->stream.p_selected_area->i_part;
+
+ /* ----- LANGUAGES & SUBTITLES ----- */
+ o_language = [o_language_item submenu];
+ o_subtitle = [o_subtitle_item submenu];
+ pf_toggle_language = @selector(toggleLanguage:);
+ pf_toggle_subtitle = @selector(toggleSubtitle:);
+
+ /* Remove previous language menu */
+ i_nb_items = [o_language numberOfItems];
+ for( i = 0; i < i_nb_items; i++ )
+ {
+ [o_language removeItemAtIndex:0];
+ }
+
+ /* Remove previous subtitle menu */
+ i_nb_items = [o_subtitle numberOfItems];
+ for( i = 0; i < i_nb_items; i++ )
+ {
+ [o_subtitle removeItemAtIndex:0];
+ }
+
+ /* Create language & subtitles menus */
+ for( i = 0 ; i < p_input->stream.i_es_number ; i++ )
+ {
+ es_descriptor_t * p_es = p_input->stream.pp_es[i];
+ if( p_es->p_pgrm != NULL
+ && p_es->p_pgrm != p_input->stream.p_selected_program )
+ {
+ continue;
+ }
+
+ if( p_es->i_cat == AUDIO_ES )
+ {
+ NSString * o_menu_title;
+ NSMenuItem * o_item;
+
+ if( *p_es->psz_desc )
+ {
+ o_menu_title = [NSString stringWithCString: p_es->psz_desc];
+ }
+ else
+ {
+ char psz_title[ 256 ];
+ snprintf( psz_title, sizeof(psz_title), "Language 0x%x",
+ p_es->i_id );
+ psz_title[sizeof(psz_title) - 1] = '\0';
+
+ o_menu_title = [NSString stringWithCString: psz_title];
+ }
+
+ o_item = [o_language addItemWithTitle: o_menu_title
+ action: pf_toggle_language keyEquivalent: @""];
+ [o_item setTag: i];
+ [o_item setTarget: self];
+ if( p_es->p_decoder_fifo != NULL )
+ {
+ [o_item setState: 1];
+ }
+ }
+ else if( p_es->i_cat == SPU_ES )
+ {
+ NSString * o_menu_title;
+ NSMenuItem * o_item;
+
+ if( *p_es->psz_desc )
+ {
+ o_menu_title = [NSString stringWithCString: p_es->psz_desc];
+ }
+ else
+ {
+ char psz_title[ 256 ];
+ snprintf( psz_title, sizeof(psz_title), "Subtitle 0x%x",
+ p_es->i_id );
+ psz_title[sizeof(psz_title) - 1] = '\0';
+
+ o_menu_title = [NSString stringWithCString: psz_title];
+ }
+
+ o_item = [o_subtitle addItemWithTitle: o_menu_title
+ action: pf_toggle_subtitle keyEquivalent: @""];
+ [o_item setTag: i];
+ [o_item setTarget: self];
+ if( p_es->p_decoder_fifo != NULL )
+ {
+ [o_item setState: 1];
+ }
+ }
+ }
+
+ if( [o_language numberOfItems] )
+ {
+ [o_language_item setEnabled: 1];
+ }
+ else
+ {
+ [o_language_item setEnabled: 0];
+ }
+ if( [o_subtitle numberOfItems] )
+ {
+ [o_subtitle_item setEnabled: 1];
+ }
+ else
+ {
+ [o_subtitle_item setEnabled: 0];
+ }
+ p_input->stream.b_changed = 0;
}
-#endif
+
+ p_main->p_intf->p_sys->b_disabled_menus = 1;
}
@end