blob: 58d4c05da8a65eea859cc62b305a2136f5f718fd [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 ) {
Jack Jansene58962a2003-01-17 23:13:03 +000059 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000060 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 {
Jack Jansene58962a2003-01-17 23:13:03 +000077 PySys_WriteStderr("Nav: exception in eventProc callback\n");
78 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000079 }
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 ) {
Jack Jansene58962a2003-01-17 23:13:03 +000093 PyErr_Print();
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 {
Jack Jansene58962a2003-01-17 23:13:03 +0000101 PySys_WriteStderr("Nav: exception in previewProc callback\n");
102 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +0000103 }
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;
Jack Jansene58962a2003-01-17 23:13:03 +0000116 PyObject theItemCopy;
Jack Jansena07431f1999-12-17 17:14:28 +0000117
Jack Jansen1767f932001-09-04 22:20:39 +0000118 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000119 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +0000120 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +0000121 return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000122 }
123 rv = PyObject_CallFunction(pyfunc, "O&s#h",
Jack Jansene58962a2003-01-17 23:13:03 +0000124 AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
Jack Jansena07431f1999-12-17 17:14:28 +0000125 if ( rv ) {
126 c_rv = PyObject_IsTrue(rv);
127 Py_DECREF(rv);
128 } else {
Jack Jansene58962a2003-01-17 23:13:03 +0000129 PySys_WriteStderr("Nav: exception in filterProc callback\n");
130 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +0000131 }
132 return c_rv;
133}
134
Jack Jansene91a29d1999-12-16 16:54:55 +0000135/* ----------------------------------------------------- */
136static int
137filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000138 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000139 NavDialogOptions *opt,
140 NavEventUPP *eventProcP,
141 NavPreviewUPP *previewProcP,
142 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000143 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000144 OSType *fileTypeP,
145 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000146{
147 int pos = 0;
148 PyObject *key, *value;
149 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000150 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000151
Jack Jansene1a45b31999-12-16 22:21:30 +0000152 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000153
154 while ( PyDict_Next(d, &pos, &key, &value) ) {
155 if ( !key || !value || !PyString_Check(key) ) {
156 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
157 return 0;
158 }
159 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000160 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000161 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
162 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000163 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000164 }
165 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
166 PyMem_DEL(defaultLocation_storage);
167 return 0;
168 }
169 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000170 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000171 if ( !PyArg_Parse(value, "h", &opt->version) )
172 return 0;
173 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
174 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
175 return 0;
176 } else if( strcmp(keystr, "location") == 0 ) {
177 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
178 return 0;
179 } else if( strcmp(keystr, "clientName") == 0 ) {
180 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
181 return 0;
182 } else if( strcmp(keystr, "windowTitle") == 0 ) {
183 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
184 return 0;
185 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
186 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
187 return 0;
188 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
189 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
190 return 0;
191 } else if( strcmp(keystr, "savedFileName") == 0 ) {
192 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
193 return 0;
194 } else if( strcmp(keystr, "message") == 0 ) {
195 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
196 return 0;
197 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
198 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
199 return 0;
200 } else if( strcmp(keystr, "popupExtension") == 0 ) {
201 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
202 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000203 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000204 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000205 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000206 *previewProcP = my_previewProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000207 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000208 *filterProcP = my_filterProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000209 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000210 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
211 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000212 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
213 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000214 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000215 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
216 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000217 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000218 } else {
219 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
220 return 0;
221 }
222 }
223 return 1;
224}
225
226/* ----------------------------------------------------- */
227
228/* Declarations for objects of type NavReplyRecord */
229
230typedef struct {
231 PyObject_HEAD
232 NavReplyRecord itself;
233} navrrobject;
234
Jeremy Hylton938ace62002-07-17 16:30:39 +0000235static PyTypeObject Navrrtype;
Jack Jansene91a29d1999-12-16 16:54:55 +0000236
237
238
239/* ---------------------------------------------------------------- */
240
Jack Jansena07431f1999-12-17 17:14:28 +0000241static char nav_NavTranslateFile__doc__[] =
242"(NavTranslationOptions)->None"
243;
244
245static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000246nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000247{
248 NavTranslationOptions howToTranslate;
249 OSErr err;
250
251 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
252 return NULL;
253 err = NavTranslateFile(&self->itself, howToTranslate);
254 if ( err ) {
255 PyErr_Mac(ErrorObject, err);
256 return NULL;
257 }
258 Py_INCREF(Py_None);
259 return Py_None;
260}
261
262static char nav_NavCompleteSave__doc__[] =
263"(NavTranslationOptions)->None"
264;
265
266static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000267nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000268{
269 NavTranslationOptions howToTranslate;
270 OSErr err;
271
272 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
273 return NULL;
274 err = NavCompleteSave(&self->itself, howToTranslate);
275 if ( err ) {
276 PyErr_Mac(ErrorObject, err);
277 return NULL;
278 }
279 Py_INCREF(Py_None);
280 return Py_None;
281}
282
283
Jack Jansene91a29d1999-12-16 16:54:55 +0000284static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000285 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
286 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000287
288 {NULL, NULL} /* sentinel */
289};
290
291/* ---------- */
292
293
294static navrrobject *
295newnavrrobject(NavReplyRecord *itself)
296{
297 navrrobject *self;
298
299 self = PyObject_NEW(navrrobject, &Navrrtype);
300 if (self == NULL)
301 return NULL;
302 self->itself = *itself;
303 return self;
304}
305
306
307static void
Jack Jansen1767f932001-09-04 22:20:39 +0000308navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000309{
310 NavDisposeReply(&self->itself);
Jack Jansen0e2f7982002-05-22 14:31:48 +0000311 PyObject_DEL(self);
Jack Jansene91a29d1999-12-16 16:54:55 +0000312}
313
314static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000315navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000316{
Jack Jansene79dc762000-06-02 21:35:07 +0000317 FSSpec fss;
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000318 FSRef fsr;
Jack Jansene79dc762000-06-02 21:35:07 +0000319
Jack Jansena07431f1999-12-17 17:14:28 +0000320 if( strcmp(name, "__members__") == 0 )
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000321 return Py_BuildValue("ssssssssss", "version", "validRecord", "replacing",
322 "isStationery", "translationNeeded", "selection", "selection_fsr",
323 "fileTranslation", "keyScript", "saveFileName");
Jack Jansene91a29d1999-12-16 16:54:55 +0000324 if( strcmp(name, "version") == 0 )
325 return Py_BuildValue("h", self->itself.version);
326 if( strcmp(name, "validRecord") == 0 )
327 return Py_BuildValue("l", (long)self->itself.validRecord);
328 if( strcmp(name, "replacing") == 0 )
329 return Py_BuildValue("l", (long)self->itself.replacing);
330 if( strcmp(name, "isStationery") == 0 )
331 return Py_BuildValue("l", (long)self->itself.isStationery);
332 if( strcmp(name, "translationNeeded") == 0 )
333 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000334 if( strcmp(name, "selection") == 0 ) {
335 SInt32 i, count;
336 OSErr err;
337 PyObject *rv, *rvitem;
338 AEDesc desc;
339
Jack Jansenb7348692002-12-23 23:16:25 +0000340 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000341 PyErr_Mac(ErrorObject, err);
342 return NULL;
343 }
344 if ( (rv=PyList_New(count)) == NULL )
345 return NULL;
346 for(i=0; i<count; i++) {
347 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000348 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000349 Py_DECREF(rv);
350 PyErr_Mac(ErrorObject, err);
351 return NULL;
352 }
Jack Jansenb7348692002-12-23 23:16:25 +0000353 if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
Jack Jansene79dc762000-06-02 21:35:07 +0000354 Py_DECREF(rv);
355 PyErr_Mac(ErrorObject, err);
356 return NULL;
357 }
Jack Jansene79dc762000-06-02 21:35:07 +0000358 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000359 PyList_SetItem(rv, i, rvitem);
360 AEDisposeDesc(&desc);
361 }
362 return rv;
363 }
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000364 if( strcmp(name, "selection_fsr") == 0 ) {
365 SInt32 i, count;
366 OSErr err;
367 PyObject *rv, *rvitem;
368 AEDesc desc;
369
Jack Jansenb7348692002-12-23 23:16:25 +0000370 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000371 PyErr_Mac(ErrorObject, err);
372 return NULL;
373 }
374 if ( (rv=PyList_New(count)) == NULL )
375 return NULL;
376 for(i=0; i<count; i++) {
377 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000378 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000379 Py_DECREF(rv);
380 PyErr_Mac(ErrorObject, err);
381 return NULL;
382 }
Jack Jansenb7348692002-12-23 23:16:25 +0000383 if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000384 Py_DECREF(rv);
385 PyErr_Mac(ErrorObject, err);
386 return NULL;
387 }
388 rvitem = PyMac_BuildFSRef(&fsr);
389 PyList_SetItem(rv, i, rvitem);
390 AEDisposeDesc(&desc);
391 }
392 return rv;
393 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000394 if( strcmp(name, "fileTranslation") == 0 )
395 return ResObj_New((Handle)self->itself.fileTranslation);
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000396 if( strcmp(name, "keyScript") == 0 )
397 return Py_BuildValue("h", (short)self->itself.keyScript);
398 if( strcmp(name, "saveFileName") == 0 )
399 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000400
401
402 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
403}
404
405static int
Jack Jansen1767f932001-09-04 22:20:39 +0000406navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000407{
408 /* Set attribute 'name' to value 'v'. v==NULL means delete */
409
410 /* XXXX Add your own setattr code here */
411 return -1;
412}
413
414static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000415"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000416;
417
418static PyTypeObject Navrrtype = {
419 PyObject_HEAD_INIT(&PyType_Type)
420 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000421 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000422 sizeof(navrrobject), /*tp_basicsize*/
423 0, /*tp_itemsize*/
424 /* methods */
425 (destructor)navrr_dealloc, /*tp_dealloc*/
426 (printfunc)0, /*tp_print*/
427 (getattrfunc)navrr_getattr, /*tp_getattr*/
428 (setattrfunc)navrr_setattr, /*tp_setattr*/
429 (cmpfunc)0, /*tp_compare*/
430 (reprfunc)0, /*tp_repr*/
431 0, /*tp_as_number*/
432 0, /*tp_as_sequence*/
433 0, /*tp_as_mapping*/
434 (hashfunc)0, /*tp_hash*/
435 (ternaryfunc)0, /*tp_call*/
436 (reprfunc)0, /*tp_str*/
437
438 /* Space for future expansion */
439 0L,0L,0L,0L,
440 Navrrtype__doc__ /* Documentation string */
441};
442
443/* End of code for NavReplyRecord objects */
444
445/* ----------------------------------------------------- */
446
447static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000448"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000449;
450
451static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000452nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000453{
454 PyObject *dict;
455 AEDesc *defaultLocation = NULL;
456 NavReplyRecord reply;
457 NavDialogOptions dialogOptions;
458 NavEventUPP eventProc = NULL;
459 NavPreviewUPP previewProc = NULL;
460 NavObjectFilterUPP filterProc = NULL;
461 NavTypeListHandle typeList = NULL;
462 OSErr err;
463
Jack Jansenc33a4232001-01-19 23:46:28 +0000464 if ( kw && PyObject_IsTrue(kw) ) {
465 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000466 return NULL;
467 dict = kw;
468 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000469 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000470 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000471 return NULL;
472 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
473 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000474 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000475 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000476 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000477 return NULL;
478 }
479 return (PyObject *)newnavrrobject(&reply);
480}
481
482static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000483"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000484;
485
486static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000487nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000488{
Jack Jansena07431f1999-12-17 17:14:28 +0000489 PyObject *dict;
490 AEDesc *defaultLocation = NULL;
491 NavReplyRecord reply;
492 NavDialogOptions dialogOptions;
493 NavEventUPP eventProc = NULL;
494 OSType fileType;
495 OSType fileCreator;
496 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000497
Jack Jansenc33a4232001-01-19 23:46:28 +0000498 if ( kw && PyObject_IsTrue(kw) ) {
499 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000500 return NULL;
501 dict = kw;
502 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000503 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000504 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
505 return NULL;
506 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
507 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000508 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000509 if ( err ) {
510 PyErr_Mac(ErrorObject, err);
511 return NULL;
512 }
513 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000514}
515
516static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000517"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
518
Jack Jansene91a29d1999-12-16 16:54:55 +0000519;
520
521static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000522nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000523{
Jack Jansena07431f1999-12-17 17:14:28 +0000524 PyObject *dict;
525 NavDialogOptions dialogOptions;
526 NavAskSaveChangesAction action;
527 NavAskSaveChangesResult reply;
528 NavEventUPP eventProc = NULL;
529 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000530
Jack Jansenc33a4232001-01-19 23:46:28 +0000531 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000532 if (!PyArg_ParseTuple(args, "l", &action))
533 return NULL;
534 dict = kw;
535 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000536 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000537 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
538 return NULL;
539 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
540 if ( err ) {
541 PyErr_Mac(ErrorObject, err);
542 return NULL;
543 }
544 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000545}
546
547static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000548"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000549;
550
551static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000552nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000553{
Jack Jansena07431f1999-12-17 17:14:28 +0000554 PyObject *dict;
555 NavDialogOptions dialogOptions;
556 NavAskSaveChangesResult reply;
557 NavEventUPP eventProc = NULL;
558 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000559
Jack Jansenc33a4232001-01-19 23:46:28 +0000560 if ( kw && PyObject_IsTrue(kw) ) {
561 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000562 return NULL;
563 dict = kw;
564 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000565 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000566 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
567 return NULL;
568 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
569 if ( err ) {
570 PyErr_Mac(ErrorObject, err);
571 return NULL;
572 }
573 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000574}
575
576static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000577"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000578;
579
580static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000581nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000582{
Jack Jansena07431f1999-12-17 17:14:28 +0000583 PyObject *dict;
584 NavDialogOptions dialogOptions;
585 NavAskSaveChangesResult reply;
586 NavEventUPP eventProc = NULL;
587 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000588
Jack Jansenc33a4232001-01-19 23:46:28 +0000589 if ( kw && PyObject_IsTrue(kw) ) {
590 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000591 return NULL;
592 dict = kw;
593 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000594 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000595 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
596 return NULL;
597 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
598 if ( err ) {
599 PyErr_Mac(ErrorObject, err);
600 return NULL;
601 }
602 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000603}
604
605static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000606"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000607;
608
609static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000610nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000611{
Jack Jansena07431f1999-12-17 17:14:28 +0000612 PyObject *dict;
613 AEDesc *defaultLocation = NULL;
614 NavReplyRecord reply;
615 NavDialogOptions dialogOptions;
616 NavEventUPP eventProc = NULL;
617 NavPreviewUPP previewProc = NULL;
618 NavObjectFilterUPP filterProc = NULL;
619 NavTypeListHandle typeList = NULL;
620 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000621
Jack Jansenc33a4232001-01-19 23:46:28 +0000622 if ( kw && PyObject_IsTrue(kw) ) {
623 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000624 return NULL;
625 dict = kw;
626 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000627 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000628 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
629 return NULL;
630 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
631 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000632 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000633 if ( err ) {
634 PyErr_Mac(ErrorObject, err);
635 return NULL;
636 }
637 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000638}
639
640static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000641"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000642;
643
644static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000645nav_NavChooseFolder(PyObject *self, PyObject *args, 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 Jansen1767f932001-09-04 22:20:39 +0000678nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000679{
Jack Jansena07431f1999-12-17 17:14:28 +0000680 PyObject *dict;
681 AEDesc *defaultLocation = NULL;
682 NavReplyRecord reply;
683 NavDialogOptions dialogOptions;
684 NavEventUPP eventProc = NULL;
685 NavObjectFilterUPP filterProc = NULL;
686 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000687
Jack Jansenc33a4232001-01-19 23:46:28 +0000688 if ( kw && PyObject_IsTrue(kw) ) {
689 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000690 return NULL;
691 dict = kw;
692 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000693 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000694 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
695 return NULL;
696 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
697 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000698 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000699 if ( err ) {
700 PyErr_Mac(ErrorObject, err);
701 return NULL;
702 }
703 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000704}
705
706static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000707"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000708;
709
710static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000711nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000712{
Jack Jansena07431f1999-12-17 17:14:28 +0000713 PyObject *dict;
714 AEDesc *defaultLocation = NULL;
715 NavReplyRecord reply;
716 NavDialogOptions dialogOptions;
717 NavEventUPP eventProc = NULL;
718 NavObjectFilterUPP filterProc = NULL;
719 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000720
Jack Jansenc33a4232001-01-19 23:46:28 +0000721 if ( kw && PyObject_IsTrue(kw) ) {
722 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000723 return NULL;
724 dict = kw;
725 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000726 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000727 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
728 return NULL;
729 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
730 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000731 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000732 if ( err ) {
733 PyErr_Mac(ErrorObject, err);
734 return NULL;
735 }
736 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000737}
738
739static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000740"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000741;
742
743static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000744nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000745{
Jack Jansena07431f1999-12-17 17:14:28 +0000746 PyObject *dict;
747 AEDesc *defaultLocation = NULL;
748 NavReplyRecord reply;
749 NavDialogOptions dialogOptions;
750 NavEventUPP eventProc = NULL;
751 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000752
Jack Jansenc33a4232001-01-19 23:46:28 +0000753 if ( kw && PyObject_IsTrue(kw) ) {
754 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000755 return NULL;
756 dict = kw;
757 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000758 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000759 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
760 return NULL;
761 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000762 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000763 if ( err ) {
764 PyErr_Mac(ErrorObject, err);
765 return NULL;
766 }
767 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000768}
769
Jack Jansena07431f1999-12-17 17:14:28 +0000770#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000771/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000772static char nav_NavCustomControl__doc__[] =
773""
774;
775
Jack Jansena07431f1999-12-17 17:14:28 +0000776
Jack Jansene91a29d1999-12-16 16:54:55 +0000777static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000778nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000779{
780
781 if (!PyArg_ParseTuple(args, ""))
782 return NULL;
783 Py_INCREF(Py_None);
784 return Py_None;
785}
Jack Jansena07431f1999-12-17 17:14:28 +0000786#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000787
788static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000789"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000790;
791
792static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000793nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000794{
795 Boolean rv;
796 if (!PyArg_ParseTuple(args, ""))
797 return NULL;
798 rv = NavServicesCanRun();
799 return Py_BuildValue("l", (long)rv);
800}
801
802static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000803"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000804;
805
806static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000807nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000808{
809 Boolean rv;
810
811 if (!PyArg_ParseTuple(args, ""))
812 return NULL;
813 rv = NavServicesAvailable();
814 return Py_BuildValue("l", (long)rv);
815}
816/* XX */
817static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000818"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000819;
820
821static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000822nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000823{
824
825 if (!PyArg_ParseTuple(args, ""))
826 return NULL;
827 NavLoad();
828 Py_INCREF(Py_None);
829 return Py_None;
830}
831
832static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000833"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000834;
835
836static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000837nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000838{
839
840 if (!PyArg_ParseTuple(args, ""))
841 return NULL;
842 NavUnload();
843 Py_INCREF(Py_None);
844 return Py_None;
845}
846
847static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000848"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000849;
850
851static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000852nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000853{
854 UInt32 rv;
855
856 if (!PyArg_ParseTuple(args, ""))
857 return NULL;
858 rv = NavLibraryVersion();
859 return Py_BuildValue("l", (long)rv);
860}
861
Jack Jansene91a29d1999-12-16 16:54:55 +0000862static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000863"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000864;
865
866static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000867nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000868{
Jack Jansena07431f1999-12-17 17:14:28 +0000869 NavDialogOptions dialogOptions;
870 OSErr err;
871
872 err = NavGetDefaultDialogOptions(&dialogOptions);
873 if ( err ) {
874 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000875 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000876 }
877 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&}",
878 "version", dialogOptions.version,
879 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
880 "location", PyMac_BuildPoint, dialogOptions.location,
881 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
882 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
883 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
884 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
885 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
886 "message", PyMac_BuildStr255, &dialogOptions.message,
887 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
888 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000889}
Jack Jansene91a29d1999-12-16 16:54:55 +0000890
891/* List of methods defined in the module */
892
893static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000894 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
895 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
896 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
897 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
898 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
899 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
900 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
901 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
902 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
903 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000904#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000905 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000906#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000907 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
908 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
909 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
910 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
911 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000912 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000913 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
914};
915
916
917/* Initialization function for the module (*must* be called initNav) */
918
919static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000920"Interface to Navigation Services\n"
921"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
922"if you want the default options.\n"
923"Use NavGetDefaultDialogOptions() to find out common option names.\n"
924"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000925"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000926;
927
928void
Jack Jansen1767f932001-09-04 22:20:39 +0000929initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000930{
931 PyObject *m, *d;
932
Jack Jansen04b85492000-09-14 20:47:00 +0000933 /* Test that we have NavServices */
934 if ( !NavServicesAvailable() ) {
935 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
936 return;
937 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000938 /* Create the module and add the functions */
939 m = Py_InitModule4("Nav", nav_methods,
940 Nav_module_documentation,
941 (PyObject*)NULL,PYTHON_API_VERSION);
942
943 /* Add some symbolic constants to the module */
944 d = PyModule_GetDict(m);
945 ErrorObject = PyString_FromString("Nav.error");
946 PyDict_SetItemString(d, "error", ErrorObject);
947
948 /* XXXX Add constants here */
949
Jack Jansena07431f1999-12-17 17:14:28 +0000950 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000951 my_eventProcUPP = NewNavEventUPP(my_eventProc);
952 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
953 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000954
Jack Jansene91a29d1999-12-16 16:54:55 +0000955}
956