📄 prefs.m
字号:
/***************************************************************************** * prefs.m: MacOS X module for vlc ***************************************************************************** * Copyright (C) 2002-2006 the VideoLAN team * $Id: 0e25e9af6770c8e113c3b8c067bc8d570b79a3c5 $ * * Authors: Jon Lech Johansen <jon-vl@nanocrew.net> * Derk-Jan Hartman <hartman at videolan dot org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************//* VLCPrefs manages the main preferences dialog the class is related to wxwindows intf, PrefsPanel *//* VLCTreeItem should contain: - the children of the treeitem - the associated prefs widgets - the documentview with all the prefs widgets in it - a saveChanges action - a revertChanges action - a redraw view action - the children action should generate a list of the treeitems children (to be used by VLCPrefs datasource) The class is sort of a mix of wxwindows intfs, PrefsTreeCtrl and ConfigTreeData*//* VLCConfigControl are subclassed NSView's containing and managing individual config items the classes are VERY closely related to wxwindows ConfigControls *//***************************************************************************** * Preamble *****************************************************************************/#include <stdlib.h> /* malloc(), free() */#include <sys/param.h> /* for MAXPATHLEN */#include <string.h>#ifdef HAVE_CONFIG_H# include "config.h"#endif#include <vlc_common.h>#include <vlc_config_cat.h>#import "intf.h"#import "prefs.h"#import "simple_prefs.h"#import "prefs_widgets.h"#import "vlc_keys.h"/* /!\ Warning: Unreadable code :/ *//***************************************************************************** * VLCPrefs implementation *****************************************************************************/@implementation VLCPrefsstatic VLCPrefs *_o_sharedMainInstance = nil;+ (VLCPrefs *)sharedInstance{ return _o_sharedMainInstance ? _o_sharedMainInstance : [[self alloc] init];}- (id)init{ if( _o_sharedMainInstance ) { [self dealloc]; } else { _o_sharedMainInstance = [super init]; p_intf = VLCIntf; o_empty_view = [[NSView alloc] init]; } return _o_sharedMainInstance;}- (void)dealloc{ [o_empty_view release]; [super dealloc];}- (void)awakeFromNib{ p_intf = VLCIntf; [self initStrings]; [o_prefs_view setBorderType: NSGrooveBorder]; [o_prefs_view setHasVerticalScroller: YES]; [o_prefs_view setDrawsBackground: NO]; [o_prefs_view setDocumentView: o_empty_view]; [o_tree selectRow:0 byExtendingSelection:NO];}- (void)setTitle: (NSString *) o_title_name{ [o_title setStringValue: o_title_name];}- (void)showPrefs{ [[o_basicFull_matrix cellAtRow:0 column:0] setState: NSOffState]; [[o_basicFull_matrix cellAtRow:0 column:1] setState: NSOnState]; [o_prefs_window center]; [o_prefs_window makeKeyAndOrderFront:self];}- (void)initStrings{ [o_prefs_window setTitle: _NS("Preferences")]; [o_save_btn setTitle: _NS("Save")]; [o_cancel_btn setTitle: _NS("Cancel")]; [o_reset_btn setTitle: _NS("Reset All")]; [[o_basicFull_matrix cellAtRow: 0 column: 0] setStringValue: _NS("Basic")]; [[o_basicFull_matrix cellAtRow: 0 column: 1] setStringValue: _NS("All")];}- (IBAction)savePrefs: (id)sender{ /* TODO: call savePrefs on Root item */ [[VLCTreeItem rootItem] applyChanges]; config_SaveConfigFile( p_intf, NULL ); [o_prefs_window orderOut:self];}- (IBAction)closePrefs: (id)sender{ [o_prefs_window orderOut:self];}- (IBAction)resetAll: (id)sender{ NSBeginInformationalAlertSheet(_NS("Reset Preferences"), _NS("Cancel"), _NS("Continue"), nil, o_prefs_window, self, @selector(sheetDidEnd: returnCode: contextInfo:), NULL, nil, _NS("Beware this will reset the VLC media player preferences.\n" "Are you sure you want to continue?") );}- (void)sheetDidEnd:(NSWindow *)o_sheet returnCode:(int)i_return contextInfo:(void *)o_context{ if( i_return == NSAlertAlternateReturn ) { [o_prefs_view setDocumentView: o_empty_view]; config_ResetAll( p_intf ); [[VLCTreeItem rootItem] resetView]; [[o_tree itemAtRow:[o_tree selectedRow]] showView:o_prefs_view]; }}- (IBAction)buttonAction: (id)sender{ [o_prefs_window orderOut: self]; [[o_basicFull_matrix cellAtRow:0 column:0] setState: NSOnState]; [[o_basicFull_matrix cellAtRow:0 column:1] setState: NSOffState]; [[[VLCMain sharedInstance] getSimplePreferences] showSimplePrefs];}- (void)loadConfigTree{}- (void)outlineViewSelectionIsChanging:(NSNotification *)o_notification{}/* update the document view to the view of the selected tree item */- (void)outlineViewSelectionDidChange:(NSNotification *)o_notification{ [[o_tree itemAtRow:[o_tree selectedRow]] showView: o_prefs_view];}@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) && ([item numberOfChildren] != 0));}- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item { return (item == nil) ? [[VLCTreeItem rootItem] childAtIndex:index] : (id)[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 withTitle: (NSString *)o_item_title withHelp: (NSString *)o_item_help ID: (int)i_id parent:(VLCTreeItem *)o_parent_item children:(NSMutableArray *)o_children_array whithCategory: (int) i_category{ self = [super init]; if( self != nil ) { o_name = [o_item_name copy]; o_title= [o_item_title copy]; o_help= [o_item_help copy]; i_object_id = i_id; o_parent = o_parent_item; o_children = o_children_array; i_object_category = i_category; o_subviews = nil; } return( self );}+ (VLCTreeItem *)rootItem{ if (o_root_item == nil) o_root_item = [[VLCTreeItem alloc] initWithName:@"main" withTitle:@"main" withHelp:@"" ID:0 parent:nil children:[[NSMutableArray alloc] initWithCapacity:10] whithCategory: -1]; return o_root_item;}- (void)dealloc{ if (o_children != IsALeafNode) [o_children release]; [o_name release]; [o_title release]; [o_help release]; [super dealloc];}/* Creates and returns the array of children * Loads children incrementally */- (NSArray *)children{ if( o_children == IsALeafNode ) return o_children; if( [ o_children count] == 0 ) { 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; int i = 0; if( [[self getName] isEqualToString: @"main"] ) { p_main_module = module_GetMainModule( p_intf ); assert( p_main_module ); /* 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. */ VLCTreeItem *p_last_category = NULL; unsigned int i_confsize; p_items = module_GetConfig( p_main_module, &i_confsize ); o_children = [[NSMutableArray alloc] initWithCapacity:10]; for( int i = 0; i < i_confsize; i++ ) { NSString *o_child_name; NSString *o_child_title; NSString *o_child_help; switch( p_items[i].i_type ) { case CONFIG_CATEGORY: if( p_items[i].value.i == -1 ) break; o_child_name = [[VLCMain sharedInstance] localizedString: config_CategoryNameGet( p_items[i].value.i )]; o_child_title = o_child_name; o_child_help = [[VLCMain sharedInstance] localizedString: config_CategoryHelpGet( p_items[i].value.i )]; p_last_category = [VLCTreeItem alloc]; [o_children addObject:[p_last_category initWithName: o_child_name withTitle: o_child_title withHelp: o_child_help ID: ((vlc_object_t*)p_main_module)->i_object_id parent:self children:[[NSMutableArray alloc] initWithCapacity:10] whithCategory: p_items[i].value.i]]; break; case CONFIG_SUBCATEGORY: if( p_items[i].value.i == -1 ) break; if( p_items[i].value.i != SUBCAT_PLAYLIST_GENERAL && p_items[i].value.i != SUBCAT_VIDEO_GENERAL && p_items[i].value.i != SUBCAT_INPUT_GENERAL && p_items[i].value.i != SUBCAT_INTERFACE_GENERAL && p_items[i].value.i != SUBCAT_SOUT_GENERAL && p_items[i].value.i != SUBCAT_ADVANCED_MISC && p_items[i].value.i != SUBCAT_AUDIO_GENERAL ) { o_child_name = [[VLCMain sharedInstance] localizedString: config_CategoryNameGet( p_items[i].value.i ) ]; o_child_title = o_child_name; o_child_help = [[VLCMain sharedInstance] localizedString: config_CategoryHelpGet( p_items[i].value.i ) ]; [p_last_category->o_children addObject:[[VLCTreeItem alloc] initWithName: o_child_name withTitle: o_child_title withHelp: o_child_help ID: ((vlc_object_t*)p_main_module)->i_object_id parent:p_last_category children:[[NSMutableArray alloc] initWithCapacity:10] whithCategory: p_items[i].value.i]]; } break; default: break; } } vlc_object_release( (vlc_object_t *)p_main_module ); /* List the modules */ p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -