📄 controls.m
字号:
var_Get( p_playlist, "loop", &val ); if (!val.b_bool) { var_Set( p_playlist, "repeat", val ); } val.b_bool = !val.b_bool; var_Set( p_playlist, "loop", val ); if( val.b_bool ) { vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat All" ) ); config_PutInt( p_playlist, "loop", 1 ); } else { vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat Off" ) ); config_PutInt( p_playlist, "loop", 0 ); } p_intf->p_sys->b_playmode_update = VLC_TRUE; p_intf->p_sys->b_intf_update = VLC_TRUE; vlc_object_release( p_playlist );}- (IBAction)forward:(id)sender{ vlc_value_t val; intf_thread_t * p_intf = VLCIntf; val.i_int = config_GetInt( p_intf, "key-jump+short" ); var_Set( p_intf->p_vlc, "key-pressed", val );}- (IBAction)backward:(id)sender{ vlc_value_t val; intf_thread_t * p_intf = VLCIntf; val.i_int = config_GetInt( p_intf, "key-jump-short" ); var_Set( p_intf->p_vlc, "key-pressed", val );}- (IBAction)volumeUp:(id)sender{ vlc_value_t val; intf_thread_t * p_intf = VLCIntf; val.i_int = config_GetInt( p_intf, "key-vol-up" ); var_Set( p_intf->p_vlc, "key-pressed", val ); /* Manage volume status */ [o_main manageVolumeSlider];}- (IBAction)volumeDown:(id)sender{ vlc_value_t val; intf_thread_t * p_intf = VLCIntf; val.i_int = config_GetInt( p_intf, "key-vol-down" ); var_Set( p_intf->p_vlc, "key-pressed", val ); /* Manage volume status */ [o_main manageVolumeSlider];}- (IBAction)mute:(id)sender{ vlc_value_t val; intf_thread_t * p_intf = VLCIntf; val.i_int = config_GetInt( p_intf, "key-vol-mute" ); var_Set( p_intf->p_vlc, "key-pressed", val ); /* Manage volume status */ [o_main manageVolumeSlider];}- (IBAction)volumeSliderUpdated:(id)sender{ intf_thread_t * p_intf = VLCIntf; audio_volume_t i_volume = (audio_volume_t)[sender intValue]; int i_volume_step = 0; i_volume_step = config_GetInt( p_intf->p_vlc, "volume-step" ); aout_VolumeSet( p_intf, i_volume * i_volume_step ); /* Manage volume status */ [o_main manageVolumeSlider];}- (IBAction)windowAction:(id)sender{ NSString *o_title = [sender title]; vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout != NULL ) { id o_vout_view = [self getVoutView]; if( o_vout_view ) { if( [o_title isEqualToString: _NS("Half Size") ] ) [o_vout_view scaleWindowWithFactor: 0.5 animate: YES]; else if( [o_title isEqualToString: _NS("Normal Size") ] ) [o_vout_view scaleWindowWithFactor: 1.0 animate: YES]; else if( [o_title isEqualToString: _NS("Double Size") ] ) [o_vout_view scaleWindowWithFactor: 2.0 animate: YES]; else if( [o_title isEqualToString: _NS("Float on Top") ] ) [o_vout_view toggleFloatOnTop]; else if( [o_title isEqualToString: _NS("Fit to Screen") ] ) { id o_window = [o_vout_view getWindow]; if( ![o_window isZoomed] ) [o_window performZoom:self]; } else if( [o_title isEqualToString: _NS("Snapshot") ] ) { [o_vout_view snapshot]; } else { [o_vout_view toggleFullscreen]; } } vlc_object_release( (vlc_object_t *)p_vout ); } else { playlist_t * p_playlist = vlc_object_find( VLCIntf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_playlist && ( [o_title isEqualToString: _NS("Fullscreen")] || [sender isKindOfClass:[NSButton class]] ) ) { vlc_value_t val; var_Get( p_playlist, "fullscreen", &val ); var_Set( p_playlist, "fullscreen", (vlc_value_t)!val.b_bool ); } if( p_playlist ) vlc_object_release( (vlc_object_t *)p_playlist ); }}- (BOOL)keyEvent:(NSEvent *)o_event{ BOOL eventHandled = NO; unichar key = [[o_event charactersIgnoringModifiers] characterAtIndex: 0]; if( key ) { vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout != NULL ) { /* Escape */ if( key == (unichar) 0x1b ) { id o_vout_view = [self getVoutView]; if( o_vout_view && [o_vout_view isFullscreen] ) { [o_vout_view toggleFullscreen]; eventHandled = YES; } } else if( key == ' ' ) { [self play:self]; eventHandled = YES; } vlc_object_release( (vlc_object_t *)p_vout ); } } return eventHandled;}- (void)setupVarMenuItem:(NSMenuItem *)o_mi target:(vlc_object_t *)p_object var:(const char *)psz_variable selector:(SEL)pf_callback{ vlc_value_t val, text; int i_type = var_Type( p_object, psz_variable ); switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_VOID: case VLC_VAR_BOOL: case VLC_VAR_VARIABLE: case VLC_VAR_STRING: case VLC_VAR_INTEGER: break; default: /* Variable doesn't exist or isn't handled */ return; } /* Make sure we want to display the variable */ if( i_type & VLC_VAR_HASCHOICE ) { var_Change( p_object, psz_variable, VLC_VAR_CHOICESCOUNT, &val, NULL ); if( val.i_int == 0 ) return; if( (i_type & VLC_VAR_TYPE) != VLC_VAR_VARIABLE && val.i_int == 1 ) return; } /* Get the descriptive name of the variable */ var_Change( p_object, psz_variable, VLC_VAR_GETTEXT, &text, NULL ); [o_mi setTitle: [[VLCMain sharedInstance] localizedString: text.psz_string ? text.psz_string : strdup( psz_variable ) ]]; var_Get( p_object, psz_variable, &val ); if( i_type & VLC_VAR_HASCHOICE ) { NSMenu *o_menu = [o_mi submenu]; [self setupVarMenu: o_menu forMenuItem: o_mi target:p_object var:psz_variable selector:pf_callback]; if( text.psz_string ) free( text.psz_string ); return; } VLCMenuExt *o_data; switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_VOID: o_data = [[VLCMenuExt alloc] initWithVar: psz_variable Object: p_object->i_object_id Value: val ofType: i_type]; [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]]; break; case VLC_VAR_BOOL: o_data = [[VLCMenuExt alloc] initWithVar: psz_variable Object: p_object->i_object_id Value: val ofType: i_type]; [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]]; if( !( i_type & VLC_VAR_ISCOMMAND ) ) [o_mi setState: val.b_bool ? TRUE : FALSE ]; break; default: if( text.psz_string ) free( text.psz_string ); return; } if( ( i_type & VLC_VAR_TYPE ) == VLC_VAR_STRING ) free( val.psz_string ); if( text.psz_string ) free( text.psz_string );}- (void)setupVarMenu:(NSMenu *)o_menu forMenuItem: (NSMenuItem *)o_parent target:(vlc_object_t *)p_object var:(const char *)psz_variable selector:(SEL)pf_callback{ vlc_value_t val, val_list, text_list; int i_type, i, i_nb_items; /* remove previous items */ i_nb_items = [o_menu numberOfItems]; for( i = 0; i < i_nb_items; i++ ) { [o_menu removeItemAtIndex: 0]; } /* Check the type of the object variable */ i_type = var_Type( p_object, psz_variable ); /* Make sure we want to display the variable */ if( i_type & VLC_VAR_HASCHOICE ) { var_Change( p_object, psz_variable, VLC_VAR_CHOICESCOUNT, &val, NULL ); if( val.i_int == 0 ) return; if( (i_type & VLC_VAR_TYPE) != VLC_VAR_VARIABLE && val.i_int == 1 ) return; } else { return; } switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_VOID: case VLC_VAR_BOOL: case VLC_VAR_VARIABLE: case VLC_VAR_STRING: case VLC_VAR_INTEGER: break; default: /* Variable doesn't exist or isn't handled */ return; } if( var_Get( p_object, psz_variable, &val ) < 0 ) { return; } if( var_Change( p_object, psz_variable, VLC_VAR_GETLIST, &val_list, &text_list ) < 0 ) { if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string ); return; } /* make (un)sensitive */ [o_parent setEnabled: ( val_list.p_list->i_count > 1 )]; for( i = 0; i < val_list.p_list->i_count; i++ ) { vlc_value_t another_val; NSMenuItem * o_lmi; NSString *o_title = @""; VLCMenuExt *o_data; switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_STRING: another_val.psz_string = strdup(val_list.p_list->p_values[i].psz_string); o_title = [[VLCMain sharedInstance] localizedString: text_list.p_list->p_values[i].psz_string ? text_list.p_list->p_values[i].psz_string : val_list.p_list->p_values[i].psz_string ]; o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""]; o_data = [[VLCMenuExt alloc] initWithVar: strdup(psz_variable) Object: p_object->i_object_id Value: another_val ofType: i_type]; [o_lmi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]]; [o_lmi setTarget: self]; if( !strcmp( val.psz_string, val_list.p_list->p_values[i].psz_string ) && !( i_type & VLC_VAR_ISCOMMAND ) ) [o_lmi setState: TRUE ]; break; case VLC_VAR_INTEGER: o_title = text_list.p_list->p_values[i].psz_string ? [[VLCMain sharedInstance] localizedString: strdup( text_list.p_list->p_values[i].psz_string )] : [NSString stringWithFormat: @"%d",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -