aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/py/source/pybase.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-08-01 11:58:01 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-08-01 11:58:01 +0000
commit15b2643791d8b6efe6075bba78acea812f368ff0 (patch)
tree5d4c6a0137985acf6e9d8f9811df8cf0e82299cb /externals/grill/py/source/pybase.cpp
parent367019514f0f39144c17878213cf92a9de991d27 (diff)
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
Diffstat (limited to 'externals/grill/py/source/pybase.cpp')
-rw-r--r--externals/grill/py/source/pybase.cpp63
1 files changed, 62 insertions, 1 deletions
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 <map>
+#if FLEXT_OS == FLEXT_OS_WIN
+#include <windows.h>
+#elif FLEXT_OS == FLEXT_OS_MAC
+#include <ApplicationServices/ApplicationServices.h>
+#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()