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 + -
显示快捷键?