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
|
---|