| #import "PreferencesWindowController.h" | 
 |  | 
 | @implementation PreferencesWindowController | 
 |  | 
 | + getPreferencesWindow | 
 | { | 
 |     static PreferencesWindowController *_singleton; | 
 |  | 
 |     if (!_singleton) | 
 |         _singleton = [[PreferencesWindowController alloc] init]; | 
 |     [_singleton showWindow: _singleton]; | 
 |     return _singleton; | 
 | } | 
 |  | 
 | - (id) init | 
 | { | 
 |     self = [self initWithWindowNibName: @"PreferenceWindow"]; | 
 |     return self; | 
 | } | 
 |  | 
 | - (void)load_defaults | 
 | { | 
 |     NSString *title = [filetype titleOfSelectedItem]; | 
 |  | 
 |     settings = [FileSettings getDefaultsForFileType: title]; | 
 | } | 
 |  | 
 | - (void)update_display | 
 | { | 
 |     [interpreter reloadData]; | 
 |     [interpreter setStringValue: [settings interpreter]]; | 
 |     [honourhashbang setState: [settings honourhashbang]]; | 
 |     [debug setState: [settings debug]]; | 
 |     [verbose setState: [settings verbose]]; | 
 |     [inspect setState: [settings inspect]]; | 
 |     [optimize setState: [settings optimize]]; | 
 |     [nosite setState: [settings nosite]]; | 
 |     [tabs setState: [settings tabs]]; | 
 |     [others setStringValue: [settings others]]; | 
 |     [with_terminal setState: [settings with_terminal]]; | 
 |     // Not scriptargs, it isn't for preferences | 
 |     [commandline setStringValue: [settings commandLineForScript: @"<your script here>"]]; | 
 | } | 
 |  | 
 | - (void) windowDidLoad | 
 | { | 
 |     [super windowDidLoad]; | 
 |     [self load_defaults]; | 
 |     [self update_display]; | 
 | } | 
 |  | 
 | - (void)update_settings | 
 | { | 
 |     [settings updateFromSource: self]; | 
 | } | 
 |  | 
 | - (IBAction)do_filetype:(id)sender | 
 | { | 
 |     [self load_defaults]; | 
 |     [self update_display]; | 
 | } | 
 |  | 
 | - (IBAction)do_reset:(id)sender | 
 | { | 
 |     [settings reset]; | 
 |     [self update_display]; | 
 | } | 
 |  | 
 | - (IBAction)do_apply:(id)sender | 
 | { | 
 |     [self update_settings]; | 
 |     [self update_display]; | 
 | } | 
 |  | 
 | // FileSettingsSource protocol | 
 | - (NSString *) interpreter { return [interpreter stringValue];}; | 
 | - (BOOL) honourhashbang { return [honourhashbang state]; }; | 
 | - (BOOL) debug { return [debug state];}; | 
 | - (BOOL) verbose { return [verbose state];}; | 
 | - (BOOL) inspect { return [inspect state];}; | 
 | - (BOOL) optimize { return [optimize state];}; | 
 | - (BOOL) nosite { return [nosite state];}; | 
 | - (BOOL) tabs { return [tabs state];}; | 
 | - (NSString *) others { return [others stringValue];}; | 
 | - (BOOL) with_terminal { return [with_terminal state];}; | 
 | - (NSString *) scriptargs { return @"";}; | 
 |  | 
 | // Delegates | 
 | - (void)controlTextDidChange:(NSNotification *)aNotification | 
 | { | 
 |     [self update_settings]; | 
 |     [self update_display]; | 
 | }; | 
 |  | 
 | // NSComboBoxDataSource protocol | 
 | - (unsigned int)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)aString | 
 | { | 
 | 	NSArray *interp_list = [settings interpreters]; | 
 |     unsigned int rv = [interp_list indexOfObjectIdenticalTo: aString]; | 
 | 	return rv; | 
 | } | 
 |  | 
 | - (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index | 
 | { | 
 | 	NSArray *interp_list = [settings interpreters]; | 
 |     id rv = [interp_list objectAtIndex: index]; | 
 | 	return rv; | 
 | } | 
 |  | 
 | - (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox | 
 | { | 
 | 	NSArray *interp_list = [settings interpreters]; | 
 |     int rv = [interp_list count]; | 
 | 	return rv; | 
 | } | 
 |  | 
 |  | 
 | @end |