📄 prefs.m
字号:
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 + -