Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Mac/PythonLauncher/MyDocument.m
12 views
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
173