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

📄 prefs.m

📁 video linux conference
💻 M
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * prefs.m: MacOS X module for vlc ***************************************************************************** * Copyright (C) 2002-2005 VideoLAN * $Id: prefs.m 11420 2005-06-14 21:32:56Z hartman $ * * 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., 59 Temple Place - Suite 330, Boston, MA  02111, 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   - an advanced action (to hide/show advanced options)   - 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>#include <vlc/vlc.h>#include <vlc_config_cat.h>#include "intf.h"#include "prefs.h"#include "prefs_widgets.h"#include "vlc_keys.h"/***************************************************************************** * 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;    b_advanced = config_GetInt( p_intf, "advanced" );    [self initStrings];    [o_advanced_ckb setState: b_advanced];    [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)showPrefs{    /* load our nib (if not already loaded) */    [NSBundle loadNibNamed:@"Preferences" owner:self];    [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_advanced_ckb setTitle: _NS("Advanced")];}- (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 your 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 advancedView:            ( [o_advanced_ckb state] == NSOnState ) ? VLC_TRUE : VLC_FALSE];    }}- (IBAction)advancedToggle: (id)sender{    b_advanced = !b_advanced;    [o_advanced_ckb setState: b_advanced];    /* refresh the view of the current treeitem */    [[o_tree itemAtRow:[o_tree selectedRow]] showView:o_prefs_view advancedView:        ( [o_advanced_ckb state] == NSOnState ) ? VLC_TRUE : VLC_FALSE];}- (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        advancedView:( [o_advanced_ckb state] == NSOnState ) ?        VLC_TRUE : VLC_FALSE];}@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] :                            [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    children:(NSMutableArray *)o_children_array    whithCategory: (int) i_category{    self = [super init];    if( self != nil )    {        o_name = [o_item_name 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" 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];    [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_config_t *p_item;        int             i_index;        /* 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"] )        {            /*            * Find the main module            */            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. */                VLCTreeItem *p_last_category = NULL;                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_CATEGORY:                        o_child_name = [[VLCMain sharedInstance]    localizedString: config_CategoryNameGet(p_item->i_value ) ];                        p_last_category = [VLCTreeItem alloc];                        [o_children addObject:[p_last_category                            initWithName: o_child_name                            ID: p_item->i_value                            parent:self                            children:[[NSMutableArray alloc]                                initWithCapacity:10]                            whithCategory: p_item - p_module->p_config]];                        break;                    case CONFIG_SUBCATEGORY:                        o_child_name = [[VLCMain sharedInstance]    localizedString: config_CategoryNameGet(p_item->i_value ) ];                        if( p_item->i_value != SUBCAT_PLAYLIST_GENERAL &&                            p_item->i_value != SUBCAT_VIDEO_GENERAL &&                            p_item->i_value != SUBCAT_AUDIO_GENERAL )                            [p_last_category->o_children                                addObject:[[VLCTreeItem alloc]                                initWithName: o_child_name                                ID: p_item->i_value                                parent:p_last_category                                children:[[NSMutableArray alloc]                                    initWithCapacity:10]                                whithCategory: p_item - p_module->p_config]];                        break;                    default:                        break;                    }                } while( p_item->i_type != CONFIG_HINT_END && p_item++ );            }            /* Build a tree of the plugins */            /* Add the capabilities */            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 plugins (submodules don't have config */                /* options, they are stored in the parent module) */                if( p_module->b_submodule )                    continue;                else                    p_item = p_module->p_config;                if( !p_item ) continue;                int i_category = -1;                int i_subcategory = -1;                int i_options = 0;                do                {                    if( p_item->i_type == CONFIG_CATEGORY )                        i_category = p_item->i_value;                    else if( p_item->i_type == CONFIG_SUBCATEGORY )                        i_subcategory = p_item->i_value;

⌨️ 快捷键说明

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