summaryrefslogtreecommitdiffstats
path: root/Mac/PythonLauncher/MyDocument.m
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/PythonLauncher/MyDocument.m')
-rwxr-xr-xMac/PythonLauncher/MyDocument.m175
1 files changed, 175 insertions, 0 deletions
diff --git a/Mac/PythonLauncher/MyDocument.m b/Mac/PythonLauncher/MyDocument.m
new file mode 100755
index 0000000..5acc2dc
--- /dev/null
+++ b/Mac/PythonLauncher/MyDocument.m
@@ -0,0 +1,175 @@
+//
+// MyDocument.m
+// PythonLauncher
+//
+// Created by Jack Jansen on Fri Jul 19 2002.
+// Copyright (c) 2002 __MyCompanyName__. All rights reserved.
+//
+
+#import "MyDocument.h"
+#import "MyAppDelegate.h"
+#import "doscript.h"
+
+@implementation MyDocument
+
+- (id)init
+{
+ self = [super init];
+ if (self) {
+
+ // Add your subclass-specific initialization here.
+ // If an error occurs here, send a [self dealloc] message and return nil.
+ script = [@"<no script>.py" retain];
+ filetype = [@"Python Script" retain];
+ settings = NULL;
+ }
+ return self;
+}
+
+- (NSString *)windowNibName
+{
+ // Override returning the nib file name of the document
+ // 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.
+ return @"MyDocument";
+}
+
+- (void)close
+{
+ NSApplication *app = [NSApplication sharedApplication];
+ [super close];
+ if ([[app delegate] shouldTerminate])
+ [app terminate: self];
+}
+
+- (void)load_defaults
+{
+// if (settings) [settings release];
+ settings = [FileSettings newSettingsForFileType: filetype];
+}
+
+- (void)update_display
+{
+// [[self window] setTitle: script];
+
+ [interpreter setStringValue: [settings interpreter]];
+ [honourhashbang setState: [settings honourhashbang]];
+ [debug setState: [settings debug]];
+ [verbose setState: [settings verbose]];
+ [inspect setState: [settings inspect]];
+ [optimize setState: [settings optimize]];
+ [nosite setState: [settings nosite]];
+ [tabs setState: [settings tabs]];
+ [others setStringValue: [settings others]];
+ [scriptargs setStringValue: [settings scriptargs]];
+ [with_terminal setState: [settings with_terminal]];
+
+ [commandline setStringValue: [settings commandLineForScript: script]];
+}
+
+- (void)update_settings
+{
+ [settings updateFromSource: self];
+}
+
+- (BOOL)run
+{
+ const char *cmdline;
+ int sts;
+
+ cmdline = [[settings commandLineForScript: script] cString];
+ if ([settings with_terminal]) {
+ sts = doscript(cmdline);
+ } else {
+ sts = system(cmdline);
+ }
+ if (sts) {
+ NSLog(@"Exit status: %d\n", sts);
+ return NO;
+ }
+ return YES;
+}
+
+- (void)windowControllerDidLoadNib:(NSWindowController *) aController
+{
+ [super windowControllerDidLoadNib:aController];
+ // Add any code here that need to be executed once the windowController has loaded the document's window.
+ [self load_defaults];
+ [self update_display];
+}
+
+- (NSData *)dataRepresentationOfType:(NSString *)aType
+{
+ // Insert code here to write your document from the given data. You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead.
+ return nil;
+}
+
+- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type;
+{
+ // Insert code here to read your document from the given data. You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead.
+ BOOL show_ui;
+
+ // ask the app delegate whether we should show the UI or not.
+ show_ui = [[[NSApplication sharedApplication] delegate] shouldShowUI];
+ [script release];
+ script = [fileName retain];
+ [filetype release];
+ filetype = [type retain];
+// if (settings) [settings release];
+ settings = [FileSettings newSettingsForFileType: filetype];
+ if (show_ui) {
+ [self update_display];
+ return YES;
+ } else {
+ [self run];
+ [self close];
+ return NO;
+ }
+}
+
+- (IBAction)do_run:(id)sender
+{
+ [self update_settings];
+ [self update_display];
+ if ([self run])
+ [self close];
+}
+
+- (IBAction)do_cancel:(id)sender
+{
+ [self close];
+}
+
+
+- (IBAction)do_reset:(id)sender
+{
+ [settings reset];
+ [self update_display];
+}
+
+- (IBAction)do_apply:(id)sender
+{
+ [self update_settings];
+ [self update_display];
+}
+
+// FileSettingsSource protocol
+- (NSString *) interpreter { return [interpreter stringValue];};
+- (BOOL) honourhashbang { return [honourhashbang state];};
+- (BOOL) debug { return [debug state];};
+- (BOOL) verbose { return [verbose state];};
+- (BOOL) inspect { return [inspect state];};
+- (BOOL) optimize { return [optimize state];};
+- (BOOL) nosite { return [nosite state];};
+- (BOOL) tabs { return [tabs state];};
+- (NSString *) others { return [others stringValue];};
+- (NSString *) scriptargs { return [scriptargs stringValue];};
+- (BOOL) with_terminal { return [with_terminal state];};
+
+// Delegates
+- (void)controlTextDidChange:(NSNotification *)aNotification
+{
+ [self update_settings];
+ [self update_display];
+};
+
+@end