blob: c86a5ef0045b26bae4f4c74a4a2f91ebc0f95b1a [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 Jansene91a29d1999-12-16 16:54:55 +000035#include <Navigation.h>
36
Jack Jansene91a29d1999-12-16 16:54:55 +000037static PyObject *ErrorObject;
38
Jack Jansena07431f1999-12-17 17:14:28 +000039static NavEventUPP my_eventProcUPP;
40static NavPreviewUPP my_previewProcUPP;
41static NavObjectFilterUPP my_filterProcUPP;
42
43/* Callback functions */
44static pascal void
45my_eventProc(NavEventCallbackMessage callBackSelector,
46 NavCBRecPtr callBackParms,
47 NavCallBackUserData callbackUD)
48{
49 PyObject *dict = (PyObject *)callbackUD;
50 PyObject *pyfunc;
51 PyObject *rv;
52
53 if (!dict) return;
54 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
55 PyErr_Clear();
56 return;
57 }
58 if ( pyfunc == Py_None ) {
59 /* Special case: give update events to the Python event handling code */
60 if ( callBackSelector == kNavCBEvent &&
61 callBackParms->eventData.eventDataParms.event->what == updateEvt)
62 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
63 /* Ignore others */
64 return;
65 }
66 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
67 (void *)callBackParms, sizeof(NavCBRec));
68 if ( rv )
69 Py_DECREF(rv);
70 else {
71 fprintf(stderr, "Nav: exception in eventProc callback\n");
72 PyErr_Clear();
73 }
74}
75
76static pascal Boolean
77my_previewProc(NavCBRecPtr callBackParms,
78 NavCallBackUserData callbackUD)
79{
80 PyObject *dict = (PyObject *)callbackUD;
81 PyObject *pyfunc;
82 PyObject *rv;
83 Boolean c_rv = false;
84
85 if (!dict) return;
86 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
87 PyErr_Clear();
88 return;
89 }
90 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
91 if ( rv ) {
92 c_rv = PyObject_IsTrue(rv);
93 Py_DECREF(rv);
94 } else {
95 fprintf(stderr, "Nav: exception in previewProc callback\n");
96 PyErr_Clear();
97 }
98 return c_rv;
99}
100
101static pascal Boolean
102my_filterProc(AEDesc *theItem, void *info,
103 NavCallBackUserData callbackUD,
104 NavFilterModes filterMode)
105{
106 PyObject *dict = (PyObject *)callbackUD;
107 PyObject *pyfunc;
108 PyObject *rv;
109 Boolean c_rv = false;
110
111 if (!dict) return;
112 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
113 PyErr_Clear();
114 return;
115 }
116 rv = PyObject_CallFunction(pyfunc, "O&s#h",
117 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
118 if ( rv ) {
119 c_rv = PyObject_IsTrue(rv);
120 Py_DECREF(rv);
121 } else {
122 fprintf(stderr, "Nav: exception in filterProc callback\n");
123 PyErr_Clear();
124 }
125 return c_rv;
126}
127
Jack Jansene91a29d1999-12-16 16:54:55 +0000128/* ----------------------------------------------------- */
129static int
130filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000131 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000132 NavDialogOptions *opt,
133 NavEventUPP *eventProcP,
134 NavPreviewUPP *previewProcP,
135 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000136 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000137 OSType *fileTypeP,
138 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000139{
140 int pos = 0;
141 PyObject *key, *value;
142 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000143 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000144
Jack Jansene1a45b31999-12-16 22:21:30 +0000145 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000146
147 while ( PyDict_Next(d, &pos, &key, &value) ) {
148 if ( !key || !value || !PyString_Check(key) ) {
149 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
150 return 0;
151 }
152 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000153 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000154 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
155 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000156 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000157 }
158 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
159 PyMem_DEL(defaultLocation_storage);
160 return 0;
161 }
162 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000163 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000164 if ( !PyArg_Parse(value, "h", &opt->version) )
165 return 0;
166 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
167 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
168 return 0;
169 } else if( strcmp(keystr, "location") == 0 ) {
170 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
171 return 0;
172 } else if( strcmp(keystr, "clientName") == 0 ) {
173 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
174 return 0;
175 } else if( strcmp(keystr, "windowTitle") == 0 ) {
176 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
177 return 0;
178 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
179 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
180 return 0;
181 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
182 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
183 return 0;
184 } else if( strcmp(keystr, "savedFileName") == 0 ) {
185 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
186 return 0;
187 } else if( strcmp(keystr, "message") == 0 ) {
188 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
189 return 0;
190 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
191 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
192 return 0;
193 } else if( strcmp(keystr, "popupExtension") == 0 ) {
194 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
195 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000196 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000197 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000198 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000199 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
200 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000201 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000202 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
203 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000204 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000205 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
206 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000207 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
208 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000209 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000210 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
211 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000212 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000213 } else {
214 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
215 return 0;
216 }
217 }
218 return 1;
219}
220
221/* ----------------------------------------------------- */
222
223/* Declarations for objects of type NavReplyRecord */
224
225typedef struct {
226 PyObject_HEAD
227 NavReplyRecord itself;
228} navrrobject;
229
230staticforward PyTypeObject Navrrtype;
231
232
233
234/* ---------------------------------------------------------------- */
235
Jack Jansena07431f1999-12-17 17:14:28 +0000236static char nav_NavTranslateFile__doc__[] =
237"(NavTranslationOptions)->None"
238;
239
240static PyObject *
241nav_NavTranslateFile(self, args)
242 navrrobject *self;
243 PyObject *args;
244{
245 NavTranslationOptions howToTranslate;
246 OSErr err;
247
248 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
249 return NULL;
250 err = NavTranslateFile(&self->itself, howToTranslate);
251 if ( err ) {
252 PyErr_Mac(ErrorObject, err);
253 return NULL;
254 }
255 Py_INCREF(Py_None);
256 return Py_None;
257}
258
259static char nav_NavCompleteSave__doc__[] =
260"(NavTranslationOptions)->None"
261;
262
263static PyObject *
264nav_NavCompleteSave(self, args)
265 navrrobject *self;
266 PyObject *args;
267{
268 NavTranslationOptions howToTranslate;
269 OSErr err;
270
271 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
272 return NULL;
273 err = NavCompleteSave(&self->itself, howToTranslate);
274 if ( err ) {
275 PyErr_Mac(ErrorObject, err);
276 return NULL;
277 }
278 Py_INCREF(Py_None);
279 return Py_None;
280}
281
282
Jack Jansene91a29d1999-12-16 16:54:55 +0000283static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000284 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
285 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000286
287 {NULL, NULL} /* sentinel */
288};
289
290/* ---------- */
291
292
293static navrrobject *
294newnavrrobject(NavReplyRecord *itself)
295{
296 navrrobject *self;
297
298 self = PyObject_NEW(navrrobject, &Navrrtype);
299 if (self == NULL)
300 return NULL;
301 self->itself = *itself;
302 return self;
303}
304
305
306static void
307navrr_dealloc(self)
308 navrrobject *self;
309{
310 NavDisposeReply(&self->itself);
311 PyMem_DEL(self);
312}
313
314static PyObject *
315navrr_getattr(self, name)
316 navrrobject *self;
317 char *name;
318{
Jack Jansene79dc762000-06-02 21:35:07 +0000319 FSSpec fss;
320
Jack Jansena07431f1999-12-17 17:14:28 +0000321 if( strcmp(name, "__members__") == 0 )
322 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
323 "isStationery", "translationNeeded", "selection", "fileTranslation");
Jack Jansene91a29d1999-12-16 16:54:55 +0000324 if( strcmp(name, "version") == 0 )
325 return Py_BuildValue("h", self->itself.version);
326 if( strcmp(name, "validRecord") == 0 )
327 return Py_BuildValue("l", (long)self->itself.validRecord);
328 if( strcmp(name, "replacing") == 0 )
329 return Py_BuildValue("l", (long)self->itself.replacing);
330 if( strcmp(name, "isStationery") == 0 )
331 return Py_BuildValue("l", (long)self->itself.isStationery);
332 if( strcmp(name, "translationNeeded") == 0 )
333 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000334 if( strcmp(name, "selection") == 0 ) {
335 SInt32 i, count;
336 OSErr err;
337 PyObject *rv, *rvitem;
338 AEDesc desc;
339
340 if (err=AECountItems(&self->itself.selection, &count)) {
341 PyErr_Mac(ErrorObject, err);
342 return NULL;
343 }
344 if ( (rv=PyList_New(count)) == NULL )
345 return NULL;
346 for(i=0; i<count; i++) {
347 desc.dataHandle = NULL;
348 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
349 Py_DECREF(rv);
350 PyErr_Mac(ErrorObject, err);
351 return NULL;
352 }
Jack Jansene79dc762000-06-02 21:35:07 +0000353#ifdef TARGET_API_MAC_CARBON
354 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
355 Py_DECREF(rv);
356 PyErr_Mac(ErrorObject, err);
357 return NULL;
358 }
359#else
360 memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
361#endif
362 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000363 PyList_SetItem(rv, i, rvitem);
364 AEDisposeDesc(&desc);
365 }
366 return rv;
367 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000368 if( strcmp(name, "fileTranslation") == 0 )
369 return ResObj_New((Handle)self->itself.fileTranslation);
370
371
372 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
373}
374
375static int
376navrr_setattr(self, name, v)
377 navrrobject *self;
378 char *name;
379 PyObject *v;
380{
381 /* Set attribute 'name' to value 'v'. v==NULL means delete */
382
383 /* XXXX Add your own setattr code here */
384 return -1;
385}
386
387static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000388"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000389;
390
391static PyTypeObject Navrrtype = {
392 PyObject_HEAD_INIT(&PyType_Type)
393 0, /*ob_size*/
394 "NavReplyRecord", /*tp_name*/
395 sizeof(navrrobject), /*tp_basicsize*/
396 0, /*tp_itemsize*/
397 /* methods */
398 (destructor)navrr_dealloc, /*tp_dealloc*/
399 (printfunc)0, /*tp_print*/
400 (getattrfunc)navrr_getattr, /*tp_getattr*/
401 (setattrfunc)navrr_setattr, /*tp_setattr*/
402 (cmpfunc)0, /*tp_compare*/
403 (reprfunc)0, /*tp_repr*/
404 0, /*tp_as_number*/
405 0, /*tp_as_sequence*/
406 0, /*tp_as_mapping*/
407 (hashfunc)0, /*tp_hash*/
408 (ternaryfunc)0, /*tp_call*/
409 (reprfunc)0, /*tp_str*/
410
411 /* Space for future expansion */
412 0L,0L,0L,0L,
413 Navrrtype__doc__ /* Documentation string */
414};
415
416/* End of code for NavReplyRecord objects */
417
418/* ----------------------------------------------------- */
419
420static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000421"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000422;
423
424static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000425nav_NavGetFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000426 PyObject *self; /* Not used */
427 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000428 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000429{
430 PyObject *dict;
431 AEDesc *defaultLocation = NULL;
432 NavReplyRecord reply;
433 NavDialogOptions dialogOptions;
434 NavEventUPP eventProc = NULL;
435 NavPreviewUPP previewProc = NULL;
436 NavObjectFilterUPP filterProc = NULL;
437 NavTypeListHandle typeList = NULL;
438 OSErr err;
439
Jack Jansene1a45b31999-12-16 22:21:30 +0000440 if ( kw ) {
441 if (!PyArg_ParseTuple(args, ""))
442 return NULL;
443 dict = kw;
444 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000445 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000446 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000447 return NULL;
448 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
449 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000450 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000451 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000452 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000453 return NULL;
454 }
455 return (PyObject *)newnavrrobject(&reply);
456}
457
458static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000459"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000460;
461
462static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000463nav_NavPutFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000464 PyObject *self; /* Not used */
465 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000466 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000467{
Jack Jansena07431f1999-12-17 17:14:28 +0000468 PyObject *dict;
469 AEDesc *defaultLocation = NULL;
470 NavReplyRecord reply;
471 NavDialogOptions dialogOptions;
472 NavEventUPP eventProc = NULL;
473 OSType fileType;
474 OSType fileCreator;
475 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000476
Jack Jansena07431f1999-12-17 17:14:28 +0000477 if ( kw ) {
478 if (!PyArg_ParseTuple(args, ""))
479 return NULL;
480 dict = kw;
481 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000482 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000483 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
484 return NULL;
485 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
486 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000487 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000488 if ( err ) {
489 PyErr_Mac(ErrorObject, err);
490 return NULL;
491 }
492 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000493}
494
495static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000496"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
497
Jack Jansene91a29d1999-12-16 16:54:55 +0000498;
499
500static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000501nav_NavAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000502 PyObject *self; /* Not used */
503 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000504 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000505{
Jack Jansena07431f1999-12-17 17:14:28 +0000506 PyObject *dict;
507 NavDialogOptions dialogOptions;
508 NavAskSaveChangesAction action;
509 NavAskSaveChangesResult reply;
510 NavEventUPP eventProc = NULL;
511 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000512
Jack Jansena07431f1999-12-17 17:14:28 +0000513 if ( kw ) {
514 if (!PyArg_ParseTuple(args, "l", &action))
515 return NULL;
516 dict = kw;
517 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000518 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000519 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
520 return NULL;
521 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
522 if ( err ) {
523 PyErr_Mac(ErrorObject, err);
524 return NULL;
525 }
526 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000527}
528
529static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000530"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000531;
532
533static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000534nav_NavCustomAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000535 PyObject *self; /* Not used */
536 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000537 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000538{
Jack Jansena07431f1999-12-17 17:14:28 +0000539 PyObject *dict;
540 NavDialogOptions dialogOptions;
541 NavAskSaveChangesResult reply;
542 NavEventUPP eventProc = NULL;
543 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000544
Jack Jansena07431f1999-12-17 17:14:28 +0000545 if ( kw ) {
546 if (!PyArg_ParseTuple(args, ""))
547 return NULL;
548 dict = kw;
549 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000550 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000551 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
552 return NULL;
553 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
554 if ( err ) {
555 PyErr_Mac(ErrorObject, err);
556 return NULL;
557 }
558 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000559}
560
561static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000562"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000563;
564
565static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000566nav_NavAskDiscardChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000567 PyObject *self; /* Not used */
568 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000569 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000570{
Jack Jansena07431f1999-12-17 17:14:28 +0000571 PyObject *dict;
572 NavDialogOptions dialogOptions;
573 NavAskSaveChangesResult reply;
574 NavEventUPP eventProc = NULL;
575 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000576
Jack Jansena07431f1999-12-17 17:14:28 +0000577 if ( kw ) {
578 if (!PyArg_ParseTuple(args, ""))
579 return NULL;
580 dict = kw;
581 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000582 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000583 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
584 return NULL;
585 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
586 if ( err ) {
587 PyErr_Mac(ErrorObject, err);
588 return NULL;
589 }
590 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000591}
592
593static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000594"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000595;
596
597static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000598nav_NavChooseFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000599 PyObject *self; /* Not used */
600 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000601 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000602{
Jack Jansena07431f1999-12-17 17:14:28 +0000603 PyObject *dict;
604 AEDesc *defaultLocation = NULL;
605 NavReplyRecord reply;
606 NavDialogOptions dialogOptions;
607 NavEventUPP eventProc = NULL;
608 NavPreviewUPP previewProc = NULL;
609 NavObjectFilterUPP filterProc = NULL;
610 NavTypeListHandle typeList = NULL;
611 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000612
Jack Jansena07431f1999-12-17 17:14:28 +0000613 if ( kw ) {
614 if (!PyArg_ParseTuple(args, ""))
615 return NULL;
616 dict = kw;
617 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000618 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000619 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
620 return NULL;
621 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
622 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000623 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000624 if ( err ) {
625 PyErr_Mac(ErrorObject, err);
626 return NULL;
627 }
628 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000629}
630
631static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000632"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000633;
634
635static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000636nav_NavChooseFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000637 PyObject *self; /* Not used */
638 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000639 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000640{
Jack Jansena07431f1999-12-17 17:14:28 +0000641 PyObject *dict;
642 AEDesc *defaultLocation = NULL;
643 NavReplyRecord reply;
644 NavDialogOptions dialogOptions;
645 NavEventUPP eventProc = NULL;
646 NavObjectFilterUPP filterProc = NULL;
647 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000648
Jack Jansena07431f1999-12-17 17:14:28 +0000649 if ( kw ) {
650 if (!PyArg_ParseTuple(args, ""))
651 return NULL;
652 dict = kw;
653 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000654 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000655 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
656 return NULL;
657 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
658 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000659 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000660 if ( err ) {
661 PyErr_Mac(ErrorObject, err);
662 return NULL;
663 }
664 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000665}
666
667static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000668"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000669;
670
671static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000672nav_NavChooseVolume(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000673 PyObject *self; /* Not used */
674 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000675 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000676{
Jack Jansena07431f1999-12-17 17:14:28 +0000677 PyObject *dict;
678 AEDesc *defaultLocation = NULL;
679 NavReplyRecord reply;
680 NavDialogOptions dialogOptions;
681 NavEventUPP eventProc = NULL;
682 NavObjectFilterUPP filterProc = NULL;
683 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000684
Jack Jansena07431f1999-12-17 17:14:28 +0000685 if ( kw ) {
686 if (!PyArg_ParseTuple(args, ""))
687 return NULL;
688 dict = kw;
689 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000690 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000691 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
692 return NULL;
693 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
694 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000695 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000696 if ( err ) {
697 PyErr_Mac(ErrorObject, err);
698 return NULL;
699 }
700 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000701}
702
703static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000704"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000705;
706
707static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000708nav_NavChooseObject(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000709 PyObject *self; /* Not used */
710 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000711 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000712{
Jack Jansena07431f1999-12-17 17:14:28 +0000713 PyObject *dict;
714 AEDesc *defaultLocation = NULL;
715 NavReplyRecord reply;
716 NavDialogOptions dialogOptions;
717 NavEventUPP eventProc = NULL;
718 NavObjectFilterUPP filterProc = NULL;
719 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000720
Jack Jansena07431f1999-12-17 17:14:28 +0000721 if ( kw ) {
722 if (!PyArg_ParseTuple(args, ""))
723 return NULL;
724 dict = kw;
725 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000726 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000727 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
728 return NULL;
729 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
730 eventProc, filterProc, (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
739static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000740"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000741;
742
743static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000744nav_NavNewFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000745 PyObject *self; /* Not used */
746 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000747 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000748{
Jack Jansena07431f1999-12-17 17:14:28 +0000749 PyObject *dict;
750 AEDesc *defaultLocation = NULL;
751 NavReplyRecord reply;
752 NavDialogOptions dialogOptions;
753 NavEventUPP eventProc = NULL;
754 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000755
Jack Jansena07431f1999-12-17 17:14:28 +0000756 if ( kw ) {
757 if (!PyArg_ParseTuple(args, ""))
758 return NULL;
759 dict = kw;
760 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000761 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000762 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
763 return NULL;
764 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000765 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000766 if ( err ) {
767 PyErr_Mac(ErrorObject, err);
768 return NULL;
769 }
770 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000771}
772
Jack Jansena07431f1999-12-17 17:14:28 +0000773#if 0
774XXXX I don't know what to do with the void * argument
Jack Jansene91a29d1999-12-16 16:54:55 +0000775static char nav_NavCustomControl__doc__[] =
776""
777;
778
Jack Jansena07431f1999-12-17 17:14:28 +0000779
Jack Jansene91a29d1999-12-16 16:54:55 +0000780static PyObject *
781nav_NavCustomControl(self, args)
782 PyObject *self; /* Not used */
783 PyObject *args;
784{
785
786 if (!PyArg_ParseTuple(args, ""))
787 return NULL;
788 Py_INCREF(Py_None);
789 return Py_None;
790}
Jack Jansena07431f1999-12-17 17:14:28 +0000791#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000792
793static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000794"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000795;
796
797static PyObject *
798nav_NavServicesCanRun(self, args)
799 PyObject *self; /* Not used */
800 PyObject *args;
801{
802 Boolean rv;
803 if (!PyArg_ParseTuple(args, ""))
804 return NULL;
805 rv = NavServicesCanRun();
806 return Py_BuildValue("l", (long)rv);
807}
808
809static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000810"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000811;
812
813static PyObject *
814nav_NavServicesAvailable(self, args)
815 PyObject *self; /* Not used */
816 PyObject *args;
817{
818 Boolean rv;
819
820 if (!PyArg_ParseTuple(args, ""))
821 return NULL;
822 rv = NavServicesAvailable();
823 return Py_BuildValue("l", (long)rv);
824}
825/* XX */
826static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000827"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000828;
829
830static PyObject *
831nav_NavLoad(self, args)
832 PyObject *self; /* Not used */
833 PyObject *args;
834{
835
836 if (!PyArg_ParseTuple(args, ""))
837 return NULL;
838 NavLoad();
839 Py_INCREF(Py_None);
840 return Py_None;
841}
842
843static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000844"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000845;
846
847static PyObject *
848nav_NavUnload(self, args)
849 PyObject *self; /* Not used */
850 PyObject *args;
851{
852
853 if (!PyArg_ParseTuple(args, ""))
854 return NULL;
855 NavUnload();
856 Py_INCREF(Py_None);
857 return Py_None;
858}
859
860static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000861"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000862;
863
864static PyObject *
865nav_NavLibraryVersion(self, args)
866 PyObject *self; /* Not used */
867 PyObject *args;
868{
869 UInt32 rv;
870
871 if (!PyArg_ParseTuple(args, ""))
872 return NULL;
873 rv = NavLibraryVersion();
874 return Py_BuildValue("l", (long)rv);
875}
876
Jack Jansene91a29d1999-12-16 16:54:55 +0000877static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000878"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000879;
880
881static PyObject *
882nav_NavGetDefaultDialogOptions(self, args)
883 PyObject *self; /* Not used */
884 PyObject *args;
885{
Jack Jansena07431f1999-12-17 17:14:28 +0000886 NavDialogOptions dialogOptions;
887 OSErr err;
888
889 err = NavGetDefaultDialogOptions(&dialogOptions);
890 if ( err ) {
891 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000892 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000893 }
894 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&}",
895 "version", dialogOptions.version,
896 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
897 "location", PyMac_BuildPoint, dialogOptions.location,
898 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
899 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
900 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
901 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
902 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
903 "message", PyMac_BuildStr255, &dialogOptions.message,
904 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
905 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000906}
Jack Jansene91a29d1999-12-16 16:54:55 +0000907
908/* List of methods defined in the module */
909
910static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000911 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
912 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
913 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
914 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
915 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
916 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
917 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
918 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
919 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
920 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000921#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000922 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000923#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000924 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
925 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
926 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
927 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
928 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000929 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000930 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
931};
932
933
934/* Initialization function for the module (*must* be called initNav) */
935
936static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000937"Interface to Navigation Services\n"
938"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
939"if you want the default options.\n"
940"Use NavGetDefaultDialogOptions() to find out common option names.\n"
941"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000942"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000943;
944
945void
946initNav()
947{
948 PyObject *m, *d;
949
950 /* Create the module and add the functions */
951 m = Py_InitModule4("Nav", nav_methods,
952 Nav_module_documentation,
953 (PyObject*)NULL,PYTHON_API_VERSION);
954
955 /* Add some symbolic constants to the module */
956 d = PyModule_GetDict(m);
957 ErrorObject = PyString_FromString("Nav.error");
958 PyDict_SetItemString(d, "error", ErrorObject);
959
960 /* XXXX Add constants here */
961
Jack Jansena07431f1999-12-17 17:14:28 +0000962 /* Set UPPs */
963 my_eventProcUPP = NewNavEventProc(my_eventProc);
964 my_previewProcUPP = NewNavPreviewProc(my_previewProc);
965 my_filterProcUPP = NewNavObjectFilterProc(my_filterProc);
966
Jack Jansene91a29d1999-12-16 16:54:55 +0000967 /* Check for errors */
968 if (PyErr_Occurred())
969 Py_FatalError("can't initialize module Nav");
970}
971