blob: d9ca42ad3bf8eb31dc24e9adebaa5740abed5df8 [file] [log] [blame]
Jack Jansene91a29d1999-12-16 16:54:55 +00001/***********************************************************
2Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
4
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
16
17While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
29
30******************************************************************/
31
32#include "Python.h"
33#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +000034#include "pymactoolbox.h"
Jack Jansen11296712001-05-22 21:48:40 +000035#ifdef WITHOUT_FRAMEWORKS
Jack Jansene91a29d1999-12-16 16:54:55 +000036#include <Navigation.h>
Jack Jansen11296712001-05-22 21:48:40 +000037#else
38#include <Carbon/Carbon.h>
39#endif
Jack Jansene91a29d1999-12-16 16:54:55 +000040
Jack Jansene91a29d1999-12-16 16:54:55 +000041static PyObject *ErrorObject;
42
Jack Jansena07431f1999-12-17 17:14:28 +000043static NavEventUPP my_eventProcUPP;
44static NavPreviewUPP my_previewProcUPP;
45static NavObjectFilterUPP my_filterProcUPP;
46
47/* Callback functions */
48static pascal void
49my_eventProc(NavEventCallbackMessage callBackSelector,
50 NavCBRecPtr callBackParms,
51 NavCallBackUserData callbackUD)
52{
53 PyObject *dict = (PyObject *)callbackUD;
54 PyObject *pyfunc;
55 PyObject *rv;
56
57 if (!dict) return;
58 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
59 PyErr_Clear();
60 return;
61 }
62 if ( pyfunc == Py_None ) {
Jack Jansen569ba102001-09-02 00:08:16 +000063#if !TARGET_API_MAC_OSX
Jack Jansena07431f1999-12-17 17:14:28 +000064 /* Special case: give update events to the Python event handling code */
65 if ( callBackSelector == kNavCBEvent &&
66 callBackParms->eventData.eventDataParms.event->what == updateEvt)
67 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
68 /* Ignore others */
Jack Jansen569ba102001-09-02 00:08:16 +000069#endif
Jack Jansena07431f1999-12-17 17:14:28 +000070 return;
71 }
72 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
73 (void *)callBackParms, sizeof(NavCBRec));
74 if ( rv )
75 Py_DECREF(rv);
76 else {
77 fprintf(stderr, "Nav: exception in eventProc callback\n");
78 PyErr_Clear();
79 }
80}
81
82static pascal Boolean
83my_previewProc(NavCBRecPtr callBackParms,
84 NavCallBackUserData callbackUD)
85{
86 PyObject *dict = (PyObject *)callbackUD;
87 PyObject *pyfunc;
88 PyObject *rv;
89 Boolean c_rv = false;
90
Jack Jansen1767f932001-09-04 22:20:39 +000091 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +000092 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
93 PyErr_Clear();
Jack Jansen1767f932001-09-04 22:20:39 +000094 return false;
Jack Jansena07431f1999-12-17 17:14:28 +000095 }
96 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
97 if ( rv ) {
98 c_rv = PyObject_IsTrue(rv);
99 Py_DECREF(rv);
100 } else {
101 fprintf(stderr, "Nav: exception in previewProc callback\n");
102 PyErr_Clear();
103 }
104 return c_rv;
105}
106
107static pascal Boolean
108my_filterProc(AEDesc *theItem, void *info,
109 NavCallBackUserData callbackUD,
110 NavFilterModes filterMode)
111{
112 PyObject *dict = (PyObject *)callbackUD;
113 PyObject *pyfunc;
114 PyObject *rv;
115 Boolean c_rv = false;
116
Jack Jansen1767f932001-09-04 22:20:39 +0000117 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000118 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
119 PyErr_Clear();
Jack Jansen1767f932001-09-04 22:20:39 +0000120 return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000121 }
122 rv = PyObject_CallFunction(pyfunc, "O&s#h",
123 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
124 if ( rv ) {
125 c_rv = PyObject_IsTrue(rv);
126 Py_DECREF(rv);
127 } else {
128 fprintf(stderr, "Nav: exception in filterProc callback\n");
129 PyErr_Clear();
130 }
131 return c_rv;
132}
133
Jack Jansene91a29d1999-12-16 16:54:55 +0000134/* ----------------------------------------------------- */
135static int
136filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000137 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000138 NavDialogOptions *opt,
139 NavEventUPP *eventProcP,
140 NavPreviewUPP *previewProcP,
141 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000142 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000143 OSType *fileTypeP,
144 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000145{
146 int pos = 0;
147 PyObject *key, *value;
148 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000149 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000150
Jack Jansene1a45b31999-12-16 22:21:30 +0000151 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000152
153 while ( PyDict_Next(d, &pos, &key, &value) ) {
154 if ( !key || !value || !PyString_Check(key) ) {
155 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
156 return 0;
157 }
158 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000159 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000160 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
161 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000162 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000163 }
164 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
165 PyMem_DEL(defaultLocation_storage);
166 return 0;
167 }
168 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000169 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000170 if ( !PyArg_Parse(value, "h", &opt->version) )
171 return 0;
172 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
173 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
174 return 0;
175 } else if( strcmp(keystr, "location") == 0 ) {
176 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
177 return 0;
178 } else if( strcmp(keystr, "clientName") == 0 ) {
179 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
180 return 0;
181 } else if( strcmp(keystr, "windowTitle") == 0 ) {
182 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
183 return 0;
184 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
185 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
186 return 0;
187 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
188 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
189 return 0;
190 } else if( strcmp(keystr, "savedFileName") == 0 ) {
191 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
192 return 0;
193 } else if( strcmp(keystr, "message") == 0 ) {
194 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
195 return 0;
196 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
197 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
198 return 0;
199 } else if( strcmp(keystr, "popupExtension") == 0 ) {
200 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
201 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000202 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000203 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000204 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000205 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
206 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000207 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000208 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
209 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000210 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000211 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
212 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000213 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
214 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000215 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000216 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
217 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000218 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000219 } else {
220 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
221 return 0;
222 }
223 }
224 return 1;
225}
226
227/* ----------------------------------------------------- */
228
229/* Declarations for objects of type NavReplyRecord */
230
231typedef struct {
232 PyObject_HEAD
233 NavReplyRecord itself;
234} navrrobject;
235
Jeremy Hylton938ace62002-07-17 16:30:39 +0000236static PyTypeObject Navrrtype;
Jack Jansene91a29d1999-12-16 16:54:55 +0000237
238
239
240/* ---------------------------------------------------------------- */
241
Jack Jansena07431f1999-12-17 17:14:28 +0000242static char nav_NavTranslateFile__doc__[] =
243"(NavTranslationOptions)->None"
244;
245
246static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000247nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000248{
249 NavTranslationOptions howToTranslate;
250 OSErr err;
251
252 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
253 return NULL;
254 err = NavTranslateFile(&self->itself, howToTranslate);
255 if ( err ) {
256 PyErr_Mac(ErrorObject, err);
257 return NULL;
258 }
259 Py_INCREF(Py_None);
260 return Py_None;
261}
262
263static char nav_NavCompleteSave__doc__[] =
264"(NavTranslationOptions)->None"
265;
266
267static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000268nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000269{
270 NavTranslationOptions howToTranslate;
271 OSErr err;
272
273 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
274 return NULL;
275 err = NavCompleteSave(&self->itself, howToTranslate);
276 if ( err ) {
277 PyErr_Mac(ErrorObject, err);
278 return NULL;
279 }
280 Py_INCREF(Py_None);
281 return Py_None;
282}
283
284
Jack Jansene91a29d1999-12-16 16:54:55 +0000285static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000286 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
287 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000288
289 {NULL, NULL} /* sentinel */
290};
291
292/* ---------- */
293
294
295static navrrobject *
296newnavrrobject(NavReplyRecord *itself)
297{
298 navrrobject *self;
299
300 self = PyObject_NEW(navrrobject, &Navrrtype);
301 if (self == NULL)
302 return NULL;
303 self->itself = *itself;
304 return self;
305}
306
307
308static void
Jack Jansen1767f932001-09-04 22:20:39 +0000309navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000310{
311 NavDisposeReply(&self->itself);
Jack Jansen0e2f7982002-05-22 14:31:48 +0000312 PyObject_DEL(self);
Jack Jansene91a29d1999-12-16 16:54:55 +0000313}
314
315static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000316navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000317{
Jack Jansene79dc762000-06-02 21:35:07 +0000318 FSSpec fss;
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000319 FSRef fsr;
Jack Jansene79dc762000-06-02 21:35:07 +0000320
Jack Jansena07431f1999-12-17 17:14:28 +0000321 if( strcmp(name, "__members__") == 0 )
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000322 return Py_BuildValue("ssssssssss", "version", "validRecord", "replacing",
323 "isStationery", "translationNeeded", "selection", "selection_fsr",
324 "fileTranslation", "keyScript", "saveFileName");
Jack Jansene91a29d1999-12-16 16:54:55 +0000325 if( strcmp(name, "version") == 0 )
326 return Py_BuildValue("h", self->itself.version);
327 if( strcmp(name, "validRecord") == 0 )
328 return Py_BuildValue("l", (long)self->itself.validRecord);
329 if( strcmp(name, "replacing") == 0 )
330 return Py_BuildValue("l", (long)self->itself.replacing);
331 if( strcmp(name, "isStationery") == 0 )
332 return Py_BuildValue("l", (long)self->itself.isStationery);
333 if( strcmp(name, "translationNeeded") == 0 )
334 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000335 if( strcmp(name, "selection") == 0 ) {
336 SInt32 i, count;
337 OSErr err;
338 PyObject *rv, *rvitem;
339 AEDesc desc;
340
341 if (err=AECountItems(&self->itself.selection, &count)) {
342 PyErr_Mac(ErrorObject, err);
343 return NULL;
344 }
345 if ( (rv=PyList_New(count)) == NULL )
346 return NULL;
347 for(i=0; i<count; i++) {
348 desc.dataHandle = NULL;
349 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
350 Py_DECREF(rv);
351 PyErr_Mac(ErrorObject, err);
352 return NULL;
353 }
Jack Jansen74a1e632000-07-14 22:37:27 +0000354#if TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000355 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
356 Py_DECREF(rv);
357 PyErr_Mac(ErrorObject, err);
358 return NULL;
359 }
360#else
361 memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
362#endif
363 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000364 PyList_SetItem(rv, i, rvitem);
365 AEDisposeDesc(&desc);
366 }
367 return rv;
368 }
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000369 if( strcmp(name, "selection_fsr") == 0 ) {
370 SInt32 i, count;
371 OSErr err;
372 PyObject *rv, *rvitem;
373 AEDesc desc;
374
375 if (err=AECountItems(&self->itself.selection, &count)) {
376 PyErr_Mac(ErrorObject, err);
377 return NULL;
378 }
379 if ( (rv=PyList_New(count)) == NULL )
380 return NULL;
381 for(i=0; i<count; i++) {
382 desc.dataHandle = NULL;
383 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc)) {
384 Py_DECREF(rv);
385 PyErr_Mac(ErrorObject, err);
386 return NULL;
387 }
388 if (err=AEGetDescData(&desc, &fsr, sizeof(FSRef))) {
389 Py_DECREF(rv);
390 PyErr_Mac(ErrorObject, err);
391 return NULL;
392 }
393 rvitem = PyMac_BuildFSRef(&fsr);
394 PyList_SetItem(rv, i, rvitem);
395 AEDisposeDesc(&desc);
396 }
397 return rv;
398 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000399 if( strcmp(name, "fileTranslation") == 0 )
400 return ResObj_New((Handle)self->itself.fileTranslation);
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000401 if( strcmp(name, "keyScript") == 0 )
402 return Py_BuildValue("h", (short)self->itself.keyScript);
403 if( strcmp(name, "saveFileName") == 0 )
404 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000405
406
407 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
408}
409
410static int
Jack Jansen1767f932001-09-04 22:20:39 +0000411navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000412{
413 /* Set attribute 'name' to value 'v'. v==NULL means delete */
414
415 /* XXXX Add your own setattr code here */
416 return -1;
417}
418
419static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000420"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000421;
422
423static PyTypeObject Navrrtype = {
424 PyObject_HEAD_INIT(&PyType_Type)
425 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000426 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000427 sizeof(navrrobject), /*tp_basicsize*/
428 0, /*tp_itemsize*/
429 /* methods */
430 (destructor)navrr_dealloc, /*tp_dealloc*/
431 (printfunc)0, /*tp_print*/
432 (getattrfunc)navrr_getattr, /*tp_getattr*/
433 (setattrfunc)navrr_setattr, /*tp_setattr*/
434 (cmpfunc)0, /*tp_compare*/
435 (reprfunc)0, /*tp_repr*/
436 0, /*tp_as_number*/
437 0, /*tp_as_sequence*/
438 0, /*tp_as_mapping*/
439 (hashfunc)0, /*tp_hash*/
440 (ternaryfunc)0, /*tp_call*/
441 (reprfunc)0, /*tp_str*/
442
443 /* Space for future expansion */
444 0L,0L,0L,0L,
445 Navrrtype__doc__ /* Documentation string */
446};
447
448/* End of code for NavReplyRecord objects */
449
450/* ----------------------------------------------------- */
451
452static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000453"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000454;
455
456static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000457nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000458{
459 PyObject *dict;
460 AEDesc *defaultLocation = NULL;
461 NavReplyRecord reply;
462 NavDialogOptions dialogOptions;
463 NavEventUPP eventProc = NULL;
464 NavPreviewUPP previewProc = NULL;
465 NavObjectFilterUPP filterProc = NULL;
466 NavTypeListHandle typeList = NULL;
467 OSErr err;
468
Jack Jansenc33a4232001-01-19 23:46:28 +0000469 if ( kw && PyObject_IsTrue(kw) ) {
470 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000471 return NULL;
472 dict = kw;
473 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000474 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000475 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000476 return NULL;
477 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
478 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000479 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000480 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000481 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000482 return NULL;
483 }
484 return (PyObject *)newnavrrobject(&reply);
485}
486
487static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000488"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000489;
490
491static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000492nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000493{
Jack Jansena07431f1999-12-17 17:14:28 +0000494 PyObject *dict;
495 AEDesc *defaultLocation = NULL;
496 NavReplyRecord reply;
497 NavDialogOptions dialogOptions;
498 NavEventUPP eventProc = NULL;
499 OSType fileType;
500 OSType fileCreator;
501 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000502
Jack Jansenc33a4232001-01-19 23:46:28 +0000503 if ( kw && PyObject_IsTrue(kw) ) {
504 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000505 return NULL;
506 dict = kw;
507 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000508 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000509 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
510 return NULL;
511 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
512 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000513 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000514 if ( err ) {
515 PyErr_Mac(ErrorObject, err);
516 return NULL;
517 }
518 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000519}
520
521static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000522"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
523
Jack Jansene91a29d1999-12-16 16:54:55 +0000524;
525
526static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000527nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000528{
Jack Jansena07431f1999-12-17 17:14:28 +0000529 PyObject *dict;
530 NavDialogOptions dialogOptions;
531 NavAskSaveChangesAction action;
532 NavAskSaveChangesResult reply;
533 NavEventUPP eventProc = NULL;
534 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000535
Jack Jansenc33a4232001-01-19 23:46:28 +0000536 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000537 if (!PyArg_ParseTuple(args, "l", &action))
538 return NULL;
539 dict = kw;
540 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000541 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000542 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
543 return NULL;
544 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
545 if ( err ) {
546 PyErr_Mac(ErrorObject, err);
547 return NULL;
548 }
549 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000550}
551
552static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000553"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000554;
555
556static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000557nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000558{
Jack Jansena07431f1999-12-17 17:14:28 +0000559 PyObject *dict;
560 NavDialogOptions dialogOptions;
561 NavAskSaveChangesResult reply;
562 NavEventUPP eventProc = NULL;
563 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000564
Jack Jansenc33a4232001-01-19 23:46:28 +0000565 if ( kw && PyObject_IsTrue(kw) ) {
566 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000567 return NULL;
568 dict = kw;
569 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000570 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000571 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
572 return NULL;
573 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
574 if ( err ) {
575 PyErr_Mac(ErrorObject, err);
576 return NULL;
577 }
578 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000579}
580
581static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000582"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000583;
584
585static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000586nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000587{
Jack Jansena07431f1999-12-17 17:14:28 +0000588 PyObject *dict;
589 NavDialogOptions dialogOptions;
590 NavAskSaveChangesResult reply;
591 NavEventUPP eventProc = NULL;
592 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000593
Jack Jansenc33a4232001-01-19 23:46:28 +0000594 if ( kw && PyObject_IsTrue(kw) ) {
595 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000596 return NULL;
597 dict = kw;
598 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000599 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000600 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
601 return NULL;
602 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
603 if ( err ) {
604 PyErr_Mac(ErrorObject, err);
605 return NULL;
606 }
607 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000608}
609
610static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000611"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000612;
613
614static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000615nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000616{
Jack Jansena07431f1999-12-17 17:14:28 +0000617 PyObject *dict;
618 AEDesc *defaultLocation = NULL;
619 NavReplyRecord reply;
620 NavDialogOptions dialogOptions;
621 NavEventUPP eventProc = NULL;
622 NavPreviewUPP previewProc = NULL;
623 NavObjectFilterUPP filterProc = NULL;
624 NavTypeListHandle typeList = NULL;
625 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000626
Jack Jansenc33a4232001-01-19 23:46:28 +0000627 if ( kw && PyObject_IsTrue(kw) ) {
628 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000629 return NULL;
630 dict = kw;
631 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000632 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000633 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
634 return NULL;
635 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
636 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000637 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000638 if ( err ) {
639 PyErr_Mac(ErrorObject, err);
640 return NULL;
641 }
642 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000643}
644
645static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000646"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000647;
648
649static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000650nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000651{
Jack Jansena07431f1999-12-17 17:14:28 +0000652 PyObject *dict;
653 AEDesc *defaultLocation = NULL;
654 NavReplyRecord reply;
655 NavDialogOptions dialogOptions;
656 NavEventUPP eventProc = NULL;
657 NavObjectFilterUPP filterProc = NULL;
658 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000659
Jack Jansenc33a4232001-01-19 23:46:28 +0000660 if ( kw && PyObject_IsTrue(kw) ) {
661 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000662 return NULL;
663 dict = kw;
664 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000665 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000666 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
667 return NULL;
668 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
669 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000670 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000671 if ( err ) {
672 PyErr_Mac(ErrorObject, err);
673 return NULL;
674 }
675 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000676}
677
678static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000679"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000680;
681
682static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000683nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000684{
Jack Jansena07431f1999-12-17 17:14:28 +0000685 PyObject *dict;
686 AEDesc *defaultLocation = NULL;
687 NavReplyRecord reply;
688 NavDialogOptions dialogOptions;
689 NavEventUPP eventProc = NULL;
690 NavObjectFilterUPP filterProc = NULL;
691 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000692
Jack Jansenc33a4232001-01-19 23:46:28 +0000693 if ( kw && PyObject_IsTrue(kw) ) {
694 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000695 return NULL;
696 dict = kw;
697 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000698 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000699 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
700 return NULL;
701 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
702 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000703 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000704 if ( err ) {
705 PyErr_Mac(ErrorObject, err);
706 return NULL;
707 }
708 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000709}
710
711static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000712"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000713;
714
715static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000716nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000717{
Jack Jansena07431f1999-12-17 17:14:28 +0000718 PyObject *dict;
719 AEDesc *defaultLocation = NULL;
720 NavReplyRecord reply;
721 NavDialogOptions dialogOptions;
722 NavEventUPP eventProc = NULL;
723 NavObjectFilterUPP filterProc = NULL;
724 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000725
Jack Jansenc33a4232001-01-19 23:46:28 +0000726 if ( kw && PyObject_IsTrue(kw) ) {
727 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000728 return NULL;
729 dict = kw;
730 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000731 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000732 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
733 return NULL;
734 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
735 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000736 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000737 if ( err ) {
738 PyErr_Mac(ErrorObject, err);
739 return NULL;
740 }
741 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000742}
743
744static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000745"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000746;
747
748static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000749nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000750{
Jack Jansena07431f1999-12-17 17:14:28 +0000751 PyObject *dict;
752 AEDesc *defaultLocation = NULL;
753 NavReplyRecord reply;
754 NavDialogOptions dialogOptions;
755 NavEventUPP eventProc = NULL;
756 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000757
Jack Jansenc33a4232001-01-19 23:46:28 +0000758 if ( kw && PyObject_IsTrue(kw) ) {
759 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000760 return NULL;
761 dict = kw;
762 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000763 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000764 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
765 return NULL;
766 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000767 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000768 if ( err ) {
769 PyErr_Mac(ErrorObject, err);
770 return NULL;
771 }
772 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000773}
774
Jack Jansena07431f1999-12-17 17:14:28 +0000775#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000776/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000777static char nav_NavCustomControl__doc__[] =
778""
779;
780
Jack Jansena07431f1999-12-17 17:14:28 +0000781
Jack Jansene91a29d1999-12-16 16:54:55 +0000782static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000783nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000784{
785
786 if (!PyArg_ParseTuple(args, ""))
787 return NULL;
788 Py_INCREF(Py_None);
789 return Py_None;
790}
Jack Jansena07431f1999-12-17 17:14:28 +0000791#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000792
793static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000794"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000795;
796
797static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000798nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000799{
800 Boolean rv;
801 if (!PyArg_ParseTuple(args, ""))
802 return NULL;
803 rv = NavServicesCanRun();
804 return Py_BuildValue("l", (long)rv);
805}
806
807static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000808"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000809;
810
811static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000812nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000813{
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 *
Jack Jansen1767f932001-09-04 22:20:39 +0000827nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000828{
829
830 if (!PyArg_ParseTuple(args, ""))
831 return NULL;
832 NavLoad();
833 Py_INCREF(Py_None);
834 return Py_None;
835}
836
837static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000838"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000839;
840
841static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000842nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000843{
844
845 if (!PyArg_ParseTuple(args, ""))
846 return NULL;
847 NavUnload();
848 Py_INCREF(Py_None);
849 return Py_None;
850}
851
852static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000853"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000854;
855
856static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000857nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000858{
859 UInt32 rv;
860
861 if (!PyArg_ParseTuple(args, ""))
862 return NULL;
863 rv = NavLibraryVersion();
864 return Py_BuildValue("l", (long)rv);
865}
866
Jack Jansene91a29d1999-12-16 16:54:55 +0000867static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000868"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000869;
870
871static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000872nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000873{
Jack Jansena07431f1999-12-17 17:14:28 +0000874 NavDialogOptions dialogOptions;
875 OSErr err;
876
877 err = NavGetDefaultDialogOptions(&dialogOptions);
878 if ( err ) {
879 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000880 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000881 }
882 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&}",
883 "version", dialogOptions.version,
884 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
885 "location", PyMac_BuildPoint, dialogOptions.location,
886 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
887 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
888 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
889 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
890 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
891 "message", PyMac_BuildStr255, &dialogOptions.message,
892 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
893 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000894}
Jack Jansene91a29d1999-12-16 16:54:55 +0000895
896/* List of methods defined in the module */
897
898static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000899 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
900 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
901 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
902 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
903 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
904 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
905 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
906 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
907 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
908 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000909#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000910 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000911#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000912 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
913 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
914 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
915 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
916 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000917 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000918 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
919};
920
921
922/* Initialization function for the module (*must* be called initNav) */
923
924static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000925"Interface to Navigation Services\n"
926"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
927"if you want the default options.\n"
928"Use NavGetDefaultDialogOptions() to find out common option names.\n"
929"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000930"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000931;
932
933void
Jack Jansen1767f932001-09-04 22:20:39 +0000934initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000935{
936 PyObject *m, *d;
937
Jack Jansen04b85492000-09-14 20:47:00 +0000938 /* Test that we have NavServices */
939 if ( !NavServicesAvailable() ) {
940 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
941 return;
942 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000943 /* Create the module and add the functions */
944 m = Py_InitModule4("Nav", nav_methods,
945 Nav_module_documentation,
946 (PyObject*)NULL,PYTHON_API_VERSION);
947
948 /* Add some symbolic constants to the module */
949 d = PyModule_GetDict(m);
950 ErrorObject = PyString_FromString("Nav.error");
951 PyDict_SetItemString(d, "error", ErrorObject);
952
953 /* XXXX Add constants here */
954
Jack Jansena07431f1999-12-17 17:14:28 +0000955 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000956 my_eventProcUPP = NewNavEventUPP(my_eventProc);
957 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
958 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000959
Jack Jansene91a29d1999-12-16 16:54:55 +0000960}
961