// // MyDocument.m // PythonLauncher // // Created by Jack Jansen on Fri Jul 19 2002. // Copyright (c) 2002 __MyCompanyName__. All rights reserved. // #import "MyDocument.h" #import "MyAppDelegate.h" #import "doscript.h" @implementation MyDocument - (id)init { self = [super init]; if (self) { // Add your subclass-specific initialization here. // If an error occurs here, send a [self dealloc] message and return nil. script = [@"<no script>.py" retain]; filetype = [@"Python Script" retain]; settings = NULL; } return self; } - (NSString *)windowNibName { // Override returning the nib file name of the document // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. return @"MyDocument"; } - (void)close { NSApplication *app = [NSApplication sharedApplication]; [super close]; if ([(MyAppDelegate*)[app delegate] shouldTerminate]) [app terminate: self]; } - (void)load_defaults { settings = [FileSettings newSettingsForFileType: filetype]; } - (void)update_display { [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]]; [scriptargs setStringValue: [settings scriptargs]]; [with_terminal setState: [settings with_terminal]]; [commandline setStringValue: [settings commandLineForScript: script]]; } - (void)update_settings { [settings updateFromSource: self]; } - (BOOL)run { const char *cmdline; int sts; cmdline = [[settings commandLineForScript: script] UTF8String]; if ([settings with_terminal]) { sts = doscript(cmdline); } else { sts = system(cmdline); } if (sts) { NSLog(@"Exit status: %d\n", sts); return NO; } return YES; } - (void)windowControllerDidLoadNib:(NSWindowController *) aController { [super windowControllerDidLoadNib:aController]; // Add any code here that need to be executed once the windowController has loaded the document's window. [self load_defaults]; [self update_display]; } - (NSData *)dataRepresentationOfType:(NSString *)aType { // Insert code here to write your document from the given data. You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. return nil; } - (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type; { // Insert code here to read your document from the given data. You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead. BOOL show_ui; // ask the app delegate whether we should show the UI or not. show_ui = [(MyAppDelegate*)[[NSApplication sharedApplication] delegate] shouldShowUI]; [script release]; script = [fileName retain]; [filetype release]; filetype = [type retain]; settings = [FileSettings newSettingsForFileType: filetype]; if (show_ui) { [self update_display]; return YES; } else { [self run]; [self performSelector:@selector(close) withObject:nil afterDelay:0.0]; return YES; } } - (IBAction)do_run:(id)sender { [self update_settings]; [self update_display]; if ([self run]) [self close]; } - (IBAction)do_cancel:(id)sender { [self close]; } - (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];}; - (NSString *) scriptargs { return [scriptargs stringValue];}; - (BOOL) with_terminal { return [with_terminal state];}; // Delegates - (void)controlTextDidChange:(NSNotification *)aNotification { [self update_settings]; [self update_display]; }; @end