blob: 85fae415c5e4dde2a6d54c105d4b5f967defeadd [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"
34#include <Navigation.h>
35
36/* Exported by AEModule.c: */
37extern PyObject *AEDesc_New(AppleEvent *);
38extern int AEDesc_Convert(PyObject *, AppleEvent *);
39/* Exported by Resmodule.c */
40extern PyObject *ResObj_New(Handle);
Jack Jansena07431f1999-12-17 17:14:28 +000041extern PyObject *OptResObj_New(Handle);
Jack Jansene91a29d1999-12-16 16:54:55 +000042extern int ResObj_Convert(PyObject *, Handle *);
43
44static PyObject *ErrorObject;
45
Jack Jansena07431f1999-12-17 17:14:28 +000046static NavEventUPP my_eventProcUPP;
47static NavPreviewUPP my_previewProcUPP;
48static NavObjectFilterUPP my_filterProcUPP;
49
50/* Callback functions */
51static pascal void
52my_eventProc(NavEventCallbackMessage callBackSelector,
53 NavCBRecPtr callBackParms,
54 NavCallBackUserData callbackUD)
55{
56 PyObject *dict = (PyObject *)callbackUD;
57 PyObject *pyfunc;
58 PyObject *rv;
59
60 if (!dict) return;
61 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
62 PyErr_Clear();
63 return;
64 }
65 if ( pyfunc == Py_None ) {
66 /* Special case: give update events to the Python event handling code */
67 if ( callBackSelector == kNavCBEvent &&
68 callBackParms->eventData.eventDataParms.event->what == updateEvt)
69 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
70 /* Ignore others */
71 return;
72 }
73 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
74 (void *)callBackParms, sizeof(NavCBRec));
75 if ( rv )
76 Py_DECREF(rv);
77 else {
78 fprintf(stderr, "Nav: exception in eventProc callback\n");
79 PyErr_Clear();
80 }
81}
82
83static pascal Boolean
84my_previewProc(NavCBRecPtr callBackParms,
85 NavCallBackUserData callbackUD)
86{
87 PyObject *dict = (PyObject *)callbackUD;
88 PyObject *pyfunc;
89 PyObject *rv;
90 Boolean c_rv = false;
91
92 if (!dict) return;
93 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
94 PyErr_Clear();
95 return;
96 }
97 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
98 if ( rv ) {
99 c_rv = PyObject_IsTrue(rv);
100 Py_DECREF(rv);
101 } else {
102 fprintf(stderr, "Nav: exception in previewProc callback\n");
103 PyErr_Clear();
104 }
105 return c_rv;
106}
107
108static pascal Boolean
109my_filterProc(AEDesc *theItem, void *info,
110 NavCallBackUserData callbackUD,
111 NavFilterModes filterMode)
112{
113 PyObject *dict = (PyObject *)callbackUD;
114 PyObject *pyfunc;
115 PyObject *rv;
116 Boolean c_rv = false;
117
118 if (!dict) return;
119 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
120 PyErr_Clear();
121 return;
122 }
123 rv = PyObject_CallFunction(pyfunc, "O&s#h",
124 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
125 if ( rv ) {
126 c_rv = PyObject_IsTrue(rv);
127 Py_DECREF(rv);
128 } else {
129 fprintf(stderr, "Nav: exception in filterProc callback\n");
130 PyErr_Clear();
131 }
132 return c_rv;
133}
134
Jack Jansene91a29d1999-12-16 16:54:55 +0000135/* ----------------------------------------------------- */
136static int
137filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000138 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000139 NavDialogOptions *opt,
140 NavEventUPP *eventProcP,
141 NavPreviewUPP *previewProcP,
142 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000143 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000144 OSType *fileTypeP,
145 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000146{
147 int pos = 0;
148 PyObject *key, *value;
149 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000150 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000151
Jack Jansene1a45b31999-12-16 22:21:30 +0000152 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000153
154 while ( PyDict_Next(d, &pos, &key, &value) ) {
155 if ( !key || !value || !PyString_Check(key) ) {
156 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
157 return 0;
158 }
159 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000160 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000161 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
162 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000163 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000164 }
165 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
166 PyMem_DEL(defaultLocation_storage);
167 return 0;
168 }
169 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000170 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000171 if ( !PyArg_Parse(value, "h", &opt->version) )
172 return 0;
173 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
174 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
175 return 0;
176 } else if( strcmp(keystr, "location") == 0 ) {
177 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
178 return 0;
179 } else if( strcmp(keystr, "clientName") == 0 ) {
180 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
181 return 0;
182 } else if( strcmp(keystr, "windowTitle") == 0 ) {
183 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
184 return 0;
185 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
186 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
187 return 0;
188 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
189 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
190 return 0;
191 } else if( strcmp(keystr, "savedFileName") == 0 ) {
192 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
193 return 0;
194 } else if( strcmp(keystr, "message") == 0 ) {
195 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
196 return 0;
197 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
198 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
199 return 0;
200 } else if( strcmp(keystr, "popupExtension") == 0 ) {
201 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
202 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000203 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000204 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000205 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000206 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
207 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000208 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000209 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
210 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000211 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000212 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
213 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000214 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
215 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000216 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000217 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
218 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000219 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000220 } else {
221 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
222 return 0;
223 }
224 }
225 return 1;
226}
227
228/* ----------------------------------------------------- */
229
230/* Declarations for objects of type NavReplyRecord */
231
232typedef struct {
233 PyObject_HEAD
234 NavReplyRecord itself;
235} navrrobject;
236
237staticforward PyTypeObject Navrrtype;
238
239
240
241/* ---------------------------------------------------------------- */
242
Jack Jansena07431f1999-12-17 17:14:28 +0000243static char nav_NavTranslateFile__doc__[] =
244"(NavTranslationOptions)->None"
245;
246
247static PyObject *
248nav_NavTranslateFile(self, args)
249 navrrobject *self;
250 PyObject *args;
251{
252 NavTranslationOptions howToTranslate;
253 OSErr err;
254
255 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
256 return NULL;
257 err = NavTranslateFile(&self->itself, howToTranslate);
258 if ( err ) {
259 PyErr_Mac(ErrorObject, err);
260 return NULL;
261 }
262 Py_INCREF(Py_None);
263 return Py_None;
264}
265
266static char nav_NavCompleteSave__doc__[] =
267"(NavTranslationOptions)->None"
268;
269
270static PyObject *
271nav_NavCompleteSave(self, args)
272 navrrobject *self;
273 PyObject *args;
274{
275 NavTranslationOptions howToTranslate;
276 OSErr err;
277
278 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
279 return NULL;
280 err = NavCompleteSave(&self->itself, howToTranslate);
281 if ( err ) {
282 PyErr_Mac(ErrorObject, err);
283 return NULL;
284 }
285 Py_INCREF(Py_None);
286 return Py_None;
287}
288
289
Jack Jansene91a29d1999-12-16 16:54:55 +0000290static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000291 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
292 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000293
294 {NULL, NULL} /* sentinel */
295};
296
297/* ---------- */
298
299
300static navrrobject *
301newnavrrobject(NavReplyRecord *itself)
302{
303 navrrobject *self;
304
305 self = PyObject_NEW(navrrobject, &Navrrtype);
306 if (self == NULL)
307 return NULL;
308 self->itself = *itself;
309 return self;
310}
311
312
313static void
314navrr_dealloc(self)
315 navrrobject *self;
316{
317 NavDisposeReply(&self->itself);
318 PyMem_DEL(self);
319}
320
321static PyObject *
322navrr_getattr(self, name)
323 navrrobject *self;
324 char *name;
325{
Jack Jansene79dc762000-06-02 21:35:07 +0000326 FSSpec fss;
327
Jack Jansena07431f1999-12-17 17:14:28 +0000328 if( strcmp(name, "__members__") == 0 )
329 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
330 "isStationery", "translationNeeded", "selection", "fileTranslation");
Jack Jansene91a29d1999-12-16 16:54:55 +0000331 if( strcmp(name, "version") == 0 )
332 return Py_BuildValue("h", self->itself.version);
333 if( strcmp(name, "validRecord") == 0 )
334 return Py_BuildValue("l", (long)self->itself.validRecord);
335 if( strcmp(name, "replacing") == 0 )
336 return Py_BuildValue("l", (long)self->itself.replacing);
337 if( strcmp(name, "isStationery") == 0 )
338 return Py_BuildValue("l", (long)self->itself.isStationery);
339 if( strcmp(name, "translationNeeded") == 0 )
340 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000341 if( strcmp(name, "selection") == 0 ) {
342 SInt32 i, count;
343 OSErr err;
344 PyObject *rv, *rvitem;
345 AEDesc desc;
346
347 if (err=AECountItems(&self->itself.selection, &count)) {
348 PyErr_Mac(ErrorObject, err);
349 return NULL;
350 }
351 if ( (rv=PyList_New(count)) == NULL )
352 return NULL;
353 for(i=0; i<count; i++) {
354 desc.dataHandle = NULL;
355 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
356 Py_DECREF(rv);
357 PyErr_Mac(ErrorObject, err);
358 return NULL;
359 }
Jack Jansene79dc762000-06-02 21:35:07 +0000360#ifdef TARGET_API_MAC_CARBON
361 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
362 Py_DECREF(rv);
363 PyErr_Mac(ErrorObject, err);
364 return NULL;
365 }
366#else
367 memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
368#endif
369 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000370 PyList_SetItem(rv, i, rvitem);
371 AEDisposeDesc(&desc);
372 }
373 return rv;
374 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000375 if( strcmp(name, "fileTranslation") == 0 )
376 return ResObj_New((Handle)self->itself.fileTranslation);
377
378
379 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
380}
381
382static int
383navrr_setattr(self, name, v)
384 navrrobject *self;
385 char *name;
386 PyObject *v;
387{
388 /* Set attribute 'name' to value 'v'. v==NULL means delete */
389
390 /* XXXX Add your own setattr code here */
391 return -1;
392}
393
394static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000395"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000396;
397
398static PyTypeObject Navrrtype = {
399 PyObject_HEAD_INIT(&PyType_Type)
400 0, /*ob_size*/
401 "NavReplyRecord", /*tp_name*/
402 sizeof(navrrobject), /*tp_basicsize*/
403 0, /*tp_itemsize*/
404 /* methods */
405 (destructor)navrr_dealloc, /*tp_dealloc*/
406 (printfunc)0, /*tp_print*/
407 (getattrfunc)navrr_getattr, /*tp_getattr*/
408 (setattrfunc)navrr_setattr, /*tp_setattr*/
409 (cmpfunc)0, /*tp_compare*/
410 (reprfunc)0, /*tp_repr*/
411 0, /*tp_as_number*/
412 0, /*tp_as_sequence*/
413 0, /*tp_as_mapping*/
414 (hashfunc)0, /*tp_hash*/
415 (ternaryfunc)0, /*tp_call*/
416 (reprfunc)0, /*tp_str*/
417
418 /* Space for future expansion */
419 0L,0L,0L,0L,
420 Navrrtype__doc__ /* Documentation string */
421};
422
423/* End of code for NavReplyRecord objects */
424
425/* ----------------------------------------------------- */
426
427static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000428"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000429;
430
431static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000432nav_NavGetFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000433 PyObject *self; /* Not used */
434 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000435 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000436{
437 PyObject *dict;
438 AEDesc *defaultLocation = NULL;
439 NavReplyRecord reply;
440 NavDialogOptions dialogOptions;
441 NavEventUPP eventProc = NULL;
442 NavPreviewUPP previewProc = NULL;
443 NavObjectFilterUPP filterProc = NULL;
444 NavTypeListHandle typeList = NULL;
445 OSErr err;
446
Jack Jansene1a45b31999-12-16 22:21:30 +0000447 if ( kw ) {
448 if (!PyArg_ParseTuple(args, ""))
449 return NULL;
450 dict = kw;
451 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000452 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000453 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000454 return NULL;
455 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
456 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000457 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000458 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000459 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000460 return NULL;
461 }
462 return (PyObject *)newnavrrobject(&reply);
463}
464
465static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000466"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000467;
468
469static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000470nav_NavPutFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000471 PyObject *self; /* Not used */
472 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000473 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000474{
Jack Jansena07431f1999-12-17 17:14:28 +0000475 PyObject *dict;
476 AEDesc *defaultLocation = NULL;
477 NavReplyRecord reply;
478 NavDialogOptions dialogOptions;
479 NavEventUPP eventProc = NULL;
480 OSType fileType;
481 OSType fileCreator;
482 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000483
Jack Jansena07431f1999-12-17 17:14:28 +0000484 if ( kw ) {
485 if (!PyArg_ParseTuple(args, ""))
486 return NULL;
487 dict = kw;
488 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000489 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000490 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
491 return NULL;
492 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
493 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000494 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000495 if ( err ) {
496 PyErr_Mac(ErrorObject, err);
497 return NULL;
498 }
499 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000500}
501
502static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000503"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
504
Jack Jansene91a29d1999-12-16 16:54:55 +0000505;
506
507static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000508nav_NavAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000509 PyObject *self; /* Not used */
510 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000511 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000512{
Jack Jansena07431f1999-12-17 17:14:28 +0000513 PyObject *dict;
514 NavDialogOptions dialogOptions;
515 NavAskSaveChangesAction action;
516 NavAskSaveChangesResult reply;
517 NavEventUPP eventProc = NULL;
518 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000519
Jack Jansena07431f1999-12-17 17:14:28 +0000520 if ( kw ) {
521 if (!PyArg_ParseTuple(args, "l", &action))
522 return NULL;
523 dict = kw;
524 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000525 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000526 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
527 return NULL;
528 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
529 if ( err ) {
530 PyErr_Mac(ErrorObject, err);
531 return NULL;
532 }
533 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000534}
535
536static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000537"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000538;
539
540static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000541nav_NavCustomAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000542 PyObject *self; /* Not used */
543 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000544 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000545{
Jack Jansena07431f1999-12-17 17:14:28 +0000546 PyObject *dict;
547 NavDialogOptions dialogOptions;
548 NavAskSaveChangesResult reply;
549 NavEventUPP eventProc = NULL;
550 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000551
Jack Jansena07431f1999-12-17 17:14:28 +0000552 if ( kw ) {
553 if (!PyArg_ParseTuple(args, ""))
554 return NULL;
555 dict = kw;
556 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000557 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000558 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
559 return NULL;
560 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
561 if ( err ) {
562 PyErr_Mac(ErrorObject, err);
563 return NULL;
564 }
565 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000566}
567
568static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000569"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000570;
571
572static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000573nav_NavAskDiscardChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000574 PyObject *self; /* Not used */
575 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000576 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000577{
Jack Jansena07431f1999-12-17 17:14:28 +0000578 PyObject *dict;
579 NavDialogOptions dialogOptions;
580 NavAskSaveChangesResult reply;
581 NavEventUPP eventProc = NULL;
582 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000583
Jack Jansena07431f1999-12-17 17:14:28 +0000584 if ( kw ) {
585 if (!PyArg_ParseTuple(args, ""))
586 return NULL;
587 dict = kw;
588 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000589 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000590 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
591 return NULL;
592 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
593 if ( err ) {
594 PyErr_Mac(ErrorObject, err);
595 return NULL;
596 }
597 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000598}
599
600static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000601"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000602;
603
604static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000605nav_NavChooseFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000606 PyObject *self; /* Not used */
607 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000608 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000609{
Jack Jansena07431f1999-12-17 17:14:28 +0000610 PyObject *dict;
611 AEDesc *defaultLocation = NULL;
612 NavReplyRecord reply;
613 NavDialogOptions dialogOptions;
614 NavEventUPP eventProc = NULL;
615 NavPreviewUPP previewProc = NULL;
616 NavObjectFilterUPP filterProc = NULL;
617 NavTypeListHandle typeList = NULL;
618 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000619
Jack Jansena07431f1999-12-17 17:14:28 +0000620 if ( kw ) {
621 if (!PyArg_ParseTuple(args, ""))
622 return NULL;
623 dict = kw;
624 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000625 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000626 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
627 return NULL;
628 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
629 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000630 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000631 if ( err ) {
632 PyErr_Mac(ErrorObject, err);
633 return NULL;
634 }
635 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000636}
637
638static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000639"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000640;
641
642static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000643nav_NavChooseFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000644 PyObject *self; /* Not used */
645 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000646 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000647{
Jack Jansena07431f1999-12-17 17:14:28 +0000648 PyObject *dict;
649 AEDesc *defaultLocation = NULL;
650 NavReplyRecord reply;
651 NavDialogOptions dialogOptions;
652 NavEventUPP eventProc = NULL;
653 NavObjectFilterUPP filterProc = NULL;
654 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000655
Jack Jansena07431f1999-12-17 17:14:28 +0000656 if ( kw ) {
657 if (!PyArg_ParseTuple(args, ""))
658 return NULL;
659 dict = kw;
660 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000661 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000662 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
663 return NULL;
664 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
665 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000666 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000667 if ( err ) {
668 PyErr_Mac(ErrorObject, err);
669 return NULL;
670 }
671 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000672}
673
674static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000675"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000676;
677
678static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000679nav_NavChooseVolume(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000680 PyObject *self; /* Not used */
681 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000682 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000683{
Jack Jansena07431f1999-12-17 17:14:28 +0000684 PyObject *dict;
685 AEDesc *defaultLocation = NULL;
686 NavReplyRecord reply;
687 NavDialogOptions dialogOptions;
688 NavEventUPP eventProc = NULL;
689 NavObjectFilterUPP filterProc = NULL;
690 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000691
Jack Jansena07431f1999-12-17 17:14:28 +0000692 if ( kw ) {
693 if (!PyArg_ParseTuple(args, ""))
694 return NULL;
695 dict = kw;
696 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000697 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000698 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
699 return NULL;
700 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
701 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000702 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000703 if ( err ) {
704 PyErr_Mac(ErrorObject, err);
705 return NULL;
706 }
707 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000708}
709
710static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000711"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000712;
713
714static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000715nav_NavChooseObject(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000716 PyObject *self; /* Not used */
717 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000718 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000719{
Jack Jansena07431f1999-12-17 17:14:28 +0000720 PyObject *dict;
721 AEDesc *defaultLocation = NULL;
722 NavReplyRecord reply;
723 NavDialogOptions dialogOptions;
724 NavEventUPP eventProc = NULL;
725 NavObjectFilterUPP filterProc = NULL;
726 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000727
Jack Jansena07431f1999-12-17 17:14:28 +0000728 if ( kw ) {
729 if (!PyArg_ParseTuple(args, ""))
730 return NULL;
731 dict = kw;
732 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000733 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000734 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
735 return NULL;
736 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
737 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000738 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000739 if ( err ) {
740 PyErr_Mac(ErrorObject, err);
741 return NULL;
742 }
743 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000744}
745
746static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000747"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000748;
749
750static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000751nav_NavNewFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000752 PyObject *self; /* Not used */
753 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000754 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000755{
Jack Jansena07431f1999-12-17 17:14:28 +0000756 PyObject *dict;
757 AEDesc *defaultLocation = NULL;
758 NavReplyRecord reply;
759 NavDialogOptions dialogOptions;
760 NavEventUPP eventProc = NULL;
761 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000762
Jack Jansena07431f1999-12-17 17:14:28 +0000763 if ( kw ) {
764 if (!PyArg_ParseTuple(args, ""))
765 return NULL;
766 dict = kw;
767 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000768 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000769 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
770 return NULL;
771 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000772 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000773 if ( err ) {
774 PyErr_Mac(ErrorObject, err);
775 return NULL;
776 }
777 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000778}
779
Jack Jansena07431f1999-12-17 17:14:28 +0000780#if 0
781XXXX I don't know what to do with the void * argument
Jack Jansene91a29d1999-12-16 16:54:55 +0000782static char nav_NavCustomControl__doc__[] =
783""
784;
785
Jack Jansena07431f1999-12-17 17:14:28 +0000786
Jack Jansene91a29d1999-12-16 16:54:55 +0000787static PyObject *
788nav_NavCustomControl(self, args)
789 PyObject *self; /* Not used */
790 PyObject *args;
791{
792
793 if (!PyArg_ParseTuple(args, ""))
794 return NULL;
795 Py_INCREF(Py_None);
796 return Py_None;
797}
Jack Jansena07431f1999-12-17 17:14:28 +0000798#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000799
800static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000801"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000802;
803
804static PyObject *
805nav_NavServicesCanRun(self, args)
806 PyObject *self; /* Not used */
807 PyObject *args;
808{
809 Boolean rv;
810 if (!PyArg_ParseTuple(args, ""))
811 return NULL;
812 rv = NavServicesCanRun();
813 return Py_BuildValue("l", (long)rv);
814}
815
816static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000817"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000818;
819
820static PyObject *
821nav_NavServicesAvailable(self, args)
822 PyObject *self; /* Not used */
823 PyObject *args;
824{
825 Boolean rv;
826
827 if (!PyArg_ParseTuple(args, ""))
828 return NULL;
829 rv = NavServicesAvailable();
830 return Py_BuildValue("l", (long)rv);
831}
832/* XX */
833static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000834"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000835;
836
837static PyObject *
838nav_NavLoad(self, args)
839 PyObject *self; /* Not used */
840 PyObject *args;
841{
842
843 if (!PyArg_ParseTuple(args, ""))
844 return NULL;
845 NavLoad();
846 Py_INCREF(Py_None);
847 return Py_None;
848}
849
850static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000851"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000852;
853
854static PyObject *
855nav_NavUnload(self, args)
856 PyObject *self; /* Not used */
857 PyObject *args;
858{
859
860 if (!PyArg_ParseTuple(args, ""))
861 return NULL;
862 NavUnload();
863 Py_INCREF(Py_None);
864 return Py_None;
865}
866
867static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000868"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000869;
870
871static PyObject *
872nav_NavLibraryVersion(self, args)
873 PyObject *self; /* Not used */
874 PyObject *args;
875{
876 UInt32 rv;
877
878 if (!PyArg_ParseTuple(args, ""))
879 return NULL;
880 rv = NavLibraryVersion();
881 return Py_BuildValue("l", (long)rv);
882}
883
Jack Jansene91a29d1999-12-16 16:54:55 +0000884static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000885"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000886;
887
888static PyObject *
889nav_NavGetDefaultDialogOptions(self, args)
890 PyObject *self; /* Not used */
891 PyObject *args;
892{
Jack Jansena07431f1999-12-17 17:14:28 +0000893 NavDialogOptions dialogOptions;
894 OSErr err;
895
896 err = NavGetDefaultDialogOptions(&dialogOptions);
897 if ( err ) {
898 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000899 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000900 }
901 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&}",
902 "version", dialogOptions.version,
903 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
904 "location", PyMac_BuildPoint, dialogOptions.location,
905 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
906 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
907 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
908 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
909 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
910 "message", PyMac_BuildStr255, &dialogOptions.message,
911 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
912 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000913}
Jack Jansene91a29d1999-12-16 16:54:55 +0000914
915/* List of methods defined in the module */
916
917static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000918 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
919 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
920 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
921 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
922 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
923 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
924 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
925 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
926 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
927 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000928#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000929 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000930#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000931 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
932 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
933 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
934 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
935 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000936 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000937 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
938};
939
940
941/* Initialization function for the module (*must* be called initNav) */
942
943static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000944"Interface to Navigation Services\n"
945"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
946"if you want the default options.\n"
947"Use NavGetDefaultDialogOptions() to find out common option names.\n"
948"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000949"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000950;
951
952void
953initNav()
954{
955 PyObject *m, *d;
956
957 /* Create the module and add the functions */
958 m = Py_InitModule4("Nav", nav_methods,
959 Nav_module_documentation,
960 (PyObject*)NULL,PYTHON_API_VERSION);
961
962 /* Add some symbolic constants to the module */
963 d = PyModule_GetDict(m);
964 ErrorObject = PyString_FromString("Nav.error");
965 PyDict_SetItemString(d, "error", ErrorObject);
966
967 /* XXXX Add constants here */
968
Jack Jansena07431f1999-12-17 17:14:28 +0000969 /* Set UPPs */
970 my_eventProcUPP = NewNavEventProc(my_eventProc);
971 my_previewProcUPP = NewNavPreviewProc(my_previewProc);
972 my_filterProcUPP = NewNavObjectFilterProc(my_filterProc);
973
Jack Jansene91a29d1999-12-16 16:54:55 +0000974 /* Check for errors */
975 if (PyErr_Occurred())
976 Py_FatalError("can't initialize module Nav");
977}
978