blob: 3e2d9d670159078d8c7691de0e005dd92bb697e0 [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) ) {
Christian Heimes593daf52008-05-26 12:51:38 +0000142 if ( !key || !value || !PyBytes_Check(key) ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000143 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
144 return 0;
145 }
Christian Heimes593daf52008-05-26 12:51:38 +0000146 keystr = PyBytes_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;
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000187#ifndef __LP64__
Jack Jansene91a29d1999-12-16 16:54:55 +0000188 } else if( strcmp(keystr, "popupExtension") == 0 ) {
189 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
190 return 0;
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000191#endif /* !__LP64__ */
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;
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000198#ifndef __LP64__
Jack Jansene1a45b31999-12-16 22:21:30 +0000199 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000200 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
201 return 0;
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000202#endif /* !__LP64__ */
Jack Jansena07431f1999-12-17 17:14:28 +0000203 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
204 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000205 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000206 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
207 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000208 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000209 } else {
210 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
211 return 0;
212 }
213 }
214 return 1;
215}
216
217/* ----------------------------------------------------- */
218
219/* Declarations for objects of type NavReplyRecord */
220
221typedef struct {
222 PyObject_HEAD
223 NavReplyRecord itself;
224} navrrobject;
225
Jeremy Hylton938ace62002-07-17 16:30:39 +0000226static PyTypeObject Navrrtype;
Jack Jansene91a29d1999-12-16 16:54:55 +0000227
228
229
230/* ---------------------------------------------------------------- */
231
Jack Jansena07431f1999-12-17 17:14:28 +0000232static char nav_NavTranslateFile__doc__[] =
233"(NavTranslationOptions)->None"
234;
235
236static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000237nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000238{
239 NavTranslationOptions howToTranslate;
240 OSErr err;
241
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000242 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000243 return NULL;
244 err = NavTranslateFile(&self->itself, howToTranslate);
245 if ( err ) {
246 PyErr_Mac(ErrorObject, err);
247 return NULL;
248 }
249 Py_INCREF(Py_None);
250 return Py_None;
251}
252
253static char nav_NavCompleteSave__doc__[] =
254"(NavTranslationOptions)->None"
255;
256
257static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000258nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000259{
260 NavTranslationOptions howToTranslate;
261 OSErr err;
262
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000263 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000264 return NULL;
265 err = NavCompleteSave(&self->itself, howToTranslate);
266 if ( err ) {
267 PyErr_Mac(ErrorObject, err);
268 return NULL;
269 }
270 Py_INCREF(Py_None);
271 return Py_None;
272}
273
274
Jack Jansene91a29d1999-12-16 16:54:55 +0000275static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000276 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
277 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000278
279 {NULL, NULL} /* sentinel */
280};
281
282/* ---------- */
283
284
285static navrrobject *
286newnavrrobject(NavReplyRecord *itself)
287{
288 navrrobject *self;
289
290 self = PyObject_NEW(navrrobject, &Navrrtype);
291 if (self == NULL)
292 return NULL;
293 self->itself = *itself;
294 return self;
295}
296
297
298static void
Jack Jansen1767f932001-09-04 22:20:39 +0000299navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000300{
301 NavDisposeReply(&self->itself);
Jack Jansen0e2f7982002-05-22 14:31:48 +0000302 PyObject_DEL(self);
Jack Jansene91a29d1999-12-16 16:54:55 +0000303}
304
305static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000306navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000307{
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000308 FSRef fsr;
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000309#ifndef __LP64__
310 FSSpec fss;
311#endif /* !__LP64__ */
Jack Jansene79dc762000-06-02 21:35:07 +0000312
Jack Jansena07431f1999-12-17 17:14:28 +0000313 if( strcmp(name, "__members__") == 0 )
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000314 return Py_BuildValue(
315#ifndef __LP64__
316 "ssssssssss",
317#else /* __LP64__ */
318 "ssssssssss",
319#endif /* __LP64__ */
320 "version", "validRecord", "replacing",
321 "isStationery", "translationNeeded",
322#ifndef __LP64__
323 "selection",
324#endif /* !__LP64__ */
325 "selection_fsr",
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000326 "fileTranslation", "keyScript", "saveFileName");
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000327
Jack Jansene91a29d1999-12-16 16:54:55 +0000328 if( strcmp(name, "version") == 0 )
329 return Py_BuildValue("h", self->itself.version);
330 if( strcmp(name, "validRecord") == 0 )
331 return Py_BuildValue("l", (long)self->itself.validRecord);
332 if( strcmp(name, "replacing") == 0 )
333 return Py_BuildValue("l", (long)self->itself.replacing);
334 if( strcmp(name, "isStationery") == 0 )
335 return Py_BuildValue("l", (long)self->itself.isStationery);
336 if( strcmp(name, "translationNeeded") == 0 )
337 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000338#ifndef __LP64__
Jack Jansena07431f1999-12-17 17:14:28 +0000339 if( strcmp(name, "selection") == 0 ) {
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000340 SInt32 i;
341 long count;
Jack Jansena07431f1999-12-17 17:14:28 +0000342 OSErr err;
343 PyObject *rv, *rvitem;
344 AEDesc desc;
345
Jack Jansenb7348692002-12-23 23:16:25 +0000346 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000347 PyErr_Mac(ErrorObject, err);
348 return NULL;
349 }
350 if ( (rv=PyList_New(count)) == NULL )
351 return NULL;
352 for(i=0; i<count; i++) {
353 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000354 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000355 Py_DECREF(rv);
356 PyErr_Mac(ErrorObject, err);
357 return NULL;
358 }
Jack Jansenb7348692002-12-23 23:16:25 +0000359 if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
Jack Jansene79dc762000-06-02 21:35:07 +0000360 Py_DECREF(rv);
361 PyErr_Mac(ErrorObject, err);
362 return NULL;
363 }
Jack Jansene79dc762000-06-02 21:35:07 +0000364 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000365 PyList_SetItem(rv, i, rvitem);
366 AEDisposeDesc(&desc);
367 }
368 return rv;
369 }
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000370#endif /* !__LP64__ */
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000371 if( strcmp(name, "selection_fsr") == 0 ) {
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000372 SInt32 i;
373 long count;
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000374 OSErr err;
375 PyObject *rv, *rvitem;
376 AEDesc desc;
377
Jack Jansenb7348692002-12-23 23:16:25 +0000378 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000379 PyErr_Mac(ErrorObject, err);
380 return NULL;
381 }
382 if ( (rv=PyList_New(count)) == NULL )
383 return NULL;
384 for(i=0; i<count; i++) {
385 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000386 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000387 Py_DECREF(rv);
388 PyErr_Mac(ErrorObject, err);
389 return NULL;
390 }
Jack Jansenb7348692002-12-23 23:16:25 +0000391 if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000392 Py_DECREF(rv);
393 PyErr_Mac(ErrorObject, err);
394 return NULL;
395 }
396 rvitem = PyMac_BuildFSRef(&fsr);
397 PyList_SetItem(rv, i, rvitem);
398 AEDisposeDesc(&desc);
399 }
400 return rv;
401 }
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000402#ifndef __LP64__
Jack Jansene91a29d1999-12-16 16:54:55 +0000403 if( strcmp(name, "fileTranslation") == 0 )
404 return ResObj_New((Handle)self->itself.fileTranslation);
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000405#endif
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000406 if( strcmp(name, "keyScript") == 0 )
407 return Py_BuildValue("h", (short)self->itself.keyScript);
408 if( strcmp(name, "saveFileName") == 0 )
409 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000410
411
412 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
413}
414
415static int
Jack Jansen1767f932001-09-04 22:20:39 +0000416navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000417{
418 /* Set attribute 'name' to value 'v'. v==NULL means delete */
419
420 /* XXXX Add your own setattr code here */
421 return -1;
422}
423
424static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000425"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000426;
427
428static PyTypeObject Navrrtype = {
429 PyObject_HEAD_INIT(&PyType_Type)
430 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000431 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000432 sizeof(navrrobject), /*tp_basicsize*/
433 0, /*tp_itemsize*/
434 /* methods */
435 (destructor)navrr_dealloc, /*tp_dealloc*/
436 (printfunc)0, /*tp_print*/
437 (getattrfunc)navrr_getattr, /*tp_getattr*/
438 (setattrfunc)navrr_setattr, /*tp_setattr*/
439 (cmpfunc)0, /*tp_compare*/
440 (reprfunc)0, /*tp_repr*/
441 0, /*tp_as_number*/
442 0, /*tp_as_sequence*/
443 0, /*tp_as_mapping*/
444 (hashfunc)0, /*tp_hash*/
445 (ternaryfunc)0, /*tp_call*/
446 (reprfunc)0, /*tp_str*/
447
448 /* Space for future expansion */
449 0L,0L,0L,0L,
450 Navrrtype__doc__ /* Documentation string */
451};
452
453/* End of code for NavReplyRecord objects */
454
455/* ----------------------------------------------------- */
456
457static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000458"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000459;
460
461static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000462nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000463{
464 PyObject *dict;
465 AEDesc *defaultLocation = NULL;
466 NavReplyRecord reply;
467 NavDialogOptions dialogOptions;
468 NavEventUPP eventProc = NULL;
469 NavPreviewUPP previewProc = NULL;
470 NavObjectFilterUPP filterProc = NULL;
471 NavTypeListHandle typeList = NULL;
472 OSErr err;
473
Jack Jansenc33a4232001-01-19 23:46:28 +0000474 if ( kw && PyObject_IsTrue(kw) ) {
475 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000476 return NULL;
477 dict = kw;
478 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000479 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000480 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000481 return NULL;
482 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
483 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000484 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000485 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000486 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000487 return NULL;
488 }
489 return (PyObject *)newnavrrobject(&reply);
490}
491
492static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000493"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000494;
495
496static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000497nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000498{
Jack Jansena07431f1999-12-17 17:14:28 +0000499 PyObject *dict;
500 AEDesc *defaultLocation = NULL;
501 NavReplyRecord reply;
502 NavDialogOptions dialogOptions;
503 NavEventUPP eventProc = NULL;
504 OSType fileType;
505 OSType fileCreator;
506 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000507
Jack Jansenc33a4232001-01-19 23:46:28 +0000508 if ( kw && PyObject_IsTrue(kw) ) {
509 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000510 return NULL;
511 dict = kw;
512 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000513 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000514 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
515 return NULL;
516 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
517 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000518 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000519 if ( err ) {
520 PyErr_Mac(ErrorObject, err);
521 return NULL;
522 }
523 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000524}
525
526static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000527"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
528
Jack Jansene91a29d1999-12-16 16:54:55 +0000529;
530
531static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000532nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000533{
Jack Jansena07431f1999-12-17 17:14:28 +0000534 PyObject *dict;
535 NavDialogOptions dialogOptions;
536 NavAskSaveChangesAction action;
537 NavAskSaveChangesResult reply;
538 NavEventUPP eventProc = NULL;
539 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000540
Jack Jansenc33a4232001-01-19 23:46:28 +0000541 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000542 if (!PyArg_ParseTuple(args, "k", &action))
Jack Jansena07431f1999-12-17 17:14:28 +0000543 return NULL;
544 dict = kw;
545 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000546 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000547 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
548 return NULL;
549 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
550 if ( err ) {
551 PyErr_Mac(ErrorObject, err);
552 return NULL;
553 }
554 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000555}
556
557static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000558"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000559;
560
561static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000562nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000563{
Jack Jansena07431f1999-12-17 17:14:28 +0000564 PyObject *dict;
565 NavDialogOptions dialogOptions;
566 NavAskSaveChangesResult reply;
567 NavEventUPP eventProc = NULL;
568 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000569
Jack Jansenc33a4232001-01-19 23:46:28 +0000570 if ( kw && PyObject_IsTrue(kw) ) {
571 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000572 return NULL;
573 dict = kw;
574 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000575 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000576 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
577 return NULL;
578 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
579 if ( err ) {
580 PyErr_Mac(ErrorObject, err);
581 return NULL;
582 }
583 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000584}
585
586static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000587"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000588;
589
590static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000591nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000592{
Jack Jansena07431f1999-12-17 17:14:28 +0000593 PyObject *dict;
594 NavDialogOptions dialogOptions;
595 NavAskSaveChangesResult reply;
596 NavEventUPP eventProc = NULL;
597 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000598
Jack Jansenc33a4232001-01-19 23:46:28 +0000599 if ( kw && PyObject_IsTrue(kw) ) {
600 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000601 return NULL;
602 dict = kw;
603 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000604 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000605 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
606 return NULL;
607 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
608 if ( err ) {
609 PyErr_Mac(ErrorObject, err);
610 return NULL;
611 }
612 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000613}
614
615static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000616"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000617;
618
619static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000620nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000621{
Jack Jansena07431f1999-12-17 17:14:28 +0000622 PyObject *dict;
623 AEDesc *defaultLocation = NULL;
624 NavReplyRecord reply;
625 NavDialogOptions dialogOptions;
626 NavEventUPP eventProc = NULL;
627 NavPreviewUPP previewProc = NULL;
628 NavObjectFilterUPP filterProc = NULL;
629 NavTypeListHandle typeList = NULL;
630 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000631
Jack Jansenc33a4232001-01-19 23:46:28 +0000632 if ( kw && PyObject_IsTrue(kw) ) {
633 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000634 return NULL;
635 dict = kw;
636 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000637 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000638 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
639 return NULL;
640 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
641 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000642 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000643 if ( err ) {
644 PyErr_Mac(ErrorObject, err);
645 return NULL;
646 }
647 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000648}
649
650static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000651"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000652;
653
654static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000655nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000656{
Jack Jansena07431f1999-12-17 17:14:28 +0000657 PyObject *dict;
658 AEDesc *defaultLocation = NULL;
659 NavReplyRecord reply;
660 NavDialogOptions dialogOptions;
661 NavEventUPP eventProc = NULL;
662 NavObjectFilterUPP filterProc = NULL;
663 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000664
Jack Jansenc33a4232001-01-19 23:46:28 +0000665 if ( kw && PyObject_IsTrue(kw) ) {
666 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000667 return NULL;
668 dict = kw;
669 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000670 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000671 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
672 return NULL;
673 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
674 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000675 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000676 if ( err ) {
677 PyErr_Mac(ErrorObject, err);
678 return NULL;
679 }
680 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000681}
682
683static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000684"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000685;
686
687static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000688nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000689{
Jack Jansena07431f1999-12-17 17:14:28 +0000690 PyObject *dict;
691 AEDesc *defaultLocation = NULL;
692 NavReplyRecord reply;
693 NavDialogOptions dialogOptions;
694 NavEventUPP eventProc = NULL;
695 NavObjectFilterUPP filterProc = NULL;
696 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000697
Jack Jansenc33a4232001-01-19 23:46:28 +0000698 if ( kw && PyObject_IsTrue(kw) ) {
699 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000700 return NULL;
701 dict = kw;
702 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000703 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000704 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
705 return NULL;
706 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
707 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000708 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000709 if ( err ) {
710 PyErr_Mac(ErrorObject, err);
711 return NULL;
712 }
713 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000714}
715
716static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000717"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000718;
719
720static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000721nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000722{
Jack Jansena07431f1999-12-17 17:14:28 +0000723 PyObject *dict;
724 AEDesc *defaultLocation = NULL;
725 NavReplyRecord reply;
726 NavDialogOptions dialogOptions;
727 NavEventUPP eventProc = NULL;
728 NavObjectFilterUPP filterProc = NULL;
729 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000730
Jack Jansenc33a4232001-01-19 23:46:28 +0000731 if ( kw && PyObject_IsTrue(kw) ) {
732 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000733 return NULL;
734 dict = kw;
735 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000736 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000737 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
738 return NULL;
739 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
740 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000741 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000742 if ( err ) {
743 PyErr_Mac(ErrorObject, err);
744 return NULL;
745 }
746 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000747}
748
749static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000750"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000751;
752
753static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000754nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000755{
Jack Jansena07431f1999-12-17 17:14:28 +0000756 PyObject *dict;
757 AEDesc *defaultLocation = NULL;
758 NavReplyRecord reply;
759 NavDialogOptions dialogOptions;
760 NavEventUPP eventProc = NULL;
761 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000762
Jack Jansenc33a4232001-01-19 23:46:28 +0000763 if ( kw && PyObject_IsTrue(kw) ) {
764 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000765 return NULL;
766 dict = kw;
767 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000768 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000769 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
770 return NULL;
771 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000772 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000773 if ( err ) {
774 PyErr_Mac(ErrorObject, err);
775 return NULL;
776 }
777 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000778}
779
Jack Jansena07431f1999-12-17 17:14:28 +0000780#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000781/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000782static char nav_NavCustomControl__doc__[] =
783""
784;
785
Jack Jansena07431f1999-12-17 17:14:28 +0000786
Jack Jansene91a29d1999-12-16 16:54:55 +0000787static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000788nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000789{
790
791 if (!PyArg_ParseTuple(args, ""))
792 return NULL;
793 Py_INCREF(Py_None);
794 return Py_None;
795}
Jack Jansena07431f1999-12-17 17:14:28 +0000796#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000797
798static char nav_NavServicesCanRun__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_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000804{
805 Boolean rv;
806 if (!PyArg_ParseTuple(args, ""))
807 return NULL;
808 rv = NavServicesCanRun();
809 return Py_BuildValue("l", (long)rv);
810}
811
812static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000813"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000814;
815
816static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000817nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000818{
819 Boolean rv;
820
821 if (!PyArg_ParseTuple(args, ""))
822 return NULL;
823 rv = NavServicesAvailable();
824 return Py_BuildValue("l", (long)rv);
825}
826/* XX */
827static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000828"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000829;
830
831static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000832nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000833{
834
835 if (!PyArg_ParseTuple(args, ""))
836 return NULL;
837 NavLoad();
838 Py_INCREF(Py_None);
839 return Py_None;
840}
841
842static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000843"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000844;
845
846static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000847nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000848{
849
850 if (!PyArg_ParseTuple(args, ""))
851 return NULL;
852 NavUnload();
853 Py_INCREF(Py_None);
854 return Py_None;
855}
856
857static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000858"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000859;
860
861static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000862nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000863{
864 UInt32 rv;
865
866 if (!PyArg_ParseTuple(args, ""))
867 return NULL;
868 rv = NavLibraryVersion();
869 return Py_BuildValue("l", (long)rv);
870}
871
Jack Jansene91a29d1999-12-16 16:54:55 +0000872static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000873"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000874;
875
876static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000877nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000878{
Jack Jansena07431f1999-12-17 17:14:28 +0000879 NavDialogOptions dialogOptions;
880 OSErr err;
881
882 err = NavGetDefaultDialogOptions(&dialogOptions);
883 if ( err ) {
884 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000885 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000886 }
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000887 return Py_BuildValue(
888#ifndef __LP64__
889 "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
890#else /* __LP64__ */
891 "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
892#endif /* __LP64__ */
Jack Jansena07431f1999-12-17 17:14:28 +0000893 "version", dialogOptions.version,
894 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
895 "location", PyMac_BuildPoint, dialogOptions.location,
896 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
897 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
898 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
899 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
900 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
901 "message", PyMac_BuildStr255, &dialogOptions.message,
Ronald Oussoren5640ce22008-06-05 12:58:24 +0000902 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
903#ifndef __LP64__
904 ,"popupExtension", OptResObj_New, dialogOptions.popupExtension
905#endif /* __LP64__ */
906 );
Jack Jansene91a29d1999-12-16 16:54:55 +0000907}
Jack Jansene91a29d1999-12-16 16:54:55 +0000908
909/* List of methods defined in the module */
910
911static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000912 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
913 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
914 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
915 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
916 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
917 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
918 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
919 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
920 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
921 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000922#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000923 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000924#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000925 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
926 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
927 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
928 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
929 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000930 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000931 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
932};
933
934
935/* Initialization function for the module (*must* be called initNav) */
936
937static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000938"Interface to Navigation Services\n"
939"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
940"if you want the default options.\n"
941"Use NavGetDefaultDialogOptions() to find out common option names.\n"
942"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000943"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000944;
945
946void
Jack Jansen1767f932001-09-04 22:20:39 +0000947initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000948{
949 PyObject *m, *d;
Benjamin Peterson23681932008-05-12 21:42:13 +0000950
951 if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
952 return;
Jack Jansene91a29d1999-12-16 16:54:55 +0000953
Jack Jansen04b85492000-09-14 20:47:00 +0000954 /* Test that we have NavServices */
955 if ( !NavServicesAvailable() ) {
956 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
957 return;
958 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000959 /* Create the module and add the functions */
960 m = Py_InitModule4("Nav", nav_methods,
961 Nav_module_documentation,
962 (PyObject*)NULL,PYTHON_API_VERSION);
963
964 /* Add some symbolic constants to the module */
965 d = PyModule_GetDict(m);
Christian Heimes593daf52008-05-26 12:51:38 +0000966 ErrorObject = PyBytes_FromString("Nav.error");
Jack Jansene91a29d1999-12-16 16:54:55 +0000967 PyDict_SetItemString(d, "error", ErrorObject);
968
969 /* XXXX Add constants here */
970
Jack Jansena07431f1999-12-17 17:14:28 +0000971 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000972 my_eventProcUPP = NewNavEventUPP(my_eventProc);
973 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
974 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000975
Jack Jansene91a29d1999-12-16 16:54:55 +0000976}
977