prefs.m

来自「VLC媒体播放程序」· M 代码 · 共 1,147 行 · 第 1/3 页

M
1,147
字号
                    [o_current_cell setAction: @selector(configChanged:)];                    [o_current_cell sendActionOn:NSLeftMouseUpMask];                }                CONTROL_CONFIG( o_matrix, o_module_name,                                CONFIG_ITEM_KEY, p_item->psz_name );                [o_matrix sizeToCells];                [o_view addSubview: [o_matrix autorelease]];                s_rc.origin.x += [o_matrix frame].size.width + 20;                s_rc.size.height = 25;                s_rc.size.width = 100;                CHECK_VIEW_HEIGHT;                o_combo_box = [[VLCComboBox alloc] initWithFrame: s_rc];                CONTROL_CONFIG( o_combo_box, o_module_name,                                CONFIG_ITEM_KEY, p_item->psz_name );                [o_combo_box setTarget: self];                [o_combo_box setAction: @selector(configChanged:)];                [o_combo_box sendActionOn:NSLeftMouseUpMask];                [[NSNotificationCenter defaultCenter] addObserver: self                        selector: @selector(configChanged:)                        name: NSControlTextDidChangeNotification                        object: o_combo_box];                if ( psz_duptip != NULL )                {                    [o_combo_box setToolTip: [NSApp wrapString: [NSApp localizedString: psz_duptip] toWidth: PREFS_WRAP]];                }                [o_view addSubview: [o_combo_box autorelease]];                                for( i = 0; i < sizeof(vlc_keys) / sizeof(key_descriptor_t); i++ )                {                                        if( vlc_keys[i].psz_key_string && *vlc_keys[i].psz_key_string )                    [o_combo_box addItemWithObjectValue: [NSApp localizedString:vlc_keys[i].psz_key_string]];                }                                [o_combo_box setStringValue: [NSApp localizedString:KeyToString(( ((unsigned int)p_item->i_value) & ~KEY_MODIFIER ))]];                                s_rc.origin.y += s_rc.size.height;                s_rc.origin.x = X_ORIGIN;                if( psz_duptip ) free( psz_duptip );            }            break;                }        #undef INPUT_FIELD_INTEGER    #undef INPUT_FIELD_FLOAT    #undef INPUT_FIELD_STRING    #undef INPUT_FIELD    #undef CHECK_VIEW_HEIGHT    #undef CONTROL_LABEL    #undef Y_ORIGIN    #undef X_ORIGIN        }        while( p_item->i_type != CONFIG_HINT_END && p_item++ );        vlc_list_release( p_list );        [o_prefs_view setDocumentView: o_view];    [o_prefs_view setNeedsDisplay: TRUE];}@end@implementation VLCPrefs (NSTableDataSource)- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {    return (item == nil) ? [[VLCTreeItem rootItem] numberOfChildren] : [item numberOfChildren];}- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {    return (item == nil) ? YES : ([item numberOfChildren] != -1);}- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item {    return (item == nil) ? [[VLCTreeItem rootItem] childAtIndex:index] : [item childAtIndex:index];}- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {    return (item == nil) ? @"" : (id)[item getName];}@end@implementation VLCTreeItemstatic VLCTreeItem *o_root_item = nil;#define IsALeafNode ((id)-1)- (id)initWithName: (NSString *)o_item_name ID: (int)i_id parent:(VLCTreeItem *)o_parent_item{    self = [super init];    if( self != nil )    {        o_name = [o_item_name copy];        i_object_id = i_id;        o_parent = o_parent_item;    }    return( self );}+ (VLCTreeItem *)rootItem {   if (o_root_item == nil) o_root_item = [[VLCTreeItem alloc] initWithName:@"main" ID: 0 parent:nil];   return o_root_item;       }- (void)dealloc{    if (o_children != IsALeafNode) [o_children release];    [o_name release];    [super dealloc];}/* Creates and returns the array of children * Loads children incrementally */- (NSArray *)children {    if (o_children == NULL) {        intf_thread_t *p_intf = [NSApp getIntf];        vlc_list_t      *p_list;        module_t        *p_module = NULL;        module_config_t *p_item;        int i_index,j;        /* List the modules */        p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );        if( !p_list ) return nil;        if( [[self getName] isEqualToString: @"main"] )        {            /*            * Build a tree of the main options            */            for( i_index = 0; i_index < p_list->i_count; i_index++ )            {                p_module = (module_t *)p_list->p_values[i_index].p_object;                if( !strcmp( p_module->psz_object_name, "main" ) )                    break;            }            if( p_module == NULL )            {                msg_Err( p_intf, "could not find the main module in our preferences" );                return nil;            }            if( i_index < p_list->i_count )            {                /* We found the main module */                        /* Enumerate config categories and store a reference so we can                 * generate their config panel them when it is asked by the user. */                p_item = p_module->p_config;                o_children = [[NSMutableArray alloc] initWithCapacity:10];                if( p_item ) do                {                    NSString *o_child_name;                                        switch( p_item->i_type )                    {                    case CONFIG_HINT_CATEGORY:                        o_child_name = [NSApp localizedString: p_item->psz_text];                        [o_children addObject:[[VLCTreeItem alloc] initWithName: o_child_name                            ID: p_module->i_object_id parent:self]];                        break;                    }                }                while( p_item->i_type != CONFIG_HINT_END && p_item++ );                                /* Add the modules item */                [o_children addObject:[[VLCTreeItem alloc] initWithName: _NS("Modules")                    ID: 0 parent:self]];            }            else            {                o_children = IsALeafNode;            }        }        else if( [[self getName] isEqualToString: _NS("Modules")] )        {            /* Add the capabilities */            o_children = [[NSMutableArray alloc] initWithCapacity:10];            for( i_index = 0; i_index < p_list->i_count; i_index++ )            {                p_module = (module_t *)p_list->p_values[i_index].p_object;                        /* Exclude the main module */                if( !strcmp( p_module->psz_object_name, "main" ) )                    continue;                        /* Exclude empty modules */                p_item = p_module->p_config;                if( !p_item ) continue;                do                {                    if( p_item->i_type & CONFIG_ITEM )                        break;                }                while( p_item->i_type != CONFIG_HINT_END && p_item++ );                if( p_item->i_type == CONFIG_HINT_END ) continue;                        /* Create the capability tree if it doesn't already exist */                NSString *o_capability;                o_capability = [NSApp localizedString: p_module->psz_capability];                if( !p_module->psz_capability || !*p_module->psz_capability )                {                    /* Empty capability ? Let's look at the submodules */                    module_t * p_submodule;                    for( j = 0; j < p_module->i_children; j++ )                    {                        p_submodule = (module_t*)p_module->pp_children[ j ];                        if( p_submodule->psz_capability && *p_submodule->psz_capability )                        {                            o_capability = [NSApp localizedString: p_submodule->psz_capability];                            BOOL b_found = FALSE;                            for( j = 0; j < (int)[o_children count]; j++ )                            {                                if( [[[o_children objectAtIndex:j] getName] isEqualToString: o_capability] )                                {                                    b_found = TRUE;                                    break;                                }                            }                            if( !b_found )                            {                                [o_children addObject:[[VLCTreeItem alloc] initWithName: o_capability                                ID: 0 parent:self]];                            }                        }                    }                }                BOOL b_found = FALSE;                for( j = 0; j < (int)[o_children count]; j++ )                {                    if( [[[o_children objectAtIndex:j] getName] isEqualToString: o_capability] )                    {                        b_found = TRUE;                        break;                    }                }                if( !b_found )                {                    [o_children addObject:[[VLCTreeItem alloc] initWithName: o_capability                    ID: 0 parent:self]];                }            }        }        else if( [[o_parent getName] isEqualToString: _NS("Modules")] )        {            /* Now add the modules */            o_children = [[NSMutableArray alloc] initWithCapacity:10];            for( i_index = 0; i_index < p_list->i_count; i_index++ )            {                p_module = (module_t *)p_list->p_values[i_index].p_object;                        /* Exclude the main module */                if( !strcmp( p_module->psz_object_name, "main" ) )                    continue;                        /* Exclude empty modules */                p_item = p_module->p_config;                if( !p_item ) continue;                do                {                    if( p_item->i_type & CONFIG_ITEM )                        break;                }                while( p_item->i_type != CONFIG_HINT_END && p_item++ );                if( p_item->i_type == CONFIG_HINT_END ) continue;                        /* Check the capability */                NSString *o_capability;                o_capability = [NSApp localizedString: p_module->psz_capability];                if( !p_module->psz_capability || !*p_module->psz_capability )                {                    /* Empty capability ? Let's look at the submodules */                    module_t * p_submodule;                    for( j = 0; j < p_module->i_children; j++ )                    {                        p_submodule = (module_t*)p_module->pp_children[ j ];                        if( p_submodule->psz_capability && *p_submodule->psz_capability )                        {                            o_capability = [NSApp localizedString: p_submodule->psz_capability];                            if( [o_capability isEqualToString: [self getName]] )                            {                            [o_children addObject:[[VLCTreeItem alloc] initWithName:                                [NSApp localizedString: p_module->psz_object_name ]                                ID: p_module->i_object_id parent:self]];                            }                        }                    }                }                else if( [o_capability isEqualToString: [self getName]] )                {                    [o_children addObject:[[VLCTreeItem alloc] initWithName:                        [NSApp localizedString: p_module->psz_object_name ]                        ID: p_module->i_object_id parent:self]];                }            }        }        else        {            /* all the other stuff are leafs */            o_children = IsALeafNode;        }    }    return o_children;}- (int)getObjectID{    return i_object_id;}- (NSString *)getName{    return o_name;}- (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 = [NSApp getIntf];    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( p_parser->psz_object_name, psz_module_name ) )        {            BOOL b_has_prefs = p_parser->i_config_items != 0;            vlc_list_release( p_list );            return( b_has_prefs );        }    }    vlc_list_release( p_list );    return( NO );}@end@implementation VLCFlippedView- (BOOL)isFlipped{    return( YES );}@endIMPL_CONTROL_CONFIG(Button);IMPL_CONTROL_CONFIG(PopUpButton);IMPL_CONTROL_CONFIG(ComboBox);IMPL_CONTROL_CONFIG(TextField);IMPL_CONTROL_CONFIG(Slider);IMPL_CONTROL_CONFIG(Matrix);

⌨️ 快捷键说明

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