From 3bbb617ca4195af7fb9ce5751a78dd6ca3d27e16 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Mon, 29 Jul 2002 21:36:35 +0000 Subject: [PATCH] First stab at the launcher application. This will be run when the user doubleclicks a .py, .pyw or .pyc file. It runs the file by invoking the relevant interpreter (either the command line Python in a terminal window or a Python.app for GUI-based scripts). Interpreter to use and the options to pass are settable through preferences. If PythonLauncher wasn't running it does its thing for one script and exits. If it was manually started before a dialog is presented where the user can set the options to use, etc. To be done: - option-drag/doubleclick should always open the interactive dialog - Terminal-window isn't done yet - Should be reimplemented in Python, but pyobjc isn't part of the core. - Various menu entries should be disabled. --- .../PythonLauncher/English.lproj/Credits.rtf | 30 + .../English.lproj/InfoPlist.strings | Bin 0 -> 618 bytes .../English.lproj/MainMenu.nib/classes.nib | 12 + .../English.lproj/MainMenu.nib/info.nib | 21 + .../English.lproj/MainMenu.nib/objects.nib | Bin 0 -> 5016 bytes .../English.lproj/MyDocument.nib/classes.nib | 24 + .../English.lproj/MyDocument.nib/info.nib | 16 + .../English.lproj/MyDocument.nib/objects.nib | Bin 0 -> 4174 bytes Mac/OSX/PythonLauncher/FileSettings.h | 53 ++ Mac/OSX/PythonLauncher/FileSettings.m | 182 ++++++ Mac/OSX/PythonLauncher/MyAppDelegate.h | 14 + Mac/OSX/PythonLauncher/MyAppDelegate.m | 64 ++ Mac/OSX/PythonLauncher/MyDocument.h | 39 ++ Mac/OSX/PythonLauncher/MyDocument.m | 165 +++++ .../PreferenceWindow.nib/classes.nib | 25 + .../PreferenceWindow.nib/info.nib | 16 + .../PreferenceWindow.nib/objects.nib | Bin 0 -> 4920 bytes .../PreferencesWindowController.h | 32 + .../PreferencesWindowController.m | 94 +++ Mac/OSX/PythonLauncher/PythonCompiled.icns | Bin 0 -> 57125 bytes Mac/OSX/PythonLauncher/PythonInterpreter.icns | Bin 0 -> 45913 bytes .../PythonLauncher.pbproj/project.pbxproj | 612 ++++++++++++++++++ Mac/OSX/PythonLauncher/PythonSource.icns | Bin 0 -> 50112 bytes Mac/OSX/PythonLauncher/main.m | 14 + 24 files changed, 1413 insertions(+) create mode 100644 Mac/OSX/PythonLauncher/English.lproj/Credits.rtf create mode 100644 Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib create mode 100755 Mac/OSX/PythonLauncher/FileSettings.h create mode 100755 Mac/OSX/PythonLauncher/FileSettings.m create mode 100644 Mac/OSX/PythonLauncher/MyAppDelegate.h create mode 100644 Mac/OSX/PythonLauncher/MyAppDelegate.m create mode 100755 Mac/OSX/PythonLauncher/MyDocument.h create mode 100755 Mac/OSX/PythonLauncher/MyDocument.m create mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib create mode 100644 Mac/OSX/PythonLauncher/PreferencesWindowController.h create mode 100644 Mac/OSX/PythonLauncher/PreferencesWindowController.m create mode 100644 Mac/OSX/PythonLauncher/PythonCompiled.icns create mode 100644 Mac/OSX/PythonLauncher/PythonInterpreter.icns create mode 100755 Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj create mode 100644 Mac/OSX/PythonLauncher/PythonSource.icns create mode 100755 Mac/OSX/PythonLauncher/main.m diff --git a/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf b/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf new file mode 100644 index 00000000000..930ca221a12 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf @@ -0,0 +1,30 @@ +{\rtf1\mac\ansicpg10000\cocoartf100 +{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\f1\b0 \ + Jack Jansen\ +\ + +\f0\b Human Interface Design: +\f1\b0 \ + Jack Jansen\ +\ + +\f0\b Testing: +\f1\b0 \ + Jack Jansen\ + Pythonmac-SIG@python.org\ +\ + +\f0\b Documentation: +\f1\b0 \ + Missing\ +\ + +\f0\b With special thanks to: +\f1\b0 \ + Guido, of course\ +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings b/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..40b61850a6f5041eddeb6e3c46b9520f86b1d1aa GIT binary patch literal 618 zcmb`EOAEp<5QOLKuLvGRd|kzhf)6M~EO@VPQEO?dqCZ~!nyR2w@F1nxWHZ^FnZ4dr zRY^vU_L|DqR%=}}*Nohe7%3*RS3oqx1?zy*f_+7y#m7p>Za|+cszl8KUq@ZFbpSmB zH79H_wY*9~c9+?Q9ftEj2|I}twLrwil z*B-r+m+F7@D#Nsc_7E3R?n|_#J~rS|V>NI77`8eH&w aZg-#qjlla%!Pmr2BCl^Ylf0Y1FuDWxp=@vf literal 0 HcmV?d00001 diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib new file mode 100644 index 00000000000..47b40aba31c --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {showPreferences = id; }; + CLASS = MyAppDelegate; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib new file mode 100644 index 00000000000..b96759af1c2 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib @@ -0,0 +1,21 @@ + + + + + IBDocumentLocation + 99 33 356 240 0 0 800 578 + IBEditorPositions + + 29 + 82 396 318 44 0 0 800 578 + + IBFramework Version + 263.2 + IBOpenObjects + + 29 + + IBSystem Version + 5S66 + + diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..532a5c828967455b622d4670969ba546ec4adf21 GIT binary patch literal 5016 zcma)AeQZHYeWh7kTv!ixhCsF5w!hLB=+ZyL#%Z%xRKE?FDM{VD#)=;=BnT*FG zniVs2C*#<@*p~sB&B)|>y4T_f;rrhxP159w1pD`>-4N^S>}2--{r)~JrW4X}-SDRC zGEHrS+4d~7uRce!jr;6(_T}tWWcKzFy|W{xOaul-tRX{xQA_KQA#OTol{tIaT*mh9 zdGh25%b?}Cp|Bg^7M?QFW`sXG3W!7Vy$NlQ6Nh3&Ke~r_WJf|XcQ{VQ{uO+L8YGjZ zFSd(E!=;`Up(uGNlLr_LW9GKPa) z@px5`mDm}({!%(twR+_GYg4&S8Jmq6qg}zv(v?%?(9jc$^D5se7QlsI@>{4P3W`=A z;=^Rvr%yHQ1a?+`lIv79gg0vATL>TA!XsR_ruVD@i4OW`(#y)h=I%Jx%%F;Qs!}9} z7Gh@HsWusrH0~cORhFZ|!P@KMCZw@DZlu(%^$ph!u_3JObit|G;AR2`yVTC36ozY4 znzrzr+{Elnv8`twSL*;CM!_(*(#g^i4%D9CKY(YmRU#y(BH-z)cCJ^7Uya6UEO>*0 zluEJaR`4r&)KImxd#ZV;EIjZQ?t#BGJ-GI|y9VpK)0Uci*Yx)2=xFFRk|PQnsSR!% z&{BA=(}M4u0a}%N)ov+2V_bim!#s}Ht~!y(wl=-(nWh2H2t8Ug{p4c=A-Hzx+Vrcn zn?$;e#Q*%gy;5u4 z8RNC-^TQF-h{uDLF=0eay?rWfX(zag=Xr9>%Zvtz2M zCO84rSp-W=<>3ppX^SgqcrpdQX{3WMW20B)Z>az&J{4n@ruX*yW*$#gF)C|DK}sk4 zN)_q+%GM?5LU3WeGL`FUa$LF=JnP4sJ4YF7dKC-G7@ppX5~!5%c188~#q?Mrw%gsK ziK!;1c-v=ijkrcXvyqxw+MQH9J*M#~SKxR~F{A*7Y{JSPq^>gKj6sVZ z9u{GqA08Fq#BnH`hx{Q}zSScGGFXez>$%do%?*9)+`4OXsz_3dyp52y36xCpEW7YlGM4{O`ulRPYI%YFe? zU<2q|%hHA z$#V`AdSF!#EUJ{F4+|sG>$pCi;{{YKA0>xhJyMv&mp_1l8rez-viglG$vsAWZp_|?s=6ggf2!&c|a(- z*aPQK+OP)y98g{O#4=$HmQ@0v*)K3>{fd z>Ny&|5cNUctE(OCscw@hV5W6ysb17Z@EPW5R*~kZ6uuPbF!O|0NcePw+So}Ass}hn zRo`rJGZE8qvwG5_Bwb>dQEsZq@p-66H8ZN7eFK`#;~wzz7-ntZ5Wa-eW2WrUobnK- z2+>FgPjE(2(mILoi24-DLvp$yG9KAu`oAejt&C^mK1mu)Y{NW39SNFK>asI(T}G+^KE@+EO4pr7TAslmms-Z) zV4PDK#Pl>a3JRp|IXsR%`*;<{3#u&tk@ zxIv0J<%+J-V%#LvLhNI(uP?D)Ho|Bl>P>ft5P>9h-X(yiIo5%ixs;f)hrH6+_5!s5 z`qNgNTjlj1J2FNrf3$QLV0~w@-^QO|VtWMptz0oEFTXCc^W{mwelFVtJ0%|omXmh{ z`#^qAu>EqGV1JTJ1^c6XELdKi6YNKF@bmI&zbw2Y{erzG8wLA~OuQ=Zgyfh{rUZLa z-WTksyqT1O{ZO#q%h&eE3tQy1UKtSVBNVCM|*L?>GKNIY%JSLdH@An1!m&`4ZE4RzD zf{mdhBiIS~38L`(CxV^9VN9^U;_yqs{)WR_f}O+R9l`!C&j<$cb-|9I;DBKNki&xQ zlT5I~@}6MtqV>{XrhuAa8wL&J*mAd??sK*&Gf00!u;0n+-@vb52=*5o_6v4ib_n)Qxyq2s1^csHgucl0VR>Ufwtp58 jLa^gFHtd(W^u + + + + IBDocumentLocation + 265 40 356 240 0 0 800 578 + IBFramework Version + 263.2 + IBOpenObjects + + 5 + + IBSystem Version + 5S66 + + diff --git a/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..33521ada231fe80754aa1e6926ca1775dcb3e338 GIT binary patch literal 4174 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 + +@protocol FileSettingsSource +- (NSString *) interpreter; +- (BOOL) debug; +- (BOOL) verbose; +- (BOOL) inspect; +- (BOOL) optimize; +- (BOOL) nosite; +- (BOOL) tabs; +- (NSString *) others; +- (BOOL) with_terminal; +@end + +@interface FileSettings : NSObject +{ + NSString *interpreter; // The pathname of the interpreter to use + BOOL debug; // -d option: debug parser + BOOL verbose; // -v option: verbose import + BOOL inspect; // -i option: interactive mode after script + BOOL optimize; // -O option: optimize bytecode + BOOL nosite; // -S option: don't import site.py + BOOL tabs; // -t option: warn about inconsistent tabs + NSString *others; // other options + BOOL with_terminal; // Run in terminal window + + FileSettings *origsource; + NSString *prefskey; +} + ++ (id)getDefaultsForFileType: (NSString *)filetype; ++ (id)newSettingsForFileType: (NSString *)filetype; + +- (id)init; +- (id)initWithFileSettings: (FileSettings *)source; + +- (void)updateFromSource: (id )source; +- (NSString *)commandLineForScript: (NSString *)script; + +- (id)factorySettingsForFileType: (NSString *)filetype; +- (void)saveDefaults; +- (void)updateFromUserDefaults: (NSString *)filetype; + + +@end diff --git a/Mac/OSX/PythonLauncher/FileSettings.m b/Mac/OSX/PythonLauncher/FileSettings.m new file mode 100755 index 00000000000..99a1166854e --- /dev/null +++ b/Mac/OSX/PythonLauncher/FileSettings.m @@ -0,0 +1,182 @@ +// +// FileSettings.m +// PythonLauncher +// +// Created by Jack Jansen on Sun Jul 21 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + +#import "FileSettings.h" + +@implementation FileSettings ++ (id)getDefaultsForFileType: (NSString *)filetype +{ + static FileSettings *default_py, *default_pyw, *default_pyc; + FileSettings **curdefault; + + if ([filetype isEqualToString: @"Python Script"]) { + curdefault = &default_py; + } else if ([filetype isEqualToString: @"Python GUI Script"]) { + curdefault = &default_pyw; + } else if ([filetype isEqualToString: @"Python Bytecode Document"]) { + curdefault = &default_pyc; + } else { + NSLog(@"Funny File Type: %@\n", filetype); + curdefault = &default_py; + filetype = @"Python Script"; + } + if (!*curdefault) { + *curdefault = [[FileSettings new] init]; + [*curdefault factorySettingsForFileType: filetype]; + [*curdefault updateFromUserDefaults: filetype]; + } + return *curdefault; +} + ++ (id)newSettingsForFileType: (NSString *)filetype +{ + FileSettings *cur; + + cur = [[FileSettings new] init]; + [cur initWithFileSettings: [FileSettings getDefaultsForFileType: filetype]]; + return cur; +} + +- (id)init +{ + self = [super init]; + return [self factorySettingsForFileType: @"Python Script"]; +} + +- (id)factorySettingsForFileType: (NSString *)filetype +{ + debug = NO; + verbose = NO; + inspect = NO; + optimize = NO; + nosite = NO; + tabs = NO; + others = @""; + if ([filetype isEqualToString: @"Python Script"] || + [filetype isEqualToString: @"Python Bytecode Document"]) { + interpreter = @"/usr/local/bin/python"; + with_terminal = YES; + } else if ([filetype isEqualToString: @"Python GUI Script"]) { + interpreter = @"/Applications/Python.app/Contents/MacOS/python"; + with_terminal = NO; + } else { + NSLog(@"Funny File Type: %@\n", filetype); + } + origsource = NULL; + return self; +} + +- (id)initWithFileSettings: (FileSettings *)source +{ + interpreter = [source->interpreter retain]; + debug = source->debug; + verbose = source->verbose; + inspect = source->inspect; + optimize = source->optimize; + nosite = source->nosite; + tabs = source->tabs; + others = [source->others retain]; + with_terminal = source->with_terminal; + + origsource = [source retain]; + return self; +} + +- (void)saveDefaults +{ + [origsource updateFromSource: self]; +} + +- (void)updateFromSource: (id )source +{ + interpreter = [[source interpreter] retain]; + debug = [source debug]; + verbose = [source verbose]; + inspect = [source inspect]; + optimize = [source optimize]; + nosite = [source nosite]; + tabs = [source tabs]; + others = [[source others] retain]; + with_terminal = [source with_terminal]; + if (!origsource) { + NSUserDefaults *defaults; + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + interpreter, @"interpreter", + [NSNumber numberWithBool: debug], @"debug", + [NSNumber numberWithBool: verbose], @"verbose", + [NSNumber numberWithBool: inspect], @"inspect", + [NSNumber numberWithBool: optimize], @"optimize", + [NSNumber numberWithBool: nosite], @"nosite", + [NSNumber numberWithBool: nosite], @"nosite", + others, @"others", + [NSNumber numberWithBool: with_terminal], @"with_terminal", + nil]; + defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject: dict forKey: prefskey]; + } +} + +- (void)updateFromUserDefaults: (NSString *)filetype +{ + NSUserDefaults *defaults; + NSDictionary *dict; + id value; + + prefskey = [filetype retain]; + defaults = [NSUserDefaults standardUserDefaults]; + dict = [defaults dictionaryForKey: filetype]; + if (!dict) + return; + value = [dict objectForKey: @"interpreter"]; + if (value) interpreter = [value retain]; + value = [dict objectForKey: @"debug"]; + if (value) debug = [value boolValue]; + value = [dict objectForKey: @"verbose"]; + if (value) verbose = [value boolValue]; + value = [dict objectForKey: @"inspect"]; + if (value) inspect = [value boolValue]; + value = [dict objectForKey: @"optimize"]; + if (value) optimize = [value boolValue]; + value = [dict objectForKey: @"nosite"]; + if (value) nosite = [value boolValue]; + value = [dict objectForKey: @"nosite"]; + if (value) tabs = [value boolValue]; + value = [dict objectForKey: @"others"]; + if (value) others = [value retain]; + value = [dict objectForKey: @"with_terminal"]; + if (value) with_terminal = [value boolValue]; +} + +- (NSString *)commandLineForScript: (NSString *)script +{ + return [NSString stringWithFormat: + @"\"%@\"%s%s%s%s%s%s %@ \"%@\" %s", + interpreter, + debug?" -d":"", + verbose?" -v":"", + inspect?" -i":"", + optimize?" -O":"", + nosite?" -S":"", + tabs?" -t":"", + others, + script, + with_terminal? "" : " &"]; +} + +// FileSettingsSource protocol +- (NSString *) interpreter { return interpreter;}; +- (BOOL) debug { return debug;}; +- (BOOL) verbose { return verbose;}; +- (BOOL) inspect { return inspect;}; +- (BOOL) optimize { return optimize;}; +- (BOOL) nosite { return nosite;}; +- (BOOL) tabs { return tabs;}; +- (NSString *) others { return others;}; +- (BOOL) with_terminal { return with_terminal;}; + +@end diff --git a/Mac/OSX/PythonLauncher/MyAppDelegate.h b/Mac/OSX/PythonLauncher/MyAppDelegate.h new file mode 100644 index 00000000000..c65175a7aec --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyAppDelegate.h @@ -0,0 +1,14 @@ +/* MyAppDelegate */ + +#import + +@interface MyAppDelegate : NSObject +{ + BOOL initial_action_done; + BOOL should_terminate; +} +- (id)init; +- (IBAction)showPreferences:(id)sender; +- (BOOL)shouldShowUI; +- (BOOL)shouldTerminate; +@end diff --git a/Mac/OSX/PythonLauncher/MyAppDelegate.m b/Mac/OSX/PythonLauncher/MyAppDelegate.m new file mode 100644 index 00000000000..107e7d092b6 --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyAppDelegate.m @@ -0,0 +1,64 @@ +#import "MyAppDelegate.h" +#import "PreferencesWindowController.h" + +@implementation MyAppDelegate + +- (id)init +{ + self = [super init]; + initial_action_done = NO; + should_terminate = NO; + return self; +} + +- (IBAction)showPreferences:(id)sender +{ + [PreferencesWindowController getPreferencesWindow]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)notification +{ + // If we were opened because of a file drag or doubleclick + // we've set initial_action_done in shouldShowUI + // Otherwise we open a preferences dialog. + if (!initial_action_done) { + initial_action_done = YES; + [self showPreferences: self]; + } +} + +- (BOOL)shouldShowUI +{ + // if this call comes before applicationDidFinishLaunching: we do not show a UI + // for the file. Also, we should terminate immedeately after starting the script. + if (initial_action_done) + return YES; + initial_action_done = YES; + should_terminate = YES; + return NO; +} + +- (BOOL)shouldTerminate +{ + return should_terminate; +} + +- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender +{ + return NO; +} + + +- (BOOL)application:(NSApplication *)sender xx_openFile:(NSString *)filename +{ + initial_action_done = YES; + return YES; +} + +- (BOOL)application:(id)sender xx_openFileWithoutUI:(NSString *)filename +{ + initial_action_done = YES; + return YES; +} + +@end diff --git a/Mac/OSX/PythonLauncher/MyDocument.h b/Mac/OSX/PythonLauncher/MyDocument.h new file mode 100755 index 00000000000..47c7be38e49 --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyDocument.h @@ -0,0 +1,39 @@ +// +// MyDocument.h +// PythonLauncher +// +// Created by Jack Jansen on Fri Jul 19 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + + +#import + +#import "FileSettings.h" + +@interface MyDocument : NSDocument +{ + IBOutlet NSTextField *interpreter; + IBOutlet NSButton *debug; + IBOutlet NSButton *verbose; + IBOutlet NSButton *inspect; + IBOutlet NSButton *optimize; + IBOutlet NSButton *nosite; + IBOutlet NSButton *tabs; + IBOutlet NSTextField *others; + IBOutlet NSButton *with_terminal; + IBOutlet NSTextField *commandline; + + NSString *script; + NSString *filetype; + FileSettings *settings; +} + +- (IBAction)do_run:(id)sender; +- (IBAction)do_cancel:(id)sender; +- (IBAction)do_reset:(id)sender; +- (IBAction)do_apply:(id)sender; + +- (void)controlTextDidChange:(NSNotification *)aNotification; + +@end diff --git a/Mac/OSX/PythonLauncher/MyDocument.m b/Mac/OSX/PythonLauncher/MyDocument.m new file mode 100755 index 00000000000..a4c20d1042d --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyDocument.m @@ -0,0 +1,165 @@ +// +// 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" + +@implementation MyDocument + +- (id)init +{ + [super init]; + if (self) { + + // Add your subclass-specific initialization here. + // If an error occurs here, send a [self dealloc] message and return nil. + script = @".py"; + filetype = @"Python Script"; + } + 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 +{ + settings = [FileSettings newSettingsForFileType: filetype]; +} + +- (void)update_display +{ +// [[self window] setTitle: script]; + + [interpreter setStringValue: [settings interpreter]]; + [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]]; + [with_terminal setState: [settings with_terminal]]; + + [commandline setStringValue: [settings commandLineForScript: script]]; +} + +- (void)update_settings +{ + [settings updateFromSource: self]; +} + +- (BOOL)run +{ + const char *cmdline; + int sts; + + if ([settings with_terminal]) { + NSLog(@"Terminal not implemented yet\n"); + return NO; + } + cmdline = [[settings commandLineForScript: script] cString]; + 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 = [fileName retain]; + filetype = [type retain]; + 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 +{ + [self load_defaults]; + [self update_display]; +} + +- (IBAction)do_apply:(id)sender +{ + [self update_settings]; + [self update_display]; +} + +// FileSettingsSource protocol +- (NSString *) interpreter { return [interpreter stringValue];}; +- (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];}; +- (BOOL) with_terminal { return [with_terminal state];}; + +// Delegates +- (void)controlTextDidChange:(NSNotification *)aNotification +{ + [self update_settings]; + [self update_display]; +}; + +@end diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib new file mode 100644 index 00000000000..2a07ee11c65 --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib @@ -0,0 +1,25 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {do_apply = id; do_filetype = id; do_reset = id; }; + CLASS = PreferencesWindowController; + LANGUAGE = ObjC; + OUTLETS = { + commandline = NSTextField; + debug = NSButton; + filetype = NSPopUpButton; + inspect = NSButton; + interpreter = NSTextField; + nosite = NSButton; + optimize = NSButton; + others = NSTextField; + tabs = NSButton; + verbose = NSButton; + with_terminal = NSButton; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib new file mode 100644 index 00000000000..952d977cd40 --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 237 -80 356 240 0 0 1280 938 + IBFramework Version + 263.2 + IBOpenObjects + + 5 + + IBSystem Version + 5S66 + + diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..8c3102db5c5a4ac799a68c181fba1153de16a872 GIT binary patch literal 4920 zcma)AYitzP6~1Ge#bBFaOdx=ojv}N4C{XiA8YhJHgNFs!hP5Fn1u~w!Yfn8pv&_!M zcK%f3%#QjaNYTn3d84YLrL7WD)6}A9yR;>hsyZQ8iWMnBLaJo(!&)IBAz89&3E4g8 z&g_fWB7W@doO{nX_q@NmRW;^tjE3W;L8YiwnX`qUZQJWQLhUV`y}zKc*(RBiMP_Wf zx+COKNHXPZX-&jUJ?as6jM^1JWQA=Z(@?ZNVbm6OZR;{p*;aJL(8FDWGS3ysm55?AJ9hBpXW1 zbbvyf5wf0;kzXz?EeS~wv%Vwb8GDAt^@JhQ9iuMn18wb5sgEKLo)%1K?WgiUR5At} zCu#q|{UfXZGp?LchG;lsN+xw2yZ%y4kM+dxT+Onn=vtHK)%uQ57cR6UOjFldsj6BP zjXWMG0=IJ-`NphxxN73U}0VpW>%x2#lhP*v*S%q?!<7SE1=>6gd4T1mn5U z^mcpI`TeiR7Xq-p75*2O$VrkQGEqpFNaPqX;8laq6!?Wmoh`^@LYN>ERZcPq;_>i2 zDeB6O58>qb;2jg9vj*Jgg?|TEkAZ|wH60=FYfRU|)F7iN`&KHMCUz~JGvfc)ze%r6 zO=3i0b2l9_k1A9RZ~1E~lO{Kl@Ka+6qZav~o)COZW#ByU3&|wQK_d9+RA5BM9J=xG zNRpTW=HCQ8%*$VizE;98G1qsmv~z!jmR3@<}LmQWAM}&He1452IQDg$gpLdQQNMW z)QA}rUQ5#FUa4U>3;vB+!kZS!Zot&dZYVQsA|D$_mgmnTG*Qt+N$jRZRM8|=9ONCf zn4kCUHSxH@dt1;VUu>xuIsV4!rEAx)+8grif_JPC?_!luY~$nDu?H1X?uV2Cn@b|E zcUZ!v26XtQhO%=(^zEXTS+w!N9kfgsaYlkm*X&d)qaZMf;Wt`Ck79n^?p6o|-M04qGoHvd^V6|g~IoWU==l{vY}3Y-uqT@Wnch9&$B z1>n0U8y5Y7vq;Jku2@0W3QOM|KzAEP7e2K(ymm3 z%E%!=FKGfT2>RG>Q|YUS@9KSgcdVy9kMXV*@f}J2KKb$QV7y;1V|w0aYVk8$Y}4gL zlxn845-&8*N%u+4UC6ofIRv$U`#i|oO`|ataGxdoZxrySf|$l@(sE^mYzg~4?~TNU z!13ebH6@rC!31E9E=i-R0}iS}$mC>_f?b7Dz^$u@Re60vxNVVdEn=mTFi6MT`x$pG z=T@iP$&5RdaqmvKSJQ50tvj7@18MhO#(k7?XEN?=#?8&T*^IlGb06khmT@0s+{d}} zRyPfL*Kj0y5~{&*pTIMKy8?h}Y;@fFxFSJOkeL(B1(c+yerj)B@8!$6YAf zbI@_;$_V=%w;Bk5@$zsNc(On#)x8gNj{&XrC_uEA;$r8Z2A2tU3P>=@04X)%>F&ZK zcnkk|1eY5-LLEwPXTnq|03S_*E1zyyVvUVX{E-ck8;^t;BHk1Rcgq-qr(?b$7oAcR0#Hwj@RpstTA9at!3{%Rbx> z+qQ@L^+9ov?}8DQP-$G0fWw=~G%Q98J?ia$g!^CU)YM_|SV9Tw;-H>T!yMksbNY0)uNKz4{&&QJVs?DqR7Ccn2Mw-?@7F&dW>_(`0^=ffQo$-QW-Rd3lmk0 zt4d$L3HHUK62CQbKP@27-Zov-bQ5M4_7{YPy#Oi1s4@gYi=R{K1mSA`Mx_ynwjYP??I?aHTNVXam)bQI475XUQ&N2=&$AY+#aXgUG`pLY)B z={^+kX_$fm9ltE#Rs$b)o+|h@A^(hJwi?m|(VowQ4XqB4aQ`Jg1yo$H?dN!jK!)QN z7llNJ8rhqj?wURCUb^Ic?KyK zQ-^&i50@i8UXD1o9C3a*;=*@{`?A7TOuZ?Jo>v#C9-vy&YBDI^z* literal 0 HcmV?d00001 diff --git a/Mac/OSX/PythonLauncher/PreferencesWindowController.h b/Mac/OSX/PythonLauncher/PreferencesWindowController.h new file mode 100644 index 00000000000..a2a4c74ed6e --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferencesWindowController.h @@ -0,0 +1,32 @@ +/* PreferencesWindowController */ + +#import + +#import "FileSettings.h" + +@interface PreferencesWindowController : NSWindowController +{ + IBOutlet NSPopUpButton *filetype; + IBOutlet NSTextField *interpreter; + IBOutlet NSButton *debug; + IBOutlet NSButton *verbose; + IBOutlet NSButton *inspect; + IBOutlet NSButton *optimize; + IBOutlet NSButton *nosite; + IBOutlet NSButton *tabs; + IBOutlet NSTextField *others; + IBOutlet NSButton *with_terminal; + IBOutlet NSTextField *commandline; + + FileSettings *settings; +} + ++ getPreferencesWindow; + +- (IBAction)do_reset:(id)sender; +- (IBAction)do_apply:(id)sender; +- (IBAction)do_filetype:(id)sender; + +- (void)controlTextDidChange:(NSNotification *)aNotification; + +@end diff --git a/Mac/OSX/PythonLauncher/PreferencesWindowController.m b/Mac/OSX/PythonLauncher/PreferencesWindowController.m new file mode 100644 index 00000000000..88421627bba --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferencesWindowController.m @@ -0,0 +1,94 @@ +#import "PreferencesWindowController.h" + +@implementation PreferencesWindowController + ++ getPreferencesWindow +{ + static PreferencesWindowController *_singleton; + + if (!_singleton) + _singleton = [[PreferencesWindowController alloc] init]; + [_singleton showWindow: _singleton]; + return _singleton; +} + +- (id) init +{ + self = [self initWithWindowNibName: @"PreferenceWindow"]; + return self; +} + +- (void)load_defaults +{ + NSString *title = [filetype titleOfSelectedItem]; + + settings = [FileSettings getDefaultsForFileType: title]; +} + +- (void)update_display +{ +// [[self window] setTitle: script]; + + [interpreter setStringValue: [settings interpreter]]; + [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]]; + [with_terminal setState: [settings with_terminal]]; + + [commandline setStringValue: [settings commandLineForScript: @""]]; +} + +- (void) windowDidLoad +{ + [super windowDidLoad]; + [self load_defaults]; + [self update_display]; +} + +- (void)update_settings +{ + [settings updateFromSource: self]; +} + +- (IBAction)do_filetype:(id)sender +{ + [self load_defaults]; + [self update_display]; +} + +- (IBAction)do_reset:(id)sender +{ + [self load_defaults]; + [self update_display]; +} + +- (IBAction)do_apply:(id)sender +{ + [self update_settings]; + [self update_display]; +} + +// FileSettingsSource protocol +- (NSString *) interpreter { return [interpreter stringValue];}; +- (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];}; +- (BOOL) with_terminal { return [with_terminal state];}; + +// Delegates +- (void)controlTextDidChange:(NSNotification *)aNotification +{ + [self update_settings]; + [self update_display]; +}; + + +@end diff --git a/Mac/OSX/PythonLauncher/PythonCompiled.icns b/Mac/OSX/PythonLauncher/PythonCompiled.icns new file mode 100644 index 0000000000000000000000000000000000000000..afead3e42e883b95c6aba56e816e63fa8f2cff16 GIT binary patch literal 57125 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 J|Fb3V{{W*K8gc*t literal 0 HcmV?d00001 diff --git a/Mac/OSX/PythonLauncher/PythonInterpreter.icns b/Mac/OSX/PythonLauncher/PythonInterpreter.icns new file mode 100644 index 0000000000000000000000000000000000000000..d5dd12fde30166370e04a79d567066734f483b93 GIT binary patch literal 45913 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 I1%CSJ|EL@qivR!s literal 0 HcmV?d00001 diff --git a/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj b/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj new file mode 100755 index 00000000000..849aeb3a039 --- /dev/null +++ b/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj @@ -0,0 +1,612 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 38; + objects = { + 080E96D9FE201CDB7F000001 = { + fileRef = 2A37F4B9FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 080E96DAFE201CDB7F000001 = { + fileRef = 2A37F4B6FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 080E96DBFE201CDB7F000001 = { + fileRef = 2A37F4B4FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 089C165FFE840EACC02AAC07 = { + children = ( + 089C1660FE840EACC02AAC07, + ); + isa = PBXVariantGroup; + name = InfoPlist.strings; + refType = 4; + }; + 089C1660FE840EACC02AAC07 = { + fileEncoding = 10; + isa = PBXFileReference; + name = English; + path = English.lproj/InfoPlist.strings; + refType = 4; + }; + 089C1661FE840EACC02AAC07 = { + fileRef = 089C165FFE840EACC02AAC07; + isa = PBXBuildFile; + settings = { + }; + }; +//080 +//081 +//082 +//083 +//084 +//100 +//101 +//102 +//103 +//104 + 1058C7A6FEA54F5311CA2CBB = { + children = ( + 1058C7A7FEA54F5311CA2CBB, + ); + isa = PBXGroup; + name = "Linked Frameworks"; + refType = 4; + }; + 1058C7A7FEA54F5311CA2CBB = { + isa = PBXFrameworkReference; + name = Cocoa.framework; + path = /System/Library/Frameworks/Cocoa.framework; + refType = 0; + }; + 1058C7A8FEA54F5311CA2CBB = { + children = ( + 2A37F4C5FDCFA73011CA2CEA, + 2A37F4C4FDCFA73011CA2CEA, + ); + isa = PBXGroup; + name = "Other Frameworks"; + refType = 4; + }; + 1058C7A9FEA54F5311CA2CBB = { + fileRef = 1058C7A7FEA54F5311CA2CBB; + isa = PBXBuildFile; + settings = { + }; + }; +//100 +//101 +//102 +//103 +//104 +//170 +//171 +//172 +//173 +//174 + 1758732AFF379DA111CA2CBB = { + isa = PBXApplicationReference; + path = PythonLauncher.app; + refType = 3; + }; +//170 +//171 +//172 +//173 +//174 +//190 +//191 +//192 +//193 +//194 + 19C28FB0FE9D524F11CA2CBB = { + children = ( + 1758732AFF379DA111CA2CBB, + ); + isa = PBXGroup; + name = Products; + refType = 4; + }; +//190 +//191 +//192 +//193 +//194 +//2A0 +//2A1 +//2A2 +//2A3 +//2A4 + 2A37F4A9FDCFA73011CA2CEA = { + buildStyles = ( + 4A9504D0FFE6A4CB11CA0CBA, + 4A9504D1FFE6A4CB11CA0CBA, + ); + isa = PBXProject; + mainGroup = 2A37F4AAFDCFA73011CA2CEA; + projectDirPath = ""; + targets = ( + 2A37F4C6FDCFA73011CA2CEA, + ); + }; + 2A37F4AAFDCFA73011CA2CEA = { + children = ( + 2A37F4ABFDCFA73011CA2CEA, + 2A37F4AFFDCFA73011CA2CEA, + 2A37F4B8FDCFA73011CA2CEA, + 2A37F4C3FDCFA73011CA2CEA, + 19C28FB0FE9D524F11CA2CBB, + ); + isa = PBXGroup; + name = PythonLauncher; + path = ""; + refType = 4; + }; + 2A37F4ABFDCFA73011CA2CEA = { + children = ( + 2A37F4AEFDCFA73011CA2CEA, + 2A37F4ACFDCFA73011CA2CEA, + F52A90CD02EB5C6A01000102, + F52A90CE02EB5C6A01000102, + F5A4C14002F2055C01000102, + F5A4C14102F2055C01000102, + F5A4C14402F2070D01000102, + F5A4C14502F2070D01000102, + ); + isa = PBXGroup; + name = Classes; + path = ""; + refType = 4; + }; + 2A37F4ACFDCFA73011CA2CEA = { + isa = PBXFileReference; + path = MyDocument.m; + refType = 4; + }; + 2A37F4AEFDCFA73011CA2CEA = { + isa = PBXFileReference; + path = MyDocument.h; + refType = 4; + }; + 2A37F4AFFDCFA73011CA2CEA = { + children = ( + 2A37F4B0FDCFA73011CA2CEA, + ); + isa = PBXGroup; + name = "Other Sources"; + path = ""; + refType = 4; + }; + 2A37F4B0FDCFA73011CA2CEA = { + isa = PBXFileReference; + path = main.m; + refType = 4; + }; + 2A37F4B4FDCFA73011CA2CEA = { + children = ( + 2A37F4B5FDCFA73011CA2CEA, + ); + isa = PBXVariantGroup; + name = MyDocument.nib; + path = ""; + refType = 4; + }; + 2A37F4B5FDCFA73011CA2CEA = { + isa = PBXFileReference; + name = English; + path = English.lproj/MyDocument.nib; + refType = 4; + }; + 2A37F4B6FDCFA73011CA2CEA = { + children = ( + 2A37F4B7FDCFA73011CA2CEA, + ); + isa = PBXVariantGroup; + name = MainMenu.nib; + path = ""; + refType = 4; + }; + 2A37F4B7FDCFA73011CA2CEA = { + isa = PBXFileReference; + name = English; + path = English.lproj/MainMenu.nib; + refType = 4; + }; + 2A37F4B8FDCFA73011CA2CEA = { + children = ( + F58D4A3A02F1F94B01000102, + F58D4A3B02F1F94B01000102, + F58D4A3C02F1F94B01000102, + 2A37F4B9FDCFA73011CA2CEA, + 2A37F4B6FDCFA73011CA2CEA, + 2A37F4B4FDCFA73011CA2CEA, + F5A4C13E02F203F601000102, + 089C165FFE840EACC02AAC07, + ); + isa = PBXGroup; + name = Resources; + path = ""; + refType = 4; + }; + 2A37F4B9FDCFA73011CA2CEA = { + children = ( + 2A37F4BAFDCFA73011CA2CEA, + ); + isa = PBXVariantGroup; + name = Credits.rtf; + path = ""; + refType = 4; + }; + 2A37F4BAFDCFA73011CA2CEA = { + isa = PBXFileReference; + name = English; + path = English.lproj/Credits.rtf; + refType = 4; + }; + 2A37F4C3FDCFA73011CA2CEA = { + children = ( + 1058C7A6FEA54F5311CA2CBB, + 1058C7A8FEA54F5311CA2CBB, + ); + isa = PBXGroup; + name = Frameworks; + path = ""; + refType = 4; + }; + 2A37F4C4FDCFA73011CA2CEA = { + isa = PBXFrameworkReference; + name = AppKit.framework; + path = /System/Library/Frameworks/AppKit.framework; + refType = 0; + }; + 2A37F4C5FDCFA73011CA2CEA = { + isa = PBXFrameworkReference; + name = Foundation.framework; + path = /System/Library/Frameworks/Foundation.framework; + refType = 0; + }; + 2A37F4C6FDCFA73011CA2CEA = { + buildPhases = ( + 2A37F4C7FDCFA73011CA2CEA, + 2A37F4C9FDCFA73011CA2CEA, + 2A37F4CEFDCFA73011CA2CEA, + 2A37F4D1FDCFA73011CA2CEA, + ); + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = ""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = PythonLauncher; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; + WRAPPER_EXTENSION = app; + }; + dependencies = ( + ); + isa = PBXApplicationTarget; + name = PythonLauncher; + productInstallPath = "$(HOME)/Applications"; + productName = PythonLauncher; + productReference = 1758732AFF379DA111CA2CBB; + productSettingsXML = " + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + ???? + + CFBundleTypeIconFile + + CFBundleTypeName + DocumentType + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + py + + CFBundleTypeIconFile + PythonSource.icns + CFBundleTypeName + Python Script + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + pyw + + CFBundleTypeName + Python GUI Script + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + pyc + + CFBundleTypeIconFile + PythonCompiled.icns + CFBundleTypeName + Python Bytecode Document + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleExecutable + PythonLauncher + CFBundleGetInfoString + Python Launcher + CFBundleIconFile + PythonInterpreter.icns + CFBundleIdentifier + org.python.PythonLauncher + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Python Launcher + CFBundlePackageType + APPL + CFBundleSignature + PytL + CFBundleVersion + 2.3a0 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + +"; + shouldUseHeadermap = 1; + }; + 2A37F4C7FDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 2A37F4C8FDCFA73011CA2CEA, + F52A90D002EB5C6A01000102, + F5A4C14202F2055D01000102, + F5A4C14702F2070D01000102, + ); + isa = PBXHeadersBuildPhase; + }; + 2A37F4C8FDCFA73011CA2CEA = { + fileRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 2A37F4C9FDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 080E96D9FE201CDB7F000001, + 080E96DAFE201CDB7F000001, + 080E96DBFE201CDB7F000001, + 089C1661FE840EACC02AAC07, + F58D4A3D02F1F94B01000102, + F58D4A3E02F1F94B01000102, + F58D4A3F02F1F94B01000102, + F5A4C13F02F203F701000102, + ); + isa = PBXResourcesBuildPhase; + }; + 2A37F4CEFDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 2A37F4CFFDCFA73011CA2CEA, + 2A37F4D0FDCFA73011CA2CEA, + F52A90CF02EB5C6A01000102, + F5A4C14302F2055D01000102, + F5A4C14602F2070D01000102, + ); + isa = PBXSourcesBuildPhase; + }; + 2A37F4CFFDCFA73011CA2CEA = { + fileRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 2A37F4D0FDCFA73011CA2CEA = { + fileRef = 2A37F4B0FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 2A37F4D1FDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 1058C7A9FEA54F5311CA2CBB, + ); + isa = PBXFrameworksBuildPhase; + }; +//2A0 +//2A1 +//2A2 +//2A3 +//2A4 +//4A0 +//4A1 +//4A2 +//4A3 +//4A4 + 4A9504D0FFE6A4CB11CA0CBA = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = NO; + OPTIMIZATION_CFLAGS = "-O0"; + }; + isa = PBXBuildStyle; + name = Development; + }; + 4A9504D1FFE6A4CB11CA0CBA = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = YES; + }; + isa = PBXBuildStyle; + name = Deployment; + }; +//4A0 +//4A1 +//4A2 +//4A3 +//4A4 +//F50 +//F51 +//F52 +//F53 +//F54 + F52A90CD02EB5C6A01000102 = { + isa = PBXFileReference; + path = FileSettings.m; + refType = 4; + }; + F52A90CE02EB5C6A01000102 = { + isa = PBXFileReference; + path = FileSettings.h; + refType = 4; + }; + F52A90CF02EB5C6A01000102 = { + fileRef = F52A90CD02EB5C6A01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F52A90D002EB5C6A01000102 = { + fileRef = F52A90CE02EB5C6A01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F58D4A3A02F1F94B01000102 = { + isa = PBXFileReference; + path = PythonCompiled.icns; + refType = 4; + }; + F58D4A3B02F1F94B01000102 = { + isa = PBXFileReference; + path = PythonInterpreter.icns; + refType = 4; + }; + F58D4A3C02F1F94B01000102 = { + isa = PBXFileReference; + path = PythonSource.icns; + refType = 4; + }; + F58D4A3D02F1F94B01000102 = { + fileRef = F58D4A3A02F1F94B01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F58D4A3E02F1F94B01000102 = { + fileRef = F58D4A3B02F1F94B01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F58D4A3F02F1F94B01000102 = { + fileRef = F58D4A3C02F1F94B01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C13E02F203F601000102 = { + isa = PBXFileReference; + path = PreferenceWindow.nib; + refType = 4; + }; + F5A4C13F02F203F701000102 = { + fileRef = F5A4C13E02F203F601000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14002F2055C01000102 = { + isa = PBXFileReference; + path = PreferencesWindowController.h; + refType = 4; + }; + F5A4C14102F2055C01000102 = { + isa = PBXFileReference; + path = PreferencesWindowController.m; + refType = 4; + }; + F5A4C14202F2055D01000102 = { + fileRef = F5A4C14002F2055C01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14302F2055D01000102 = { + fileRef = F5A4C14102F2055C01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14402F2070D01000102 = { + isa = PBXFileReference; + path = MyAppDelegate.m; + refType = 4; + }; + F5A4C14502F2070D01000102 = { + isa = PBXFileReference; + path = MyAppDelegate.h; + refType = 4; + }; + F5A4C14602F2070D01000102 = { + fileRef = F5A4C14402F2070D01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14702F2070D01000102 = { + fileRef = F5A4C14502F2070D01000102; + isa = PBXBuildFile; + settings = { + }; + }; + }; + rootObject = 2A37F4A9FDCFA73011CA2CEA; +} diff --git a/Mac/OSX/PythonLauncher/PythonSource.icns b/Mac/OSX/PythonLauncher/PythonSource.icns new file mode 100644 index 0000000000000000000000000000000000000000..4ac7a9687441f615f182378c5957b7fe6d58ecf4 GIT binary patch literal 50112 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 YLg*I$p1=OdMc7+d`)$+zIV14@0j!hMs{jB1 literal 0 HcmV?d00001 diff --git a/Mac/OSX/PythonLauncher/main.m b/Mac/OSX/PythonLauncher/main.m new file mode 100755 index 00000000000..70323f2d02d --- /dev/null +++ b/Mac/OSX/PythonLauncher/main.m @@ -0,0 +1,14 @@ +// +// main.m +// PythonLauncher +// +// Created by Jack Jansen on Fri Jul 19 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + +#import + +int main(int argc, const char *argv[]) +{ + return NSApplicationMain(argc, argv); +}