blob: 9253cca9aa939e70c81bc4ac0a8951269b085fa4 [file] [log] [blame]
Jack Jansene91a29d1999-12-16 16:54:55 +00001/***********************************************************
2Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
4
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
16
17While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
29
30******************************************************************/
31
32#include "Python.h"
33#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +000034#include "pymactoolbox.h"
Jack Jansen11296712001-05-22 21:48:40 +000035#ifdef WITHOUT_FRAMEWORKS
Jack Jansene91a29d1999-12-16 16:54:55 +000036#include <Navigation.h>
Jack Jansen11296712001-05-22 21:48:40 +000037#else
38#include <Carbon/Carbon.h>
39#endif
Jack Jansene91a29d1999-12-16 16:54:55 +000040
Jack Jansene91a29d1999-12-16 16:54:55 +000041static PyObject *ErrorObject;
42
Jack Jansena07431f1999-12-17 17:14:28 +000043static NavEventUPP my_eventProcUPP;
44static NavPreviewUPP my_previewProcUPP;
45static NavObjectFilterUPP my_filterProcUPP;
46
47/* Callback functions */
48static pascal void
49my_eventProc(NavEventCallbackMessage callBackSelector,
50 NavCBRecPtr callBackParms,
51 NavCallBackUserData callbackUD)
52{
53 PyObject *dict = (PyObject *)callbackUD;
54 PyObject *pyfunc;
55 PyObject *rv;
56
57 if (!dict) return;
58 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
59 PyErr_Clear();
60 return;
61 }
62 if ( pyfunc == Py_None ) {
Jack Jansen569ba102001-09-02 00:08:16 +000063#if !TARGET_API_MAC_OSX
Jack Jansena07431f1999-12-17 17:14:28 +000064 /* Special case: give update events to the Python event handling code */
65 if ( callBackSelector == kNavCBEvent &&
66 callBackParms->eventData.eventDataParms.event->what == updateEvt)
67 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
68 /* Ignore others */
Jack Jansen569ba102001-09-02 00:08:16 +000069#endif
Jack Jansena07431f1999-12-17 17:14:28 +000070 return;
71 }
72 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
73 (void *)callBackParms, sizeof(NavCBRec));
74 if ( rv )
75 Py_DECREF(rv);
76 else {
77 fprintf(stderr, "Nav: exception in eventProc callback\n");
78 PyErr_Clear();
79 }
80}
81
82static pascal Boolean
83my_previewProc(NavCBRecPtr callBackParms,
84 NavCallBackUserData callbackUD)
85{
86 PyObject *dict = (PyObject *)callbackUD;
87 PyObject *pyfunc;
88 PyObject *rv;
89 Boolean c_rv = false;
90
91 if (!dict) return;
92 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
93 PyErr_Clear();
94 return;
95 }
96 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
97 if ( rv ) {
98 c_rv = PyObject_IsTrue(rv);
99 Py_DECREF(rv);
100 } else {
101 fprintf(stderr, "Nav: exception in previewProc callback\n");
102 PyErr_Clear();
103 }
104 return c_rv;
105}
106
107static pascal Boolean
108my_filterProc(AEDesc *theItem, void *info,
109 NavCallBackUserData callbackUD,
110 NavFilterModes filterMode)
111{
112 PyObject *dict = (PyObject *)callbackUD;
113 PyObject *pyfunc;
114 PyObject *rv;
115 Boolean c_rv = false;
116
117 if (!dict) return;
118 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
119 PyErr_Clear();
120 return;
121 }
122 rv = PyObject_CallFunction(pyfunc, "O&s#h",
123 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
124 if ( rv ) {
125 c_rv = PyObject_IsTrue(rv);
126 Py_DECREF(rv);
127 } else {
128 fprintf(stderr, "Nav: exception in filterProc callback\n");
129 PyErr_Clear();
130 }
131 return c_rv;
132}
133
Jack Jansene91a29d1999-12-16 16:54:55 +0000134/* ----------------------------------------------------- */
135static int
136filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000137 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000138 NavDialogOptions *opt,
139 NavEventUPP *eventProcP,
140 NavPreviewUPP *previewProcP,
141 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000142 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000143 OSType *fileTypeP,
144 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000145{
146 int pos = 0;
147 PyObject *key, *value;
148 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000149 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000150
Jack Jansene1a45b31999-12-16 22:21:30 +0000151 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000152
153 while ( PyDict_Next(d, &pos, &key, &value) ) {
154 if ( !key || !value || !PyString_Check(key) ) {
155 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
156 return 0;
157 }
158 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000159 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000160 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
161 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000162 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000163 }
164 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
165 PyMem_DEL(defaultLocation_storage);
166 return 0;
167 }
168 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000169 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000170 if ( !PyArg_Parse(value, "h", &opt->version) )
171 return 0;
172 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
173 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
174 return 0;
175 } else if( strcmp(keystr, "location") == 0 ) {
176 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
177 return 0;
178 } else if( strcmp(keystr, "clientName") == 0 ) {
179 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
180 return 0;
181 } else if( strcmp(keystr, "windowTitle") == 0 ) {
182 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
183 return 0;
184 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
185 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
186 return 0;
187 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
188 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
189 return 0;
190 } else if( strcmp(keystr, "savedFileName") == 0 ) {
191 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
192 return 0;
193 } else if( strcmp(keystr, "message") == 0 ) {
194 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
195 return 0;
196 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
197 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
198 return 0;
199 } else if( strcmp(keystr, "popupExtension") == 0 ) {
200 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
201 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000202 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000203 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000204 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000205 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
206 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000207 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000208 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
209 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000210 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000211 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
212 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000213 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
214 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000215 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000216 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
217 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000218 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000219 } else {
220 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
221 return 0;
222 }
223 }
224 return 1;
225}
226
227/* ----------------------------------------------------- */
228
229/* Declarations for objects of type NavReplyRecord */
230
231typedef struct {
232 PyObject_HEAD
233 NavReplyRecord itself;
234} navrrobject;
235
236staticforward PyTypeObject Navrrtype;
237
238
239
240/* ---------------------------------------------------------------- */
241
Jack Jansena07431f1999-12-17 17:14:28 +0000242static char nav_NavTranslateFile__doc__[] =
243"(NavTranslationOptions)->None"
244;
245
246static PyObject *
247nav_NavTranslateFile(self, args)
248 navrrobject *self;
249 PyObject *args;
250{
251 NavTranslationOptions howToTranslate;
252 OSErr err;
253
254 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
255 return NULL;
256 err = NavTranslateFile(&self->itself, howToTranslate);
257 if ( err ) {
258 PyErr_Mac(ErrorObject, err);
259 return NULL;
260 }
261 Py_INCREF(Py_None);
262 return Py_None;
263}
264
265static char nav_NavCompleteSave__doc__[] =
266"(NavTranslationOptions)->None"
267;
268
269static PyObject *
270nav_NavCompleteSave(self, args)
271 navrrobject *self;
272 PyObject *args;
273{
274 NavTranslationOptions howToTranslate;
275 OSErr err;
276
277 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
278 return NULL;
279 err = NavCompleteSave(&self->itself, howToTranslate);
280 if ( err ) {
281 PyErr_Mac(ErrorObject, err);
282 return NULL;
283 }
284 Py_INCREF(Py_None);
285 return Py_None;
286}
287
288
Jack Jansene91a29d1999-12-16 16:54:55 +0000289static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000290 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
291 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000292
293 {NULL, NULL} /* sentinel */
294};
295
296/* ---------- */
297
298
299static navrrobject *
300newnavrrobject(NavReplyRecord *itself)
301{
302 navrrobject *self;
303
304 self = PyObject_NEW(navrrobject, &Navrrtype);
305 if (self == NULL)
306 return NULL;
307 self->itself = *itself;
308 return self;
309}
310
311
312static void
313navrr_dealloc(self)
314 navrrobject *self;
315{
316 NavDisposeReply(&self->itself);
317 PyMem_DEL(self);
318}
319
320static PyObject *
321navrr_getattr(self, name)
322 navrrobject *self;
323 char *name;
324{
Jack Jansene79dc762000-06-02 21:35:07 +0000325 FSSpec fss;
326
Jack Jansena07431f1999-12-17 17:14:28 +0000327 if( strcmp(name, "__members__") == 0 )
328 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
329 "isStationery", "translationNeeded", "selection", "fileTranslation");
Jack Jansene91a29d1999-12-16 16:54:55 +0000330 if( strcmp(name, "version") == 0 )
331 return Py_BuildValue("h", self->itself.version);
332 if( strcmp(name, "validRecord") == 0 )
333 return Py_BuildValue("l", (long)self->itself.validRecord);
334 if( strcmp(name, "replacing") == 0 )
335 return Py_BuildValue("l", (long)self->itself.replacing);
336 if( strcmp(name, "isStationery") == 0 )
337 return Py_BuildValue("l", (long)self->itself.isStationery);
338 if( strcmp(name, "translationNeeded") == 0 )
339 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000340 if( strcmp(name, "selection") == 0 ) {
341 SInt32 i, count;
342 OSErr err;
343 PyObject *rv, *rvitem;
344 AEDesc desc;
345
346 if (err=AECountItems(&self->itself.selection, &count)) {
347 PyErr_Mac(ErrorObject, err);
348 return NULL;
349 }
350 if ( (rv=PyList_New(count)) == NULL )
351 return NULL;
352 for(i=0; i<count; i++) {
353 desc.dataHandle = NULL;
354 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
355 Py_DECREF(rv);
356 PyErr_Mac(ErrorObject, err);
357 return NULL;
358 }
Jack Jansen74a1e632000-07-14 22:37:27 +0000359#if TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000360 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
361 Py_DECREF(rv);
362 PyErr_Mac(ErrorObject, err);
363 return NULL;
364 }
365#else
366 memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
367#endif
368 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000369 PyList_SetItem(rv, i, rvitem);
370 AEDisposeDesc(&desc);
371 }
372 return rv;
373 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000374 if( strcmp(name, "fileTranslation") == 0 )
375 return ResObj_New((Handle)self->itself.fileTranslation);
376
377
378 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
379}
380
381static int
382navrr_setattr(self, name, v)
383 navrrobject *self;
384 char *name;
385 PyObject *v;
386{
387 /* Set attribute 'name' to value 'v'. v==NULL means delete */
388
389 /* XXXX Add your own setattr code here */
390 return -1;
391}
392
393static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000394"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000395;
396
397static PyTypeObject Navrrtype = {
398 PyObject_HEAD_INIT(&PyType_Type)
399 0, /*ob_size*/
400 "NavReplyRecord", /*tp_name*/
401 sizeof(navrrobject), /*tp_basicsize*/
402 0, /*tp_itemsize*/
403 /* methods */
404 (destructor)navrr_dealloc, /*tp_dealloc*/
405 (printfunc)0, /*tp_print*/
406 (getattrfunc)navrr_getattr, /*tp_getattr*/
407 (setattrfunc)navrr_setattr, /*tp_setattr*/
408 (cmpfunc)0, /*tp_compare*/
409 (reprfunc)0, /*tp_repr*/
410 0, /*tp_as_number*/
411 0, /*tp_as_sequence*/
412 0, /*tp_as_mapping*/
413 (hashfunc)0, /*tp_hash*/
414 (ternaryfunc)0, /*tp_call*/
415 (reprfunc)0, /*tp_str*/
416
417 /* Space for future expansion */
418 0L,0L,0L,0L,
419 Navrrtype__doc__ /* Documentation string */
420};
421
422/* End of code for NavReplyRecord objects */
423
424/* ----------------------------------------------------- */
425
426static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000427"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000428;
429
430static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000431nav_NavGetFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000432 PyObject *self; /* Not used */
433 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000434 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000435{
436 PyObject *dict;
437 AEDesc *defaultLocation = NULL;
438 NavReplyRecord reply;
439 NavDialogOptions dialogOptions;
440 NavEventUPP eventProc = NULL;
441 NavPreviewUPP previewProc = NULL;
442 NavObjectFilterUPP filterProc = NULL;
443 NavTypeListHandle typeList = NULL;
444 OSErr err;
445
Jack Jansenc33a4232001-01-19 23:46:28 +0000446 if ( kw && PyObject_IsTrue(kw) ) {
447 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000448 return NULL;
449 dict = kw;
450 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000451 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000452 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000453 return NULL;
454 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
455 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000456 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000457 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000458 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000459 return NULL;
460 }
461 return (PyObject *)newnavrrobject(&reply);
462}
463
464static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000465"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000466;
467
468static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000469nav_NavPutFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000470 PyObject *self; /* Not used */
471 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000472 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000473{
Jack Jansena07431f1999-12-17 17:14:28 +0000474 PyObject *dict;
475 AEDesc *defaultLocation = NULL;
476 NavReplyRecord reply;
477 NavDialogOptions dialogOptions;
478 NavEventUPP eventProc = NULL;
479 OSType fileType;
480 OSType fileCreator;
481 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000482
Jack Jansenc33a4232001-01-19 23:46:28 +0000483 if ( kw && PyObject_IsTrue(kw) ) {
484 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000485 return NULL;
486 dict = kw;
487 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000488 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000489 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
490 return NULL;
491 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
492 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000493 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000494 if ( err ) {
495 PyErr_Mac(ErrorObject, err);
496 return NULL;
497 }
498 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000499}
500
501static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000502"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
503
Jack Jansene91a29d1999-12-16 16:54:55 +0000504;
505
506static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000507nav_NavAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000508 PyObject *self; /* Not used */
509 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000510 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000511{
Jack Jansena07431f1999-12-17 17:14:28 +0000512 PyObject *dict;
513 NavDialogOptions dialogOptions;
514 NavAskSaveChangesAction action;
515 NavAskSaveChangesResult reply;
516 NavEventUPP eventProc = NULL;
517 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000518
Jack Jansenc33a4232001-01-19 23:46:28 +0000519 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000520 if (!PyArg_ParseTuple(args, "l", &action))
521 return NULL;
522 dict = kw;
523 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000524 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000525 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
526 return NULL;
527 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
528 if ( err ) {
529 PyErr_Mac(ErrorObject, err);
530 return NULL;
531 }
532 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000533}
534
535static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000536"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000537;
538
539static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000540nav_NavCustomAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000541 PyObject *self; /* Not used */
542 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000543 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000544{
Jack Jansena07431f1999-12-17 17:14:28 +0000545 PyObject *dict;
546 NavDialogOptions dialogOptions;
547 NavAskSaveChangesResult reply;
548 NavEventUPP eventProc = NULL;
549 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000550
Jack Jansenc33a4232001-01-19 23:46:28 +0000551 if ( kw && PyObject_IsTrue(kw) ) {
552 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000553 return NULL;
554 dict = kw;
555 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000556 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000557 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
558 return NULL;
559 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
560 if ( err ) {
561 PyErr_Mac(ErrorObject, err);
562 return NULL;
563 }
564 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000565}
566
567static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000568"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000569;
570
571static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000572nav_NavAskDiscardChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000573 PyObject *self; /* Not used */
574 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000575 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000576{
Jack Jansena07431f1999-12-17 17:14:28 +0000577 PyObject *dict;
578 NavDialogOptions dialogOptions;
579 NavAskSaveChangesResult reply;
580 NavEventUPP eventProc = NULL;
581 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000582
Jack Jansenc33a4232001-01-19 23:46:28 +0000583 if ( kw && PyObject_IsTrue(kw) ) {
584 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000585 return NULL;
586 dict = kw;
587 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000588 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000589 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
590 return NULL;
591 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
592 if ( err ) {
593 PyErr_Mac(ErrorObject, err);
594 return NULL;
595 }
596 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000597}
598
599static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000600"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000601;
602
603static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000604nav_NavChooseFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000605 PyObject *self; /* Not used */
606 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000607 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000608{
Jack Jansena07431f1999-12-17 17:14:28 +0000609 PyObject *dict;
610 AEDesc *defaultLocation = NULL;
611 NavReplyRecord reply;
612 NavDialogOptions dialogOptions;
613 NavEventUPP eventProc = NULL;
614 NavPreviewUPP previewProc = NULL;
615 NavObjectFilterUPP filterProc = NULL;
616 NavTypeListHandle typeList = NULL;
617 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000618
Jack Jansenc33a4232001-01-19 23:46:28 +0000619 if ( kw && PyObject_IsTrue(kw) ) {
620 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000621 return NULL;
622 dict = kw;
623 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000624 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000625 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
626 return NULL;
627 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
628 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000629 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000630 if ( err ) {
631 PyErr_Mac(ErrorObject, err);
632 return NULL;
633 }
634 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000635}
636
637static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000638"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000639;
640
641static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000642nav_NavChooseFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000643 PyObject *self; /* Not used */
644 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000645 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000646{
Jack Jansena07431f1999-12-17 17:14:28 +0000647 PyObject *dict;
648 AEDesc *defaultLocation = NULL;
649 NavReplyRecord reply;
650 NavDialogOptions dialogOptions;
651 NavEventUPP eventProc = NULL;
652 NavObjectFilterUPP filterProc = NULL;
653 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000654
Jack Jansenc33a4232001-01-19 23:46:28 +0000655 if ( kw && PyObject_IsTrue(kw) ) {
656 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000657 return NULL;
658 dict = kw;
659 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000660 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000661 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
662 return NULL;
663 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
664 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000665 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000666 if ( err ) {
667 PyErr_Mac(ErrorObject, err);
668 return NULL;
669 }
670 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000671}
672
673static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000674"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000675;
676
677static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000678nav_NavChooseVolume(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000679 PyObject *self; /* Not used */
680 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000681 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000682{
Jack Jansena07431f1999-12-17 17:14:28 +0000683 PyObject *dict;
684 AEDesc *defaultLocation = NULL;
685 NavReplyRecord reply;
686 NavDialogOptions dialogOptions;
687 NavEventUPP eventProc = NULL;
688 NavObjectFilterUPP filterProc = NULL;
689 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000690
Jack Jansenc33a4232001-01-19 23:46:28 +0000691 if ( kw && PyObject_IsTrue(kw) ) {
692 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000693 return NULL;
694 dict = kw;
695 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000696 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000697 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
698 return NULL;
699 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
700 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000701 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000702 if ( err ) {
703 PyErr_Mac(ErrorObject, err);
704 return NULL;
705 }
706 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000707}
708
709static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000710"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000711;
712
713static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000714nav_NavChooseObject(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000715 PyObject *self; /* Not used */
716 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000717 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000718{
Jack Jansena07431f1999-12-17 17:14:28 +0000719 PyObject *dict;
720 AEDesc *defaultLocation = NULL;
721 NavReplyRecord reply;
722 NavDialogOptions dialogOptions;
723 NavEventUPP eventProc = NULL;
724 NavObjectFilterUPP filterProc = NULL;
725 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000726
Jack Jansenc33a4232001-01-19 23:46:28 +0000727 if ( kw && PyObject_IsTrue(kw) ) {
728 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000729 return NULL;
730 dict = kw;
731 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000732 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000733 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
734 return NULL;
735 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
736 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000737 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000738 if ( err ) {
739 PyErr_Mac(ErrorObject, err);
740 return NULL;
741 }
742 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000743}
744
745static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000746"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000747;
748
749static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000750nav_NavNewFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000751 PyObject *self; /* Not used */
752 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000753 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000754{
Jack Jansena07431f1999-12-17 17:14:28 +0000755 PyObject *dict;
756 AEDesc *defaultLocation = NULL;
757 NavReplyRecord reply;
758 NavDialogOptions dialogOptions;
759 NavEventUPP eventProc = NULL;
760 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000761
Jack Jansenc33a4232001-01-19 23:46:28 +0000762 if ( kw && PyObject_IsTrue(kw) ) {
763 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000764 return NULL;
765 dict = kw;
766 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000767 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000768 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
769 return NULL;
770 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000771 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000772 if ( err ) {
773 PyErr_Mac(ErrorObject, err);
774 return NULL;
775 }
776 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000777}
778
Jack Jansena07431f1999-12-17 17:14:28 +0000779#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000780/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000781static char nav_NavCustomControl__doc__[] =
782""
783;
784
Jack Jansena07431f1999-12-17 17:14:28 +0000785
Jack Jansene91a29d1999-12-16 16:54:55 +0000786static PyObject *
787nav_NavCustomControl(self, args)
788 PyObject *self; /* Not used */
789 PyObject *args;
790{
791
792 if (!PyArg_ParseTuple(args, ""))
793 return NULL;
794 Py_INCREF(Py_None);
795 return Py_None;
796}
Jack Jansena07431f1999-12-17 17:14:28 +0000797#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000798
799static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000800"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000801;
802
803static PyObject *
804nav_NavServicesCanRun(self, args)
805 PyObject *self; /* Not used */
806 PyObject *args;
807{
808 Boolean rv;
809 if (!PyArg_ParseTuple(args, ""))
810 return NULL;
811 rv = NavServicesCanRun();
812 return Py_BuildValue("l", (long)rv);
813}
814
815static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000816"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000817;
818
819static PyObject *
820nav_NavServicesAvailable(self, args)
821 PyObject *self; /* Not used */
822 PyObject *args;
823{
824 Boolean rv;
825
826 if (!PyArg_ParseTuple(args, ""))
827 return NULL;
828 rv = NavServicesAvailable();
829 return Py_BuildValue("l", (long)rv);
830}
831/* XX */
832static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000833"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000834;
835
836static PyObject *
837nav_NavLoad(self, args)
838 PyObject *self; /* Not used */
839 PyObject *args;
840{
841
842 if (!PyArg_ParseTuple(args, ""))
843 return NULL;
844 NavLoad();
845 Py_INCREF(Py_None);
846 return Py_None;
847}
848
849static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000850"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000851;
852
853static PyObject *
854nav_NavUnload(self, args)
855 PyObject *self; /* Not used */
856 PyObject *args;
857{
858
859 if (!PyArg_ParseTuple(args, ""))
860 return NULL;
861 NavUnload();
862 Py_INCREF(Py_None);
863 return Py_None;
864}
865
866static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000867"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000868;
869
870static PyObject *
871nav_NavLibraryVersion(self, args)
872 PyObject *self; /* Not used */
873 PyObject *args;
874{
875 UInt32 rv;
876
877 if (!PyArg_ParseTuple(args, ""))
878 return NULL;
879 rv = NavLibraryVersion();
880 return Py_BuildValue("l", (long)rv);
881}
882
Jack Jansene91a29d1999-12-16 16:54:55 +0000883static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000884"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000885;
886
887static PyObject *
888nav_NavGetDefaultDialogOptions(self, args)
889 PyObject *self; /* Not used */
890 PyObject *args;
891{
Jack Jansena07431f1999-12-17 17:14:28 +0000892 NavDialogOptions dialogOptions;
893 OSErr err;
894
895 err = NavGetDefaultDialogOptions(&dialogOptions);
896 if ( err ) {
897 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000898 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000899 }
900 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&}",
901 "version", dialogOptions.version,
902 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
903 "location", PyMac_BuildPoint, dialogOptions.location,
904 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
905 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
906 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
907 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
908 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
909 "message", PyMac_BuildStr255, &dialogOptions.message,
910 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
911 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000912}
Jack Jansene91a29d1999-12-16 16:54:55 +0000913
914/* List of methods defined in the module */
915
916static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000917 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
918 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
919 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
920 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
921 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
922 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
923 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
924 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
925 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
926 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000927#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000928 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000929#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000930 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
931 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
932 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
933 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
934 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000935 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000936 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
937};
938
939
940/* Initialization function for the module (*must* be called initNav) */
941
942static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000943"Interface to Navigation Services\n"
944"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
945"if you want the default options.\n"
946"Use NavGetDefaultDialogOptions() to find out common option names.\n"
947"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000948"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000949;
950
951void
952initNav()
953{
954 PyObject *m, *d;
955
Jack Jansen04b85492000-09-14 20:47:00 +0000956 /* Test that we have NavServices */
957 if ( !NavServicesAvailable() ) {
958 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
959 return;
960 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000961 /* Create the module and add the functions */
962 m = Py_InitModule4("Nav", nav_methods,
963 Nav_module_documentation,
964 (PyObject*)NULL,PYTHON_API_VERSION);
965
966 /* Add some symbolic constants to the module */
967 d = PyModule_GetDict(m);
968 ErrorObject = PyString_FromString("Nav.error");
969 PyDict_SetItemString(d, "error", ErrorObject);
970
971 /* XXXX Add constants here */
972
Jack Jansena07431f1999-12-17 17:14:28 +0000973 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000974 my_eventProcUPP = NewNavEventUPP(my_eventProc);
975 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
976 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000977
Jack Jansene91a29d1999-12-16 16:54:55 +0000978}
979