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