Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 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" |
Jack Jansen | b7276cd | 2002-07-31 13:15:59 +0000 | [diff] [blame] | 11 | #import "doscript.h" |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 12 | |
| 13 | @implementation MyDocument |
| 14 | |
| 15 | - (id)init |
| 16 | { |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 17 | self = [super init]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 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. |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 22 | script = [@"<no script>.py" retain]; |
| 23 | filetype = [@"Python Script" retain]; |
| 24 | settings = NULL; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 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 ([[app delegate] shouldTerminate]) |
| 41 | [app terminate: self]; |
| 42 | } |
| 43 | |
| 44 | - (void)load_defaults |
| 45 | { |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 46 | // if (settings) [settings release]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 47 | settings = [FileSettings newSettingsForFileType: filetype]; |
| 48 | } |
| 49 | |
| 50 | - (void)update_display |
| 51 | { |
| 52 | // [[self window] setTitle: script]; |
| 53 | |
| 54 | [interpreter setStringValue: [settings interpreter]]; |
Jack Jansen | 3d3b746 | 2003-02-17 15:40:00 +0000 | [diff] [blame] | 55 | [honourhashbang setState: [settings honourhashbang]]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 56 | [debug setState: [settings debug]]; |
| 57 | [verbose setState: [settings verbose]]; |
| 58 | [inspect setState: [settings inspect]]; |
| 59 | [optimize setState: [settings optimize]]; |
| 60 | [nosite setState: [settings nosite]]; |
| 61 | [tabs setState: [settings tabs]]; |
| 62 | [others setStringValue: [settings others]]; |
Jack Jansen | d7cccdd | 2003-06-20 22:21:03 +0000 | [diff] [blame] | 63 | [scriptargs setStringValue: [settings scriptargs]]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 64 | [with_terminal setState: [settings with_terminal]]; |
| 65 | |
| 66 | [commandline setStringValue: [settings commandLineForScript: script]]; |
| 67 | } |
| 68 | |
| 69 | - (void)update_settings |
| 70 | { |
| 71 | [settings updateFromSource: self]; |
| 72 | } |
| 73 | |
| 74 | - (BOOL)run |
| 75 | { |
| 76 | const char *cmdline; |
| 77 | int sts; |
| 78 | |
Jack Jansen | b7276cd | 2002-07-31 13:15:59 +0000 | [diff] [blame] | 79 | cmdline = [[settings commandLineForScript: script] cString]; |
| 80 | if ([settings with_terminal]) { |
| 81 | sts = doscript(cmdline); |
| 82 | } else { |
| 83 | sts = system(cmdline); |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 84 | } |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 85 | if (sts) { |
| 86 | NSLog(@"Exit status: %d\n", sts); |
| 87 | return NO; |
| 88 | } |
| 89 | return YES; |
| 90 | } |
| 91 | |
| 92 | - (void)windowControllerDidLoadNib:(NSWindowController *) aController |
| 93 | { |
| 94 | [super windowControllerDidLoadNib:aController]; |
| 95 | // Add any code here that need to be executed once the windowController has loaded the document's window. |
| 96 | [self load_defaults]; |
| 97 | [self update_display]; |
| 98 | } |
| 99 | |
| 100 | - (NSData *)dataRepresentationOfType:(NSString *)aType |
| 101 | { |
| 102 | // Insert code here to write your document from the given data. You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. |
| 103 | return nil; |
| 104 | } |
| 105 | |
| 106 | - (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type; |
| 107 | { |
| 108 | // Insert code here to read your document from the given data. You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead. |
| 109 | BOOL show_ui; |
| 110 | |
| 111 | // ask the app delegate whether we should show the UI or not. |
| 112 | show_ui = [[[NSApplication sharedApplication] delegate] shouldShowUI]; |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 113 | [script release]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 114 | script = [fileName retain]; |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 115 | [filetype release]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 116 | filetype = [type retain]; |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 117 | // if (settings) [settings release]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 118 | settings = [FileSettings newSettingsForFileType: filetype]; |
| 119 | if (show_ui) { |
| 120 | [self update_display]; |
| 121 | return YES; |
| 122 | } else { |
| 123 | [self run]; |
| 124 | [self close]; |
| 125 | return NO; |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | - (IBAction)do_run:(id)sender |
| 130 | { |
| 131 | [self update_settings]; |
| 132 | [self update_display]; |
| 133 | if ([self run]) |
| 134 | [self close]; |
| 135 | } |
| 136 | |
| 137 | - (IBAction)do_cancel:(id)sender |
| 138 | { |
| 139 | [self close]; |
| 140 | } |
| 141 | |
| 142 | |
| 143 | - (IBAction)do_reset:(id)sender |
| 144 | { |
Jack Jansen | 2095c06 | 2002-11-25 13:11:06 +0000 | [diff] [blame] | 145 | [settings reset]; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 146 | [self update_display]; |
| 147 | } |
| 148 | |
| 149 | - (IBAction)do_apply:(id)sender |
| 150 | { |
| 151 | [self update_settings]; |
| 152 | [self update_display]; |
| 153 | } |
| 154 | |
| 155 | // FileSettingsSource protocol |
| 156 | - (NSString *) interpreter { return [interpreter stringValue];}; |
Jack Jansen | 3d3b746 | 2003-02-17 15:40:00 +0000 | [diff] [blame] | 157 | - (BOOL) honourhashbang { return [honourhashbang state];}; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 158 | - (BOOL) debug { return [debug state];}; |
| 159 | - (BOOL) verbose { return [verbose state];}; |
| 160 | - (BOOL) inspect { return [inspect state];}; |
| 161 | - (BOOL) optimize { return [optimize state];}; |
| 162 | - (BOOL) nosite { return [nosite state];}; |
| 163 | - (BOOL) tabs { return [tabs state];}; |
| 164 | - (NSString *) others { return [others stringValue];}; |
Jack Jansen | d7cccdd | 2003-06-20 22:21:03 +0000 | [diff] [blame] | 165 | - (NSString *) scriptargs { return [scriptargs stringValue];}; |
Jack Jansen | 3bbb617 | 2002-07-29 21:36:35 +0000 | [diff] [blame] | 166 | - (BOOL) with_terminal { return [with_terminal state];}; |
| 167 | |
| 168 | // Delegates |
| 169 | - (void)controlTextDidChange:(NSNotification *)aNotification |
| 170 | { |
| 171 | [self update_settings]; |
| 172 | [self update_display]; |
| 173 | }; |
| 174 | |
| 175 | @end |