The R Project SVN R-packages

Rev

Rev 5973 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#import "../RGUI.h"
#import "PrefWindowController.h"
#import "../PreferenceKeys.h"
#import "../AMPrefs/AMPreferenceWindowController.h"

@implementation PrefWindowController

- (id) init
{
    self = [super initWithAutosaveName:@"PreferencesWindow"];
    return self;
}

- (void) awakeFromNib
{
    quartzPrefPane = [[[QuartzPrefPane alloc] initWithIdentifier:@"Quartz" label:NLSC(@"PrefP-Quartz",@"Quartz preference pane") category:NLSC(@"PrefG-Views",@"Views preference group") ] autorelease];
    [self addPane:quartzPrefPane withIdentifier:[quartzPrefPane identifier]];
    
    miscPrefPane = [[[MiscPrefPane alloc] initWithIdentifier:@"Misc" label:NLSC(@"PrefP-Startup",@"Startup preference pane") category:NLSC(@"PrefG-General",@"General preference group")] autorelease];
    [self addPane:miscPrefPane withIdentifier:[miscPrefPane identifier]];
    
    colorsPrefPane = [[[ColorsPrefPane alloc] initWithIdentifier:@"Colors" label:NLSC(@"PrefP-Colors",@"Colors preference pane") category:NLSC(@"PrefG-Views",@"Views preference group")] autorelease];
    [self addPane:colorsPrefPane withIdentifier:[colorsPrefPane identifier]];
    
    syntaxColorsPrefPane = [[[SyntaxColorsPrefPane alloc] initWithIdentifier:@"Syntax Colors" label:NLSC(@"PrefP-Syntax",@"Syntax colors preference pane") category:NLSC(@"PrefG-Editor",@"Editor preference group")] autorelease];
    [self addPane:syntaxColorsPrefPane withIdentifier:[syntaxColorsPrefPane identifier]];
    
    editorPrefPane = [[[EditorPrefPane alloc] initWithIdentifier:@"Editor" label:NLSC(@"PrefP-Editor",@"Editor preference pane") category:NLSC(@"PrefG-Editor",@"Editor preference group")] autorelease];
    [self addPane:editorPrefPane withIdentifier:[editorPrefPane identifier]];

    [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:RScriptEditorDefaultFont options:NSKeyValueObservingOptionNew context:NULL];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:NSApplicationWillTerminateNotification object:NSApp];

    // set up some configuration options
    [self setUsesConfigurationPane:YES];
    [self setSortByCategory:YES];
    // select prefs pane for display
    [self selectPaneWithIdentifier:@"All"];
    [[self window] setExcludedFromWindowsMenu:YES];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:RScriptEditorDefaultFont]) {
        [[editorPrefPane valueForKeyPath:@"editorFont"] setFont:[NSUnarchiver unarchiveObjectWithData:[change objectForKey:NSKeyValueChangeNewKey]]];
    }
}

- (IBAction)showPrefsWindow:(id)sender
{
    [self showWindow:self];
    [[self window] makeKeyAndOrderFront:self];
}

- (IBAction)sortByAlphabet:(id)sender
{
    [self setSortByCategory:NO];
    [self selectIconViewPane];
}

- (IBAction)sortByCategory:(id)sender
{
    [self setSortByCategory:YES];
    [self selectIconViewPane];
}

- (BOOL)shouldLoadPreferencePane:(NSString *)identifier
{
    //  NSLog(@"shouldLoadPreferencePane: %@", identifier);
    return YES;
}

- (void)willSelectPreferencePane:(NSString *)identifier
{
    //  NSLog(@"willSelectPreferencePane: %@", identifier);
}

- (void)didUnselectPreferencePane:(NSString *)identifier
{
    //  NSLog(@"didUnselectPreferencePane: %@", identifier);
}

- (NSString *)displayNameForCategory:(NSString *)category
{
    return category;
}

/**
 * Trap window close notifications and use them to ensure changes are saved.
 */
- (void)windowWillClose:(NSNotification *)notification
{
    [[NSColorPanel sharedColorPanel] close];
    [[NSFontPanel sharedFontPanel] close];
    
    // Mark the currently selected field in the window as having finished editing, to trigger saves.
    if ([[self window] firstResponder]) {
        [[self window] endEditingFor:[[self window] firstResponder]];
    }
}

- (void)changeFont:(id)sender
{

    if([self activePane] == (AMPreferencePane*)editorPrefPane) {

        NSFont *font;
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    
        font = [[NSFontPanel sharedFontPanel] panelConvertFont:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:RScriptEditorDefaultFont]]];
    
        [prefs setObject:[NSArchiver archivedDataWithRootObject:font] forKey:RScriptEditorDefaultFont];

        [[editorPrefPane valueForKeyPath:@"editorFont"] setFont:font];
    }

}


@end