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

📄 prefs.m

📁 VLC Player Source Code
💻 M
📖 第 1 页 / 共 2 页
字号:
            if( !p_list ) return nil;            /* Build a tree of the plugins */            /* Add the capabilities */            for( i = 0; i < p_list->i_count; i++ )            {                unsigned int confsize;                p_module = (module_t *)p_list->p_values[i].p_object;                /* Exclude the main module */                if( module_IsMainModule( p_module ) )                    continue;                /* Exclude empty plugins (submodules don't have config */                /* options, they are stored in the parent module) */                p_items = module_GetConfig( p_module, &confsize );                unsigned int j;                int i_category = -1;                int i_subcategory = -1;                bool b_item = false;                for( j = 0; j < confsize; j++ )                {                    if( p_items[j].i_type == CONFIG_CATEGORY )                        i_category = p_items[j].value.i;                    else if( p_items[j].i_type == CONFIG_SUBCATEGORY )                        i_subcategory = p_items[j].value.i;                    if( p_items[j].i_type & CONFIG_ITEM )                        b_item = true;                                if( b_item && i_category >= 0 && i_subcategory >= 0 )                        break;                }                    if( !b_item ) continue;                /* Find the right category item */                long cookie;                bool b_found = false;                VLCTreeItem* p_category_item, * p_subcategory_item;                for (j = 0 ; j < [o_children count] ; j++)                {                    p_category_item = [o_children objectAtIndex: j];                    if( p_category_item->i_object_category == i_category )                    {                        b_found = true;                        break;                    }                }                if( !b_found ) continue;                /* Find subcategory item */                b_found = false;                cookie = -1;                for (j = 0 ; j < [p_category_item->o_children count] ; j++)                {                    p_subcategory_item = [p_category_item->o_children                                            objectAtIndex: j];                    if( p_subcategory_item->i_object_category == i_subcategory )                    {                        b_found = true;                        break;                    }                }                if( !b_found )                    p_subcategory_item = p_category_item;                [p_subcategory_item->o_children addObject:[[VLCTreeItem alloc]                    initWithName:[[VLCMain sharedInstance]                        localizedString: module_GetName( p_module, false ) ]                    withTitle:[[VLCMain sharedInstance]                        localizedString:  module_GetLongName( p_module ) ]                    withHelp: @""                    ID: ((vlc_object_t*)p_module)->i_object_id                    parent:p_subcategory_item                    children:IsALeafNode                    whithCategory: -1]];                }            vlc_list_release( p_list );        }    }    return o_children;}- (int)getObjectID{    return i_object_id;}- (NSString *)getName{    return o_name;}- (NSString *)getTitle{    return o_title;}- (NSString *)getHelp{    return o_help;}- (VLCTreeItem *)childAtIndex:(int)i_index{    return [[self children] objectAtIndex:i_index];}- (int)numberOfChildren {    id i_tmp = [self children];    return (i_tmp == IsALeafNode) ? (-1) : (int)[i_tmp count];}- (BOOL)hasPrefs:(NSString *)o_module_name{    intf_thread_t *p_intf = VLCIntf;    module_t *p_parser;    vlc_list_t *p_list;    char *psz_module_name;    int i_index;    psz_module_name = (char *)[o_module_name UTF8String];    /* look for module */    p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );    for( i_index = 0; i_index < p_list->i_count; i_index++ )    {        p_parser = (module_t *)p_list->p_values[i_index].p_object ;        if( !strcmp( module_GetObjName( p_parser ), psz_module_name ) )        {            unsigned int confsize;            module_GetConfig( p_parser, &confsize );            BOOL b_has_prefs = confsize != 0;            vlc_list_release( p_list );            return( b_has_prefs );        }    }    vlc_list_release( p_list );    return( NO );}- (NSView *)showView:(NSScrollView *)o_prefs_view{    NSRect          s_vrc;    NSView          *o_view;    [[VLCPrefs sharedInstance] setTitle: [self getTitle]];    /* NSLog( [self getHelp] ); */    s_vrc = [[o_prefs_view contentView] bounds]; s_vrc.size.height -= 4;    o_view = [[VLCFlippedView alloc] initWithFrame: s_vrc];    [o_view setAutoresizingMask: NSViewWidthSizable | NSViewMinYMargin |                                    NSViewMaxYMargin];/* Create all subviews if it isn't already done because we cannot use *//* setHiden for MacOS < 10.3*/    if( o_subviews == nil )    {        intf_thread_t   *p_intf = VLCIntf;        vlc_list_t      *p_list;        module_t        *p_module = NULL;        module_t        *p_main_module;        module_config_t *p_items;        unsigned int confsize;        o_subviews = [[NSMutableArray alloc] initWithCapacity:10];        /* Get a pointer to the module */        if( i_object_category == -1 )        {            p_module = (module_t *) vlc_object_get( i_object_id );            assert( p_module );            p_items = module_GetConfig( p_module, &confsize );            for( unsigned int i = 0; i < confsize; i++ )            {                switch( p_items[i].i_type )                {                    case CONFIG_SUBCATEGORY:                    case CONFIG_CATEGORY:                    case CONFIG_SECTION:                    case CONFIG_HINT_USAGE:                        break;                    default:                    {                        VLCConfigControl *o_control = nil;                        o_control = [VLCConfigControl newControl:&p_items[i]                                                      withView:o_view];                        if( o_control )                        {                            [o_control setAutoresizingMask: NSViewMaxYMargin |                                NSViewWidthSizable];                            [o_subviews addObject: o_control];                        }                    }                    break;                }            }            vlc_object_release( (vlc_object_t*)p_module );        }        else        {            p_main_module = module_GetMainModule( p_intf );            assert( p_main_module );            module_config_t *p_items;            unsigned int i, confsize;            p_items = module_GetConfig( p_main_module, &confsize );            /* We need to first, find the right (sub)category,             * and then abort when we find a new (sub)category. Part of the Ugliness. */            bool in_right_category = false;            bool in_subcategory = false;            bool done = false;            for( i = 0; i < confsize; i++ )            {                if( !p_items[i].i_type )                {                    msg_Err( p_intf, "invalid preference item found" );                    break;                }                switch( p_items[i].i_type )                {                    case CONFIG_CATEGORY:                        if(!in_right_category && p_items[i].value.i == i_object_category)                            in_right_category = true;                        else if(in_right_category)                            done = true;                        break;                    case CONFIG_SUBCATEGORY:                        if(!in_right_category && p_items[i].value.i == i_object_category)                        {                            in_right_category = true;                            in_subcategory = true;                        }                        else if(in_right_category && in_subcategory)                            done = true;                        break;                    case CONFIG_SECTION:                    case CONFIG_HINT_USAGE:                        break;                    default:                    {                        if(!in_right_category) break;                        VLCConfigControl *o_control = nil;                        o_control = [VLCConfigControl newControl:&p_items[i]                                                      withView:o_view];                        if( o_control != nil )                        {                            [o_control setAutoresizingMask: NSViewMaxYMargin |                                                            NSViewWidthSizable];                            [o_subviews addObject: o_control];                        }                        break;                    }                }                if( done ) break;            }            vlc_object_release( (vlc_object_t*)p_main_module );        }    }    if( o_view != nil )    {        int i_lastItem = 0;        int i_yPos = -2;        int i_max_label = 0;        NSEnumerator *enumerator = [o_subviews objectEnumerator];        VLCConfigControl *o_widget;        NSRect o_frame;         while( ( o_widget = [enumerator nextObject] ) )            if( i_max_label < [o_widget getLabelSize] )                i_max_label = [o_widget getLabelSize];        enumerator = [o_subviews objectEnumerator];        while( ( o_widget = [enumerator nextObject] ) )        {            int i_widget;            i_widget = [o_widget getViewType];            i_yPos += [VLCConfigControl calcVerticalMargin:i_widget                lastItem:i_lastItem];            [o_widget setYPos:i_yPos];            o_frame = [o_widget frame];            o_frame.size.width = [o_view frame].size.width -                                    LEFTMARGIN - RIGHTMARGIN;            [o_widget setFrame:o_frame];            [o_widget alignWithXPosition: i_max_label];            i_yPos += [o_widget frame].size.height;            i_lastItem = i_widget;            [o_view addSubview:o_widget];         }        o_frame = [o_view frame];        o_frame.size.height = i_yPos;        [o_view setFrame:o_frame];        [o_prefs_view setDocumentView:o_view];    }    return o_view;}- (void)applyChanges{    unsigned int i;    if( o_subviews != nil )        //Item has been shown        for( i = 0 ; i < [o_subviews count] ; i++ )            [[o_subviews objectAtIndex:i] applyChanges];    if( o_children != IsALeafNode )        for( i = 0 ; i < [o_children count] ; i++ )            [[o_children objectAtIndex:i] applyChanges];}- (void)resetView{    unsigned int i;    if( o_subviews != nil )    {        //Item has been shown        [o_subviews release];        o_subviews = nil;    }    if( o_children != IsALeafNode )        for( i = 0 ; i < [o_children count] ; i++ )            [[o_children objectAtIndex:i] resetView];}@end@implementation VLCFlippedView- (BOOL)isFlipped{    return( YES );}@end

⌨️ 快捷键说明

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