From 15b2643791d8b6efe6075bba78acea812f368ff0 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Mon, 1 Aug 2005 11:58:01 +0000 Subject: path setting based on new flext functionality open editor for module file on "edit" message (or click) open editor for script under OS X svn path=/trunk/; revision=3399 --- externals/grill/py/source/pybase.cpp | 63 +++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) (limited to 'externals/grill/py/source/pybase.cpp') diff --git a/externals/grill/py/source/pybase.cpp b/externals/grill/py/source/pybase.cpp index 2457974f..69bead28 100644 --- a/externals/grill/py/source/pybase.cpp +++ b/externals/grill/py/source/pybase.cpp @@ -11,6 +11,12 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "pybase.h" #include +#if FLEXT_OS == FLEXT_OS_WIN +#include +#elif FLEXT_OS == FLEXT_OS_MAC +#include +#endif + static PyMethodDef StdOut_Methods[] = { { "write", pybase::StdOut_Write, 1 }, @@ -295,7 +301,62 @@ void pybase::m__doc(PyObject *obj) void pybase::OpenEditor() { - // this should once open the editor.... + if(!module) return; + const char *mname = PyModule_GetFilename(module); + if(!mname) { + PyErr_Clear(); + return; + } + + char fname[1024]; + strcpy(fname,mname); + + // replacing .pyc or .pyo for source file name + char *dt = strrchr(fname,'.'); + if(dt && !strncmp(dt,".py",2)) strcpy(dt,".py"); + + // this should open the editor.... +#if FLEXT_OS == FLEXT_OS_WIN + int err = (int)ShellExecute(NULL,"edit",fname,NULL,NULL,SW_SHOW); + if(err == SE_ERR_NOASSOC) { + // no association found - try notepad + err = (int)ShellExecute(NULL,NULL,"notepad.exe",fname,NULL,SW_SHOW); + } + else if(err == ERROR_FILE_NOT_FOUND || err == SE_ERR_FNF) + post("py/pyext - File not %s found",fname); + else if(err <= 32) + post("py/pyext - Unknown error opening %s",fname); + +#elif FLEXT_OS == FLEXT_OS_MAC + FSRef ref; + OSStatus err = FSPathMakeRef(fname,&ref,NULL); + if(err) + post("py/pyext - Error interpreting path %s",fname); + else { + FSRef editor; + err = LSGetApplicationForItem(&ref,kLSRolesEditor,&editor,NULL); + if(err) { + // Can't find associated application... try Textedit + err = FSPathMakeRef("/Applications/TextEdit.app",&editor,NULL); + if(err) + post("py/pyext - Can't find Textedit application"); + } + + if(!err) { + LSLaunchFSRefSpec lspec; + lspec.appRef = &editor; + lspec.numDocs = 1; + lspec.itemRefs = &ref; + lspec.passThruParams = NULL; + lspec.launchFlags = kLSLaunchDefaults; + lspec.asyncRefCon = NULL; + err = LSOpenFromRefSpec(&lspec,NULL); + if(err) + post("py/pyext - Couldn't launch editor"); + } + } +#elif FLEXT_OS == FLEXT_OS_LINUX +#endif } void pybase::SetArgs() -- cgit v1.2.1