blob: 1c1777663c46c4f9bec3943b27d5f133a3b2079c [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
Ronald Oussorene50a9fd2009-09-22 14:24:57 +000036#ifndef __LP64__
37
Jack Jansene91a29d1999-12-16 16:54:55 +000038static PyObject *ErrorObject;
39
Jack Jansena07431f1999-12-17 17:14:28 +000040static NavEventUPP my_eventProcUPP;
41static NavPreviewUPP my_previewProcUPP;
42static NavObjectFilterUPP my_filterProcUPP;
43
44/* Callback functions */
45static pascal void
46my_eventProc(NavEventCallbackMessage callBackSelector,
47 NavCBRecPtr callBackParms,
48 NavCallBackUserData callbackUD)
49{
50 PyObject *dict = (PyObject *)callbackUD;
51 PyObject *pyfunc;
52 PyObject *rv;
53
54 if (!dict) return;
55 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +000056 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000057 return;
58 }
59 if ( pyfunc == Py_None ) {
Jack Jansena07431f1999-12-17 17:14:28 +000060 return;
61 }
62 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
63 (void *)callBackParms, sizeof(NavCBRec));
64 if ( rv )
65 Py_DECREF(rv);
66 else {
Jack Jansene58962a2003-01-17 23:13:03 +000067 PySys_WriteStderr("Nav: exception in eventProc callback\n");
68 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000069 }
70}
71
72static pascal Boolean
73my_previewProc(NavCBRecPtr callBackParms,
74 NavCallBackUserData callbackUD)
75{
76 PyObject *dict = (PyObject *)callbackUD;
77 PyObject *pyfunc;
78 PyObject *rv;
79 Boolean c_rv = false;
80
Jack Jansen1767f932001-09-04 22:20:39 +000081 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +000082 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +000083 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +000084 return false;
Jack Jansena07431f1999-12-17 17:14:28 +000085 }
86 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
87 if ( rv ) {
88 c_rv = PyObject_IsTrue(rv);
89 Py_DECREF(rv);
90 } else {
Jack Jansene58962a2003-01-17 23:13:03 +000091 PySys_WriteStderr("Nav: exception in previewProc callback\n");
92 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000093 }
94 return c_rv;
95}
96
97static pascal Boolean
98my_filterProc(AEDesc *theItem, void *info,
99 NavCallBackUserData callbackUD,
100 NavFilterModes filterMode)
101{
102 PyObject *dict = (PyObject *)callbackUD;
103 PyObject *pyfunc;
104 PyObject *rv;
105 Boolean c_rv = false;
106
Jack Jansen1767f932001-09-04 22:20:39 +0000107 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000108 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +0000109 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +0000110 return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000111 }
112 rv = PyObject_CallFunction(pyfunc, "O&s#h",
Jack Jansene58962a2003-01-17 23:13:03 +0000113 AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
Jack Jansena07431f1999-12-17 17:14:28 +0000114 if ( rv ) {
115 c_rv = PyObject_IsTrue(rv);
116 Py_DECREF(rv);
117 } else {
Jack Jansene58962a2003-01-17 23:13:03 +0000118 PySys_WriteStderr("Nav: exception in filterProc callback\n");
119 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +0000120 }
121 return c_rv;
122}
123
Jack Jansene91a29d1999-12-16 16:54:55 +0000124/* ----------------------------------------------------- */
125static int
126filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000127 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000128 NavDialogOptions *opt,
129 NavEventUPP *eventProcP,
130 NavPreviewUPP *previewProcP,
131 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000132 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000133 OSType *fileTypeP,
134 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000135{
Neal Norwitz8786eb52006-02-24 15:39:29 +0000136 Py_ssize_t pos = 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000137 PyObject *key, *value;
138 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000139 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000140
Jack Jansene1a45b31999-12-16 22:21:30 +0000141 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000142
143 while ( PyDict_Next(d, &pos, &key, &value) ) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000144 if ( !key || !value || !PyString_Check(key) ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000145 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
146 return 0;
147 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000148 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000149 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000150 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
151 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000152 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000153 }
154 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
155 PyMem_DEL(defaultLocation_storage);
156 return 0;
157 }
158 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000159 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansenecc66352003-04-17 20:40:07 +0000160 if ( !PyArg_Parse(value, "H", &opt->version) )
Jack Jansene91a29d1999-12-16 16:54:55 +0000161 return 0;
162 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000163 if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
Jack Jansene91a29d1999-12-16 16:54:55 +0000164 return 0;
165 } else if( strcmp(keystr, "location") == 0 ) {
166 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
167 return 0;
168 } else if( strcmp(keystr, "clientName") == 0 ) {
169 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
170 return 0;
171 } else if( strcmp(keystr, "windowTitle") == 0 ) {
172 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
173 return 0;
174 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
175 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
176 return 0;
177 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
178 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
179 return 0;
180 } else if( strcmp(keystr, "savedFileName") == 0 ) {
181 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
182 return 0;
183 } else if( strcmp(keystr, "message") == 0 ) {
184 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
185 return 0;
186 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
187 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
188 return 0;
189 } else if( strcmp(keystr, "popupExtension") == 0 ) {
190 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
191 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000192 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000193 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000194 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000195 *previewProcP = my_previewProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000196 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000197 *filterProcP = my_filterProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000198 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000199 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
200 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000201 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
202 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000203 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000204 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
205 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000206 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000207 } else {
208 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
209 return 0;
210 }
211 }
212 return 1;
213}
214
215/* ----------------------------------------------------- */
216
217/* Declarations for objects of type NavReplyRecord */
218
219typedef struct {
220 PyObject_HEAD
221 NavReplyRecord itself;
222} navrrobject;
223
Jeremy Hylton938ace62002-07-17 16:30:39 +0000224static PyTypeObject Navrrtype;
Jack Jansene91a29d1999-12-16 16:54:55 +0000225
226
227
228/* ---------------------------------------------------------------- */
229
Jack Jansena07431f1999-12-17 17:14:28 +0000230static char nav_NavTranslateFile__doc__[] =
231"(NavTranslationOptions)->None"
232;
233
234static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000235nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000236{
237 NavTranslationOptions howToTranslate;
238 OSErr err;
239
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000240 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000241 return NULL;
242 err = NavTranslateFile(&self->itself, howToTranslate);
243 if ( err ) {
244 PyErr_Mac(ErrorObject, err);
245 return NULL;
246 }
247 Py_INCREF(Py_None);
248 return Py_None;
249}
250
251static char nav_NavCompleteSave__doc__[] =
252"(NavTranslationOptions)->None"
253;
254
255static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000256nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000257{
258 NavTranslationOptions howToTranslate;
259 OSErr err;
260
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000261 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000262 return NULL;
263 err = NavCompleteSave(&self->itself, howToTranslate);
264 if ( err ) {
265 PyErr_Mac(ErrorObject, err);
266 return NULL;
267 }
268 Py_INCREF(Py_None);
269 return Py_None;
270}
271
272
Jack Jansene91a29d1999-12-16 16:54:55 +0000273static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000274 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
275 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000276
277 {NULL, NULL} /* sentinel */
278};
279
280/* ---------- */
281
282
283static navrrobject *
284newnavrrobject(NavReplyRecord *itself)
285{
286 navrrobject *self;
287
288 self = PyObject_NEW(navrrobject, &Navrrtype);
289 if (self == NULL)
290 return NULL;
291 self->itself = *itself;
292 return self;
293}
294
295
296static void
Jack Jansen1767f932001-09-04 22:20:39 +0000297navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000298{
299 NavDisposeReply(&self->itself);
Jack Jansen0e2f7982002-05-22 14:31:48 +0000300 PyObject_DEL(self);
Jack Jansene91a29d1999-12-16 16:54:55 +0000301}
302
303static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000304navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000305{
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000306 FSRef fsr;
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000307 FSSpec fss;
Jack Jansene79dc762000-06-02 21:35:07 +0000308
Jack Jansena07431f1999-12-17 17:14:28 +0000309 if( strcmp(name, "__members__") == 0 )
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000310 return Py_BuildValue(
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000311 "ssssssssss",
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000312 "version", "validRecord", "replacing",
313 "isStationery", "translationNeeded",
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000314 "selection",
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000315 "selection_fsr",
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000316 "fileTranslation", "keyScript", "saveFileName");
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000317
Jack Jansene91a29d1999-12-16 16:54:55 +0000318 if( strcmp(name, "version") == 0 )
319 return Py_BuildValue("h", self->itself.version);
320 if( strcmp(name, "validRecord") == 0 )
321 return Py_BuildValue("l", (long)self->itself.validRecord);
322 if( strcmp(name, "replacing") == 0 )
323 return Py_BuildValue("l", (long)self->itself.replacing);
324 if( strcmp(name, "isStationery") == 0 )
325 return Py_BuildValue("l", (long)self->itself.isStationery);
326 if( strcmp(name, "translationNeeded") == 0 )
327 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000328 if( strcmp(name, "selection") == 0 ) {
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000329 SInt32 i;
330 long count;
Jack Jansena07431f1999-12-17 17:14:28 +0000331 OSErr err;
332 PyObject *rv, *rvitem;
333 AEDesc desc;
334
Jack Jansenb7348692002-12-23 23:16:25 +0000335 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000336 PyErr_Mac(ErrorObject, err);
337 return NULL;
338 }
339 if ( (rv=PyList_New(count)) == NULL )
340 return NULL;
341 for(i=0; i<count; i++) {
342 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000343 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000344 Py_DECREF(rv);
345 PyErr_Mac(ErrorObject, err);
346 return NULL;
347 }
Jack Jansenb7348692002-12-23 23:16:25 +0000348 if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
Jack Jansene79dc762000-06-02 21:35:07 +0000349 Py_DECREF(rv);
350 PyErr_Mac(ErrorObject, err);
351 return NULL;
352 }
Jack Jansene79dc762000-06-02 21:35:07 +0000353 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000354 PyList_SetItem(rv, i, rvitem);
355 AEDisposeDesc(&desc);
356 }
357 return rv;
358 }
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000359 if( strcmp(name, "selection_fsr") == 0 ) {
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000360 SInt32 i;
361 long count;
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000362 OSErr err;
363 PyObject *rv, *rvitem;
364 AEDesc desc;
365
Jack Jansenb7348692002-12-23 23:16:25 +0000366 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000367 PyErr_Mac(ErrorObject, err);
368 return NULL;
369 }
370 if ( (rv=PyList_New(count)) == NULL )
371 return NULL;
372 for(i=0; i<count; i++) {
373 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000374 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000375 Py_DECREF(rv);
376 PyErr_Mac(ErrorObject, err);
377 return NULL;
378 }
Jack Jansenb7348692002-12-23 23:16:25 +0000379 if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000380 Py_DECREF(rv);
381 PyErr_Mac(ErrorObject, err);
382 return NULL;
383 }
384 rvitem = PyMac_BuildFSRef(&fsr);
385 PyList_SetItem(rv, i, rvitem);
386 AEDisposeDesc(&desc);
387 }
388 return rv;
389 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000390 if( strcmp(name, "fileTranslation") == 0 )
391 return ResObj_New((Handle)self->itself.fileTranslation);
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000392 if( strcmp(name, "keyScript") == 0 )
393 return Py_BuildValue("h", (short)self->itself.keyScript);
394 if( strcmp(name, "saveFileName") == 0 )
395 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000396
397
398 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
399}
400
401static int
Jack Jansen1767f932001-09-04 22:20:39 +0000402navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000403{
404 /* Set attribute 'name' to value 'v'. v==NULL means delete */
405
406 /* XXXX Add your own setattr code here */
407 return -1;
408}
409
410static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000411"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000412;
413
414static PyTypeObject Navrrtype = {
415 PyObject_HEAD_INIT(&PyType_Type)
416 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000417 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000418 sizeof(navrrobject), /*tp_basicsize*/
419 0, /*tp_itemsize*/
420 /* methods */
421 (destructor)navrr_dealloc, /*tp_dealloc*/
422 (printfunc)0, /*tp_print*/
423 (getattrfunc)navrr_getattr, /*tp_getattr*/
424 (setattrfunc)navrr_setattr, /*tp_setattr*/
425 (cmpfunc)0, /*tp_compare*/
426 (reprfunc)0, /*tp_repr*/
427 0, /*tp_as_number*/
428 0, /*tp_as_sequence*/
429 0, /*tp_as_mapping*/
430 (hashfunc)0, /*tp_hash*/
431 (ternaryfunc)0, /*tp_call*/
432 (reprfunc)0, /*tp_str*/
433
434 /* Space for future expansion */
435 0L,0L,0L,0L,
436 Navrrtype__doc__ /* Documentation string */
437};
438
439/* End of code for NavReplyRecord objects */
440
441/* ----------------------------------------------------- */
442
443static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000444"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000445;
446
447static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000448nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000449{
450 PyObject *dict;
451 AEDesc *defaultLocation = NULL;
452 NavReplyRecord reply;
453 NavDialogOptions dialogOptions;
454 NavEventUPP eventProc = NULL;
455 NavPreviewUPP previewProc = NULL;
456 NavObjectFilterUPP filterProc = NULL;
457 NavTypeListHandle typeList = NULL;
458 OSErr err;
459
Jack Jansenc33a4232001-01-19 23:46:28 +0000460 if ( kw && PyObject_IsTrue(kw) ) {
461 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000462 return NULL;
463 dict = kw;
464 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000465 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000466 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000467 return NULL;
468 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
469 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000470 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000471 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000472 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000473 return NULL;
474 }
475 return (PyObject *)newnavrrobject(&reply);
476}
477
478static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000479"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000480;
481
482static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000483nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000484{
Jack Jansena07431f1999-12-17 17:14:28 +0000485 PyObject *dict;
486 AEDesc *defaultLocation = NULL;
487 NavReplyRecord reply;
488 NavDialogOptions dialogOptions;
489 NavEventUPP eventProc = NULL;
490 OSType fileType;
491 OSType fileCreator;
492 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000493
Jack Jansenc33a4232001-01-19 23:46:28 +0000494 if ( kw && PyObject_IsTrue(kw) ) {
495 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000496 return NULL;
497 dict = kw;
498 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000499 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000500 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
501 return NULL;
502 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
503 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000504 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000505 if ( err ) {
506 PyErr_Mac(ErrorObject, err);
507 return NULL;
508 }
509 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000510}
511
512static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000513"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
514
Jack Jansene91a29d1999-12-16 16:54:55 +0000515;
516
517static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000518nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000519{
Jack Jansena07431f1999-12-17 17:14:28 +0000520 PyObject *dict;
521 NavDialogOptions dialogOptions;
522 NavAskSaveChangesAction action;
523 NavAskSaveChangesResult reply;
524 NavEventUPP eventProc = NULL;
525 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000526
Jack Jansenc33a4232001-01-19 23:46:28 +0000527 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000528 if (!PyArg_ParseTuple(args, "k", &action))
Jack Jansena07431f1999-12-17 17:14:28 +0000529 return NULL;
530 dict = kw;
531 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000532 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000533 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
534 return NULL;
535 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
536 if ( err ) {
537 PyErr_Mac(ErrorObject, err);
538 return NULL;
539 }
540 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000541}
542
543static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000544"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000545;
546
547static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000548nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000549{
Jack Jansena07431f1999-12-17 17:14:28 +0000550 PyObject *dict;
551 NavDialogOptions dialogOptions;
552 NavAskSaveChangesResult reply;
553 NavEventUPP eventProc = NULL;
554 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000555
Jack Jansenc33a4232001-01-19 23:46:28 +0000556 if ( kw && PyObject_IsTrue(kw) ) {
557 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000558 return NULL;
559 dict = kw;
560 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000561 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000562 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
563 return NULL;
564 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
565 if ( err ) {
566 PyErr_Mac(ErrorObject, err);
567 return NULL;
568 }
569 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000570}
571
572static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000573"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000574;
575
576static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000577nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000578{
Jack Jansena07431f1999-12-17 17:14:28 +0000579 PyObject *dict;
580 NavDialogOptions dialogOptions;
581 NavAskSaveChangesResult reply;
582 NavEventUPP eventProc = NULL;
583 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000584
Jack Jansenc33a4232001-01-19 23:46:28 +0000585 if ( kw && PyObject_IsTrue(kw) ) {
586 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000587 return NULL;
588 dict = kw;
589 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000590 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000591 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
592 return NULL;
593 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
594 if ( err ) {
595 PyErr_Mac(ErrorObject, err);
596 return NULL;
597 }
598 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000599}
600
601static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000602"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000603;
604
605static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000606nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000607{
Jack Jansena07431f1999-12-17 17:14:28 +0000608 PyObject *dict;
609 AEDesc *defaultLocation = NULL;
610 NavReplyRecord reply;
611 NavDialogOptions dialogOptions;
612 NavEventUPP eventProc = NULL;
613 NavPreviewUPP previewProc = NULL;
614 NavObjectFilterUPP filterProc = NULL;
615 NavTypeListHandle typeList = NULL;
616 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000617
Jack Jansenc33a4232001-01-19 23:46:28 +0000618 if ( kw && PyObject_IsTrue(kw) ) {
619 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000620 return NULL;
621 dict = kw;
622 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000623 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000624 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
625 return NULL;
626 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
627 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000628 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000629 if ( err ) {
630 PyErr_Mac(ErrorObject, err);
631 return NULL;
632 }
633 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000634}
635
636static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000637"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000638;
639
640static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000641nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000642{
Jack Jansena07431f1999-12-17 17:14:28 +0000643 PyObject *dict;
644 AEDesc *defaultLocation = NULL;
645 NavReplyRecord reply;
646 NavDialogOptions dialogOptions;
647 NavEventUPP eventProc = NULL;
648 NavObjectFilterUPP filterProc = NULL;
649 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000650
Jack Jansenc33a4232001-01-19 23:46:28 +0000651 if ( kw && PyObject_IsTrue(kw) ) {
652 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000653 return NULL;
654 dict = kw;
655 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000656 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000657 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
658 return NULL;
659 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
660 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000661 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000662 if ( err ) {
663 PyErr_Mac(ErrorObject, err);
664 return NULL;
665 }
666 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000667}
668
669static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000670"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000671;
672
673static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000674nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000675{
Jack Jansena07431f1999-12-17 17:14:28 +0000676 PyObject *dict;
677 AEDesc *defaultLocation = NULL;
678 NavReplyRecord reply;
679 NavDialogOptions dialogOptions;
680 NavEventUPP eventProc = NULL;
681 NavObjectFilterUPP filterProc = NULL;
682 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000683
Jack Jansenc33a4232001-01-19 23:46:28 +0000684 if ( kw && PyObject_IsTrue(kw) ) {
685 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000686 return NULL;
687 dict = kw;
688 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000689 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000690 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
691 return NULL;
692 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
693 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000694 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000695 if ( err ) {
696 PyErr_Mac(ErrorObject, err);
697 return NULL;
698 }
699 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000700}
701
702static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000703"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000704;
705
706static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000707nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000708{
Jack Jansena07431f1999-12-17 17:14:28 +0000709 PyObject *dict;
710 AEDesc *defaultLocation = NULL;
711 NavReplyRecord reply;
712 NavDialogOptions dialogOptions;
713 NavEventUPP eventProc = NULL;
714 NavObjectFilterUPP filterProc = NULL;
715 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000716
Jack Jansenc33a4232001-01-19 23:46:28 +0000717 if ( kw && PyObject_IsTrue(kw) ) {
718 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000719 return NULL;
720 dict = kw;
721 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000722 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000723 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
724 return NULL;
725 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
726 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000727 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000728 if ( err ) {
729 PyErr_Mac(ErrorObject, err);
730 return NULL;
731 }
732 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000733}
734
735static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000736"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000737;
738
739static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000740nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000741{
Jack Jansena07431f1999-12-17 17:14:28 +0000742 PyObject *dict;
743 AEDesc *defaultLocation = NULL;
744 NavReplyRecord reply;
745 NavDialogOptions dialogOptions;
746 NavEventUPP eventProc = NULL;
747 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000748
Jack Jansenc33a4232001-01-19 23:46:28 +0000749 if ( kw && PyObject_IsTrue(kw) ) {
750 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000751 return NULL;
752 dict = kw;
753 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000754 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000755 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
756 return NULL;
757 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000758 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000759 if ( err ) {
760 PyErr_Mac(ErrorObject, err);
761 return NULL;
762 }
763 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000764}
765
Jack Jansena07431f1999-12-17 17:14:28 +0000766#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000767/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000768static char nav_NavCustomControl__doc__[] =
769""
770;
771
Jack Jansena07431f1999-12-17 17:14:28 +0000772
Jack Jansene91a29d1999-12-16 16:54:55 +0000773static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000774nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000775{
776
777 if (!PyArg_ParseTuple(args, ""))
778 return NULL;
779 Py_INCREF(Py_None);
780 return Py_None;
781}
Jack Jansena07431f1999-12-17 17:14:28 +0000782#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000783
784static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000785"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000786;
787
788static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000789nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000790{
791 Boolean rv;
792 if (!PyArg_ParseTuple(args, ""))
793 return NULL;
794 rv = NavServicesCanRun();
795 return Py_BuildValue("l", (long)rv);
796}
797
798static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000799"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000800;
801
802static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000803nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000804{
805 Boolean rv;
806
807 if (!PyArg_ParseTuple(args, ""))
808 return NULL;
809 rv = NavServicesAvailable();
810 return Py_BuildValue("l", (long)rv);
811}
812/* XX */
813static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000814"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000815;
816
817static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000818nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000819{
820
821 if (!PyArg_ParseTuple(args, ""))
822 return NULL;
823 NavLoad();
824 Py_INCREF(Py_None);
825 return Py_None;
826}
827
828static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000829"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000830;
831
832static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000833nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000834{
835
836 if (!PyArg_ParseTuple(args, ""))
837 return NULL;
838 NavUnload();
839 Py_INCREF(Py_None);
840 return Py_None;
841}
842
843static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000844"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000845;
846
847static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000848nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000849{
850 UInt32 rv;
851
852 if (!PyArg_ParseTuple(args, ""))
853 return NULL;
854 rv = NavLibraryVersion();
855 return Py_BuildValue("l", (long)rv);
856}
857
Jack Jansene91a29d1999-12-16 16:54:55 +0000858static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000859"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000860;
861
862static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000863nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000864{
Jack Jansena07431f1999-12-17 17:14:28 +0000865 NavDialogOptions dialogOptions;
866 OSErr err;
867
868 err = NavGetDefaultDialogOptions(&dialogOptions);
869 if ( err ) {
870 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000871 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000872 }
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000873 return Py_BuildValue(
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000874 "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
Jack Jansena07431f1999-12-17 17:14:28 +0000875 "version", dialogOptions.version,
876 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
877 "location", PyMac_BuildPoint, dialogOptions.location,
878 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
879 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
880 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
881 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
882 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
883 "message", PyMac_BuildStr255, &dialogOptions.message,
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000884 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000885 ,"popupExtension", OptResObj_New, dialogOptions.popupExtension
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000886 );
Jack Jansene91a29d1999-12-16 16:54:55 +0000887}
Jack Jansene91a29d1999-12-16 16:54:55 +0000888
889/* List of methods defined in the module */
890
891static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000892 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
893 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
894 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
895 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
896 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
897 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
898 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
899 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
900 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
901 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000902#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000903 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000904#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000905 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
906 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
907 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
908 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
909 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000910 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000911 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
912};
913
914
915/* Initialization function for the module (*must* be called initNav) */
916
917static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000918"Interface to Navigation Services\n"
919"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
920"if you want the default options.\n"
921"Use NavGetDefaultDialogOptions() to find out common option names.\n"
922"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000923"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000924;
925
Ronald Oussorene50a9fd2009-09-22 14:24:57 +0000926
927#endif /* !__LP64__ */
928
929
Jack Jansene91a29d1999-12-16 16:54:55 +0000930void
Jack Jansen1767f932001-09-04 22:20:39 +0000931initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000932{
933 PyObject *m, *d;
Benjamin Peterson23681932008-05-12 21:42:13 +0000934
935 if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
936 return;
Jack Jansene91a29d1999-12-16 16:54:55 +0000937
Ronald Oussorene50a9fd2009-09-22 14:24:57 +0000938#ifdef __LP64__
939 PyErr_SetString(PyExc_ImportError, "Navigation Services not available in 64-bit mode");
940 return;
941
942#else /* !__LP64__ */
943
Jack Jansen04b85492000-09-14 20:47:00 +0000944 /* Test that we have NavServices */
945 if ( !NavServicesAvailable() ) {
946 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
947 return;
948 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000949 /* Create the module and add the functions */
950 m = Py_InitModule4("Nav", nav_methods,
951 Nav_module_documentation,
952 (PyObject*)NULL,PYTHON_API_VERSION);
953
954 /* Add some symbolic constants to the module */
955 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000956 ErrorObject = PyString_FromString("Nav.error");
Jack Jansene91a29d1999-12-16 16:54:55 +0000957 PyDict_SetItemString(d, "error", ErrorObject);
958
959 /* XXXX Add constants here */
960
Jack Jansena07431f1999-12-17 17:14:28 +0000961 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000962 my_eventProcUPP = NewNavEventUPP(my_eventProc);
963 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
964 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Ronald Oussorene50a9fd2009-09-22 14:24:57 +0000965#endif /* !__LP64__ */
Jack Jansena07431f1999-12-17 17:14:28 +0000966
Jack Jansene91a29d1999-12-16 16:54:55 +0000967}
968