1 // 2 // MyDocument.m 3 // PythonLauncher 4 // 5 // Created by Jack Jansen on Fri Jul 19 2002. 6 // Copyright (c) 2002 __MyCompanyName__. All rights reserved. 7 // 8 9 #import "MyDocument.h" 10 #import "MyAppDelegate.h" 11 #import "doscript.h" 12 13 @implementation MyDocument 14 15 - (id)init 16 { 17 self = [super init]; 18 if (self) { 19 20 // Add your subclass-specific initialization here. 21 // If an error occurs here, send a [self dealloc] message and return nil. 22 script = [@"<no script>.py" retain]; 23 filetype = [@"Python Script" retain]; 24 settings = NULL; 25 } 26 return self; 27 } 28 29 - (NSString *)windowNibName 30 { 31 // Override returning the nib file name of the document 32 // 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. 33 return @"MyDocument"; 34 } 35 36 - (void)close 37 { 38 NSApplication *app = [NSApplication sharedApplication]; 39 [super close]; 40 if ([(MyAppDelegate*)[app delegate] shouldTerminate]) 41 [app terminate: self]; 42 } 43 44 - (void)load_defaults 45 { 46 settings = [FileSettings newSettingsForFileType: filetype]; 47 } 48 49 - (void)update_display 50 { 51 [interpreter setStringValue: [settings interpreter]]; 52 [honourhashbang setState: [settings honourhashbang]]; 53 [debug setState: [settings debug]]; 54 [verbose setState: [settings verbose]]; 55 [inspect setState: [settings inspect]]; 56 [optimize setState: [settings optimize]]; 57 [nosite setState: [settings nosite]]; 58 [tabs setState: [settings tabs]]; 59 [others setStringValue: [settings others]]; 60 [scriptargs setStringValue: [settings scriptargs]]; 61 [with_terminal setState: [settings with_terminal]]; 62 63 [commandline setStringValue: [settings commandLineForScript: script]]; 64 } 65 66 - (void)update_settings 67 { 68 [settings updateFromSource: self]; 69 } 70 71 - (BOOL)run 72 { 73 const char *cmdline; 74 int sts; 75 76 cmdline = [[settings commandLineForScript: script] UTF8String]; 77 if ([settings with_terminal]) { 78 sts = doscript(cmdline); 79 } else { 80 sts = system(cmdline); 81 } 82 if (sts) { 83 NSLog(@"Exit status: %d\n", sts); 84 return NO; 85 } 86 return YES; 87 } 88 89 - (void)windowControllerDidLoadNib:(NSWindowController *) aController 90 { 91 [super windowControllerDidLoadNib:aController]; 92 // Add any code here that need to be executed once the windowController has loaded the document's window. 93 [self load_defaults]; 94 [self update_display]; 95 } 96 97 - (NSData *)dataRepresentationOfType:(NSString *)aType 98 { 99 // Insert code here to write your document from the given data. You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. 100 return nil; 101 } 102 103 - (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type; 104 { 105 // Insert code here to read your document from the given data. You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead. 106 BOOL show_ui; 107 108 // ask the app delegate whether we should show the UI or not. 109 show_ui = [(MyAppDelegate*)[[NSApplication sharedApplication] delegate] shouldShowUI]; 110 [script release]; 111 script = [fileName retain]; 112 [filetype release]; 113 filetype = [type retain]; 114 settings = [FileSettings newSettingsForFileType: filetype]; 115 if (show_ui) { 116 [self update_display]; 117 return YES; 118 } else { 119 [self run]; 120 [self performSelector:@selector(close) withObject:nil afterDelay:0.0]; 121 return YES; 122 } 123 } 124 125 - (IBAction)do_run:(id)sender 126 { 127 [self update_settings]; 128 [self update_display]; 129 if ([self run]) 130 [self close]; 131 } 132 133 - (IBAction)do_cancel:(id)sender 134 { 135 [self close]; 136 } 137 138 139 - (IBAction)do_reset:(id)sender 140 { 141 [settings reset]; 142 [self update_display]; 143 } 144 145 - (IBAction)do_apply:(id)sender 146 { 147 [self update_settings]; 148 [self update_display]; 149 } 150 151 // FileSettingsSource protocol 152 - (NSString *) interpreter { return [interpreter stringValue];}; 153 - (BOOL) honourhashbang { return [honourhashbang state];}; 154 - (BOOL) debug { return [debug state];}; 155 - (BOOL) verbose { return [verbose state];}; 156 - (BOOL) inspect { return [inspect state];}; 157 - (BOOL) optimize { return [optimize state];}; 158 - (BOOL) nosite { return [nosite state];}; 159 - (BOOL) tabs { return [tabs state];}; 160 - (NSString *) others { return [others stringValue];}; 161 - (NSString *) scriptargs { return [scriptargs stringValue];}; 162 - (BOOL) with_terminal { return [with_terminal state];}; 163 164 // Delegates 165 - (void)controlTextDidChange:(NSNotification *)aNotification 166 { 167 [self update_settings]; 168 [self update_display]; 169 }; 170 171 @end 172