blob: 6786ea029cb3508041202514acb361f65920f30f [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 = {
406 PyObject_HEAD_INIT(&PyType_Type)
407 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000408 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000409 sizeof(navrrobject), /*tp_basicsize*/
410 0, /*tp_itemsize*/
411 /* methods */
412 (destructor)navrr_dealloc, /*tp_dealloc*/
413 (printfunc)0, /*tp_print*/
414 (getattrfunc)navrr_getattr, /*tp_getattr*/
415 (setattrfunc)navrr_setattr, /*tp_setattr*/
416 (cmpfunc)0, /*tp_compare*/
417 (reprfunc)0, /*tp_repr*/
418 0, /*tp_as_number*/
419 0, /*tp_as_sequence*/
420 0, /*tp_as_mapping*/
421 (hashfunc)0, /*tp_hash*/
422 (ternaryfunc)0, /*tp_call*/
423 (reprfunc)0, /*tp_str*/
424
425 /* Space for future expansion */
426 0L,0L,0L,0L,
427 Navrrtype__doc__ /* Documentation string */
428};
429
430/* End of code for NavReplyRecord objects */
431
432/* ----------------------------------------------------- */
433
434static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000435"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000436;
437
438static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000439nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000440{
441 PyObject *dict;
442 AEDesc *defaultLocation = NULL;
443 NavReplyRecord reply;
444 NavDialogOptions dialogOptions;
445 NavEventUPP eventProc = NULL;
446 NavPreviewUPP previewProc = NULL;
447 NavObjectFilterUPP filterProc = NULL;
448 NavTypeListHandle typeList = NULL;
449 OSErr err;
450
Jack Jansenc33a4232001-01-19 23:46:28 +0000451 if ( kw && PyObject_IsTrue(kw) ) {
452 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000453 return NULL;
454 dict = kw;
455 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000456 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000457 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000458 return NULL;
459 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
460 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000461 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000462 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000463 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000464 return NULL;
465 }
466 return (PyObject *)newnavrrobject(&reply);
467}
468
469static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000470"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000471;
472
473static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000474nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000475{
Jack Jansena07431f1999-12-17 17:14:28 +0000476 PyObject *dict;
477 AEDesc *defaultLocation = NULL;
478 NavReplyRecord reply;
479 NavDialogOptions dialogOptions;
480 NavEventUPP eventProc = NULL;
481 OSType fileType;
482 OSType fileCreator;
483 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000484
Jack Jansenc33a4232001-01-19 23:46:28 +0000485 if ( kw && PyObject_IsTrue(kw) ) {
486 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000487 return NULL;
488 dict = kw;
489 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000490 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000491 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
492 return NULL;
493 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
494 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000495 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000496 if ( err ) {
497 PyErr_Mac(ErrorObject, err);
498 return NULL;
499 }
500 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000501}
502
503static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000504"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
505
Jack Jansene91a29d1999-12-16 16:54:55 +0000506;
507
508static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000509nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000510{
Jack Jansena07431f1999-12-17 17:14:28 +0000511 PyObject *dict;
512 NavDialogOptions dialogOptions;
513 NavAskSaveChangesAction action;
514 NavAskSaveChangesResult reply;
515 NavEventUPP eventProc = NULL;
516 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000517
Jack Jansenc33a4232001-01-19 23:46:28 +0000518 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000519 if (!PyArg_ParseTuple(args, "k", &action))
Jack Jansena07431f1999-12-17 17:14:28 +0000520 return NULL;
521 dict = kw;
522 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000523 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000524 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
525 return NULL;
526 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
527 if ( err ) {
528 PyErr_Mac(ErrorObject, err);
529 return NULL;
530 }
531 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000532}
533
534static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000535"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000536;
537
538static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000539nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000540{
Jack Jansena07431f1999-12-17 17:14:28 +0000541 PyObject *dict;
542 NavDialogOptions dialogOptions;
543 NavAskSaveChangesResult reply;
544 NavEventUPP eventProc = NULL;
545 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000546
Jack Jansenc33a4232001-01-19 23:46:28 +0000547 if ( kw && PyObject_IsTrue(kw) ) {
548 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000549 return NULL;
550 dict = kw;
551 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000552 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000553 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
554 return NULL;
555 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
556 if ( err ) {
557 PyErr_Mac(ErrorObject, err);
558 return NULL;
559 }
560 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000561}
562
563static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000564"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000565;
566
567static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000568nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000569{
Jack Jansena07431f1999-12-17 17:14:28 +0000570 PyObject *dict;
571 NavDialogOptions dialogOptions;
572 NavAskSaveChangesResult reply;
573 NavEventUPP eventProc = NULL;
574 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000575
Jack Jansenc33a4232001-01-19 23:46:28 +0000576 if ( kw && PyObject_IsTrue(kw) ) {
577 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000578 return NULL;
579 dict = kw;
580 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000581 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000582 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
583 return NULL;
584 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
585 if ( err ) {
586 PyErr_Mac(ErrorObject, err);
587 return NULL;
588 }
589 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000590}
591
592static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000593"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000594;
595
596static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000597nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000598{
Jack Jansena07431f1999-12-17 17:14:28 +0000599 PyObject *dict;
600 AEDesc *defaultLocation = NULL;
601 NavReplyRecord reply;
602 NavDialogOptions dialogOptions;
603 NavEventUPP eventProc = NULL;
604 NavPreviewUPP previewProc = NULL;
605 NavObjectFilterUPP filterProc = NULL;
606 NavTypeListHandle typeList = NULL;
607 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000608
Jack Jansenc33a4232001-01-19 23:46:28 +0000609 if ( kw && PyObject_IsTrue(kw) ) {
610 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000611 return NULL;
612 dict = kw;
613 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000614 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000615 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
616 return NULL;
617 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
618 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000619 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000620 if ( err ) {
621 PyErr_Mac(ErrorObject, err);
622 return NULL;
623 }
624 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000625}
626
627static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000628"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000629;
630
631static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000632nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000633{
Jack Jansena07431f1999-12-17 17:14:28 +0000634 PyObject *dict;
635 AEDesc *defaultLocation = NULL;
636 NavReplyRecord reply;
637 NavDialogOptions dialogOptions;
638 NavEventUPP eventProc = NULL;
639 NavObjectFilterUPP filterProc = NULL;
640 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000641
Jack Jansenc33a4232001-01-19 23:46:28 +0000642 if ( kw && PyObject_IsTrue(kw) ) {
643 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000644 return NULL;
645 dict = kw;
646 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000647 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000648 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
649 return NULL;
650 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
651 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000652 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000653 if ( err ) {
654 PyErr_Mac(ErrorObject, err);
655 return NULL;
656 }
657 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000658}
659
660static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000661"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000662;
663
664static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000665nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000666{
Jack Jansena07431f1999-12-17 17:14:28 +0000667 PyObject *dict;
668 AEDesc *defaultLocation = NULL;
669 NavReplyRecord reply;
670 NavDialogOptions dialogOptions;
671 NavEventUPP eventProc = NULL;
672 NavObjectFilterUPP filterProc = NULL;
673 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000674
Jack Jansenc33a4232001-01-19 23:46:28 +0000675 if ( kw && PyObject_IsTrue(kw) ) {
676 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000677 return NULL;
678 dict = kw;
679 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000680 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000681 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
682 return NULL;
683 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
684 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000685 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000686 if ( err ) {
687 PyErr_Mac(ErrorObject, err);
688 return NULL;
689 }
690 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000691}
692
693static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000694"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000695;
696
697static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000698nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000699{
Jack Jansena07431f1999-12-17 17:14:28 +0000700 PyObject *dict;
701 AEDesc *defaultLocation = NULL;
702 NavReplyRecord reply;
703 NavDialogOptions dialogOptions;
704 NavEventUPP eventProc = NULL;
705 NavObjectFilterUPP filterProc = NULL;
706 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000707
Jack Jansenc33a4232001-01-19 23:46:28 +0000708 if ( kw && PyObject_IsTrue(kw) ) {
709 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000710 return NULL;
711 dict = kw;
712 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000713 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000714 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
715 return NULL;
716 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
717 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000718 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000719 if ( err ) {
720 PyErr_Mac(ErrorObject, err);
721 return NULL;
722 }
723 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000724}
725
726static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000727"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000728;
729
730static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000731nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000732{
Jack Jansena07431f1999-12-17 17:14:28 +0000733 PyObject *dict;
734 AEDesc *defaultLocation = NULL;
735 NavReplyRecord reply;
736 NavDialogOptions dialogOptions;
737 NavEventUPP eventProc = NULL;
738 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000739
Jack Jansenc33a4232001-01-19 23:46:28 +0000740 if ( kw && PyObject_IsTrue(kw) ) {
741 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000742 return NULL;
743 dict = kw;
744 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000745 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000746 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
747 return NULL;
748 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000749 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000750 if ( err ) {
751 PyErr_Mac(ErrorObject, err);
752 return NULL;
753 }
754 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000755}
756
Jack Jansena07431f1999-12-17 17:14:28 +0000757#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000758/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000759static char nav_NavCustomControl__doc__[] =
760""
761;
762
Jack Jansena07431f1999-12-17 17:14:28 +0000763
Jack Jansene91a29d1999-12-16 16:54:55 +0000764static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000765nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000766{
767
768 if (!PyArg_ParseTuple(args, ""))
769 return NULL;
770 Py_INCREF(Py_None);
771 return Py_None;
772}
Jack Jansena07431f1999-12-17 17:14:28 +0000773#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000774
775static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000776"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000777;
778
779static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000780nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000781{
782 Boolean rv;
783 if (!PyArg_ParseTuple(args, ""))
784 return NULL;
785 rv = NavServicesCanRun();
786 return Py_BuildValue("l", (long)rv);
787}
788
789static char nav_NavServicesAvailable__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_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000795{
796 Boolean rv;
797
798 if (!PyArg_ParseTuple(args, ""))
799 return NULL;
800 rv = NavServicesAvailable();
801 return Py_BuildValue("l", (long)rv);
802}
803/* XX */
804static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000805"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000806;
807
808static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000809nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000810{
811
812 if (!PyArg_ParseTuple(args, ""))
813 return NULL;
814 NavLoad();
815 Py_INCREF(Py_None);
816 return Py_None;
817}
818
819static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000820"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000821;
822
823static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000824nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000825{
826
827 if (!PyArg_ParseTuple(args, ""))
828 return NULL;
829 NavUnload();
830 Py_INCREF(Py_None);
831 return Py_None;
832}
833
834static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000835"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000836;
837
838static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000839nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000840{
841 UInt32 rv;
842
843 if (!PyArg_ParseTuple(args, ""))
844 return NULL;
845 rv = NavLibraryVersion();
846 return Py_BuildValue("l", (long)rv);
847}
848
Jack Jansene91a29d1999-12-16 16:54:55 +0000849static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000850"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000851;
852
853static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000854nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000855{
Jack Jansena07431f1999-12-17 17:14:28 +0000856 NavDialogOptions dialogOptions;
857 OSErr err;
858
859 err = NavGetDefaultDialogOptions(&dialogOptions);
860 if ( err ) {
861 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000862 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000863 }
864 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&}",
865 "version", dialogOptions.version,
866 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
867 "location", PyMac_BuildPoint, dialogOptions.location,
868 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
869 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
870 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
871 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
872 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
873 "message", PyMac_BuildStr255, &dialogOptions.message,
874 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
875 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000876}
Jack Jansene91a29d1999-12-16 16:54:55 +0000877
878/* List of methods defined in the module */
879
880static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000881 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
882 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
883 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
884 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
885 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
886 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
887 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
888 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
889 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
890 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000891#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000892 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000893#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000894 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
895 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
896 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
897 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
898 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000899 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000900 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
901};
902
903
904/* Initialization function for the module (*must* be called initNav) */
905
906static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000907"Interface to Navigation Services\n"
908"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
909"if you want the default options.\n"
910"Use NavGetDefaultDialogOptions() to find out common option names.\n"
911"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000912"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000913;
914
915void
Jack Jansen1767f932001-09-04 22:20:39 +0000916initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000917{
918 PyObject *m, *d;
919
Jack Jansen04b85492000-09-14 20:47:00 +0000920 /* Test that we have NavServices */
921 if ( !NavServicesAvailable() ) {
922 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
923 return;
924 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000925 /* Create the module and add the functions */
926 m = Py_InitModule4("Nav", nav_methods,
927 Nav_module_documentation,
928 (PyObject*)NULL,PYTHON_API_VERSION);
929
930 /* Add some symbolic constants to the module */
931 d = PyModule_GetDict(m);
932 ErrorObject = PyString_FromString("Nav.error");
933 PyDict_SetItemString(d, "error", ErrorObject);
934
935 /* XXXX Add constants here */
936
Jack Jansena07431f1999-12-17 17:14:28 +0000937 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000938 my_eventProcUPP = NewNavEventUPP(my_eventProc);
939 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
940 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000941
Jack Jansene91a29d1999-12-16 16:54:55 +0000942}
943