Added Python (Thanks to Beholder) - it fails to build properly using my build system,
so there's a precompiled binary included, with a hack in Android.mk to make it work on NDK r4b
This commit is contained in:
977
project/jni/python/src/Mac/Modules/Nav.c
Normal file
977
project/jni/python/src/Mac/Modules/Nav.c
Normal file
@@ -0,0 +1,977 @@
|
||||
/***********************************************************
|
||||
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
|
||||
The Netherlands.
|
||||
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the names of Stichting Mathematisch
|
||||
Centrum or CWI or Corporation for National Research Initiatives or
|
||||
CNRI not be used in advertising or publicity pertaining to
|
||||
distribution of the software without specific, written prior
|
||||
permission.
|
||||
|
||||
While CWI is the initial source for this software, a modified version
|
||||
is made available by the Corporation for National Research Initiatives
|
||||
(CNRI) at the Internet address ftp://ftp.python.org.
|
||||
|
||||
STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
|
||||
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include "Python.h"
|
||||
#include "pymactoolbox.h"
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
static PyObject *ErrorObject;
|
||||
|
||||
static NavEventUPP my_eventProcUPP;
|
||||
static NavPreviewUPP my_previewProcUPP;
|
||||
static NavObjectFilterUPP my_filterProcUPP;
|
||||
|
||||
/* Callback functions */
|
||||
static pascal void
|
||||
my_eventProc(NavEventCallbackMessage callBackSelector,
|
||||
NavCBRecPtr callBackParms,
|
||||
NavCallBackUserData callbackUD)
|
||||
{
|
||||
PyObject *dict = (PyObject *)callbackUD;
|
||||
PyObject *pyfunc;
|
||||
PyObject *rv;
|
||||
|
||||
if (!dict) return;
|
||||
if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
|
||||
PyErr_Print();
|
||||
return;
|
||||
}
|
||||
if ( pyfunc == Py_None ) {
|
||||
return;
|
||||
}
|
||||
rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
|
||||
(void *)callBackParms, sizeof(NavCBRec));
|
||||
if ( rv )
|
||||
Py_DECREF(rv);
|
||||
else {
|
||||
PySys_WriteStderr("Nav: exception in eventProc callback\n");
|
||||
PyErr_Print();
|
||||
}
|
||||
}
|
||||
|
||||
static pascal Boolean
|
||||
my_previewProc(NavCBRecPtr callBackParms,
|
||||
NavCallBackUserData callbackUD)
|
||||
{
|
||||
PyObject *dict = (PyObject *)callbackUD;
|
||||
PyObject *pyfunc;
|
||||
PyObject *rv;
|
||||
Boolean c_rv = false;
|
||||
|
||||
if (!dict) return false;
|
||||
if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
|
||||
PyErr_Print();
|
||||
return false;
|
||||
}
|
||||
rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
|
||||
if ( rv ) {
|
||||
c_rv = PyObject_IsTrue(rv);
|
||||
Py_DECREF(rv);
|
||||
} else {
|
||||
PySys_WriteStderr("Nav: exception in previewProc callback\n");
|
||||
PyErr_Print();
|
||||
}
|
||||
return c_rv;
|
||||
}
|
||||
|
||||
static pascal Boolean
|
||||
my_filterProc(AEDesc *theItem, void *info,
|
||||
NavCallBackUserData callbackUD,
|
||||
NavFilterModes filterMode)
|
||||
{
|
||||
PyObject *dict = (PyObject *)callbackUD;
|
||||
PyObject *pyfunc;
|
||||
PyObject *rv;
|
||||
Boolean c_rv = false;
|
||||
|
||||
if (!dict) return false;
|
||||
if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
|
||||
PyErr_Print();
|
||||
return false;
|
||||
}
|
||||
rv = PyObject_CallFunction(pyfunc, "O&s#h",
|
||||
AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
|
||||
if ( rv ) {
|
||||
c_rv = PyObject_IsTrue(rv);
|
||||
Py_DECREF(rv);
|
||||
} else {
|
||||
PySys_WriteStderr("Nav: exception in filterProc callback\n");
|
||||
PyErr_Print();
|
||||
}
|
||||
return c_rv;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
static int
|
||||
filldialogoptions(PyObject *d,
|
||||
AEDesc **defaultLocationP,
|
||||
NavDialogOptions *opt,
|
||||
NavEventUPP *eventProcP,
|
||||
NavPreviewUPP *previewProcP,
|
||||
NavObjectFilterUPP *filterProcP,
|
||||
NavTypeListHandle *typeListP,
|
||||
OSType *fileTypeP,
|
||||
OSType *fileCreatorP)
|
||||
{
|
||||
Py_ssize_t pos = 0;
|
||||
PyObject *key, *value;
|
||||
char *keystr;
|
||||
AEDesc *defaultLocation_storage;
|
||||
|
||||
NavGetDefaultDialogOptions(opt);
|
||||
|
||||
while ( PyDict_Next(d, &pos, &key, &value) ) {
|
||||
if ( !key || !value || !PyString_Check(key) ) {
|
||||
PyErr_SetString(ErrorObject, "DialogOption has non-string key");
|
||||
return 0;
|
||||
}
|
||||
keystr = PyString_AsString(key);
|
||||
if( strcmp(keystr, "defaultLocation") == 0 ) {
|
||||
if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
|
||||
PyErr_NoMemory();
|
||||
return 0;
|
||||
}
|
||||
if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
|
||||
PyMem_DEL(defaultLocation_storage);
|
||||
return 0;
|
||||
}
|
||||
*defaultLocationP = defaultLocation_storage;
|
||||
} else if( strcmp(keystr, "version") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "H", &opt->version) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "location") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "clientName") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "windowTitle") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "savedFileName") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "message") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
|
||||
return 0;
|
||||
} else if( strcmp(keystr, "preferenceKey") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
|
||||
return 0;
|
||||
#ifndef __LP64__
|
||||
} else if( strcmp(keystr, "popupExtension") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
|
||||
return 0;
|
||||
#endif /* !__LP64__ */
|
||||
} else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
|
||||
*eventProcP = my_eventProcUPP;
|
||||
} else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
|
||||
*previewProcP = my_previewProcUPP;
|
||||
} else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
|
||||
*filterProcP = my_filterProcUPP;
|
||||
#ifndef __LP64__
|
||||
} else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
|
||||
return 0;
|
||||
#endif /* !__LP64__ */
|
||||
} else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
|
||||
return 0;
|
||||
} else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
|
||||
if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
|
||||
return 0;
|
||||
} else {
|
||||
PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
|
||||
/* Declarations for objects of type NavReplyRecord */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
NavReplyRecord itself;
|
||||
} navrrobject;
|
||||
|
||||
static PyTypeObject Navrrtype;
|
||||
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
static char nav_NavTranslateFile__doc__[] =
|
||||
"(NavTranslationOptions)->None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavTranslateFile(navrrobject *self, PyObject *args)
|
||||
{
|
||||
NavTranslationOptions howToTranslate;
|
||||
OSErr err;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "k", &howToTranslate))
|
||||
return NULL;
|
||||
err = NavTranslateFile(&self->itself, howToTranslate);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char nav_NavCompleteSave__doc__[] =
|
||||
"(NavTranslationOptions)->None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavCompleteSave(navrrobject *self, PyObject *args)
|
||||
{
|
||||
NavTranslationOptions howToTranslate;
|
||||
OSErr err;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "k", &howToTranslate))
|
||||
return NULL;
|
||||
err = NavCompleteSave(&self->itself, howToTranslate);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
|
||||
static struct PyMethodDef navrr_methods[] = {
|
||||
{"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
|
||||
{"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
|
||||
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
/* ---------- */
|
||||
|
||||
|
||||
static navrrobject *
|
||||
newnavrrobject(NavReplyRecord *itself)
|
||||
{
|
||||
navrrobject *self;
|
||||
|
||||
self = PyObject_NEW(navrrobject, &Navrrtype);
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
self->itself = *itself;
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
navrr_dealloc(navrrobject *self)
|
||||
{
|
||||
NavDisposeReply(&self->itself);
|
||||
PyObject_DEL(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
navrr_getattr(navrrobject *self, char *name)
|
||||
{
|
||||
FSRef fsr;
|
||||
#ifndef __LP64__
|
||||
FSSpec fss;
|
||||
#endif /* !__LP64__ */
|
||||
|
||||
if( strcmp(name, "__members__") == 0 )
|
||||
return Py_BuildValue(
|
||||
#ifndef __LP64__
|
||||
"ssssssssss",
|
||||
#else /* __LP64__ */
|
||||
"ssssssssss",
|
||||
#endif /* __LP64__ */
|
||||
"version", "validRecord", "replacing",
|
||||
"isStationery", "translationNeeded",
|
||||
#ifndef __LP64__
|
||||
"selection",
|
||||
#endif /* !__LP64__ */
|
||||
"selection_fsr",
|
||||
"fileTranslation", "keyScript", "saveFileName");
|
||||
|
||||
if( strcmp(name, "version") == 0 )
|
||||
return Py_BuildValue("h", self->itself.version);
|
||||
if( strcmp(name, "validRecord") == 0 )
|
||||
return Py_BuildValue("l", (long)self->itself.validRecord);
|
||||
if( strcmp(name, "replacing") == 0 )
|
||||
return Py_BuildValue("l", (long)self->itself.replacing);
|
||||
if( strcmp(name, "isStationery") == 0 )
|
||||
return Py_BuildValue("l", (long)self->itself.isStationery);
|
||||
if( strcmp(name, "translationNeeded") == 0 )
|
||||
return Py_BuildValue("l", (long)self->itself.translationNeeded);
|
||||
#ifndef __LP64__
|
||||
if( strcmp(name, "selection") == 0 ) {
|
||||
SInt32 i;
|
||||
long count;
|
||||
OSErr err;
|
||||
PyObject *rv, *rvitem;
|
||||
AEDesc desc;
|
||||
|
||||
if ((err=AECountItems(&self->itself.selection, &count))) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
if ( (rv=PyList_New(count)) == NULL )
|
||||
return NULL;
|
||||
for(i=0; i<count; i++) {
|
||||
desc.dataHandle = NULL;
|
||||
if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
|
||||
Py_DECREF(rv);
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
|
||||
Py_DECREF(rv);
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
rvitem = PyMac_BuildFSSpec(&fss);
|
||||
PyList_SetItem(rv, i, rvitem);
|
||||
AEDisposeDesc(&desc);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
#endif /* !__LP64__ */
|
||||
if( strcmp(name, "selection_fsr") == 0 ) {
|
||||
SInt32 i;
|
||||
long count;
|
||||
OSErr err;
|
||||
PyObject *rv, *rvitem;
|
||||
AEDesc desc;
|
||||
|
||||
if ((err=AECountItems(&self->itself.selection, &count))) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
if ( (rv=PyList_New(count)) == NULL )
|
||||
return NULL;
|
||||
for(i=0; i<count; i++) {
|
||||
desc.dataHandle = NULL;
|
||||
if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
|
||||
Py_DECREF(rv);
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
|
||||
Py_DECREF(rv);
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
rvitem = PyMac_BuildFSRef(&fsr);
|
||||
PyList_SetItem(rv, i, rvitem);
|
||||
AEDisposeDesc(&desc);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
#ifndef __LP64__
|
||||
if( strcmp(name, "fileTranslation") == 0 )
|
||||
return ResObj_New((Handle)self->itself.fileTranslation);
|
||||
#endif
|
||||
if( strcmp(name, "keyScript") == 0 )
|
||||
return Py_BuildValue("h", (short)self->itself.keyScript);
|
||||
if( strcmp(name, "saveFileName") == 0 )
|
||||
return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
|
||||
|
||||
|
||||
return Py_FindMethod(navrr_methods, (PyObject *)self, name);
|
||||
}
|
||||
|
||||
static int
|
||||
navrr_setattr(navrrobject *self, char *name, PyObject *v)
|
||||
{
|
||||
/* Set attribute 'name' to value 'v'. v==NULL means delete */
|
||||
|
||||
/* XXXX Add your own setattr code here */
|
||||
return -1;
|
||||
}
|
||||
|
||||
static char Navrrtype__doc__[] =
|
||||
"Record containing result of a Nav file selection call. Use dir() for member names."
|
||||
;
|
||||
|
||||
static PyTypeObject Navrrtype = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0, /*ob_size*/
|
||||
"Nav.NavReplyRecord", /*tp_name*/
|
||||
sizeof(navrrobject), /*tp_basicsize*/
|
||||
0, /*tp_itemsize*/
|
||||
/* methods */
|
||||
(destructor)navrr_dealloc, /*tp_dealloc*/
|
||||
(printfunc)0, /*tp_print*/
|
||||
(getattrfunc)navrr_getattr, /*tp_getattr*/
|
||||
(setattrfunc)navrr_setattr, /*tp_setattr*/
|
||||
(cmpfunc)0, /*tp_compare*/
|
||||
(reprfunc)0, /*tp_repr*/
|
||||
0, /*tp_as_number*/
|
||||
0, /*tp_as_sequence*/
|
||||
0, /*tp_as_mapping*/
|
||||
(hashfunc)0, /*tp_hash*/
|
||||
(ternaryfunc)0, /*tp_call*/
|
||||
(reprfunc)0, /*tp_str*/
|
||||
|
||||
/* Space for future expansion */
|
||||
0L,0L,0L,0L,
|
||||
Navrrtype__doc__ /* Documentation string */
|
||||
};
|
||||
|
||||
/* End of code for NavReplyRecord objects */
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
|
||||
static char nav_NavGetFile__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
NavPreviewUPP previewProc = NULL;
|
||||
NavObjectFilterUPP filterProc = NULL;
|
||||
NavTypeListHandle typeList = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavGetFile(defaultLocation, &reply, &dialogOptions,
|
||||
eventProc, previewProc, filterProc, typeList, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
static char nav_NavPutFile__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
OSType fileType;
|
||||
OSType fileCreator;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
|
||||
return NULL;
|
||||
err = NavPutFile(defaultLocation, &reply, &dialogOptions,
|
||||
eventProc, fileType, fileCreator, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
static char nav_NavAskSaveChanges__doc__[] =
|
||||
"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
|
||||
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavAskSaveChangesAction action;
|
||||
NavAskSaveChangesResult reply;
|
||||
NavEventUPP eventProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, "k", &action))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return Py_BuildValue("l", (long)reply);
|
||||
}
|
||||
|
||||
static char nav_NavCustomAskSaveChanges__doc__[] =
|
||||
"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavAskSaveChangesResult reply;
|
||||
NavEventUPP eventProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return Py_BuildValue("l", (long)reply);
|
||||
}
|
||||
|
||||
static char nav_NavAskDiscardChanges__doc__[] =
|
||||
"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavAskSaveChangesResult reply;
|
||||
NavEventUPP eventProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return Py_BuildValue("l", (long)reply);
|
||||
}
|
||||
|
||||
static char nav_NavChooseFile__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
NavPreviewUPP previewProc = NULL;
|
||||
NavObjectFilterUPP filterProc = NULL;
|
||||
NavTypeListHandle typeList = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
|
||||
eventProc, previewProc, filterProc, typeList, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
static char nav_NavChooseFolder__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
NavObjectFilterUPP filterProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
|
||||
eventProc, filterProc, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
static char nav_NavChooseVolume__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
NavObjectFilterUPP filterProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
|
||||
eventProc, filterProc, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
static char nav_NavChooseObject__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
NavObjectFilterUPP filterProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
|
||||
eventProc, filterProc, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
static char nav_NavNewFolder__doc__[] =
|
||||
"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
PyObject *dict;
|
||||
AEDesc *defaultLocation = NULL;
|
||||
NavReplyRecord reply;
|
||||
NavDialogOptions dialogOptions;
|
||||
NavEventUPP eventProc = NULL;
|
||||
OSErr err;
|
||||
|
||||
if ( kw && PyObject_IsTrue(kw) ) {
|
||||
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
|
||||
return NULL;
|
||||
dict = kw;
|
||||
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
|
||||
return NULL;
|
||||
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
|
||||
return NULL;
|
||||
err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
|
||||
PyMem_DEL(defaultLocation);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newnavrrobject(&reply);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* XXXX I don't know what to do with the void * argument */
|
||||
static char nav_NavCustomControl__doc__[] =
|
||||
""
|
||||
;
|
||||
|
||||
|
||||
static PyObject *
|
||||
nav_NavCustomControl(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
#endif
|
||||
|
||||
static char nav_NavServicesCanRun__doc__[] =
|
||||
"()->int"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavServicesCanRun(PyObject *self, PyObject *args)
|
||||
{
|
||||
Boolean rv;
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
rv = NavServicesCanRun();
|
||||
return Py_BuildValue("l", (long)rv);
|
||||
}
|
||||
|
||||
static char nav_NavServicesAvailable__doc__[] =
|
||||
"()->int"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavServicesAvailable(PyObject *self, PyObject *args)
|
||||
{
|
||||
Boolean rv;
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
rv = NavServicesAvailable();
|
||||
return Py_BuildValue("l", (long)rv);
|
||||
}
|
||||
/* XX */
|
||||
static char nav_NavLoad__doc__[] =
|
||||
"()->None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavLoad(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
NavLoad();
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char nav_NavUnload__doc__[] =
|
||||
"()->None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavUnload(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
NavUnload();
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char nav_NavLibraryVersion__doc__[] =
|
||||
"()->int"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavLibraryVersion(PyObject *self, PyObject *args)
|
||||
{
|
||||
UInt32 rv;
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
rv = NavLibraryVersion();
|
||||
return Py_BuildValue("l", (long)rv);
|
||||
}
|
||||
|
||||
static char nav_NavGetDefaultDialogOptions__doc__[] =
|
||||
"()->dict\nPass dict or keyword args with same names to other calls."
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
|
||||
{
|
||||
NavDialogOptions dialogOptions;
|
||||
OSErr err;
|
||||
|
||||
err = NavGetDefaultDialogOptions(&dialogOptions);
|
||||
if ( err ) {
|
||||
PyErr_Mac(ErrorObject, err);
|
||||
return NULL;
|
||||
}
|
||||
return Py_BuildValue(
|
||||
#ifndef __LP64__
|
||||
"{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
|
||||
#else /* __LP64__ */
|
||||
"{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
|
||||
#endif /* __LP64__ */
|
||||
"version", dialogOptions.version,
|
||||
"dialogOptionFlags", dialogOptions.dialogOptionFlags,
|
||||
"location", PyMac_BuildPoint, dialogOptions.location,
|
||||
"clientName", PyMac_BuildStr255, &dialogOptions.clientName,
|
||||
"windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
|
||||
"actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
|
||||
"cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
|
||||
"savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
|
||||
"message", PyMac_BuildStr255, &dialogOptions.message,
|
||||
"preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
|
||||
#ifndef __LP64__
|
||||
,"popupExtension", OptResObj_New, dialogOptions.popupExtension
|
||||
#endif /* __LP64__ */
|
||||
);
|
||||
}
|
||||
|
||||
/* List of methods defined in the module */
|
||||
|
||||
static struct PyMethodDef nav_methods[] = {
|
||||
{"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
|
||||
{"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
|
||||
{"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
|
||||
{"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
|
||||
{"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
|
||||
{"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
|
||||
{"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
|
||||
{"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
|
||||
{"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
|
||||
{"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
|
||||
#if 0
|
||||
{"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
|
||||
#endif
|
||||
{"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
|
||||
{"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
|
||||
{"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
|
||||
{"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
|
||||
{"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
|
||||
{"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
|
||||
{NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
||||
/* Initialization function for the module (*must* be called initNav) */
|
||||
|
||||
static char Nav_module_documentation[] =
|
||||
"Interface to Navigation Services\n"
|
||||
"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
|
||||
"if you want the default options.\n"
|
||||
"Use NavGetDefaultDialogOptions() to find out common option names.\n"
|
||||
"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
|
||||
"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
|
||||
;
|
||||
|
||||
void
|
||||
initNav(void)
|
||||
{
|
||||
PyObject *m, *d;
|
||||
|
||||
if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
|
||||
return;
|
||||
|
||||
/* Test that we have NavServices */
|
||||
if ( !NavServicesAvailable() ) {
|
||||
PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
|
||||
return;
|
||||
}
|
||||
/* Create the module and add the functions */
|
||||
m = Py_InitModule4("Nav", nav_methods,
|
||||
Nav_module_documentation,
|
||||
(PyObject*)NULL,PYTHON_API_VERSION);
|
||||
|
||||
/* Add some symbolic constants to the module */
|
||||
d = PyModule_GetDict(m);
|
||||
ErrorObject = PyString_FromString("Nav.error");
|
||||
PyDict_SetItemString(d, "error", ErrorObject);
|
||||
|
||||
/* XXXX Add constants here */
|
||||
|
||||
/* Set UPPs */
|
||||
my_eventProcUPP = NewNavEventUPP(my_eventProc);
|
||||
my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
|
||||
my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user