diff options
Diffstat (limited to 'Mac/Modules')
-rw-r--r-- | Mac/Modules/Nav.c | 517 |
1 files changed, 413 insertions, 104 deletions
diff --git a/Mac/Modules/Nav.c b/Mac/Modules/Nav.c index fc78ffd..54673ae 100644 --- a/Mac/Modules/Nav.c +++ b/Mac/Modules/Nav.c @@ -38,32 +38,117 @@ extern PyObject *AEDesc_New(AppleEvent *); extern int AEDesc_Convert(PyObject *, AppleEvent *); /* Exported by Resmodule.c */ extern PyObject *ResObj_New(Handle); +extern PyObject *OptResObj_New(Handle); extern int ResObj_Convert(PyObject *, Handle *); 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_Clear(); + return; + } + if ( pyfunc == Py_None ) { + /* Special case: give update events to the Python event handling code */ + if ( callBackSelector == kNavCBEvent && + callBackParms->eventData.eventDataParms.event->what == updateEvt) + PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event); + /* Ignore others */ + return; + } + rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector, + (void *)callBackParms, sizeof(NavCBRec)); + if ( rv ) + Py_DECREF(rv); + else { + fprintf(stderr, "Nav: exception in eventProc callback\n"); + PyErr_Clear(); + } +} + +static pascal Boolean +my_previewProc(NavCBRecPtr callBackParms, + NavCallBackUserData callbackUD) +{ + PyObject *dict = (PyObject *)callbackUD; + PyObject *pyfunc; + PyObject *rv; + Boolean c_rv = false; + + if (!dict) return; + if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) { + PyErr_Clear(); + return; + } + rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec)); + if ( rv ) { + c_rv = PyObject_IsTrue(rv); + Py_DECREF(rv); + } else { + fprintf(stderr, "Nav: exception in previewProc callback\n"); + PyErr_Clear(); + } + 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; + if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) { + PyErr_Clear(); + return; + } + rv = PyObject_CallFunction(pyfunc, "O&s#h", + AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode); + if ( rv ) { + c_rv = PyObject_IsTrue(rv); + Py_DECREF(rv); + } else { + fprintf(stderr, "Nav: exception in filterProc callback\n"); + PyErr_Clear(); + } + return c_rv; +} + /* ----------------------------------------------------- */ static int filldialogoptions(PyObject *d, + AEDesc **defaultLocationP, NavDialogOptions *opt, NavEventUPP *eventProcP, NavPreviewUPP *previewProcP, NavObjectFilterUPP *filterProcP, NavTypeListHandle *typeListP, - OSType *creatorP, - OSType *typeP) + OSType *fileTypeP, + OSType *fileCreatorP) { int pos = 0; PyObject *key, *value; char *keystr; NavGetDefaultDialogOptions(opt); - if ( eventProcP ) *eventProcP = NULL; - if ( previewProcP ) *previewProcP = NULL; - if ( filterProcP ) *filterProcP = NULL; - if ( typeListP ) *typeListP = NULL; - if ( creatorP ) *creatorP = 0; - if ( typeP ) *typeP = 0; while ( PyDict_Next(d, &pos, &key, &value) ) { if ( !key || !value || !PyString_Check(key) ) { @@ -71,7 +156,10 @@ filldialogoptions(PyObject *d, return 0; } keystr = PyString_AsString(key); - if( strcmp(keystr, "version") == 0 ) { + if( strcmp(keystr, "defaultLocation") == 0 ) { + if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocationP) ) + return 0; + } else if( strcmp(keystr, "version") == 0 ) { if ( !PyArg_Parse(value, "h", &opt->version) ) return 0; } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) { @@ -105,8 +193,7 @@ filldialogoptions(PyObject *d, if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) ) return 0; } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) { - PyErr_SetString(ErrorObject, "No callbacks implemented yet"); - return 0; + *eventProcP = my_eventProcUPP; } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) { PyErr_SetString(ErrorObject, "No callbacks implemented yet"); return 0; @@ -116,11 +203,11 @@ filldialogoptions(PyObject *d, } else if( typeListP && strcmp(keystr, "typeList") == 0 ) { if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) ) return 0; - } else if( creatorP && strcmp(keystr, "creator") == 0 ) { - if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, creatorP) ) + } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) { + if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) ) return 0; - } else if( typeP && strcmp(keystr, "type") == 0 ) { - if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, typeP) ) + } 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); @@ -145,7 +232,56 @@ staticforward PyTypeObject Navrrtype; /* ---------------------------------------------------------------- */ +static char nav_NavTranslateFile__doc__[] = +"(NavTranslationOptions)->None" +; + +static PyObject * +nav_NavTranslateFile(self, args) + navrrobject *self; + PyObject *args; +{ + NavTranslationOptions howToTranslate; + OSErr err; + + if (!PyArg_ParseTuple(args, "l", &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(self, args) + navrrobject *self; + PyObject *args; +{ + NavTranslationOptions howToTranslate; + OSErr err; + + if (!PyArg_ParseTuple(args, "l", &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 */ }; @@ -179,6 +315,9 @@ navrr_getattr(self, name) navrrobject *self; char *name; { + if( strcmp(name, "__members__") == 0 ) + return Py_BuildValue("sssssss", "version", "validRecord", "replacing", + "isStationery", "translationNeeded", "selection", "fileTranslation"); if( strcmp(name, "version") == 0 ) return Py_BuildValue("h", self->itself.version); if( strcmp(name, "validRecord") == 0 ) @@ -189,8 +328,31 @@ navrr_getattr(self, name) return Py_BuildValue("l", (long)self->itself.isStationery); if( strcmp(name, "translationNeeded") == 0 ) return Py_BuildValue("l", (long)self->itself.translationNeeded); - if( strcmp(name, "selection") == 0 ) - return AEDesc_New(&self->itself.selection); /* XXXX Is this ok? */ + if( strcmp(name, "selection") == 0 ) { + SInt32 i, 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; + } + rvitem = PyMac_BuildFSSpec((FSSpec *)*desc.dataHandle); + PyList_SetItem(rv, i, rvitem); + AEDisposeDesc(&desc); + } + return rv; + } if( strcmp(name, "fileTranslation") == 0 ) return ResObj_New((Handle)self->itself.fileTranslation); @@ -211,7 +373,7 @@ navrr_setattr(self, name, v) } static char Navrrtype__doc__[] = -"" +"Record containing result of a Nav file selection call. Use dir() for member names." ; static PyTypeObject Navrrtype = { @@ -244,7 +406,7 @@ static PyTypeObject Navrrtype = { /* ----------------------------------------------------- */ static char nav_NavGetFile__doc__[] = -"" +"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord" ; static PyObject * @@ -269,7 +431,7 @@ nav_NavGetFile(self, args, kw) dict = kw; } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - if (!filldialogoptions(dict, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, 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); @@ -281,7 +443,7 @@ nav_NavGetFile(self, args, kw) } static char nav_NavPutFile__doc__[] = -"" +"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord" ; static PyObject * @@ -290,15 +452,35 @@ nav_NavPutFile(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + AEDesc *defaultLocation = NULL; + NavReplyRecord reply; + NavDialogOptions dialogOptions; + NavEventUPP eventProc = NULL; + OSType fileType; + OSType fileCreator; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator)) + return NULL; + err = NavPutFile(defaultLocation, &reply, &dialogOptions, + eventProc, fileType, fileCreator, (void *)dict); + 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 * @@ -307,15 +489,31 @@ nav_NavAskSaveChanges(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + NavDialogOptions dialogOptions; + NavAskSaveChangesAction action; + NavAskSaveChangesResult reply; + NavEventUPP eventProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "l", &action)) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + 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 * @@ -324,15 +522,30 @@ nav_NavCustomAskSaveChanges(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + NavDialogOptions dialogOptions; + NavAskSaveChangesResult reply; + NavEventUPP eventProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + 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 * @@ -341,15 +554,30 @@ nav_NavAskDiscardChanges(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + NavDialogOptions dialogOptions; + NavAskSaveChangesResult reply; + NavEventUPP eventProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + 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 * @@ -358,15 +586,35 @@ nav_NavChooseFile(self, args, kw) 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 (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL)) + return NULL; + err = NavChooseFile(defaultLocation, &reply, &dialogOptions, + eventProc, previewProc, filterProc, typeList, (void *)dict); + 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 * @@ -375,15 +623,33 @@ nav_NavChooseFolder(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + AEDesc *defaultLocation = NULL; + NavReplyRecord reply; + NavDialogOptions dialogOptions; + NavEventUPP eventProc = NULL; + NavObjectFilterUPP filterProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL)) + return NULL; + err = NavChooseFolder(defaultLocation, &reply, &dialogOptions, + eventProc, filterProc, (void *)dict); + 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 * @@ -392,15 +658,33 @@ nav_NavChooseVolume(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + AEDesc *defaultLocation = NULL; + NavReplyRecord reply; + NavDialogOptions dialogOptions; + NavEventUPP eventProc = NULL; + NavObjectFilterUPP filterProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL)) + return NULL; + err = NavChooseVolume(defaultLocation, &reply, &dialogOptions, + eventProc, filterProc, (void *)dict); + 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 * @@ -409,15 +693,33 @@ nav_NavChooseObject(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + AEDesc *defaultLocation = NULL; + NavReplyRecord reply; + NavDialogOptions dialogOptions; + NavEventUPP eventProc = NULL; + NavObjectFilterUPP filterProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; + if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL)) + return NULL; + err = NavChooseObject(defaultLocation, &reply, &dialogOptions, + eventProc, filterProc, (void *)dict); + 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 * @@ -426,49 +728,36 @@ nav_NavNewFolder(self, args, kw) PyObject *args; PyObject *kw; { + PyObject *dict; + AEDesc *defaultLocation = NULL; + NavReplyRecord reply; + NavDialogOptions dialogOptions; + NavEventUPP eventProc = NULL; + OSErr err; - if (!PyArg_ParseTuple(args, "")) + if ( kw ) { + if (!PyArg_ParseTuple(args, "")) + return NULL; + dict = kw; + } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) return NULL; - Py_INCREF(Py_None); - return Py_None; -} - -static char nav_NavTranslateFile__doc__[] = -"" -; - -static PyObject * -nav_NavTranslateFile(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - - if (!PyArg_ParseTuple(args, "")) + if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL)) return NULL; - Py_INCREF(Py_None); - return Py_None; -} - -static char nav_NavCompleteSave__doc__[] = -"" -; - -static PyObject * -nav_NavCompleteSave(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - - if (!PyArg_ParseTuple(args, "")) + err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict); + if ( err ) { + PyErr_Mac(ErrorObject, err); return NULL; - Py_INCREF(Py_None); - return Py_None; + } + 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(self, args) PyObject *self; /* Not used */ @@ -480,9 +769,10 @@ nav_NavCustomControl(self, args) Py_INCREF(Py_None); return Py_None; } +#endif static char nav_NavServicesCanRun__doc__[] = -"" +"()->int" ; static PyObject * @@ -498,7 +788,7 @@ nav_NavServicesCanRun(self, args) } static char nav_NavServicesAvailable__doc__[] = -"" +"()->int" ; static PyObject * @@ -515,7 +805,7 @@ nav_NavServicesAvailable(self, args) } /* XX */ static char nav_NavLoad__doc__[] = -"" +"()->None" ; static PyObject * @@ -532,7 +822,7 @@ nav_NavLoad(self, args) } static char nav_NavUnload__doc__[] = -"" +"()->None" ; static PyObject * @@ -549,7 +839,7 @@ nav_NavUnload(self, args) } static char nav_NavLibraryVersion__doc__[] = -"" +"()->int" ; static PyObject * @@ -565,9 +855,8 @@ nav_NavLibraryVersion(self, args) return Py_BuildValue("l", (long)rv); } -#ifdef notyet static char nav_NavGetDefaultDialogOptions__doc__[] = -"" +"()->dict\nPass dict or keyword args with same names to other calls." ; static PyObject * @@ -575,14 +864,27 @@ nav_NavGetDefaultDialogOptions(self, args) PyObject *self; /* Not used */ PyObject *args; { - - if (!PyArg_ParseTuple(args, "")) + NavDialogOptions dialogOptions; + OSErr err; + + err = NavGetDefaultDialogOptions(&dialogOptions); + if ( err ) { + PyErr_Mac(ErrorObject, err); return NULL; - Py_INCREF(Py_None); - return Py_None; + } + return Py_BuildValue("{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}", + "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, + "popupExtension", OptResObj_New, dialogOptions.popupExtension); } -#endif - /* List of methods defined in the module */ @@ -597,17 +899,15 @@ static struct PyMethodDef nav_methods[] = { {"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__}, - {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__}, - {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__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__}, -#ifdef notdef {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__}, -#endif {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */ }; @@ -615,7 +915,11 @@ static struct PyMethodDef nav_methods[] = { /* 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" ; void @@ -635,6 +939,11 @@ initNav() /* XXXX Add constants here */ + /* Set UPPs */ + my_eventProcUPP = NewNavEventProc(my_eventProc); + my_previewProcUPP = NewNavPreviewProc(my_previewProc); + my_filterProcUPP = NewNavObjectFilterProc(my_filterProc); + /* Check for errors */ if (PyErr_Occurred()) Py_FatalError("can't initialize module Nav"); |