blob: aa843c758a90608e0c394baca10ec81bec91d87f [file] [log] [blame]
Jack Jansene91a29d1999-12-16 16:54:55 +00001/***********************************************************
2Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
4
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
16
17While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
29
30******************************************************************/
31
32#include "Python.h"
33#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +000034#include "pymactoolbox.h"
Jack Jansen11296712001-05-22 21:48:40 +000035#ifdef WITHOUT_FRAMEWORKS
Jack Jansene91a29d1999-12-16 16:54:55 +000036#include <Navigation.h>
Jack Jansen11296712001-05-22 21:48:40 +000037#else
38#include <Carbon/Carbon.h>
39#endif
Jack Jansene91a29d1999-12-16 16:54:55 +000040
Jack Jansene91a29d1999-12-16 16:54:55 +000041static PyObject *ErrorObject;
42
Jack Jansena07431f1999-12-17 17:14:28 +000043static NavEventUPP my_eventProcUPP;
44static NavPreviewUPP my_previewProcUPP;
45static NavObjectFilterUPP my_filterProcUPP;
46
47/* Callback functions */
48static pascal void
49my_eventProc(NavEventCallbackMessage callBackSelector,
50 NavCBRecPtr callBackParms,
51 NavCallBackUserData callbackUD)
52{
53 PyObject *dict = (PyObject *)callbackUD;
54 PyObject *pyfunc;
55 PyObject *rv;
56
57 if (!dict) return;
58 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
59 PyErr_Clear();
60 return;
61 }
62 if ( pyfunc == Py_None ) {
Jack Jansen569ba102001-09-02 00:08:16 +000063#if !TARGET_API_MAC_OSX
Jack Jansena07431f1999-12-17 17:14:28 +000064 /* Special case: give update events to the Python event handling code */
65 if ( callBackSelector == kNavCBEvent &&
66 callBackParms->eventData.eventDataParms.event->what == updateEvt)
67 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
68 /* Ignore others */
Jack Jansen569ba102001-09-02 00:08:16 +000069#endif
Jack Jansena07431f1999-12-17 17:14:28 +000070 return;
71 }
72 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
73 (void *)callBackParms, sizeof(NavCBRec));
74 if ( rv )
75 Py_DECREF(rv);
76 else {
77 fprintf(stderr, "Nav: exception in eventProc callback\n");
78 PyErr_Clear();
79 }
80}
81
82static pascal Boolean
83my_previewProc(NavCBRecPtr callBackParms,
84 NavCallBackUserData callbackUD)
85{
86 PyObject *dict = (PyObject *)callbackUD;
87 PyObject *pyfunc;
88 PyObject *rv;
89 Boolean c_rv = false;
90
Jack Jansen1767f932001-09-04 22:20:39 +000091 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +000092 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
93 PyErr_Clear();
Jack Jansen1767f932001-09-04 22:20:39 +000094 return false;
Jack Jansena07431f1999-12-17 17:14:28 +000095 }
96 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
97 if ( rv ) {
98 c_rv = PyObject_IsTrue(rv);
99 Py_DECREF(rv);
100 } else {
101 fprintf(stderr, "Nav: exception in previewProc callback\n");
102 PyErr_Clear();
103 }
104 return c_rv;
105}
106
107static pascal Boolean
108my_filterProc(AEDesc *theItem, void *info,
109 NavCallBackUserData callbackUD,
110 NavFilterModes filterMode)
111{
112 PyObject *dict = (PyObject *)callbackUD;
113 PyObject *pyfunc;
114 PyObject *rv;
115 Boolean c_rv = false;
116
Jack Jansen1767f932001-09-04 22:20:39 +0000117 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000118 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
119 PyErr_Clear();
Jack Jansen1767f932001-09-04 22:20:39 +0000120 return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000121 }
122 rv = PyObject_CallFunction(pyfunc, "O&s#h",
123 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
124 if ( rv ) {
125 c_rv = PyObject_IsTrue(rv);
126 Py_DECREF(rv);
127 } else {
128 fprintf(stderr, "Nav: exception in filterProc callback\n");
129 PyErr_Clear();
130 }
131 return c_rv;
132}
133
Jack Jansene91a29d1999-12-16 16:54:55 +0000134/* ----------------------------------------------------- */
135static int
136filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000137 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000138 NavDialogOptions *opt,
139 NavEventUPP *eventProcP,
140 NavPreviewUPP *previewProcP,
141 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000142 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000143 OSType *fileTypeP,
144 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000145{
146 int pos = 0;
147 PyObject *key, *value;
148 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000149 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000150
Jack Jansene1a45b31999-12-16 22:21:30 +0000151 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000152
153 while ( PyDict_Next(d, &pos, &key, &value) ) {
154 if ( !key || !value || !PyString_Check(key) ) {
155 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
156 return 0;
157 }
158 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000159 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000160 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
161 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000162 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000163 }
164 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
165 PyMem_DEL(defaultLocation_storage);
166 return 0;
167 }
168 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000169 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000170 if ( !PyArg_Parse(value, "h", &opt->version) )
171 return 0;
172 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
173 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
174 return 0;
175 } else if( strcmp(keystr, "location") == 0 ) {
176 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
177 return 0;
178 } else if( strcmp(keystr, "clientName") == 0 ) {
179 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
180 return 0;
181 } else if( strcmp(keystr, "windowTitle") == 0 ) {
182 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
183 return 0;
184 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
185 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
186 return 0;
187 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
188 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
189 return 0;
190 } else if( strcmp(keystr, "savedFileName") == 0 ) {
191 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
192 return 0;
193 } else if( strcmp(keystr, "message") == 0 ) {
194 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
195 return 0;
196 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
197 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
198 return 0;
199 } else if( strcmp(keystr, "popupExtension") == 0 ) {
200 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
201 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000202 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000203 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000204 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000205 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
206 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000207 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000208 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
209 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000210 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000211 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
212 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000213 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
214 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000215 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000216 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
217 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000218 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000219 } else {
220 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
221 return 0;
222 }
223 }
224 return 1;
225}
226
227/* ----------------------------------------------------- */
228
229/* Declarations for objects of type NavReplyRecord */
230
231typedef struct {
232 PyObject_HEAD
233 NavReplyRecord itself;
234} navrrobject;
235
236staticforward PyTypeObject Navrrtype;
237
238
239
240/* ---------------------------------------------------------------- */
241
Jack Jansena07431f1999-12-17 17:14:28 +0000242static char nav_NavTranslateFile__doc__[] =
243"(NavTranslationOptions)->None"
244;
245
246static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000247nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000248{
249 NavTranslationOptions howToTranslate;
250 OSErr err;
251
252 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
253 return NULL;
254 err = NavTranslateFile(&self->itself, howToTranslate);
255 if ( err ) {
256 PyErr_Mac(ErrorObject, err);
257 return NULL;
258 }
259 Py_INCREF(Py_None);
260 return Py_None;
261}
262
263static char nav_NavCompleteSave__doc__[] =
264"(NavTranslationOptions)->None"
265;
266
267static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000268nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000269{
270 NavTranslationOptions howToTranslate;
271 OSErr err;
272
273 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
274 return NULL;
275 err = NavCompleteSave(&self->itself, howToTranslate);
276 if ( err ) {
277 PyErr_Mac(ErrorObject, err);
278 return NULL;
279 }
280 Py_INCREF(Py_None);
281 return Py_None;
282}
283
284
Jack Jansene91a29d1999-12-16 16:54:55 +0000285static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000286 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
287 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000288
289 {NULL, NULL} /* sentinel */
290};
291
292/* ---------- */
293
294
295static navrrobject *
296newnavrrobject(NavReplyRecord *itself)
297{
298 navrrobject *self;
299
300 self = PyObject_NEW(navrrobject, &Navrrtype);
301 if (self == NULL)
302 return NULL;
303 self->itself = *itself;
304 return self;
305}
306
307
308static void
Jack Jansen1767f932001-09-04 22:20:39 +0000309navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000310{
311 NavDisposeReply(&self->itself);
312 PyMem_DEL(self);
313}
314
315static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000316navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000317{
Jack Jansene79dc762000-06-02 21:35:07 +0000318 FSSpec fss;
319
Jack Jansena07431f1999-12-17 17:14:28 +0000320 if( strcmp(name, "__members__") == 0 )
321 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
322 "isStationery", "translationNeeded", "selection", "fileTranslation");
Jack Jansene91a29d1999-12-16 16:54:55 +0000323 if( strcmp(name, "version") == 0 )
324 return Py_BuildValue("h", self->itself.version);
325 if( strcmp(name, "validRecord") == 0 )
326 return Py_BuildValue("l", (long)self->itself.validRecord);
327 if( strcmp(name, "replacing") == 0 )
328 return Py_BuildValue("l", (long)self->itself.replacing);
329 if( strcmp(name, "isStationery") == 0 )
330 return Py_BuildValue("l", (long)self->itself.isStationery);
331 if( strcmp(name, "translationNeeded") == 0 )
332 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000333 if( strcmp(name, "selection") == 0 ) {
334 SInt32 i, count;
335 OSErr err;
336 PyObject *rv, *rvitem;
337 AEDesc desc;
338
339 if (err=AECountItems(&self->itself.selection, &count)) {
340 PyErr_Mac(ErrorObject, err);
341 return NULL;
342 }
343 if ( (rv=PyList_New(count)) == NULL )
344 return NULL;
345 for(i=0; i<count; i++) {
346 desc.dataHandle = NULL;
347 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
348 Py_DECREF(rv);
349 PyErr_Mac(ErrorObject, err);
350 return NULL;
351 }
Jack Jansen74a1e632000-07-14 22:37:27 +0000352#if TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000353 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
354 Py_DECREF(rv);
355 PyErr_Mac(ErrorObject, err);
356 return NULL;
357 }
358#else
359 memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
360#endif
361 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000362 PyList_SetItem(rv, i, rvitem);
363 AEDisposeDesc(&desc);
364 }
365 return rv;
366 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000367 if( strcmp(name, "fileTranslation") == 0 )
368 return ResObj_New((Handle)self->itself.fileTranslation);
369
370
371 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
372}
373
374static int
Jack Jansen1767f932001-09-04 22:20:39 +0000375navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000376{
377 /* Set attribute 'name' to value 'v'. v==NULL means delete */
378
379 /* XXXX Add your own setattr code here */
380 return -1;
381}
382
383static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000384"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000385;
386
387static PyTypeObject Navrrtype = {
388 PyObject_HEAD_INIT(&PyType_Type)
389 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000390 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000391 sizeof(navrrobject), /*tp_basicsize*/
392 0, /*tp_itemsize*/
393 /* methods */
394 (destructor)navrr_dealloc, /*tp_dealloc*/
395 (printfunc)0, /*tp_print*/
396 (getattrfunc)navrr_getattr, /*tp_getattr*/
397 (setattrfunc)navrr_setattr, /*tp_setattr*/
398 (cmpfunc)0, /*tp_compare*/
399 (reprfunc)0, /*tp_repr*/
400 0, /*tp_as_number*/
401 0, /*tp_as_sequence*/
402 0, /*tp_as_mapping*/
403 (hashfunc)0, /*tp_hash*/
404 (ternaryfunc)0, /*tp_call*/
405 (reprfunc)0, /*tp_str*/
406
407 /* Space for future expansion */
408 0L,0L,0L,0L,
409 Navrrtype__doc__ /* Documentation string */
410};
411
412/* End of code for NavReplyRecord objects */
413
414/* ----------------------------------------------------- */
415
416static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000417"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000418;
419
420static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000421nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000422{
423 PyObject *dict;
424 AEDesc *defaultLocation = NULL;
425 NavReplyRecord reply;
426 NavDialogOptions dialogOptions;
427 NavEventUPP eventProc = NULL;
428 NavPreviewUPP previewProc = NULL;
429 NavObjectFilterUPP filterProc = NULL;
430 NavTypeListHandle typeList = NULL;
431 OSErr err;
432
Jack Jansenc33a4232001-01-19 23:46:28 +0000433 if ( kw && PyObject_IsTrue(kw) ) {
434 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000435 return NULL;
436 dict = kw;
437 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000438 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000439 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000440 return NULL;
441 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
442 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000443 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000444 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000445 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000446 return NULL;
447 }
448 return (PyObject *)newnavrrobject(&reply);
449}
450
451static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000452"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000453;
454
455static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000456nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000457{
Jack Jansena07431f1999-12-17 17:14:28 +0000458 PyObject *dict;
459 AEDesc *defaultLocation = NULL;
460 NavReplyRecord reply;
461 NavDialogOptions dialogOptions;
462 NavEventUPP eventProc = NULL;
463 OSType fileType;
464 OSType fileCreator;
465 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000466
Jack Jansenc33a4232001-01-19 23:46:28 +0000467 if ( kw && PyObject_IsTrue(kw) ) {
468 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000469 return NULL;
470 dict = kw;
471 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000472 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000473 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
474 return NULL;
475 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
476 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000477 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000478 if ( err ) {
479 PyErr_Mac(ErrorObject, err);
480 return NULL;
481 }
482 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000483}
484
485static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000486"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
487
Jack Jansene91a29d1999-12-16 16:54:55 +0000488;
489
490static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000491nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000492{
Jack Jansena07431f1999-12-17 17:14:28 +0000493 PyObject *dict;
494 NavDialogOptions dialogOptions;
495 NavAskSaveChangesAction action;
496 NavAskSaveChangesResult reply;
497 NavEventUPP eventProc = NULL;
498 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000499
Jack Jansenc33a4232001-01-19 23:46:28 +0000500 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000501 if (!PyArg_ParseTuple(args, "l", &action))
502 return NULL;
503 dict = kw;
504 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000505 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000506 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
507 return NULL;
508 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
509 if ( err ) {
510 PyErr_Mac(ErrorObject, err);
511 return NULL;
512 }
513 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000514}
515
516static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000517"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000518;
519
520static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000521nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000522{
Jack Jansena07431f1999-12-17 17:14:28 +0000523 PyObject *dict;
524 NavDialogOptions dialogOptions;
525 NavAskSaveChangesResult reply;
526 NavEventUPP eventProc = NULL;
527 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000528
Jack Jansenc33a4232001-01-19 23:46:28 +0000529 if ( kw && PyObject_IsTrue(kw) ) {
530 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000531 return NULL;
532 dict = kw;
533 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000534 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000535 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
536 return NULL;
537 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
538 if ( err ) {
539 PyErr_Mac(ErrorObject, err);
540 return NULL;
541 }
542 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000543}
544
545static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000546"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000547;
548
549static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000550nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000551{
Jack Jansena07431f1999-12-17 17:14:28 +0000552 PyObject *dict;
553 NavDialogOptions dialogOptions;
554 NavAskSaveChangesResult reply;
555 NavEventUPP eventProc = NULL;
556 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000557
Jack Jansenc33a4232001-01-19 23:46:28 +0000558 if ( kw && PyObject_IsTrue(kw) ) {
559 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000560 return NULL;
561 dict = kw;
562 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000563 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000564 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
565 return NULL;
566 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
567 if ( err ) {
568 PyErr_Mac(ErrorObject, err);
569 return NULL;
570 }
571 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000572}
573
574static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000575"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000576;
577
578static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000579nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000580{
Jack Jansena07431f1999-12-17 17:14:28 +0000581 PyObject *dict;
582 AEDesc *defaultLocation = NULL;
583 NavReplyRecord reply;
584 NavDialogOptions dialogOptions;
585 NavEventUPP eventProc = NULL;
586 NavPreviewUPP previewProc = NULL;
587 NavObjectFilterUPP filterProc = NULL;
588 NavTypeListHandle typeList = NULL;
589 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000590
Jack Jansenc33a4232001-01-19 23:46:28 +0000591 if ( kw && PyObject_IsTrue(kw) ) {
592 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000593 return NULL;
594 dict = kw;
595 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000596 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000597 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
598 return NULL;
599 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
600 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000601 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000602 if ( err ) {
603 PyErr_Mac(ErrorObject, err);
604 return NULL;
605 }
606 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000607}
608
609static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000610"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000611;
612
613static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000614nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000615{
Jack Jansena07431f1999-12-17 17:14:28 +0000616 PyObject *dict;
617 AEDesc *defaultLocation = NULL;
618 NavReplyRecord reply;
619 NavDialogOptions dialogOptions;
620 NavEventUPP eventProc = NULL;
621 NavObjectFilterUPP filterProc = NULL;
622 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000623
Jack Jansenc33a4232001-01-19 23:46:28 +0000624 if ( kw && PyObject_IsTrue(kw) ) {
625 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000626 return NULL;
627 dict = kw;
628 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000629 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000630 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
631 return NULL;
632 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
633 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000634 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000635 if ( err ) {
636 PyErr_Mac(ErrorObject, err);
637 return NULL;
638 }
639 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000640}
641
642static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000643"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000644;
645
646static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000647nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000648{
Jack Jansena07431f1999-12-17 17:14:28 +0000649 PyObject *dict;
650 AEDesc *defaultLocation = NULL;
651 NavReplyRecord reply;
652 NavDialogOptions dialogOptions;
653 NavEventUPP eventProc = NULL;
654 NavObjectFilterUPP filterProc = NULL;
655 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000656
Jack Jansenc33a4232001-01-19 23:46:28 +0000657 if ( kw && PyObject_IsTrue(kw) ) {
658 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000659 return NULL;
660 dict = kw;
661 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000662 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000663 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
664 return NULL;
665 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
666 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000667 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000668 if ( err ) {
669 PyErr_Mac(ErrorObject, err);
670 return NULL;
671 }
672 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000673}
674
675static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000676"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000677;
678
679static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000680nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000681{
Jack Jansena07431f1999-12-17 17:14:28 +0000682 PyObject *dict;
683 AEDesc *defaultLocation = NULL;
684 NavReplyRecord reply;
685 NavDialogOptions dialogOptions;
686 NavEventUPP eventProc = NULL;
687 NavObjectFilterUPP filterProc = NULL;
688 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000689
Jack Jansenc33a4232001-01-19 23:46:28 +0000690 if ( kw && PyObject_IsTrue(kw) ) {
691 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000692 return NULL;
693 dict = kw;
694 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000695 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000696 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
697 return NULL;
698 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
699 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000700 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000701 if ( err ) {
702 PyErr_Mac(ErrorObject, err);
703 return NULL;
704 }
705 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000706}
707
708static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000709"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000710;
711
712static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000713nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000714{
Jack Jansena07431f1999-12-17 17:14:28 +0000715 PyObject *dict;
716 AEDesc *defaultLocation = NULL;
717 NavReplyRecord reply;
718 NavDialogOptions dialogOptions;
719 NavEventUPP eventProc = NULL;
720 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000721
Jack Jansenc33a4232001-01-19 23:46:28 +0000722 if ( kw && PyObject_IsTrue(kw) ) {
723 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000724 return NULL;
725 dict = kw;
726 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000727 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000728 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
729 return NULL;
730 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000731 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000732 if ( err ) {
733 PyErr_Mac(ErrorObject, err);
734 return NULL;
735 }
736 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000737}
738
Jack Jansena07431f1999-12-17 17:14:28 +0000739#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000740/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000741static char nav_NavCustomControl__doc__[] =
742""
743;
744
Jack Jansena07431f1999-12-17 17:14:28 +0000745
Jack Jansene91a29d1999-12-16 16:54:55 +0000746static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000747nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000748{
749
750 if (!PyArg_ParseTuple(args, ""))
751 return NULL;
752 Py_INCREF(Py_None);
753 return Py_None;
754}
Jack Jansena07431f1999-12-17 17:14:28 +0000755#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000756
757static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000758"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000759;
760
761static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000762nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000763{
764 Boolean rv;
765 if (!PyArg_ParseTuple(args, ""))
766 return NULL;
767 rv = NavServicesCanRun();
768 return Py_BuildValue("l", (long)rv);
769}
770
771static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000772"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000773;
774
775static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000776nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000777{
778 Boolean rv;
779
780 if (!PyArg_ParseTuple(args, ""))
781 return NULL;
782 rv = NavServicesAvailable();
783 return Py_BuildValue("l", (long)rv);
784}
785/* XX */
786static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000787"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000788;
789
790static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000791nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000792{
793
794 if (!PyArg_ParseTuple(args, ""))
795 return NULL;
796 NavLoad();
797 Py_INCREF(Py_None);
798 return Py_None;
799}
800
801static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000802"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000803;
804
805static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000806nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000807{
808
809 if (!PyArg_ParseTuple(args, ""))
810 return NULL;
811 NavUnload();
812 Py_INCREF(Py_None);
813 return Py_None;
814}
815
816static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000817"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000818;
819
820static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000821nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000822{
823 UInt32 rv;
824
825 if (!PyArg_ParseTuple(args, ""))
826 return NULL;
827 rv = NavLibraryVersion();
828 return Py_BuildValue("l", (long)rv);
829}
830
Jack Jansene91a29d1999-12-16 16:54:55 +0000831static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000832"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000833;
834
835static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000836nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000837{
Jack Jansena07431f1999-12-17 17:14:28 +0000838 NavDialogOptions dialogOptions;
839 OSErr err;
840
841 err = NavGetDefaultDialogOptions(&dialogOptions);
842 if ( err ) {
843 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000844 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000845 }
846 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&}",
847 "version", dialogOptions.version,
848 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
849 "location", PyMac_BuildPoint, dialogOptions.location,
850 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
851 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
852 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
853 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
854 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
855 "message", PyMac_BuildStr255, &dialogOptions.message,
856 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
857 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000858}
Jack Jansene91a29d1999-12-16 16:54:55 +0000859
860/* List of methods defined in the module */
861
862static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000863 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
864 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
865 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
866 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
867 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
868 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
869 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
870 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
871 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
872 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000873#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000874 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000875#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000876 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
877 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
878 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
879 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
880 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000881 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000882 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
883};
884
885
886/* Initialization function for the module (*must* be called initNav) */
887
888static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000889"Interface to Navigation Services\n"
890"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
891"if you want the default options.\n"
892"Use NavGetDefaultDialogOptions() to find out common option names.\n"
893"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000894"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000895;
896
897void
Jack Jansen1767f932001-09-04 22:20:39 +0000898initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000899{
900 PyObject *m, *d;
901
Jack Jansen04b85492000-09-14 20:47:00 +0000902 /* Test that we have NavServices */
903 if ( !NavServicesAvailable() ) {
904 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
905 return;
906 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000907 /* Create the module and add the functions */
908 m = Py_InitModule4("Nav", nav_methods,
909 Nav_module_documentation,
910 (PyObject*)NULL,PYTHON_API_VERSION);
911
912 /* Add some symbolic constants to the module */
913 d = PyModule_GetDict(m);
914 ErrorObject = PyString_FromString("Nav.error");
915 PyDict_SetItemString(d, "error", ErrorObject);
916
917 /* XXXX Add constants here */
918
Jack Jansena07431f1999-12-17 17:14:28 +0000919 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000920 my_eventProcUPP = NewNavEventUPP(my_eventProc);
921 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
922 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000923
Jack Jansene91a29d1999-12-16 16:54:55 +0000924}
925