blob: 89772f66b9929b59257d8e7a29f17519ebf941c8 [file] [log] [blame]
Jack Jansen3bbb6172002-07-29 21:36:35 +00001//
2// FileSettings.m
3// PythonLauncher
4//
5// Created by Jack Jansen on Sun Jul 21 2002.
6// Copyright (c) 2002 __MyCompanyName__. All rights reserved.
7//
8
9#import "FileSettings.h"
10
11@implementation FileSettings
Jack Jansen2095c062002-11-25 13:11:06 +000012
13+ (id)getFactorySettingsForFileType: (NSString *)filetype
14{
15 static FileSettings *fsdefault_py, *fsdefault_pyw, *fsdefault_pyc;
16 FileSettings **curdefault;
17
18 if ([filetype isEqualToString: @"Python Script"]) {
19 curdefault = &fsdefault_py;
20 } else if ([filetype isEqualToString: @"Python GUI Script"]) {
21 curdefault = &fsdefault_pyw;
22 } else if ([filetype isEqualToString: @"Python Bytecode Document"]) {
23 curdefault = &fsdefault_pyc;
24 } else {
25 NSLog(@"Funny File Type: %@\n", filetype);
26 curdefault = &fsdefault_py;
27 filetype = @"Python Script";
28 }
29 if (!*curdefault) {
30 *curdefault = [[FileSettings new] initForFSDefaultFileType: filetype];
31 }
32 return *curdefault;
33}
34
Jack Jansen3bbb6172002-07-29 21:36:35 +000035+ (id)getDefaultsForFileType: (NSString *)filetype
36{
37 static FileSettings *default_py, *default_pyw, *default_pyc;
38 FileSettings **curdefault;
39
40 if ([filetype isEqualToString: @"Python Script"]) {
41 curdefault = &default_py;
42 } else if ([filetype isEqualToString: @"Python GUI Script"]) {
43 curdefault = &default_pyw;
44 } else if ([filetype isEqualToString: @"Python Bytecode Document"]) {
45 curdefault = &default_pyc;
46 } else {
47 NSLog(@"Funny File Type: %@\n", filetype);
48 curdefault = &default_py;
49 filetype = @"Python Script";
50 }
51 if (!*curdefault) {
Jack Jansen2095c062002-11-25 13:11:06 +000052 *curdefault = [[FileSettings new] initForDefaultFileType: filetype];
Jack Jansen3bbb6172002-07-29 21:36:35 +000053 }
54 return *curdefault;
55}
56
57+ (id)newSettingsForFileType: (NSString *)filetype
58{
59 FileSettings *cur;
60
Jack Jansen2095c062002-11-25 13:11:06 +000061 cur = [FileSettings new];
62 [cur initForFileType: filetype];
63 return [cur retain];
Jack Jansen3bbb6172002-07-29 21:36:35 +000064}
65
66- (id)initWithFileSettings: (FileSettings *)source
67{
Jack Jansen2095c062002-11-25 13:11:06 +000068 self = [super init];
69 if (!self) return self;
70
Jack Jansen3bbb6172002-07-29 21:36:35 +000071 interpreter = [source->interpreter retain];
72 debug = source->debug;
73 verbose = source->verbose;
74 inspect = source->inspect;
75 optimize = source->optimize;
76 nosite = source->nosite;
77 tabs = source->tabs;
78 others = [source->others retain];
79 with_terminal = source->with_terminal;
Jack Jansen2095c062002-11-25 13:11:06 +000080 prefskey = source->prefskey;
81 if (prefskey) [prefskey retain];
Jack Jansen3bbb6172002-07-29 21:36:35 +000082
Jack Jansen3bbb6172002-07-29 21:36:35 +000083 return self;
84}
85
Jack Jansen2095c062002-11-25 13:11:06 +000086- (id)initForFileType: (NSString *)filetype
Jack Jansen3bbb6172002-07-29 21:36:35 +000087{
Jack Jansen2095c062002-11-25 13:11:06 +000088 FileSettings *defaults;
89
90 defaults = [FileSettings getDefaultsForFileType: filetype];
91 self = [self initWithFileSettings: defaults];
92 origsource = [defaults retain];
93 return self;
94}
95
96//- (id)init
97//{
98// self = [self initForFileType: @"Python Script"];
99// return self;
100//}
101
102- (id)initForFSDefaultFileType: (NSString *)filetype
103{
104 int i;
105 NSString *filename;
106 NSDictionary *dict;
107 NSArray *interpreters;
108 static NSDictionary *factorySettings;
109
110 self = [super init];
111 if (!self) return self;
112
113 if (factorySettings == NULL) {
114 NSBundle *bdl = [NSBundle mainBundle];
115 NSString *path = [ bdl pathForResource: @"factorySettings"
116 ofType: @"plist"];
117 factorySettings = [[NSDictionary dictionaryWithContentsOfFile:
118 path] retain];
119 if (factorySettings == NULL) {
120 NSLog(@"Missing %@", path);
121 return NULL;
122 }
123 }
124 dict = [factorySettings objectForKey: filetype];
125 if (dict == NULL) {
126 NSLog(@"factorySettings.plist misses file type \"%@\"", filetype);
127 interpreter = [@"no default found" retain];
128 return NULL;
129 }
130 [self applyValuesFromDict: dict];
131 interpreters = [dict objectForKey: @"interpreter_list"];
132 interpreter = NULL;
133 for (i=0; i < [interpreters count]; i++) {
134 filename = [interpreters objectAtIndex: i];
135 filename = [filename stringByExpandingTildeInPath];
136 if ([[NSFileManager defaultManager] fileExistsAtPath: filename]) {
137 interpreter = [filename retain];
138 break;
139 }
140 }
141 if (interpreter == NULL)
142 interpreter = [@"no default found" retain];
143 origsource = NULL;
144 return self;
145}
146
147- (void)applyUserDefaults: (NSString *)filetype
148{
149 NSUserDefaults *defaults;
150 NSDictionary *dict;
151
152 defaults = [NSUserDefaults standardUserDefaults];
153 dict = [defaults dictionaryForKey: filetype];
154 if (!dict)
155 return;
156 [self applyValuesFromDict: dict];
157}
158
159- (id)initForDefaultFileType: (NSString *)filetype
160{
161 FileSettings *fsdefaults;
162
163 fsdefaults = [FileSettings getFactorySettingsForFileType: filetype];
164 self = [self initWithFileSettings: fsdefaults];
165 if (!self) return self;
166 [self applyUserDefaults: filetype];
167 prefskey = [filetype retain];
168 return self;
169}
170
171- (void)reset
172{
173 if (origsource) {
174 [self updateFromSource: origsource];
175 } else {
176 FileSettings *fsdefaults;
177 fsdefaults = [FileSettings getFactorySettingsForFileType: prefskey];
178 [self updateFromSource: fsdefaults];
179 }
Jack Jansen3bbb6172002-07-29 21:36:35 +0000180}
181
182- (void)updateFromSource: (id <FileSettingsSource>)source
183{
184 interpreter = [[source interpreter] retain];
185 debug = [source debug];
186 verbose = [source verbose];
187 inspect = [source inspect];
188 optimize = [source optimize];
189 nosite = [source nosite];
190 tabs = [source tabs];
191 others = [[source others] retain];
192 with_terminal = [source with_terminal];
Jack Jansen2095c062002-11-25 13:11:06 +0000193 // And if this is a user defaults object we also save the
194 // values
Jack Jansen3bbb6172002-07-29 21:36:35 +0000195 if (!origsource) {
196 NSUserDefaults *defaults;
197 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
198 interpreter, @"interpreter",
199 [NSNumber numberWithBool: debug], @"debug",
200 [NSNumber numberWithBool: verbose], @"verbose",
201 [NSNumber numberWithBool: inspect], @"inspect",
202 [NSNumber numberWithBool: optimize], @"optimize",
203 [NSNumber numberWithBool: nosite], @"nosite",
204 [NSNumber numberWithBool: nosite], @"nosite",
205 others, @"others",
206 [NSNumber numberWithBool: with_terminal], @"with_terminal",
207 nil];
208 defaults = [NSUserDefaults standardUserDefaults];
209 [defaults setObject: dict forKey: prefskey];
210 }
211}
212
Jack Jansen2095c062002-11-25 13:11:06 +0000213- (void)applyValuesFromDict: (NSDictionary *)dict
Jack Jansen3bbb6172002-07-29 21:36:35 +0000214{
Jack Jansen3bbb6172002-07-29 21:36:35 +0000215 id value;
216
Jack Jansen3bbb6172002-07-29 21:36:35 +0000217 value = [dict objectForKey: @"interpreter"];
218 if (value) interpreter = [value retain];
219 value = [dict objectForKey: @"debug"];
220 if (value) debug = [value boolValue];
221 value = [dict objectForKey: @"verbose"];
222 if (value) verbose = [value boolValue];
223 value = [dict objectForKey: @"inspect"];
224 if (value) inspect = [value boolValue];
225 value = [dict objectForKey: @"optimize"];
226 if (value) optimize = [value boolValue];
227 value = [dict objectForKey: @"nosite"];
228 if (value) nosite = [value boolValue];
229 value = [dict objectForKey: @"nosite"];
230 if (value) tabs = [value boolValue];
231 value = [dict objectForKey: @"others"];
232 if (value) others = [value retain];
233 value = [dict objectForKey: @"with_terminal"];
234 if (value) with_terminal = [value boolValue];
235}
236
237- (NSString *)commandLineForScript: (NSString *)script
238{
239 return [NSString stringWithFormat:
240 @"\"%@\"%s%s%s%s%s%s %@ \"%@\" %s",
241 interpreter,
242 debug?" -d":"",
243 verbose?" -v":"",
244 inspect?" -i":"",
245 optimize?" -O":"",
246 nosite?" -S":"",
247 tabs?" -t":"",
248 others,
249 script,
Jack Jansenb7276cd2002-07-31 13:15:59 +0000250 with_terminal? "&& exit" : " &"];
Jack Jansen3bbb6172002-07-29 21:36:35 +0000251}
252
253// FileSettingsSource protocol
254- (NSString *) interpreter { return interpreter;};
255- (BOOL) debug { return debug;};
256- (BOOL) verbose { return verbose;};
257- (BOOL) inspect { return inspect;};
258- (BOOL) optimize { return optimize;};
259- (BOOL) nosite { return nosite;};
260- (BOOL) tabs { return tabs;};
261- (NSString *) others { return others;};
262- (BOOL) with_terminal { return with_terminal;};
263
264@end