Home | History | Annotate | Download | only in PythonLauncher
      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