17db96d56Sopenharmony_ci//
27db96d56Sopenharmony_ci//  MyDocument.m
37db96d56Sopenharmony_ci//  PythonLauncher
47db96d56Sopenharmony_ci//
57db96d56Sopenharmony_ci//  Created by Jack Jansen on Fri Jul 19 2002.
67db96d56Sopenharmony_ci//  Copyright (c) 2002 __MyCompanyName__. All rights reserved.
77db96d56Sopenharmony_ci//
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci#import "MyDocument.h"
107db96d56Sopenharmony_ci#import "MyAppDelegate.h"
117db96d56Sopenharmony_ci#import "doscript.h"
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci@implementation MyDocument
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci- (id)init
167db96d56Sopenharmony_ci{
177db96d56Sopenharmony_ci    self = [super init];
187db96d56Sopenharmony_ci    if (self) {
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci        // Add your subclass-specific initialization here.
217db96d56Sopenharmony_ci        // If an error occurs here, send a [self dealloc] message and return nil.
227db96d56Sopenharmony_ci        script = [@"<no script>.py" retain];
237db96d56Sopenharmony_ci        filetype = [@"Python Script" retain];
247db96d56Sopenharmony_ci        settings = NULL;
257db96d56Sopenharmony_ci    }
267db96d56Sopenharmony_ci    return self;
277db96d56Sopenharmony_ci}
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci- (NSString *)windowNibName
307db96d56Sopenharmony_ci{
317db96d56Sopenharmony_ci    // Override returning the nib file name of the document
327db96d56Sopenharmony_ci    // 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.
337db96d56Sopenharmony_ci    return @"MyDocument";
347db96d56Sopenharmony_ci}
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci- (void)close
377db96d56Sopenharmony_ci{
387db96d56Sopenharmony_ci    NSApplication *app = [NSApplication sharedApplication];
397db96d56Sopenharmony_ci    [super close];
407db96d56Sopenharmony_ci    if ([(MyAppDelegate*)[app delegate] shouldTerminate])
417db96d56Sopenharmony_ci        [app terminate: self];
427db96d56Sopenharmony_ci}
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci- (void)load_defaults
457db96d56Sopenharmony_ci{
467db96d56Sopenharmony_ci    settings = [FileSettings newSettingsForFileType: filetype];
477db96d56Sopenharmony_ci}
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci- (void)update_display
507db96d56Sopenharmony_ci{
517db96d56Sopenharmony_ci    [interpreter setStringValue: [settings interpreter]];
527db96d56Sopenharmony_ci    [honourhashbang setState: [settings honourhashbang]];
537db96d56Sopenharmony_ci    [debug setState: [settings debug]];
547db96d56Sopenharmony_ci    [verbose setState: [settings verbose]];
557db96d56Sopenharmony_ci    [inspect setState: [settings inspect]];
567db96d56Sopenharmony_ci    [optimize setState: [settings optimize]];
577db96d56Sopenharmony_ci    [nosite setState: [settings nosite]];
587db96d56Sopenharmony_ci    [tabs setState: [settings tabs]];
597db96d56Sopenharmony_ci    [others setStringValue: [settings others]];
607db96d56Sopenharmony_ci    [scriptargs setStringValue: [settings scriptargs]];
617db96d56Sopenharmony_ci    [with_terminal setState: [settings with_terminal]];
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci    [commandline setStringValue: [settings commandLineForScript: script]];
647db96d56Sopenharmony_ci}
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci- (void)update_settings
677db96d56Sopenharmony_ci{
687db96d56Sopenharmony_ci    [settings updateFromSource: self];
697db96d56Sopenharmony_ci}
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci- (BOOL)run
727db96d56Sopenharmony_ci{
737db96d56Sopenharmony_ci    const char *cmdline;
747db96d56Sopenharmony_ci    int sts;
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci     cmdline = [[settings commandLineForScript: script] UTF8String];
777db96d56Sopenharmony_ci   if ([settings with_terminal]) {
787db96d56Sopenharmony_ci        sts = doscript(cmdline);
797db96d56Sopenharmony_ci    } else {
807db96d56Sopenharmony_ci        sts = system(cmdline);
817db96d56Sopenharmony_ci    }
827db96d56Sopenharmony_ci    if (sts) {
837db96d56Sopenharmony_ci        NSLog(@"Exit status: %d\n", sts);
847db96d56Sopenharmony_ci        return NO;
857db96d56Sopenharmony_ci    }
867db96d56Sopenharmony_ci    return YES;
877db96d56Sopenharmony_ci}
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci- (void)windowControllerDidLoadNib:(NSWindowController *) aController
907db96d56Sopenharmony_ci{
917db96d56Sopenharmony_ci    [super windowControllerDidLoadNib:aController];
927db96d56Sopenharmony_ci    // Add any code here that need to be executed once the windowController has loaded the document's window.
937db96d56Sopenharmony_ci    [self load_defaults];
947db96d56Sopenharmony_ci    [self update_display];
957db96d56Sopenharmony_ci}
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci- (NSData *)dataRepresentationOfType:(NSString *)aType
987db96d56Sopenharmony_ci{
997db96d56Sopenharmony_ci    // Insert code here to write your document from the given data.  You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead.
1007db96d56Sopenharmony_ci    return nil;
1017db96d56Sopenharmony_ci}
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type;
1047db96d56Sopenharmony_ci{
1057db96d56Sopenharmony_ci    // Insert code here to read your document from the given data.  You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead.
1067db96d56Sopenharmony_ci    BOOL show_ui;
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci    // ask the app delegate whether we should show the UI or not.
1097db96d56Sopenharmony_ci    show_ui = [(MyAppDelegate*)[[NSApplication sharedApplication] delegate] shouldShowUI];
1107db96d56Sopenharmony_ci    [script release];
1117db96d56Sopenharmony_ci    script = [fileName retain];
1127db96d56Sopenharmony_ci    [filetype release];
1137db96d56Sopenharmony_ci    filetype = [type retain];
1147db96d56Sopenharmony_ci    settings = [FileSettings newSettingsForFileType: filetype];
1157db96d56Sopenharmony_ci    if (show_ui) {
1167db96d56Sopenharmony_ci        [self update_display];
1177db96d56Sopenharmony_ci        return YES;
1187db96d56Sopenharmony_ci    } else {
1197db96d56Sopenharmony_ci        [self run];
1207db96d56Sopenharmony_ci	[self performSelector:@selector(close) withObject:nil afterDelay:0.0];
1217db96d56Sopenharmony_ci        return YES;
1227db96d56Sopenharmony_ci    }
1237db96d56Sopenharmony_ci}
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci- (IBAction)do_run:(id)sender
1267db96d56Sopenharmony_ci{
1277db96d56Sopenharmony_ci    [self update_settings];
1287db96d56Sopenharmony_ci    [self update_display];
1297db96d56Sopenharmony_ci    if ([self run])
1307db96d56Sopenharmony_ci        [self close];
1317db96d56Sopenharmony_ci}
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci- (IBAction)do_cancel:(id)sender
1347db96d56Sopenharmony_ci{
1357db96d56Sopenharmony_ci    [self close];
1367db96d56Sopenharmony_ci}
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci- (IBAction)do_reset:(id)sender
1407db96d56Sopenharmony_ci{
1417db96d56Sopenharmony_ci    [settings reset];
1427db96d56Sopenharmony_ci    [self update_display];
1437db96d56Sopenharmony_ci}
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci- (IBAction)do_apply:(id)sender
1467db96d56Sopenharmony_ci{
1477db96d56Sopenharmony_ci    [self update_settings];
1487db96d56Sopenharmony_ci    [self update_display];
1497db96d56Sopenharmony_ci}
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci// FileSettingsSource protocol
1527db96d56Sopenharmony_ci- (NSString *) interpreter { return [interpreter stringValue];};
1537db96d56Sopenharmony_ci- (BOOL) honourhashbang { return [honourhashbang state];};
1547db96d56Sopenharmony_ci- (BOOL) debug { return [debug state];};
1557db96d56Sopenharmony_ci- (BOOL) verbose { return [verbose state];};
1567db96d56Sopenharmony_ci- (BOOL) inspect { return [inspect state];};
1577db96d56Sopenharmony_ci- (BOOL) optimize { return [optimize state];};
1587db96d56Sopenharmony_ci- (BOOL) nosite { return [nosite state];};
1597db96d56Sopenharmony_ci- (BOOL) tabs { return [tabs state];};
1607db96d56Sopenharmony_ci- (NSString *) others { return [others stringValue];};
1617db96d56Sopenharmony_ci- (NSString *) scriptargs { return [scriptargs stringValue];};
1627db96d56Sopenharmony_ci- (BOOL) with_terminal { return [with_terminal state];};
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci// Delegates
1657db96d56Sopenharmony_ci- (void)controlTextDidChange:(NSNotification *)aNotification
1667db96d56Sopenharmony_ci{
1677db96d56Sopenharmony_ci    [self update_settings];
1687db96d56Sopenharmony_ci    [self update_display];
1697db96d56Sopenharmony_ci};
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci@end
172