📄 intf.m
字号:
o_time = [NSString stringWithFormat: @"%d:%02d:%02d", (int) (i_seconds / (60 * 60)), (int) (i_seconds / 60 % 60), (int) (i_seconds % 60)]; [o_timefield setStringValue: o_time]; [[[self getControls] getFSPanel] setStreamPos: f_updated andTime: o_time]; [o_embedded_window setTime: o_time position: f_updated]; } if( p_intf->p_sys->b_volume_update ) { NSString *o_text; int i_volume_step = 0; o_text = [NSString stringWithFormat: _NS("Volume: %d%%"), i_lastShownVolume * 400 / AOUT_VOLUME_MAX]; if( i_lastShownVolume != -1 ) [self setScrollField:o_text stopAfter:1000000]; i_volume_step = config_GetInt( p_intf->p_vlc, "volume-step" ); [o_volumeslider setFloatValue: (float)i_lastShownVolume / i_volume_step]; [o_volumeslider setEnabled: TRUE]; [[[self getControls] getFSPanel] setVolumeLevel: (float)i_lastShownVolume / i_volume_step]; p_intf->p_sys->b_mute = ( i_lastShownVolume == 0 ); p_intf->p_sys->b_volume_update = FALSE; } /* Manage Playing status */ var_Get( p_intf->p_sys->p_input, "state", &val ); if( p_intf->p_sys->i_play_status != val.i_int ) { p_intf->p_sys->i_play_status = val.i_int; [self playStatusUpdated: p_intf->p_sys->i_play_status]; [o_embedded_window playStatusUpdated: p_intf->p_sys->i_play_status]; } } else { p_intf->p_sys->i_play_status = END_S; p_intf->p_sys->b_intf_update = VLC_TRUE; [self playStatusUpdated: p_intf->p_sys->i_play_status]; [o_embedded_window playStatusUpdated: p_intf->p_sys->i_play_status]; [self setSubmenusEnabled: FALSE]; } [self updateMessageArray]; if( (i_end_scroll != -1) && (mdate() > i_end_scroll) ) [self resetScrollField]; [NSTimer scheduledTimerWithTimeInterval: 0.3 target: self selector: @selector(manageIntf:) userInfo: nil repeats: FALSE];}- (void)setupMenus{#define p_input p_intf->p_sys->p_input if( p_input != NULL ) { [o_controls setupVarMenuItem: o_mi_program target: (vlc_object_t *)p_input var: "program" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_title target: (vlc_object_t *)p_input var: "title" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_chapter target: (vlc_object_t *)p_input var: "chapter" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_audiotrack target: (vlc_object_t *)p_input var: "audio-es" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_videotrack target: (vlc_object_t *)p_input var: "video-es" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_subtitle target: (vlc_object_t *)p_input var: "spu-es" selector: @selector(toggleVar:)]; aout_instance_t * p_aout = vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); if ( p_aout != NULL ) { [o_controls setupVarMenuItem: o_mi_channels target: (vlc_object_t *)p_aout var: "audio-channels" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_device target: (vlc_object_t *)p_aout var: "audio-device" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_visual target: (vlc_object_t *)p_aout var: "visual" selector: @selector(toggleVar:)]; vlc_object_release( (vlc_object_t *)p_aout ); } vout_thread_t * p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if ( p_vout != NULL ) { vlc_object_t * p_dec_obj; [o_controls setupVarMenuItem: o_mi_aspect_ratio target: (vlc_object_t *)p_vout var: "aspect-ratio" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_crop target: (vlc_object_t *) p_vout var: "crop" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_screen target: (vlc_object_t *)p_vout var: "video-device" selector: @selector(toggleVar:)]; [o_controls setupVarMenuItem: o_mi_deinterlace target: (vlc_object_t *)p_vout var: "deinterlace" selector: @selector(toggleVar:)]; p_dec_obj = (vlc_object_t *)vlc_object_find( (vlc_object_t *)p_vout, VLC_OBJECT_DECODER, FIND_PARENT ); if ( p_dec_obj != NULL ) { [o_controls setupVarMenuItem: o_mi_ffmpeg_pp target: (vlc_object_t *)p_dec_obj var:"ffmpeg-pp-q" selector: @selector(toggleVar:)]; vlc_object_release(p_dec_obj); } vlc_object_release( (vlc_object_t *)p_vout ); } }#undef p_input}- (void)setScrollField:(NSString *)o_string stopAfter:(int)timeout{ if( timeout != -1 ) i_end_scroll = mdate() + timeout; else i_end_scroll = -1; [o_scrollfield setStringValue: o_string];}- (void)resetScrollField{ i_end_scroll = -1; if( p_intf->p_sys->p_input && !p_intf->p_sys->p_input->b_die ) { NSString *o_temp; playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_playlist == NULL ) { return; } o_temp = [NSString stringWithUTF8String: p_playlist->status.p_item->input.psz_name]; if( o_temp == NULL ) o_temp = [NSString stringWithCString: p_playlist->status.p_item->input.psz_name]; [self setScrollField: o_temp stopAfter:-1]; vlc_object_release( p_playlist ); return; } [self setScrollField: _NS("VLC media player") stopAfter:-1];}- (void)updateMessageArray{ int i_start, i_stop; vlc_value_t quiet; vlc_mutex_lock( p_intf->p_sys->p_sub->p_lock ); i_stop = *p_intf->p_sys->p_sub->pi_stop; vlc_mutex_unlock( p_intf->p_sys->p_sub->p_lock ); if( p_intf->p_sys->p_sub->i_start != i_stop ) { NSColor *o_white = [NSColor whiteColor]; NSColor *o_red = [NSColor redColor]; NSColor *o_yellow = [NSColor yellowColor]; NSColor *o_gray = [NSColor grayColor]; NSColor * pp_color[4] = { o_white, o_red, o_yellow, o_gray }; static const char * ppsz_type[4] = { ": ", " error: ", " warning: ", " debug: " }; for( i_start = p_intf->p_sys->p_sub->i_start; i_start != i_stop; i_start = (i_start+1) % VLC_MSG_QSIZE ) { NSString *o_msg; NSDictionary *o_attr; NSAttributedString *o_msg_color; int i_type = p_intf->p_sys->p_sub->p_msg[i_start].i_type; [o_msg_lock lock]; if( [o_msg_arr count] + 2 > 400 ) { unsigned rid[] = { 0, 1 }; [o_msg_arr removeObjectsFromIndices: (unsigned *)&rid numIndices: sizeof(rid)/sizeof(rid[0])]; } o_attr = [NSDictionary dictionaryWithObject: o_gray forKey: NSForegroundColorAttributeName]; o_msg = [NSString stringWithFormat: @"%s%s", p_intf->p_sys->p_sub->p_msg[i_start].psz_module, ppsz_type[i_type]]; o_msg_color = [[NSAttributedString alloc] initWithString: o_msg attributes: o_attr]; [o_msg_arr addObject: [o_msg_color autorelease]]; o_attr = [NSDictionary dictionaryWithObject: pp_color[i_type] forKey: NSForegroundColorAttributeName]; o_msg = [NSString stringWithFormat: @"%s\n", p_intf->p_sys->p_sub->p_msg[i_start].psz_msg]; o_msg_color = [[NSAttributedString alloc] initWithString: o_msg attributes: o_attr]; [o_msg_arr addObject: [o_msg_color autorelease]]; [o_msg_lock unlock]; var_Get( p_intf->p_vlc, "verbose", &quiet ); if( i_type == 1 && quiet.i_int > -1 ) { NSString *o_my_msg = [NSString stringWithFormat: @"%s: %s\n", p_intf->p_sys->p_sub->p_msg[i_start].psz_module, p_intf->p_sys->p_sub->p_msg[i_start].psz_msg]; NSRange s_r = NSMakeRange( [[o_err_msg string] length], 0 ); [o_err_msg setEditable: YES]; [o_err_msg setSelectedRange: s_r]; [o_err_msg insertText: o_my_msg]; [o_error makeKeyAndOrderFront: self]; [o_err_msg setEditable: NO]; } } vlc_mutex_lock( p_intf->p_sys->p_sub->p_lock ); p_intf->p_sys->p_sub->i_start = i_start; vlc_mutex_unlock( p_intf->p_sys->p_sub->p_lock ); }}- (void)playStatusUpdated:(int)i_status{ if( i_status == PLAYING_S ) { [[[self getControls] getFSPanel] setPause]; [o_btn_play setImage: o_img_pause]; [o_btn_play setAlternateImage: o_img_pause_pressed]; [o_btn_play setToolTip: _NS("Pause")]; [o_mi_play setTitle: _NS("Pause")]; [o_dmi_play setTitle: _NS("Pause")]; [o_vmi_play setTitle: _NS("Pause")]; } else { [[[self getControls] getFSPanel] setPlay]; [o_btn_play setImage: o_img_play]; [o_btn_play setAlternateImage: o_img_play_pressed]; [o_btn_play setToolTip: _NS("Play")]; [o_mi_play setTitle: _NS("Play")]; [o_dmi_play setTitle: _NS("Play")]; [o_vmi_play setTitle: _NS("Play")]; }}- (void)setSubmenusEnabled:(BOOL)b_enabled{ [o_mi_program setEnabled: b_enabled]; [o_mi_title setEnabled: b_enabled]; [o_mi_chapter setEnabled: b_enabled]; [o_mi_audiotrack setEnabled: b_enabled]; [o_mi_visual setEnabled: b_enabled]; [o_mi_videotrack setEnabled: b_enabled]; [o_mi_subtitle setEnabled: b_enabled]; [o_mi_channels setEnabled: b_enabled]; [o_mi_deinterlace setEnabled: b_enabled]; [o_mi_ffmpeg_pp setEnabled: b_enabled]; [o_mi_device setEnabled: b_enabled]; [o_mi_screen setEnabled: b_enabled]; [o_mi_aspect_ratio setEnabled: b_enabled]; [o_mi_crop setEnabled: b_enabled];}- (void)manageVolumeSlider{ audio_volume_t i_volume; aout_VolumeGet( p_intf, &i_volume ); if( i_volume != i_lastShownVolume ) { i_lastShownVolume = i_volume; p_intf->p_sys->b_volume_update = TRUE; }}- (IBAction)timesliderUpdate:(id)sender{#define p_input p_intf->p_sys->p_input float f_updated; switch( [[NSApp currentEvent] type] ) { case NSLeftMouseUp: case NSLeftMouseDown: case NSLeftMouseDragged: f_updated = [sender floatValue]; break; default: return; } if( p_input != NULL ) { vlc_value_t time; vlc_value_t pos; mtime_t i_seconds; NSString * o_time; pos.f_float = f_updated / 10000.; var_Set( p_input, "position", pos ); [o_timeslider setFloatValue: f_updated]; var_Get( p_input, "time", &time ); i_seconds = time.i_time / 1000000; o_time = [NSString stringWithFormat: @"%d:%02d:%02d", (int) (i_seconds / (60 * 60)), (int) (i_seconds / 60 % 60), (int) (i_seconds % 60)]; [o_timefield setStringValue: o_time]; [[[self getControls] getFSPanel] setStreamPos: f_updated andTime: o_time]; [o_embedded_window setTime: o_time position: f_updated]; }#undef p_input}- (void)terminate{ playlist_t * p_playlist; vout_thread_t * p_vout;#define p_input p_intf->p_sys->p_input if( p_input ) { vlc_object_release( p_input ); p_input = NULL; }#undef p_input /* Stop playback */ if( ( p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ) ) ) { playlist_Stop( p_playlist ); vlc_object_release( p_playlist ); } /* FIXME - Wait here until all vouts are terminated because libvlc's VLC_CleanUp destroys interfaces before vouts, which isn't good on OS X. We definitly need a cleaner way to handle this, but this may hopefully be good enough for now. -- titer 2003/11/22 */ while( ( p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ) ) ) { vlc_object_release( p_vout ); msleep( 100000 ); } msleep( 500000 ); /* save the prefs if they were changed in the extended panel */ if (o_extended && [o_extended getConfigChanged]) { [o_extended savePrefs]; } p_intf->b_interaction = VLC_FALSE; var_DelCallback( p_intf, "interaction", InteractCallback, self ); /* release some other objects here, because it isn't sure whether dealloc * will be called later on -- FK (10/6/05) */ if( nib_about_loaded && o_about ) [o_about release]; if( nib_open_loaded && o_open ) [o_open release]; if( nib_extended_loaded && o_extended ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -