blob: 452baa118887f6f166a03759d627dcb8d93c85eb [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 Jansena07431f1999-12-17 17:14:28 +0000326 if( strcmp(name, "__members__") == 0 )
327 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
328 "isStationery", "translationNeeded", "selection", "fileTranslation");
Jack Jansene91a29d1999-12-16 16:54:55 +0000329 if( strcmp(name, "version") == 0 )
330 return Py_BuildValue("h", self->itself.version);
331 if( strcmp(name, "validRecord") == 0 )
332 return Py_BuildValue("l", (long)self->itself.validRecord);
333 if( strcmp(name, "replacing") == 0 )
334 return Py_BuildValue("l", (long)self->itself.replacing);
335 if( strcmp(name, "isStationery") == 0 )
336 return Py_BuildValue("l", (long)self->itself.isStationery);
337 if( strcmp(name, "translationNeeded") == 0 )
338 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000339 if( strcmp(name, "selection") == 0 ) {
340 SInt32 i, count;
341 OSErr err;
342 PyObject *rv, *rvitem;
343 AEDesc desc;
344
345 if (err=AECountItems(&self->itself.selection, &count)) {
346 PyErr_Mac(ErrorObject, err);
347 return NULL;
348 }
349 if ( (rv=PyList_New(count)) == NULL )
350 return NULL;
351 for(i=0; i<count; i++) {
352 desc.dataHandle = NULL;
353 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
354 Py_DECREF(rv);
355 PyErr_Mac(ErrorObject, err);
356 return NULL;
357 }
358 rvitem = PyMac_BuildFSSpec((FSSpec *)*desc.dataHandle);
359 PyList_SetItem(rv, i, rvitem);
360 AEDisposeDesc(&desc);
361 }
362 return rv;
363 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000364 if( strcmp(name, "fileTranslation") == 0 )
365 return ResObj_New((Handle)self->itself.fileTranslation);
366
367
368 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
369}
370
371static int
372navrr_setattr(self, name, v)
373 navrrobject *self;
374 char *name;
375 PyObject *v;
376{
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*/
390 "NavReplyRecord", /*tp_name*/
391 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 Jansene1a45b31999-12-16 22:21:30 +0000421nav_NavGetFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000422 PyObject *self; /* Not used */
423 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000424 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000425{
426 PyObject *dict;
427 AEDesc *defaultLocation = NULL;
428 NavReplyRecord reply;
429 NavDialogOptions dialogOptions;
430 NavEventUPP eventProc = NULL;
431 NavPreviewUPP previewProc = NULL;
432 NavObjectFilterUPP filterProc = NULL;
433 NavTypeListHandle typeList = NULL;
434 OSErr err;
435
Jack Jansene1a45b31999-12-16 22:21:30 +0000436 if ( kw ) {
437 if (!PyArg_ParseTuple(args, ""))
438 return NULL;
439 dict = kw;
440 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000441 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000442 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000443 return NULL;
444 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
445 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000446 PyMem_XDEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000447 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000448 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000449 return NULL;
450 }
451 return (PyObject *)newnavrrobject(&reply);
452}
453
454static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000455"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000456;
457
458static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000459nav_NavPutFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000460 PyObject *self; /* Not used */
461 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000462 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000463{
Jack Jansena07431f1999-12-17 17:14:28 +0000464 PyObject *dict;
465 AEDesc *defaultLocation = NULL;
466 NavReplyRecord reply;
467 NavDialogOptions dialogOptions;
468 NavEventUPP eventProc = NULL;
469 OSType fileType;
470 OSType fileCreator;
471 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000472
Jack Jansena07431f1999-12-17 17:14:28 +0000473 if ( kw ) {
474 if (!PyArg_ParseTuple(args, ""))
475 return NULL;
476 dict = kw;
477 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000478 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000479 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
480 return NULL;
481 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
482 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000483 PyMem_XDEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000484 if ( err ) {
485 PyErr_Mac(ErrorObject, err);
486 return NULL;
487 }
488 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000489}
490
491static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000492"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
493
Jack Jansene91a29d1999-12-16 16:54:55 +0000494;
495
496static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000497nav_NavAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000498 PyObject *self; /* Not used */
499 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000500 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000501{
Jack Jansena07431f1999-12-17 17:14:28 +0000502 PyObject *dict;
503 NavDialogOptions dialogOptions;
504 NavAskSaveChangesAction action;
505 NavAskSaveChangesResult reply;
506 NavEventUPP eventProc = NULL;
507 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000508
Jack Jansena07431f1999-12-17 17:14:28 +0000509 if ( kw ) {
510 if (!PyArg_ParseTuple(args, "l", &action))
511 return NULL;
512 dict = kw;
513 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000514 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000515 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
516 return NULL;
517 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
518 if ( err ) {
519 PyErr_Mac(ErrorObject, err);
520 return NULL;
521 }
522 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000523}
524
525static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000526"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000527;
528
529static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000530nav_NavCustomAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000531 PyObject *self; /* Not used */
532 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000533 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000534{
Jack Jansena07431f1999-12-17 17:14:28 +0000535 PyObject *dict;
536 NavDialogOptions dialogOptions;
537 NavAskSaveChangesResult reply;
538 NavEventUPP eventProc = NULL;
539 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000540
Jack Jansena07431f1999-12-17 17:14:28 +0000541 if ( kw ) {
542 if (!PyArg_ParseTuple(args, ""))
543 return NULL;
544 dict = kw;
545 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000546 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000547 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
548 return NULL;
549 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
550 if ( err ) {
551 PyErr_Mac(ErrorObject, err);
552 return NULL;
553 }
554 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000555}
556
557static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000558"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000559;
560
561static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000562nav_NavAskDiscardChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000563 PyObject *self; /* Not used */
564 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000565 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000566{
Jack Jansena07431f1999-12-17 17:14:28 +0000567 PyObject *dict;
568 NavDialogOptions dialogOptions;
569 NavAskSaveChangesResult reply;
570 NavEventUPP eventProc = NULL;
571 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000572
Jack Jansena07431f1999-12-17 17:14:28 +0000573 if ( kw ) {
574 if (!PyArg_ParseTuple(args, ""))
575 return NULL;
576 dict = kw;
577 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000578 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000579 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
580 return NULL;
581 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
582 if ( err ) {
583 PyErr_Mac(ErrorObject, err);
584 return NULL;
585 }
586 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000587}
588
589static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000590"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000591;
592
593static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000594nav_NavChooseFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000595 PyObject *self; /* Not used */
596 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000597 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000598{
Jack Jansena07431f1999-12-17 17:14:28 +0000599 PyObject *dict;
600 AEDesc *defaultLocation = NULL;
601 NavReplyRecord reply;
602 NavDialogOptions dialogOptions;
603 NavEventUPP eventProc = NULL;
604 NavPreviewUPP previewProc = NULL;
605 NavObjectFilterUPP filterProc = NULL;
606 NavTypeListHandle typeList = NULL;
607 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000608
Jack Jansena07431f1999-12-17 17:14:28 +0000609 if ( kw ) {
610 if (!PyArg_ParseTuple(args, ""))
611 return NULL;
612 dict = kw;
613 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000614 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000615 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
616 return NULL;
617 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
618 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000619 PyMem_XDEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000620 if ( err ) {
621 PyErr_Mac(ErrorObject, err);
622 return NULL;
623 }
624 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000625}
626
627static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000628"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000629;
630
631static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000632nav_NavChooseFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000633 PyObject *self; /* Not used */
634 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000635 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000636{
Jack Jansena07431f1999-12-17 17:14:28 +0000637 PyObject *dict;
638 AEDesc *defaultLocation = NULL;
639 NavReplyRecord reply;
640 NavDialogOptions dialogOptions;
641 NavEventUPP eventProc = NULL;
642 NavObjectFilterUPP filterProc = NULL;
643 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000644
Jack Jansena07431f1999-12-17 17:14:28 +0000645 if ( kw ) {
646 if (!PyArg_ParseTuple(args, ""))
647 return NULL;
648 dict = kw;
649 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000650 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000651 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
652 return NULL;
653 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
654 eventProc, filterProc, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000655 PyMem_XDEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000656 if ( err ) {
657 PyErr_Mac(ErrorObject, err);
658 return NULL;
659 }
660 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000661}
662
663static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000664"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000665;
666
667static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000668nav_NavChooseVolume(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000669 PyObject *self; /* Not used */
670 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000671 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000672{
Jack Jansena07431f1999-12-17 17:14:28 +0000673 PyObject *dict;
674 AEDesc *defaultLocation = NULL;
675 NavReplyRecord reply;
676 NavDialogOptions dialogOptions;
677 NavEventUPP eventProc = NULL;
678 NavObjectFilterUPP filterProc = NULL;
679 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000680
Jack Jansena07431f1999-12-17 17:14:28 +0000681 if ( kw ) {
682 if (!PyArg_ParseTuple(args, ""))
683 return NULL;
684 dict = kw;
685 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000686 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000687 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
688 return NULL;
689 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
690 eventProc, filterProc, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000691 PyMem_XDEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000692 if ( err ) {
693 PyErr_Mac(ErrorObject, err);
694 return NULL;
695 }
696 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000697}
698
699static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000700"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000701;
702
703static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000704nav_NavChooseObject(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000705 PyObject *self; /* Not used */
706 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000707 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000708{
Jack Jansena07431f1999-12-17 17:14:28 +0000709 PyObject *dict;
710 AEDesc *defaultLocation = NULL;
711 NavReplyRecord reply;
712 NavDialogOptions dialogOptions;
713 NavEventUPP eventProc = NULL;
714 NavObjectFilterUPP filterProc = NULL;
715 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000716
Jack Jansena07431f1999-12-17 17:14:28 +0000717 if ( kw ) {
718 if (!PyArg_ParseTuple(args, ""))
719 return NULL;
720 dict = kw;
721 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000722 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000723 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
724 return NULL;
725 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
726 eventProc, filterProc, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000727 PyMem_XDEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000728 if ( err ) {
729 PyErr_Mac(ErrorObject, err);
730 return NULL;
731 }
732 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000733}
734
735static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000736"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000737;
738
739static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000740nav_NavNewFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000741 PyObject *self; /* Not used */
742 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000743 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000744{
Jack Jansena07431f1999-12-17 17:14:28 +0000745 PyObject *dict;
746 AEDesc *defaultLocation = NULL;
747 NavReplyRecord reply;
748 NavDialogOptions dialogOptions;
749 NavEventUPP eventProc = NULL;
750 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000751
Jack Jansena07431f1999-12-17 17:14:28 +0000752 if ( kw ) {
753 if (!PyArg_ParseTuple(args, ""))
754 return NULL;
755 dict = kw;
756 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000757 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000758 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
759 return NULL;
760 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen2c6cf972000-01-13 16:24:32 +0000761 PyMem_XDEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000762 if ( err ) {
763 PyErr_Mac(ErrorObject, err);
764 return NULL;
765 }
766 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000767}
768
Jack Jansena07431f1999-12-17 17:14:28 +0000769#if 0
770XXXX I don't know what to do with the void * argument
Jack Jansene91a29d1999-12-16 16:54:55 +0000771static char nav_NavCustomControl__doc__[] =
772""
773;
774
Jack Jansena07431f1999-12-17 17:14:28 +0000775
Jack Jansene91a29d1999-12-16 16:54:55 +0000776static PyObject *
777nav_NavCustomControl(self, args)
778 PyObject *self; /* Not used */
779 PyObject *args;
780{
781
782 if (!PyArg_ParseTuple(args, ""))
783 return NULL;
784 Py_INCREF(Py_None);
785 return Py_None;
786}
Jack Jansena07431f1999-12-17 17:14:28 +0000787#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000788
789static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000790"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000791;
792
793static PyObject *
794nav_NavServicesCanRun(self, args)
795 PyObject *self; /* Not used */
796 PyObject *args;
797{
798 Boolean rv;
799 if (!PyArg_ParseTuple(args, ""))
800 return NULL;
801 rv = NavServicesCanRun();
802 return Py_BuildValue("l", (long)rv);
803}
804
805static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000806"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000807;
808
809static PyObject *
810nav_NavServicesAvailable(self, args)
811 PyObject *self; /* Not used */
812 PyObject *args;
813{
814 Boolean rv;
815
816 if (!PyArg_ParseTuple(args, ""))
817 return NULL;
818 rv = NavServicesAvailable();
819 return Py_BuildValue("l", (long)rv);
820}
821/* XX */
822static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000823"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000824;
825
826static PyObject *
827nav_NavLoad(self, args)
828 PyObject *self; /* Not used */
829 PyObject *args;
830{
831
832 if (!PyArg_ParseTuple(args, ""))
833 return NULL;
834 NavLoad();
835 Py_INCREF(Py_None);
836 return Py_None;
837}
838
839static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000840"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000841;
842
843static PyObject *
844nav_NavUnload(self, args)
845 PyObject *self; /* Not used */
846 PyObject *args;
847{
848
849 if (!PyArg_ParseTuple(args, ""))
850 return NULL;
851 NavUnload();
852 Py_INCREF(Py_None);
853 return Py_None;
854}
855
856static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000857"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000858;
859
860static PyObject *
861nav_NavLibraryVersion(self, args)
862 PyObject *self; /* Not used */
863 PyObject *args;
864{
865 UInt32 rv;
866
867 if (!PyArg_ParseTuple(args, ""))
868 return NULL;
869 rv = NavLibraryVersion();
870 return Py_BuildValue("l", (long)rv);
871}
872
Jack Jansene91a29d1999-12-16 16:54:55 +0000873static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000874"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000875;
876
877static PyObject *
878nav_NavGetDefaultDialogOptions(self, args)
879 PyObject *self; /* Not used */
880 PyObject *args;
881{
Jack Jansena07431f1999-12-17 17:14:28 +0000882 NavDialogOptions dialogOptions;
883 OSErr err;
884
885 err = NavGetDefaultDialogOptions(&dialogOptions);
886 if ( err ) {
887 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000888 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000889 }
890 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&}",
891 "version", dialogOptions.version,
892 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
893 "location", PyMac_BuildPoint, dialogOptions.location,
894 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
895 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
896 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
897 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
898 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
899 "message", PyMac_BuildStr255, &dialogOptions.message,
900 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
901 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000902}
Jack Jansene91a29d1999-12-16 16:54:55 +0000903
904/* List of methods defined in the module */
905
906static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000907 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
908 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
909 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
910 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
911 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
912 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
913 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
914 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
915 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
916 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000917#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000918 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000919#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000920 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
921 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
922 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
923 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
924 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000925 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000926 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
927};
928
929
930/* Initialization function for the module (*must* be called initNav) */
931
932static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000933"Interface to Navigation Services\n"
934"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
935"if you want the default options.\n"
936"Use NavGetDefaultDialogOptions() to find out common option names.\n"
937"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000938"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000939;
940
941void
942initNav()
943{
944 PyObject *m, *d;
945
946 /* Create the module and add the functions */
947 m = Py_InitModule4("Nav", nav_methods,
948 Nav_module_documentation,
949 (PyObject*)NULL,PYTHON_API_VERSION);
950
951 /* Add some symbolic constants to the module */
952 d = PyModule_GetDict(m);
953 ErrorObject = PyString_FromString("Nav.error");
954 PyDict_SetItemString(d, "error", ErrorObject);
955
956 /* XXXX Add constants here */
957
Jack Jansena07431f1999-12-17 17:14:28 +0000958 /* Set UPPs */
959 my_eventProcUPP = NewNavEventProc(my_eventProc);
960 my_previewProcUPP = NewNavPreviewProc(my_previewProc);
961 my_filterProcUPP = NewNavObjectFilterProc(my_filterProc);
962
Jack Jansene91a29d1999-12-16 16:54:55 +0000963 /* Check for errors */
964 if (PyErr_Occurred())
965 Py_FatalError("can't initialize module Nav");
966}
967