blob: f3d8a4874689aabe543fb6e0daa1e9887b5df80b [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"
Jack Jansen9d8b96c2000-07-14 22:16:45 +000033#include "pymactoolbox.h"
Jack Jansen11296712001-05-22 21:48:40 +000034#include <Carbon/Carbon.h>
Jack Jansene91a29d1999-12-16 16:54:55 +000035
Jack Jansene91a29d1999-12-16 16:54:55 +000036static PyObject *ErrorObject;
37
Jack Jansena07431f1999-12-17 17:14:28 +000038static NavEventUPP my_eventProcUPP;
39static NavPreviewUPP my_previewProcUPP;
40static NavObjectFilterUPP my_filterProcUPP;
41
42/* Callback functions */
43static pascal void
44my_eventProc(NavEventCallbackMessage callBackSelector,
45 NavCBRecPtr callBackParms,
46 NavCallBackUserData callbackUD)
47{
48 PyObject *dict = (PyObject *)callbackUD;
49 PyObject *pyfunc;
50 PyObject *rv;
51
52 if (!dict) return;
53 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +000054 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000055 return;
56 }
57 if ( pyfunc == Py_None ) {
Jack Jansena07431f1999-12-17 17:14:28 +000058 return;
59 }
60 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
61 (void *)callBackParms, sizeof(NavCBRec));
62 if ( rv )
63 Py_DECREF(rv);
64 else {
Jack Jansene58962a2003-01-17 23:13:03 +000065 PySys_WriteStderr("Nav: exception in eventProc callback\n");
66 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000067 }
68}
69
70static pascal Boolean
71my_previewProc(NavCBRecPtr callBackParms,
72 NavCallBackUserData callbackUD)
73{
74 PyObject *dict = (PyObject *)callbackUD;
75 PyObject *pyfunc;
76 PyObject *rv;
77 Boolean c_rv = false;
78
Jack Jansen1767f932001-09-04 22:20:39 +000079 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +000080 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +000081 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +000082 return false;
Jack Jansena07431f1999-12-17 17:14:28 +000083 }
84 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
85 if ( rv ) {
86 c_rv = PyObject_IsTrue(rv);
87 Py_DECREF(rv);
88 } else {
Jack Jansene58962a2003-01-17 23:13:03 +000089 PySys_WriteStderr("Nav: exception in previewProc callback\n");
90 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000091 }
92 return c_rv;
93}
94
95static pascal Boolean
96my_filterProc(AEDesc *theItem, void *info,
97 NavCallBackUserData callbackUD,
98 NavFilterModes filterMode)
99{
100 PyObject *dict = (PyObject *)callbackUD;
101 PyObject *pyfunc;
102 PyObject *rv;
103 Boolean c_rv = false;
104
Jack Jansen1767f932001-09-04 22:20:39 +0000105 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000106 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +0000107 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +0000108 return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000109 }
110 rv = PyObject_CallFunction(pyfunc, "O&s#h",
Jack Jansene58962a2003-01-17 23:13:03 +0000111 AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
Jack Jansena07431f1999-12-17 17:14:28 +0000112 if ( rv ) {
113 c_rv = PyObject_IsTrue(rv);
114 Py_DECREF(rv);
115 } else {
Jack Jansene58962a2003-01-17 23:13:03 +0000116 PySys_WriteStderr("Nav: exception in filterProc callback\n");
117 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +0000118 }
119 return c_rv;
120}
121
Jack Jansene91a29d1999-12-16 16:54:55 +0000122/* ----------------------------------------------------- */
123static int
124filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000125 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000126 NavDialogOptions *opt,
127 NavEventUPP *eventProcP,
128 NavPreviewUPP *previewProcP,
129 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000130 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000131 OSType *fileTypeP,
132 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000133{
Neal Norwitz8786eb52006-02-24 15:39:29 +0000134 Py_ssize_t pos = 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000135 PyObject *key, *value;
136 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000137 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000138
Jack Jansene1a45b31999-12-16 22:21:30 +0000139 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000140
141 while ( PyDict_Next(d, &pos, &key, &value) ) {
142 if ( !key || !value || !PyString_Check(key) ) {
143 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
144 return 0;
145 }
146 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000147 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000148 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
149 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000150 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000151 }
152 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
153 PyMem_DEL(defaultLocation_storage);
154 return 0;
155 }
156 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000157 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansenecc66352003-04-17 20:40:07 +0000158 if ( !PyArg_Parse(value, "H", &opt->version) )
Jack Jansene91a29d1999-12-16 16:54:55 +0000159 return 0;
160 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000161 if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
Jack Jansene91a29d1999-12-16 16:54:55 +0000162 return 0;
163 } else if( strcmp(keystr, "location") == 0 ) {
164 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
165 return 0;
166 } else if( strcmp(keystr, "clientName") == 0 ) {
167 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
168 return 0;
169 } else if( strcmp(keystr, "windowTitle") == 0 ) {
170 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
171 return 0;
172 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
173 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
174 return 0;
175 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
176 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
177 return 0;
178 } else if( strcmp(keystr, "savedFileName") == 0 ) {
179 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
180 return 0;
181 } else if( strcmp(keystr, "message") == 0 ) {
182 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
183 return 0;
184 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
185 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
186 return 0;
187 } else if( strcmp(keystr, "popupExtension") == 0 ) {
188 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
189 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000190 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000191 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000192 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000193 *previewProcP = my_previewProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000194 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000195 *filterProcP = my_filterProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000196 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000197 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
198 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000199 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
200 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000201 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000202 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
203 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000204 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000205 } else {
206 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
207 return 0;
208 }
209 }
210 return 1;
211}
212
213/* ----------------------------------------------------- */
214
215/* Declarations for objects of type NavReplyRecord */
216
217typedef struct {
218 PyObject_HEAD
219 NavReplyRecord itself;
220} navrrobject;
221
Jeremy Hylton938ace62002-07-17 16:30:39 +0000222static PyTypeObject Navrrtype;
Jack Jansene91a29d1999-12-16 16:54:55 +0000223
224
225
226/* ---------------------------------------------------------------- */
227
Jack Jansena07431f1999-12-17 17:14:28 +0000228static char nav_NavTranslateFile__doc__[] =
229"(NavTranslationOptions)->None"
230;
231
232static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000233nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000234{
235 NavTranslationOptions howToTranslate;
236 OSErr err;
237
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000238 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000239 return NULL;
240 err = NavTranslateFile(&self->itself, howToTranslate);
241 if ( err ) {
242 PyErr_Mac(ErrorObject, err);
243 return NULL;
244 }
245 Py_INCREF(Py_None);
246 return Py_None;
247}
248
249static char nav_NavCompleteSave__doc__[] =
250"(NavTranslationOptions)->None"
251;
252
253static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000254nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000255{
256 NavTranslationOptions howToTranslate;
257 OSErr err;
258
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000259 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000260 return NULL;
261 err = NavCompleteSave(&self->itself, howToTranslate);
262 if ( err ) {
263 PyErr_Mac(ErrorObject, err);
264 return NULL;
265 }
266 Py_INCREF(Py_None);
267 return Py_None;
268}
269
270
Jack Jansene91a29d1999-12-16 16:54:55 +0000271static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000272 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
273 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000274
275 {NULL, NULL} /* sentinel */
276};
277
278/* ---------- */
279
280
281static navrrobject *
282newnavrrobject(NavReplyRecord *itself)
283{
284 navrrobject *self;
285
286 self = PyObject_NEW(navrrobject, &Navrrtype);
287 if (self == NULL)
288 return NULL;
289 self->itself = *itself;
290 return self;
291}
292
293
294static void
Jack Jansen1767f932001-09-04 22:20:39 +0000295navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000296{
297 NavDisposeReply(&self->itself);
Jack Jansen0e2f7982002-05-22 14:31:48 +0000298 PyObject_DEL(self);
Jack Jansene91a29d1999-12-16 16:54:55 +0000299}
300
301static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000302navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000303{
Jack Jansene79dc762000-06-02 21:35:07 +0000304 FSSpec fss;
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000305 FSRef fsr;
Jack Jansene79dc762000-06-02 21:35:07 +0000306
Jack Jansena07431f1999-12-17 17:14:28 +0000307 if( strcmp(name, "__members__") == 0 )
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000308 return Py_BuildValue("ssssssssss", "version", "validRecord", "replacing",
309 "isStationery", "translationNeeded", "selection", "selection_fsr",
310 "fileTranslation", "keyScript", "saveFileName");
Jack Jansene91a29d1999-12-16 16:54:55 +0000311 if( strcmp(name, "version") == 0 )
312 return Py_BuildValue("h", self->itself.version);
313 if( strcmp(name, "validRecord") == 0 )
314 return Py_BuildValue("l", (long)self->itself.validRecord);
315 if( strcmp(name, "replacing") == 0 )
316 return Py_BuildValue("l", (long)self->itself.replacing);
317 if( strcmp(name, "isStationery") == 0 )
318 return Py_BuildValue("l", (long)self->itself.isStationery);
319 if( strcmp(name, "translationNeeded") == 0 )
320 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000321 if( strcmp(name, "selection") == 0 ) {
322 SInt32 i, count;
323 OSErr err;
324 PyObject *rv, *rvitem;
325 AEDesc desc;
326
Jack Jansenb7348692002-12-23 23:16:25 +0000327 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000328 PyErr_Mac(ErrorObject, err);
329 return NULL;
330 }
331 if ( (rv=PyList_New(count)) == NULL )
332 return NULL;
333 for(i=0; i<count; i++) {
334 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000335 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000336 Py_DECREF(rv);
337 PyErr_Mac(ErrorObject, err);
338 return NULL;
339 }
Jack Jansenb7348692002-12-23 23:16:25 +0000340 if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
Jack Jansene79dc762000-06-02 21:35:07 +0000341 Py_DECREF(rv);
342 PyErr_Mac(ErrorObject, err);
343 return NULL;
344 }
Jack Jansene79dc762000-06-02 21:35:07 +0000345 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000346 PyList_SetItem(rv, i, rvitem);
347 AEDisposeDesc(&desc);
348 }
349 return rv;
350 }
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000351 if( strcmp(name, "selection_fsr") == 0 ) {
352 SInt32 i, count;
353 OSErr err;
354 PyObject *rv, *rvitem;
355 AEDesc desc;
356
Jack Jansenb7348692002-12-23 23:16:25 +0000357 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000358 PyErr_Mac(ErrorObject, err);
359 return NULL;
360 }
361 if ( (rv=PyList_New(count)) == NULL )
362 return NULL;
363 for(i=0; i<count; i++) {
364 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000365 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000366 Py_DECREF(rv);
367 PyErr_Mac(ErrorObject, err);
368 return NULL;
369 }
Jack Jansenb7348692002-12-23 23:16:25 +0000370 if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000371 Py_DECREF(rv);
372 PyErr_Mac(ErrorObject, err);
373 return NULL;
374 }
375 rvitem = PyMac_BuildFSRef(&fsr);
376 PyList_SetItem(rv, i, rvitem);
377 AEDisposeDesc(&desc);
378 }
379 return rv;
380 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000381 if( strcmp(name, "fileTranslation") == 0 )
382 return ResObj_New((Handle)self->itself.fileTranslation);
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000383 if( strcmp(name, "keyScript") == 0 )
384 return Py_BuildValue("h", (short)self->itself.keyScript);
385 if( strcmp(name, "saveFileName") == 0 )
386 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000387
388
389 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
390}
391
392static int
Jack Jansen1767f932001-09-04 22:20:39 +0000393navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000394{
395 /* Set attribute 'name' to value 'v'. v==NULL means delete */
396
397 /* XXXX Add your own setattr code here */
398 return -1;
399}
400
401static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000402"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000403;
404
405static PyTypeObject Navrrtype = {
Guido van Rossum2f2fffb2007-07-25 16:47:51 +0000406 PyVarObject_HEAD_INIT(&PyType_Type, 0)
Guido van Rossum14648392001-12-08 18:02:58 +0000407 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000408 sizeof(navrrobject), /*tp_basicsize*/
409 0, /*tp_itemsize*/
410 /* methods */
411 (destructor)navrr_dealloc, /*tp_dealloc*/
412 (printfunc)0, /*tp_print*/
413 (getattrfunc)navrr_getattr, /*tp_getattr*/
414 (setattrfunc)navrr_setattr, /*tp_setattr*/
415 (cmpfunc)0, /*tp_compare*/
416 (reprfunc)0, /*tp_repr*/
417 0, /*tp_as_number*/
418 0, /*tp_as_sequence*/
419 0, /*tp_as_mapping*/
420 (hashfunc)0, /*tp_hash*/
421 (ternaryfunc)0, /*tp_call*/
422 (reprfunc)0, /*tp_str*/
423
424 /* Space for future expansion */
425 0L,0L,0L,0L,
426 Navrrtype__doc__ /* Documentation string */
427};
428
429/* End of code for NavReplyRecord objects */
430
431/* ----------------------------------------------------- */
432
433static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000434"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000435;
436
437static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000438nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000439{
440 PyObject *dict;
441 AEDesc *defaultLocation = NULL;
442 NavReplyRecord reply;
443 NavDialogOptions dialogOptions;
444 NavEventUPP eventProc = NULL;
445 NavPreviewUPP previewProc = NULL;
446 NavObjectFilterUPP filterProc = NULL;
447 NavTypeListHandle typeList = NULL;
448 OSErr err;
449
Jack Jansenc33a4232001-01-19 23:46:28 +0000450 if ( kw && PyObject_IsTrue(kw) ) {
451 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000452 return NULL;
453 dict = kw;
454 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000455 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000456 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000457 return NULL;
458 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
459 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000460 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000461 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000462 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000463 return NULL;
464 }
465 return (PyObject *)newnavrrobject(&reply);
466}
467
468static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000469"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000470;
471
472static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000473nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000474{
Jack Jansena07431f1999-12-17 17:14:28 +0000475 PyObject *dict;
476 AEDesc *defaultLocation = NULL;
477 NavReplyRecord reply;
478 NavDialogOptions dialogOptions;
479 NavEventUPP eventProc = NULL;
480 OSType fileType;
481 OSType fileCreator;
482 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000483
Jack Jansenc33a4232001-01-19 23:46:28 +0000484 if ( kw && PyObject_IsTrue(kw) ) {
485 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000486 return NULL;
487 dict = kw;
488 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000489 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000490 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
491 return NULL;
492 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
493 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000494 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000495 if ( err ) {
496 PyErr_Mac(ErrorObject, err);
497 return NULL;
498 }
499 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000500}
501
502static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000503"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
504
Jack Jansene91a29d1999-12-16 16:54:55 +0000505;
506
507static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000508nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000509{
Jack Jansena07431f1999-12-17 17:14:28 +0000510 PyObject *dict;
511 NavDialogOptions dialogOptions;
512 NavAskSaveChangesAction action;
513 NavAskSaveChangesResult reply;
514 NavEventUPP eventProc = NULL;
515 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000516
Jack Jansenc33a4232001-01-19 23:46:28 +0000517 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000518 if (!PyArg_ParseTuple(args, "k", &action))
Jack Jansena07431f1999-12-17 17:14:28 +0000519 return NULL;
520 dict = kw;
521 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000522 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000523 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
524 return NULL;
525 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
526 if ( err ) {
527 PyErr_Mac(ErrorObject, err);
528 return NULL;
529 }
530 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000531}
532
533static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000534"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000535;
536
537static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000538nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000539{
Jack Jansena07431f1999-12-17 17:14:28 +0000540 PyObject *dict;
541 NavDialogOptions dialogOptions;
542 NavAskSaveChangesResult reply;
543 NavEventUPP eventProc = NULL;
544 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000545
Jack Jansenc33a4232001-01-19 23:46:28 +0000546 if ( kw && PyObject_IsTrue(kw) ) {
547 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000548 return NULL;
549 dict = kw;
550 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000551 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000552 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
553 return NULL;
554 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
555 if ( err ) {
556 PyErr_Mac(ErrorObject, err);
557 return NULL;
558 }
559 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000560}
561
562static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000563"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000564;
565
566static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000567nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000568{
Jack Jansena07431f1999-12-17 17:14:28 +0000569 PyObject *dict;
570 NavDialogOptions dialogOptions;
571 NavAskSaveChangesResult reply;
572 NavEventUPP eventProc = NULL;
573 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000574
Jack Jansenc33a4232001-01-19 23:46:28 +0000575 if ( kw && PyObject_IsTrue(kw) ) {
576 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000577 return NULL;
578 dict = kw;
579 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000580 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000581 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
582 return NULL;
583 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
584 if ( err ) {
585 PyErr_Mac(ErrorObject, err);
586 return NULL;
587 }
588 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000589}
590
591static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000592"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000593;
594
595static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000596nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000597{
Jack Jansena07431f1999-12-17 17:14:28 +0000598 PyObject *dict;
599 AEDesc *defaultLocation = NULL;
600 NavReplyRecord reply;
601 NavDialogOptions dialogOptions;
602 NavEventUPP eventProc = NULL;
603 NavPreviewUPP previewProc = NULL;
604 NavObjectFilterUPP filterProc = NULL;
605 NavTypeListHandle typeList = NULL;
606 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000607
Jack Jansenc33a4232001-01-19 23:46:28 +0000608 if ( kw && PyObject_IsTrue(kw) ) {
609 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000610 return NULL;
611 dict = kw;
612 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000613 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000614 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
615 return NULL;
616 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
617 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000618 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000619 if ( err ) {
620 PyErr_Mac(ErrorObject, err);
621 return NULL;
622 }
623 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000624}
625
626static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000627"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000628;
629
630static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000631nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000632{
Jack Jansena07431f1999-12-17 17:14:28 +0000633 PyObject *dict;
634 AEDesc *defaultLocation = NULL;
635 NavReplyRecord reply;
636 NavDialogOptions dialogOptions;
637 NavEventUPP eventProc = NULL;
638 NavObjectFilterUPP filterProc = NULL;
639 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000640
Jack Jansenc33a4232001-01-19 23:46:28 +0000641 if ( kw && PyObject_IsTrue(kw) ) {
642 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000643 return NULL;
644 dict = kw;
645 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000646 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000647 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
648 return NULL;
649 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
650 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000651 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000652 if ( err ) {
653 PyErr_Mac(ErrorObject, err);
654 return NULL;
655 }
656 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000657}
658
659static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000660"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000661;
662
663static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000664nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000665{
Jack Jansena07431f1999-12-17 17:14:28 +0000666 PyObject *dict;
667 AEDesc *defaultLocation = NULL;
668 NavReplyRecord reply;
669 NavDialogOptions dialogOptions;
670 NavEventUPP eventProc = NULL;
671 NavObjectFilterUPP filterProc = NULL;
672 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000673
Jack Jansenc33a4232001-01-19 23:46:28 +0000674 if ( kw && PyObject_IsTrue(kw) ) {
675 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000676 return NULL;
677 dict = kw;
678 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000679 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000680 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
681 return NULL;
682 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
683 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000684 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000685 if ( err ) {
686 PyErr_Mac(ErrorObject, err);
687 return NULL;
688 }
689 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000690}
691
692static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000693"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000694;
695
696static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000697nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000698{
Jack Jansena07431f1999-12-17 17:14:28 +0000699 PyObject *dict;
700 AEDesc *defaultLocation = NULL;
701 NavReplyRecord reply;
702 NavDialogOptions dialogOptions;
703 NavEventUPP eventProc = NULL;
704 NavObjectFilterUPP filterProc = NULL;
705 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000706
Jack Jansenc33a4232001-01-19 23:46:28 +0000707 if ( kw && PyObject_IsTrue(kw) ) {
708 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000709 return NULL;
710 dict = kw;
711 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000712 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000713 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
714 return NULL;
715 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
716 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000717 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000718 if ( err ) {
719 PyErr_Mac(ErrorObject, err);
720 return NULL;
721 }
722 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000723}
724
725static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000726"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000727;
728
729static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000730nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000731{
Jack Jansena07431f1999-12-17 17:14:28 +0000732 PyObject *dict;
733 AEDesc *defaultLocation = NULL;
734 NavReplyRecord reply;
735 NavDialogOptions dialogOptions;
736 NavEventUPP eventProc = NULL;
737 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000738
Jack Jansenc33a4232001-01-19 23:46:28 +0000739 if ( kw && PyObject_IsTrue(kw) ) {
740 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000741 return NULL;
742 dict = kw;
743 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000744 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000745 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
746 return NULL;
747 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000748 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000749 if ( err ) {
750 PyErr_Mac(ErrorObject, err);
751 return NULL;
752 }
753 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000754}
755
Jack Jansena07431f1999-12-17 17:14:28 +0000756#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000757/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000758static char nav_NavCustomControl__doc__[] =
759""
760;
761
Jack Jansena07431f1999-12-17 17:14:28 +0000762
Jack Jansene91a29d1999-12-16 16:54:55 +0000763static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000764nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000765{
766
767 if (!PyArg_ParseTuple(args, ""))
768 return NULL;
769 Py_INCREF(Py_None);
770 return Py_None;
771}
Jack Jansena07431f1999-12-17 17:14:28 +0000772#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000773
774static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000775"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000776;
777
778static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000779nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000780{
781 Boolean rv;
782 if (!PyArg_ParseTuple(args, ""))
783 return NULL;
784 rv = NavServicesCanRun();
785 return Py_BuildValue("l", (long)rv);
786}
787
788static char nav_NavServicesAvailable__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_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000794{
795 Boolean rv;
796
797 if (!PyArg_ParseTuple(args, ""))
798 return NULL;
799 rv = NavServicesAvailable();
800 return Py_BuildValue("l", (long)rv);
801}
802/* XX */
803static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000804"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000805;
806
807static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000808nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000809{
810
811 if (!PyArg_ParseTuple(args, ""))
812 return NULL;
813 NavLoad();
814 Py_INCREF(Py_None);
815 return Py_None;
816}
817
818static char nav_NavUnload__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_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000824{
825
826 if (!PyArg_ParseTuple(args, ""))
827 return NULL;
828 NavUnload();
829 Py_INCREF(Py_None);
830 return Py_None;
831}
832
833static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000834"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000835;
836
837static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000838nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000839{
840 UInt32 rv;
841
842 if (!PyArg_ParseTuple(args, ""))
843 return NULL;
844 rv = NavLibraryVersion();
845 return Py_BuildValue("l", (long)rv);
846}
847
Jack Jansene91a29d1999-12-16 16:54:55 +0000848static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000849"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000850;
851
852static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000853nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000854{
Jack Jansena07431f1999-12-17 17:14:28 +0000855 NavDialogOptions dialogOptions;
856 OSErr err;
857
858 err = NavGetDefaultDialogOptions(&dialogOptions);
859 if ( err ) {
860 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000861 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000862 }
863 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&}",
864 "version", dialogOptions.version,
865 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
866 "location", PyMac_BuildPoint, dialogOptions.location,
867 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
868 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
869 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
870 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
871 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
872 "message", PyMac_BuildStr255, &dialogOptions.message,
873 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
874 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000875}
Jack Jansene91a29d1999-12-16 16:54:55 +0000876
877/* List of methods defined in the module */
878
879static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000880 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
881 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
882 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
883 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
884 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
885 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
886 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
887 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
888 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
889 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000890#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000891 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000892#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000893 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
894 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
895 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
896 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
897 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000898 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000899 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
900};
901
902
903/* Initialization function for the module (*must* be called initNav) */
904
905static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000906"Interface to Navigation Services\n"
907"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
908"if you want the default options.\n"
909"Use NavGetDefaultDialogOptions() to find out common option names.\n"
910"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000911"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000912;
913
914void
Jack Jansen1767f932001-09-04 22:20:39 +0000915initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000916{
917 PyObject *m, *d;
918
Jack Jansen04b85492000-09-14 20:47:00 +0000919 /* Test that we have NavServices */
920 if ( !NavServicesAvailable() ) {
921 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
922 return;
923 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000924 /* Create the module and add the functions */
925 m = Py_InitModule4("Nav", nav_methods,
926 Nav_module_documentation,
927 (PyObject*)NULL,PYTHON_API_VERSION);
928
929 /* Add some symbolic constants to the module */
930 d = PyModule_GetDict(m);
931 ErrorObject = PyString_FromString("Nav.error");
932 PyDict_SetItemString(d, "error", ErrorObject);
933
934 /* XXXX Add constants here */
935
Jack Jansena07431f1999-12-17 17:14:28 +0000936 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000937 my_eventProcUPP = NewNavEventUPP(my_eventProc);
938 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
939 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000940
Jack Jansene91a29d1999-12-16 16:54:55 +0000941}
942