⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controls.m

📁 uclinux 下的vlc播放器源代码
💻 M
📖 第 1 页 / 共 3 页
字号:
                                 val_list.p_list->p_values[i].i_int];            o_lmi = [[o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""] retain ];            o_data = [[VLCMenuExt alloc] initWithVar: strdup(psz_variable) Object: p_object->i_object_id                    Value: val_list.p_list->p_values[i] ofType: i_type];            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[ o_data retain]]];            [o_lmi setTarget: self];            if( val_list.p_list->p_values[i].i_int == val.i_int && !( i_type & VLC_VAR_ISCOMMAND ) )                [o_lmi setState: TRUE ];            break;        default:          break;        }    }    /* clean up everything */    if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string );    var_Change( p_object, psz_variable, VLC_VAR_FREELIST, &val_list, &text_list );}- (IBAction)toggleVar:(id)sender{    NSMenuItem *o_mi = (NSMenuItem *)sender;    VLCMenuExt *o_data = [[o_mi representedObject] pointerValue];    [NSThread detachNewThreadSelector: @selector(toggleVarThread:)        toTarget: self withObject: o_data];    return;}- (int)toggleVarThread: (id)_o_data{    vlc_object_t *p_object;    NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];    VLCMenuExt *o_data = (VLCMenuExt *)_o_data;    vlc_thread_set_priority( VLCIntf , VLC_THREAD_PRIORITY_LOW );    p_object = (vlc_object_t *)vlc_object_get( VLCIntf,                                    [o_data objectID] );    if( p_object != NULL )    {        var_Set( p_object, strdup([o_data name]), [o_data value] );        vlc_object_release( p_object );        [o_pool release];        return VLC_TRUE;    }    [o_pool release];    return VLC_EGENERIC;}- (IBAction)goToSpecificTime:(id)sender{    if( sender == o_specificTime_cancel_btn )    {        [NSApp endSheet: o_specificTime_win];        [o_specificTime_win close];    }    else if( sender == o_specificTime_ok_btn )    {        input_thread_t * p_input = (input_thread_t *)vlc_object_find( VLCIntf, \            VLC_OBJECT_INPUT, FIND_ANYWHERE );        if( p_input )        {            unsigned int timeInSec = 0;            NSString * fieldContent = [o_specificTime_enter_fld stringValue];            if( [[fieldContent componentsSeparatedByString: @":"] count] > 1 &&                 [[fieldContent componentsSeparatedByString: @":"] count] <= 3 )            {                NSArray * ourTempArray = \                    [fieldContent componentsSeparatedByString: @":"];                if( [[fieldContent componentsSeparatedByString: @":"] count] == 3 )                {                    timeInSec += ([[ourTempArray objectAtIndex: 0] intValue] * 3600); //h                    timeInSec += ([[ourTempArray objectAtIndex: 1] intValue] * 60); //m                    timeInSec += [[ourTempArray objectAtIndex: 2] intValue];        //s                }                else                {                    timeInSec += ([[ourTempArray objectAtIndex: 0] intValue] * 60); //m                    timeInSec += [[ourTempArray objectAtIndex: 1] intValue]; //s                }            }            else                timeInSec = [fieldContent intValue];            input_Control( p_input, INPUT_SET_TIME, (int64_t)(timeInSec * 1000000));            vlc_object_release( p_input );        }            [NSApp endSheet: o_specificTime_win];        [o_specificTime_win close];    }    else    {        input_thread_t * p_input = (input_thread_t *)vlc_object_find( VLCIntf, \            VLC_OBJECT_INPUT, FIND_ANYWHERE );        if( p_input )        {            /* we can obviously only do that if an input is available */            vlc_value_t pos, length;            var_Get( p_input, "time", &pos );            [o_specificTime_enter_fld setIntValue: (pos.i_time / 1000000)];            var_Get( p_input, "length", &length );            [o_specificTime_stepper setMaxValue: (length.i_time / 1000000)];            [NSApp beginSheet: o_specificTime_win modalForWindow: \                [NSApp mainWindow] modalDelegate: self didEndSelector: nil \                contextInfo: nil];            [o_specificTime_win makeKeyWindow];            vlc_object_release( p_input );        }    }}- (id)getFSPanel{    if( o_fs_panel )        return o_fs_panel;    else    {        msg_Err( VLCIntf, "FSPanel is nil" );        return NULL;    }}@end@implementation VLCControls (NSMenuValidation)- (BOOL)validateMenuItem:(NSMenuItem *)o_mi{    BOOL bEnabled = TRUE;    vlc_value_t val;    intf_thread_t * p_intf = VLCIntf;    playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                                       FIND_ANYWHERE );    if( p_playlist != NULL )    {        vlc_mutex_lock( &p_playlist->object_lock );    }    else return FALSE;#define p_input p_playlist->p_input    if( [[o_mi title] isEqualToString: _NS("Faster")] ||        [[o_mi title] isEqualToString: _NS("Slower")] )    {        if( p_input != NULL )        {            bEnabled = p_input->input.b_can_pace_control;        }        else        {            bEnabled = FALSE;        }    }    else if( [[o_mi title] isEqualToString: _NS("Stop")] )    {        if( p_input == NULL )        {            bEnabled = FALSE;        }        [o_main setupMenus]; /* Make sure input menu is up to date */    }    else if( [[o_mi title] isEqualToString: _NS("Previous")] ||             [[o_mi title] isEqualToString: _NS("Next")] )    {            bEnabled = p_playlist->i_size > 1;    }    else if( [[o_mi title] isEqualToString: _NS("Random")] )    {        int i_state;        var_Get( p_playlist, "random", &val );        i_state = val.b_bool ? NSOnState : NSOffState;        [o_mi setState: i_state];    }    else if( [[o_mi title] isEqualToString: _NS("Repeat One")] )    {        int i_state;        var_Get( p_playlist, "repeat", &val );        i_state = val.b_bool ? NSOnState : NSOffState;        [o_mi setState: i_state];    }    else if( [[o_mi title] isEqualToString: _NS("Repeat All")] )    {        int i_state;        var_Get( p_playlist, "loop", &val );        i_state = val.b_bool ? NSOnState : NSOffState;        [o_mi setState: i_state];    }    else if( [[o_mi title] isEqualToString: _NS("Step Forward")] ||             [[o_mi title] isEqualToString: _NS("Step Backward")] ||             [[o_mi title] isEqualToString: _NS("Jump To Time")])    {        if( p_input != NULL )        {            var_Get( p_input, "seekable", &val);            bEnabled = val.b_bool;        }        else bEnabled = FALSE;    }    else if( [[o_mi title] isEqualToString: _NS("Mute")] )    {        [o_mi setState: p_intf->p_sys->b_mute ? NSOnState : NSOffState];        [o_main setupMenus]; /* Make sure audio menu is up to date */    }    else if( [[o_mi title] isEqualToString: _NS("Half Size")] ||                [[o_mi title] isEqualToString: _NS("Normal Size")] ||                [[o_mi title] isEqualToString: _NS("Double Size")] ||                [[o_mi title] isEqualToString: _NS("Fit to Screen")] ||                [[o_mi title] isEqualToString: _NS("Snapshot")] ||                [[o_mi title] isEqualToString: _NS("Fullscreen")] ||                [[o_mi title] isEqualToString: _NS("Float on Top")] )    {        id o_window;        NSArray *o_windows = [NSApp orderedWindows];        NSEnumerator *o_enumerator = [o_windows objectEnumerator];        bEnabled = FALSE;                vout_thread_t   *p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT,                                              FIND_ANYWHERE );        if( p_vout != NULL )        {            if( [[o_mi title] isEqualToString: _NS("Float on Top")] )            {                var_Get( p_vout, "video-on-top", &val );                [o_mi setState: val.b_bool ?  NSOnState : NSOffState];            }            while( (o_window = [o_enumerator nextObject]))            {                if( [[o_window className] isEqualToString: @"VLCWindow"] ||                            [[[VLCMain sharedInstance] getEmbeddedList]                            windowContainsEmbedded: o_window])                {                    bEnabled = TRUE;                    break;                }            }            vlc_object_release( (vlc_object_t *)p_vout );        }        else if( [[o_mi title] isEqualToString: _NS("Fullscreen")] )        {            var_Get( p_playlist, "fullscreen", &val );            [o_mi setState: val.b_bool];            bEnabled = TRUE;        }        [o_main setupMenus]; /* Make sure video menu is up to date */    }    vlc_mutex_unlock( &p_playlist->object_lock );    vlc_object_release( p_playlist );    return( bEnabled );}@end/***************************************************************************** * VLCMenuExt implementation  ***************************************************************************** * Object connected to a playlistitem which remembers the data belonging to * the variable of the autogenerated menu *****************************************************************************/@implementation VLCMenuExt- (id)initWithVar: (const char *)_psz_name Object: (int)i_id        Value: (vlc_value_t)val ofType: (int)_i_type{    self = [super init];    if( self != nil )    {        psz_name = strdup( _psz_name );        i_object_id = i_id;        value = val;        i_type = _i_type;    }    return( self );}- (void)dealloc{    free( psz_name );    [super dealloc];}- (char *)name{    return psz_name;}- (int)objectID{    return i_object_id;}- (vlc_value_t)value{    return value;}- (int)type{    return i_type;}@end/***************************************************************************** * VLCTimeField implementation  ***************************************************************************** * we need this to catch our click-event in the controller window *****************************************************************************/@implementation VLCTimeField- (void)mouseDown: (NSEvent *)ourEvent{    if( [ourEvent clickCount] > 1 )        [[[VLCMain sharedInstance] getControls] goToSpecificTime: nil];}@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -