blob: 8833a84ac46c86ffc7e4eb8ae833fd6469e9a43e [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 Jansene79dc762000-06-02 21:35:07 +0000354 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
355 Py_DECREF(rv);
356 PyErr_Mac(ErrorObject, err);
357 return NULL;
358 }
Jack Jansene79dc762000-06-02 21:35:07 +0000359 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000360 PyList_SetItem(rv, i, rvitem);
361 AEDisposeDesc(&desc);
362 }
363 return rv;
364 }
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000365 if( strcmp(name, "selection_fsr") == 0 ) {
366 SInt32 i, count;
367 OSErr err;
368 PyObject *rv, *rvitem;
369 AEDesc desc;
370
371 if (err=AECountItems(&self->itself.selection, &count)) {
372 PyErr_Mac(ErrorObject, err);
373 return NULL;
374 }
375 if ( (rv=PyList_New(count)) == NULL )
376 return NULL;
377 for(i=0; i<count; i++) {
378 desc.dataHandle = NULL;
379 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc)) {
380 Py_DECREF(rv);
381 PyErr_Mac(ErrorObject, err);
382 return NULL;
383 }
384 if (err=AEGetDescData(&desc, &fsr, sizeof(FSRef))) {
385 Py_DECREF(rv);
386 PyErr_Mac(ErrorObject, err);
387 return NULL;
388 }
389 rvitem = PyMac_BuildFSRef(&fsr);
390 PyList_SetItem(rv, i, rvitem);
391 AEDisposeDesc(&desc);
392 }
393 return rv;
394 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000395 if( strcmp(name, "fileTranslation") == 0 )
396 return ResObj_New((Handle)self->itself.fileTranslation);
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000397 if( strcmp(name, "keyScript") == 0 )
398 return Py_BuildValue("h", (short)self->itself.keyScript);
399 if( strcmp(name, "saveFileName") == 0 )
400 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000401
402
403 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
404}
405
406static int
Jack Jansen1767f932001-09-04 22:20:39 +0000407navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000408{
409 /* Set attribute 'name' to value 'v'. v==NULL means delete */
410
411 /* XXXX Add your own setattr code here */
412 return -1;
413}
414
415static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000416"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000417;
418
419static PyTypeObject Navrrtype = {
420 PyObject_HEAD_INIT(&PyType_Type)
421 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000422 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000423 sizeof(navrrobject), /*tp_basicsize*/
424 0, /*tp_itemsize*/
425 /* methods */
426 (destructor)navrr_dealloc, /*tp_dealloc*/
427 (printfunc)0, /*tp_print*/
428 (getattrfunc)navrr_getattr, /*tp_getattr*/
429 (setattrfunc)navrr_setattr, /*tp_setattr*/
430 (cmpfunc)0, /*tp_compare*/
431 (reprfunc)0, /*tp_repr*/
432 0, /*tp_as_number*/
433 0, /*tp_as_sequence*/
434 0, /*tp_as_mapping*/
435 (hashfunc)0, /*tp_hash*/
436 (ternaryfunc)0, /*tp_call*/
437 (reprfunc)0, /*tp_str*/
438
439 /* Space for future expansion */
440 0L,0L,0L,0L,
441 Navrrtype__doc__ /* Documentation string */
442};
443
444/* End of code for NavReplyRecord objects */
445
446/* ----------------------------------------------------- */
447
448static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000449"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000450;
451
452static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000453nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000454{
455 PyObject *dict;
456 AEDesc *defaultLocation = NULL;
457 NavReplyRecord reply;
458 NavDialogOptions dialogOptions;
459 NavEventUPP eventProc = NULL;
460 NavPreviewUPP previewProc = NULL;
461 NavObjectFilterUPP filterProc = NULL;
462 NavTypeListHandle typeList = NULL;
463 OSErr err;
464
Jack Jansenc33a4232001-01-19 23:46:28 +0000465 if ( kw && PyObject_IsTrue(kw) ) {
466 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000467 return NULL;
468 dict = kw;
469 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000470 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000471 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000472 return NULL;
473 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
474 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000475 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000476 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000477 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000478 return NULL;
479 }
480 return (PyObject *)newnavrrobject(&reply);
481}
482
483static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000484"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000485;
486
487static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000488nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000489{
Jack Jansena07431f1999-12-17 17:14:28 +0000490 PyObject *dict;
491 AEDesc *defaultLocation = NULL;
492 NavReplyRecord reply;
493 NavDialogOptions dialogOptions;
494 NavEventUPP eventProc = NULL;
495 OSType fileType;
496 OSType fileCreator;
497 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000498
Jack Jansenc33a4232001-01-19 23:46:28 +0000499 if ( kw && PyObject_IsTrue(kw) ) {
500 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000501 return NULL;
502 dict = kw;
503 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000504 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000505 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
506 return NULL;
507 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
508 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000509 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000510 if ( err ) {
511 PyErr_Mac(ErrorObject, err);
512 return NULL;
513 }
514 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000515}
516
517static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000518"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
519
Jack Jansene91a29d1999-12-16 16:54:55 +0000520;
521
522static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000523nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000524{
Jack Jansena07431f1999-12-17 17:14:28 +0000525 PyObject *dict;
526 NavDialogOptions dialogOptions;
527 NavAskSaveChangesAction action;
528 NavAskSaveChangesResult reply;
529 NavEventUPP eventProc = NULL;
530 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000531
Jack Jansenc33a4232001-01-19 23:46:28 +0000532 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000533 if (!PyArg_ParseTuple(args, "l", &action))
534 return NULL;
535 dict = kw;
536 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000537 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000538 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
539 return NULL;
540 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
541 if ( err ) {
542 PyErr_Mac(ErrorObject, err);
543 return NULL;
544 }
545 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000546}
547
548static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000549"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000550;
551
552static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000553nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000554{
Jack Jansena07431f1999-12-17 17:14:28 +0000555 PyObject *dict;
556 NavDialogOptions dialogOptions;
557 NavAskSaveChangesResult reply;
558 NavEventUPP eventProc = NULL;
559 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000560
Jack Jansenc33a4232001-01-19 23:46:28 +0000561 if ( kw && PyObject_IsTrue(kw) ) {
562 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000563 return NULL;
564 dict = kw;
565 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000566 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000567 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
568 return NULL;
569 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
570 if ( err ) {
571 PyErr_Mac(ErrorObject, err);
572 return NULL;
573 }
574 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000575}
576
577static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000578"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000579;
580
581static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000582nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000583{
Jack Jansena07431f1999-12-17 17:14:28 +0000584 PyObject *dict;
585 NavDialogOptions dialogOptions;
586 NavAskSaveChangesResult reply;
587 NavEventUPP eventProc = NULL;
588 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000589
Jack Jansenc33a4232001-01-19 23:46:28 +0000590 if ( kw && PyObject_IsTrue(kw) ) {
591 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000592 return NULL;
593 dict = kw;
594 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000595 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000596 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
597 return NULL;
598 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
599 if ( err ) {
600 PyErr_Mac(ErrorObject, err);
601 return NULL;
602 }
603 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000604}
605
606static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000607"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000608;
609
610static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000611nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000612{
Jack Jansena07431f1999-12-17 17:14:28 +0000613 PyObject *dict;
614 AEDesc *defaultLocation = NULL;
615 NavReplyRecord reply;
616 NavDialogOptions dialogOptions;
617 NavEventUPP eventProc = NULL;
618 NavPreviewUPP previewProc = NULL;
619 NavObjectFilterUPP filterProc = NULL;
620 NavTypeListHandle typeList = NULL;
621 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000622
Jack Jansenc33a4232001-01-19 23:46:28 +0000623 if ( kw && PyObject_IsTrue(kw) ) {
624 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000625 return NULL;
626 dict = kw;
627 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000628 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000629 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
630 return NULL;
631 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
632 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000633 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000634 if ( err ) {
635 PyErr_Mac(ErrorObject, err);
636 return NULL;
637 }
638 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000639}
640
641static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000642"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000643;
644
645static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000646nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000647{
Jack Jansena07431f1999-12-17 17:14:28 +0000648 PyObject *dict;
649 AEDesc *defaultLocation = NULL;
650 NavReplyRecord reply;
651 NavDialogOptions dialogOptions;
652 NavEventUPP eventProc = NULL;
653 NavObjectFilterUPP filterProc = NULL;
654 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000655
Jack Jansenc33a4232001-01-19 23:46:28 +0000656 if ( kw && PyObject_IsTrue(kw) ) {
657 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000658 return NULL;
659 dict = kw;
660 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000661 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000662 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
663 return NULL;
664 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
665 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000666 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000667 if ( err ) {
668 PyErr_Mac(ErrorObject, err);
669 return NULL;
670 }
671 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000672}
673
674static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000675"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000676;
677
678static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000679nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000680{
Jack Jansena07431f1999-12-17 17:14:28 +0000681 PyObject *dict;
682 AEDesc *defaultLocation = NULL;
683 NavReplyRecord reply;
684 NavDialogOptions dialogOptions;
685 NavEventUPP eventProc = NULL;
686 NavObjectFilterUPP filterProc = NULL;
687 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000688
Jack Jansenc33a4232001-01-19 23:46:28 +0000689 if ( kw && PyObject_IsTrue(kw) ) {
690 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000691 return NULL;
692 dict = kw;
693 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000694 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000695 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
696 return NULL;
697 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
698 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000699 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000700 if ( err ) {
701 PyErr_Mac(ErrorObject, err);
702 return NULL;
703 }
704 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000705}
706
707static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000708"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000709;
710
711static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000712nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000713{
Jack Jansena07431f1999-12-17 17:14:28 +0000714 PyObject *dict;
715 AEDesc *defaultLocation = NULL;
716 NavReplyRecord reply;
717 NavDialogOptions dialogOptions;
718 NavEventUPP eventProc = NULL;
719 NavObjectFilterUPP filterProc = NULL;
720 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000721
Jack Jansenc33a4232001-01-19 23:46:28 +0000722 if ( kw && PyObject_IsTrue(kw) ) {
723 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000724 return NULL;
725 dict = kw;
726 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000727 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000728 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
729 return NULL;
730 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
731 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000732 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000733 if ( err ) {
734 PyErr_Mac(ErrorObject, err);
735 return NULL;
736 }
737 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000738}
739
740static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000741"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000742;
743
744static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000745nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000746{
Jack Jansena07431f1999-12-17 17:14:28 +0000747 PyObject *dict;
748 AEDesc *defaultLocation = NULL;
749 NavReplyRecord reply;
750 NavDialogOptions dialogOptions;
751 NavEventUPP eventProc = NULL;
752 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000753
Jack Jansenc33a4232001-01-19 23:46:28 +0000754 if ( kw && PyObject_IsTrue(kw) ) {
755 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000756 return NULL;
757 dict = kw;
758 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000759 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000760 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
761 return NULL;
762 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000763 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000764 if ( err ) {
765 PyErr_Mac(ErrorObject, err);
766 return NULL;
767 }
768 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000769}
770
Jack Jansena07431f1999-12-17 17:14:28 +0000771#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000772/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000773static char nav_NavCustomControl__doc__[] =
774""
775;
776
Jack Jansena07431f1999-12-17 17:14:28 +0000777
Jack Jansene91a29d1999-12-16 16:54:55 +0000778static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000779nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000780{
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 *
Jack Jansen1767f932001-09-04 22:20:39 +0000794nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000795{
796 Boolean rv;
797 if (!PyArg_ParseTuple(args, ""))
798 return NULL;
799 rv = NavServicesCanRun();
800 return Py_BuildValue("l", (long)rv);
801}
802
803static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000804"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000805;
806
807static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000808nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000809{
810 Boolean rv;
811
812 if (!PyArg_ParseTuple(args, ""))
813 return NULL;
814 rv = NavServicesAvailable();
815 return Py_BuildValue("l", (long)rv);
816}
817/* XX */
818static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000819"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000820;
821
822static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000823nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000824{
825
826 if (!PyArg_ParseTuple(args, ""))
827 return NULL;
828 NavLoad();
829 Py_INCREF(Py_None);
830 return Py_None;
831}
832
833static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000834"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000835;
836
837static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000838nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000839{
840
841 if (!PyArg_ParseTuple(args, ""))
842 return NULL;
843 NavUnload();
844 Py_INCREF(Py_None);
845 return Py_None;
846}
847
848static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000849"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000850;
851
852static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000853nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000854{
855 UInt32 rv;
856
857 if (!PyArg_ParseTuple(args, ""))
858 return NULL;
859 rv = NavLibraryVersion();
860 return Py_BuildValue("l", (long)rv);
861}
862
Jack Jansene91a29d1999-12-16 16:54:55 +0000863static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000864"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000865;
866
867static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000868nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000869{
Jack Jansena07431f1999-12-17 17:14:28 +0000870 NavDialogOptions dialogOptions;
871 OSErr err;
872
873 err = NavGetDefaultDialogOptions(&dialogOptions);
874 if ( err ) {
875 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000876 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000877 }
878 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&}",
879 "version", dialogOptions.version,
880 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
881 "location", PyMac_BuildPoint, dialogOptions.location,
882 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
883 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
884 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
885 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
886 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
887 "message", PyMac_BuildStr255, &dialogOptions.message,
888 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
889 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000890}
Jack Jansene91a29d1999-12-16 16:54:55 +0000891
892/* List of methods defined in the module */
893
894static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000895 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
896 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
897 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
898 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
899 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
900 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
901 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
902 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
903 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
904 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000905#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000906 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000907#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000908 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
909 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
910 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
911 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
912 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000913 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000914 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
915};
916
917
918/* Initialization function for the module (*must* be called initNav) */
919
920static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000921"Interface to Navigation Services\n"
922"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
923"if you want the default options.\n"
924"Use NavGetDefaultDialogOptions() to find out common option names.\n"
925"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000926"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000927;
928
929void
Jack Jansen1767f932001-09-04 22:20:39 +0000930initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000931{
932 PyObject *m, *d;
933
Jack Jansen04b85492000-09-14 20:47:00 +0000934 /* Test that we have NavServices */
935 if ( !NavServicesAvailable() ) {
936 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
937 return;
938 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000939 /* Create the module and add the functions */
940 m = Py_InitModule4("Nav", nav_methods,
941 Nav_module_documentation,
942 (PyObject*)NULL,PYTHON_API_VERSION);
943
944 /* Add some symbolic constants to the module */
945 d = PyModule_GetDict(m);
946 ErrorObject = PyString_FromString("Nav.error");
947 PyDict_SetItemString(d, "error", ErrorObject);
948
949 /* XXXX Add constants here */
950
Jack Jansena07431f1999-12-17 17:14:28 +0000951 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000952 my_eventProcUPP = NewNavEventUPP(my_eventProc);
953 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
954 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000955
Jack Jansene91a29d1999-12-16 16:54:55 +0000956}
957