blob: a679df7bb8478960987f02a475ee8b2c597a0c9b [file] [log] [blame]
Jack Jansene91a29d1999-12-16 16:54:55 +00001/***********************************************************
2Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
4
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
16
17While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
29
30******************************************************************/
31
32#include "Python.h"
33#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +000034#include "pymactoolbox.h"
Jack Jansen11296712001-05-22 21:48:40 +000035#ifdef WITHOUT_FRAMEWORKS
Jack Jansene91a29d1999-12-16 16:54:55 +000036#include <Navigation.h>
Jack Jansen11296712001-05-22 21:48:40 +000037#else
38#include <Carbon/Carbon.h>
39#endif
Jack Jansene91a29d1999-12-16 16:54:55 +000040
Jack Jansene91a29d1999-12-16 16:54:55 +000041static PyObject *ErrorObject;
42
Jack Jansena07431f1999-12-17 17:14:28 +000043static NavEventUPP my_eventProcUPP;
44static NavPreviewUPP my_previewProcUPP;
45static NavObjectFilterUPP my_filterProcUPP;
46
47/* Callback functions */
48static pascal void
49my_eventProc(NavEventCallbackMessage callBackSelector,
50 NavCBRecPtr callBackParms,
51 NavCallBackUserData callbackUD)
52{
53 PyObject *dict = (PyObject *)callbackUD;
54 PyObject *pyfunc;
55 PyObject *rv;
56
57 if (!dict) return;
58 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +000059 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000060 return;
61 }
62 if ( pyfunc == Py_None ) {
Jack Jansen569ba102001-09-02 00:08:16 +000063#if !TARGET_API_MAC_OSX
Jack Jansena07431f1999-12-17 17:14:28 +000064 /* Special case: give update events to the Python event handling code */
65 if ( callBackSelector == kNavCBEvent &&
66 callBackParms->eventData.eventDataParms.event->what == updateEvt)
67 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
68 /* Ignore others */
Jack Jansen569ba102001-09-02 00:08:16 +000069#endif
Jack Jansena07431f1999-12-17 17:14:28 +000070 return;
71 }
72 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
73 (void *)callBackParms, sizeof(NavCBRec));
74 if ( rv )
75 Py_DECREF(rv);
76 else {
Jack Jansene58962a2003-01-17 23:13:03 +000077 PySys_WriteStderr("Nav: exception in eventProc callback\n");
78 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +000079 }
80}
81
82static pascal Boolean
83my_previewProc(NavCBRecPtr callBackParms,
84 NavCallBackUserData callbackUD)
85{
86 PyObject *dict = (PyObject *)callbackUD;
87 PyObject *pyfunc;
88 PyObject *rv;
89 Boolean c_rv = false;
90
Jack Jansen1767f932001-09-04 22:20:39 +000091 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +000092 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +000093 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +000094 return false;
Jack Jansena07431f1999-12-17 17:14:28 +000095 }
96 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
97 if ( rv ) {
98 c_rv = PyObject_IsTrue(rv);
99 Py_DECREF(rv);
100 } else {
Jack Jansene58962a2003-01-17 23:13:03 +0000101 PySys_WriteStderr("Nav: exception in previewProc callback\n");
102 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +0000103 }
104 return c_rv;
105}
106
107static pascal Boolean
108my_filterProc(AEDesc *theItem, void *info,
109 NavCallBackUserData callbackUD,
110 NavFilterModes filterMode)
111{
112 PyObject *dict = (PyObject *)callbackUD;
113 PyObject *pyfunc;
114 PyObject *rv;
115 Boolean c_rv = false;
116
Jack Jansen1767f932001-09-04 22:20:39 +0000117 if (!dict) return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000118 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
Jack Jansene58962a2003-01-17 23:13:03 +0000119 PyErr_Print();
Jack Jansen1767f932001-09-04 22:20:39 +0000120 return false;
Jack Jansena07431f1999-12-17 17:14:28 +0000121 }
122 rv = PyObject_CallFunction(pyfunc, "O&s#h",
Jack Jansene58962a2003-01-17 23:13:03 +0000123 AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
Jack Jansena07431f1999-12-17 17:14:28 +0000124 if ( rv ) {
125 c_rv = PyObject_IsTrue(rv);
126 Py_DECREF(rv);
127 } else {
Jack Jansene58962a2003-01-17 23:13:03 +0000128 PySys_WriteStderr("Nav: exception in filterProc callback\n");
129 PyErr_Print();
Jack Jansena07431f1999-12-17 17:14:28 +0000130 }
131 return c_rv;
132}
133
Jack Jansene91a29d1999-12-16 16:54:55 +0000134/* ----------------------------------------------------- */
135static int
136filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000137 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000138 NavDialogOptions *opt,
139 NavEventUPP *eventProcP,
140 NavPreviewUPP *previewProcP,
141 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000142 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000143 OSType *fileTypeP,
144 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000145{
146 int pos = 0;
147 PyObject *key, *value;
148 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000149 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000150
Jack Jansene1a45b31999-12-16 22:21:30 +0000151 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000152
153 while ( PyDict_Next(d, &pos, &key, &value) ) {
154 if ( !key || !value || !PyString_Check(key) ) {
155 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
156 return 0;
157 }
158 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000159 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000160 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
161 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000162 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000163 }
164 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
165 PyMem_DEL(defaultLocation_storage);
166 return 0;
167 }
168 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000169 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansenecc66352003-04-17 20:40:07 +0000170 if ( !PyArg_Parse(value, "H", &opt->version) )
Jack Jansene91a29d1999-12-16 16:54:55 +0000171 return 0;
172 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000173 if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
Jack Jansene91a29d1999-12-16 16:54:55 +0000174 return 0;
175 } else if( strcmp(keystr, "location") == 0 ) {
176 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
177 return 0;
178 } else if( strcmp(keystr, "clientName") == 0 ) {
179 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
180 return 0;
181 } else if( strcmp(keystr, "windowTitle") == 0 ) {
182 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
183 return 0;
184 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
185 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
186 return 0;
187 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
188 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
189 return 0;
190 } else if( strcmp(keystr, "savedFileName") == 0 ) {
191 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
192 return 0;
193 } else if( strcmp(keystr, "message") == 0 ) {
194 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
195 return 0;
196 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
197 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
198 return 0;
199 } else if( strcmp(keystr, "popupExtension") == 0 ) {
200 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
201 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000202 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000203 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000204 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000205 *previewProcP = my_previewProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000206 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansenc99b6752003-01-17 16:14:31 +0000207 *filterProcP = my_filterProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000208 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000209 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
210 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000211 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
212 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000213 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000214 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
215 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000216 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000217 } else {
218 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
219 return 0;
220 }
221 }
222 return 1;
223}
224
225/* ----------------------------------------------------- */
226
227/* Declarations for objects of type NavReplyRecord */
228
229typedef struct {
230 PyObject_HEAD
231 NavReplyRecord itself;
232} navrrobject;
233
Jeremy Hylton938ace62002-07-17 16:30:39 +0000234static PyTypeObject Navrrtype;
Jack Jansene91a29d1999-12-16 16:54:55 +0000235
236
237
238/* ---------------------------------------------------------------- */
239
Jack Jansena07431f1999-12-17 17:14:28 +0000240static char nav_NavTranslateFile__doc__[] =
241"(NavTranslationOptions)->None"
242;
243
244static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000245nav_NavTranslateFile(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000246{
247 NavTranslationOptions howToTranslate;
248 OSErr err;
249
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000250 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000251 return NULL;
252 err = NavTranslateFile(&self->itself, howToTranslate);
253 if ( err ) {
254 PyErr_Mac(ErrorObject, err);
255 return NULL;
256 }
257 Py_INCREF(Py_None);
258 return Py_None;
259}
260
261static char nav_NavCompleteSave__doc__[] =
262"(NavTranslationOptions)->None"
263;
264
265static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000266nav_NavCompleteSave(navrrobject *self, PyObject *args)
Jack Jansena07431f1999-12-17 17:14:28 +0000267{
268 NavTranslationOptions howToTranslate;
269 OSErr err;
270
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000271 if (!PyArg_ParseTuple(args, "k", &howToTranslate))
Jack Jansena07431f1999-12-17 17:14:28 +0000272 return NULL;
273 err = NavCompleteSave(&self->itself, howToTranslate);
274 if ( err ) {
275 PyErr_Mac(ErrorObject, err);
276 return NULL;
277 }
278 Py_INCREF(Py_None);
279 return Py_None;
280}
281
282
Jack Jansene91a29d1999-12-16 16:54:55 +0000283static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000284 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
285 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000286
287 {NULL, NULL} /* sentinel */
288};
289
290/* ---------- */
291
292
293static navrrobject *
294newnavrrobject(NavReplyRecord *itself)
295{
296 navrrobject *self;
297
298 self = PyObject_NEW(navrrobject, &Navrrtype);
299 if (self == NULL)
300 return NULL;
301 self->itself = *itself;
302 return self;
303}
304
305
306static void
Jack Jansen1767f932001-09-04 22:20:39 +0000307navrr_dealloc(navrrobject *self)
Jack Jansene91a29d1999-12-16 16:54:55 +0000308{
309 NavDisposeReply(&self->itself);
Jack Jansen0e2f7982002-05-22 14:31:48 +0000310 PyObject_DEL(self);
Jack Jansene91a29d1999-12-16 16:54:55 +0000311}
312
313static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000314navrr_getattr(navrrobject *self, char *name)
Jack Jansene91a29d1999-12-16 16:54:55 +0000315{
Jack Jansene79dc762000-06-02 21:35:07 +0000316 FSSpec fss;
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000317 FSRef fsr;
Jack Jansene79dc762000-06-02 21:35:07 +0000318
Jack Jansena07431f1999-12-17 17:14:28 +0000319 if( strcmp(name, "__members__") == 0 )
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000320 return Py_BuildValue("ssssssssss", "version", "validRecord", "replacing",
321 "isStationery", "translationNeeded", "selection", "selection_fsr",
322 "fileTranslation", "keyScript", "saveFileName");
Jack Jansene91a29d1999-12-16 16:54:55 +0000323 if( strcmp(name, "version") == 0 )
324 return Py_BuildValue("h", self->itself.version);
325 if( strcmp(name, "validRecord") == 0 )
326 return Py_BuildValue("l", (long)self->itself.validRecord);
327 if( strcmp(name, "replacing") == 0 )
328 return Py_BuildValue("l", (long)self->itself.replacing);
329 if( strcmp(name, "isStationery") == 0 )
330 return Py_BuildValue("l", (long)self->itself.isStationery);
331 if( strcmp(name, "translationNeeded") == 0 )
332 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000333 if( strcmp(name, "selection") == 0 ) {
334 SInt32 i, count;
335 OSErr err;
336 PyObject *rv, *rvitem;
337 AEDesc desc;
338
Jack Jansenb7348692002-12-23 23:16:25 +0000339 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000340 PyErr_Mac(ErrorObject, err);
341 return NULL;
342 }
343 if ( (rv=PyList_New(count)) == NULL )
344 return NULL;
345 for(i=0; i<count; i++) {
346 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000347 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
Jack Jansena07431f1999-12-17 17:14:28 +0000348 Py_DECREF(rv);
349 PyErr_Mac(ErrorObject, err);
350 return NULL;
351 }
Jack Jansenb7348692002-12-23 23:16:25 +0000352 if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
Jack Jansene79dc762000-06-02 21:35:07 +0000353 Py_DECREF(rv);
354 PyErr_Mac(ErrorObject, err);
355 return NULL;
356 }
Jack Jansene79dc762000-06-02 21:35:07 +0000357 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000358 PyList_SetItem(rv, i, rvitem);
359 AEDisposeDesc(&desc);
360 }
361 return rv;
362 }
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000363 if( strcmp(name, "selection_fsr") == 0 ) {
364 SInt32 i, count;
365 OSErr err;
366 PyObject *rv, *rvitem;
367 AEDesc desc;
368
Jack Jansenb7348692002-12-23 23:16:25 +0000369 if ((err=AECountItems(&self->itself.selection, &count))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000370 PyErr_Mac(ErrorObject, err);
371 return NULL;
372 }
373 if ( (rv=PyList_New(count)) == NULL )
374 return NULL;
375 for(i=0; i<count; i++) {
376 desc.dataHandle = NULL;
Jack Jansenb7348692002-12-23 23:16:25 +0000377 if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000378 Py_DECREF(rv);
379 PyErr_Mac(ErrorObject, err);
380 return NULL;
381 }
Jack Jansenb7348692002-12-23 23:16:25 +0000382 if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000383 Py_DECREF(rv);
384 PyErr_Mac(ErrorObject, err);
385 return NULL;
386 }
387 rvitem = PyMac_BuildFSRef(&fsr);
388 PyList_SetItem(rv, i, rvitem);
389 AEDisposeDesc(&desc);
390 }
391 return rv;
392 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000393 if( strcmp(name, "fileTranslation") == 0 )
394 return ResObj_New((Handle)self->itself.fileTranslation);
Jack Jansen4b5c7a42002-11-22 23:39:52 +0000395 if( strcmp(name, "keyScript") == 0 )
396 return Py_BuildValue("h", (short)self->itself.keyScript);
397 if( strcmp(name, "saveFileName") == 0 )
398 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
Jack Jansene91a29d1999-12-16 16:54:55 +0000399
400
401 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
402}
403
404static int
Jack Jansen1767f932001-09-04 22:20:39 +0000405navrr_setattr(navrrobject *self, char *name, PyObject *v)
Jack Jansene91a29d1999-12-16 16:54:55 +0000406{
407 /* Set attribute 'name' to value 'v'. v==NULL means delete */
408
409 /* XXXX Add your own setattr code here */
410 return -1;
411}
412
413static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000414"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000415;
416
417static PyTypeObject Navrrtype = {
418 PyObject_HEAD_INIT(&PyType_Type)
419 0, /*ob_size*/
Guido van Rossum14648392001-12-08 18:02:58 +0000420 "Nav.NavReplyRecord", /*tp_name*/
Jack Jansene91a29d1999-12-16 16:54:55 +0000421 sizeof(navrrobject), /*tp_basicsize*/
422 0, /*tp_itemsize*/
423 /* methods */
424 (destructor)navrr_dealloc, /*tp_dealloc*/
425 (printfunc)0, /*tp_print*/
426 (getattrfunc)navrr_getattr, /*tp_getattr*/
427 (setattrfunc)navrr_setattr, /*tp_setattr*/
428 (cmpfunc)0, /*tp_compare*/
429 (reprfunc)0, /*tp_repr*/
430 0, /*tp_as_number*/
431 0, /*tp_as_sequence*/
432 0, /*tp_as_mapping*/
433 (hashfunc)0, /*tp_hash*/
434 (ternaryfunc)0, /*tp_call*/
435 (reprfunc)0, /*tp_str*/
436
437 /* Space for future expansion */
438 0L,0L,0L,0L,
439 Navrrtype__doc__ /* Documentation string */
440};
441
442/* End of code for NavReplyRecord objects */
443
444/* ----------------------------------------------------- */
445
446static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000447"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000448;
449
450static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000451nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000452{
453 PyObject *dict;
454 AEDesc *defaultLocation = NULL;
455 NavReplyRecord reply;
456 NavDialogOptions dialogOptions;
457 NavEventUPP eventProc = NULL;
458 NavPreviewUPP previewProc = NULL;
459 NavObjectFilterUPP filterProc = NULL;
460 NavTypeListHandle typeList = NULL;
461 OSErr err;
462
Jack Jansenc33a4232001-01-19 23:46:28 +0000463 if ( kw && PyObject_IsTrue(kw) ) {
464 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000465 return NULL;
466 dict = kw;
467 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000468 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000469 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000470 return NULL;
471 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
472 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000473 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000474 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000475 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000476 return NULL;
477 }
478 return (PyObject *)newnavrrobject(&reply);
479}
480
481static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000482"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000483;
484
485static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000486nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000487{
Jack Jansena07431f1999-12-17 17:14:28 +0000488 PyObject *dict;
489 AEDesc *defaultLocation = NULL;
490 NavReplyRecord reply;
491 NavDialogOptions dialogOptions;
492 NavEventUPP eventProc = NULL;
493 OSType fileType;
494 OSType fileCreator;
495 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000496
Jack Jansenc33a4232001-01-19 23:46:28 +0000497 if ( kw && PyObject_IsTrue(kw) ) {
498 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000499 return NULL;
500 dict = kw;
501 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000502 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000503 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
504 return NULL;
505 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
506 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000507 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000508 if ( err ) {
509 PyErr_Mac(ErrorObject, err);
510 return NULL;
511 }
512 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000513}
514
515static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000516"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
517
Jack Jansene91a29d1999-12-16 16:54:55 +0000518;
519
520static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000521nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000522{
Jack Jansena07431f1999-12-17 17:14:28 +0000523 PyObject *dict;
524 NavDialogOptions dialogOptions;
525 NavAskSaveChangesAction action;
526 NavAskSaveChangesResult reply;
527 NavEventUPP eventProc = NULL;
528 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000529
Jack Jansenc33a4232001-01-19 23:46:28 +0000530 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansen84c2b1b2003-04-17 20:44:21 +0000531 if (!PyArg_ParseTuple(args, "k", &action))
Jack Jansena07431f1999-12-17 17:14:28 +0000532 return NULL;
533 dict = kw;
534 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000535 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000536 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
537 return NULL;
538 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
539 if ( err ) {
540 PyErr_Mac(ErrorObject, err);
541 return NULL;
542 }
543 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000544}
545
546static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000547"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000548;
549
550static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000551nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000552{
Jack Jansena07431f1999-12-17 17:14:28 +0000553 PyObject *dict;
554 NavDialogOptions dialogOptions;
555 NavAskSaveChangesResult reply;
556 NavEventUPP eventProc = NULL;
557 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000558
Jack Jansenc33a4232001-01-19 23:46:28 +0000559 if ( kw && PyObject_IsTrue(kw) ) {
560 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000561 return NULL;
562 dict = kw;
563 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000564 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000565 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
566 return NULL;
567 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
568 if ( err ) {
569 PyErr_Mac(ErrorObject, err);
570 return NULL;
571 }
572 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000573}
574
575static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000576"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000577;
578
579static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000580nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000581{
Jack Jansena07431f1999-12-17 17:14:28 +0000582 PyObject *dict;
583 NavDialogOptions dialogOptions;
584 NavAskSaveChangesResult reply;
585 NavEventUPP eventProc = NULL;
586 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000587
Jack Jansenc33a4232001-01-19 23:46:28 +0000588 if ( kw && PyObject_IsTrue(kw) ) {
589 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000590 return NULL;
591 dict = kw;
592 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000593 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000594 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
595 return NULL;
596 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
597 if ( err ) {
598 PyErr_Mac(ErrorObject, err);
599 return NULL;
600 }
601 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000602}
603
604static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000605"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000606;
607
608static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000609nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000610{
Jack Jansena07431f1999-12-17 17:14:28 +0000611 PyObject *dict;
612 AEDesc *defaultLocation = NULL;
613 NavReplyRecord reply;
614 NavDialogOptions dialogOptions;
615 NavEventUPP eventProc = NULL;
616 NavPreviewUPP previewProc = NULL;
617 NavObjectFilterUPP filterProc = NULL;
618 NavTypeListHandle typeList = NULL;
619 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000620
Jack Jansenc33a4232001-01-19 23:46:28 +0000621 if ( kw && PyObject_IsTrue(kw) ) {
622 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000623 return NULL;
624 dict = kw;
625 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000626 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000627 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
628 return NULL;
629 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
630 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000631 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000632 if ( err ) {
633 PyErr_Mac(ErrorObject, err);
634 return NULL;
635 }
636 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000637}
638
639static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000640"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000641;
642
643static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000644nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000645{
Jack Jansena07431f1999-12-17 17:14:28 +0000646 PyObject *dict;
647 AEDesc *defaultLocation = NULL;
648 NavReplyRecord reply;
649 NavDialogOptions dialogOptions;
650 NavEventUPP eventProc = NULL;
651 NavObjectFilterUPP filterProc = NULL;
652 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000653
Jack Jansenc33a4232001-01-19 23:46:28 +0000654 if ( kw && PyObject_IsTrue(kw) ) {
655 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000656 return NULL;
657 dict = kw;
658 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000659 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000660 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
661 return NULL;
662 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
663 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000664 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000665 if ( err ) {
666 PyErr_Mac(ErrorObject, err);
667 return NULL;
668 }
669 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000670}
671
672static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000673"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000674;
675
676static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000677nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000678{
Jack Jansena07431f1999-12-17 17:14:28 +0000679 PyObject *dict;
680 AEDesc *defaultLocation = NULL;
681 NavReplyRecord reply;
682 NavDialogOptions dialogOptions;
683 NavEventUPP eventProc = NULL;
684 NavObjectFilterUPP filterProc = NULL;
685 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000686
Jack Jansenc33a4232001-01-19 23:46:28 +0000687 if ( kw && PyObject_IsTrue(kw) ) {
688 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000689 return NULL;
690 dict = kw;
691 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000692 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000693 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
694 return NULL;
695 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
696 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000697 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000698 if ( err ) {
699 PyErr_Mac(ErrorObject, err);
700 return NULL;
701 }
702 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000703}
704
705static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000706"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000707;
708
709static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000710nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000711{
Jack Jansena07431f1999-12-17 17:14:28 +0000712 PyObject *dict;
713 AEDesc *defaultLocation = NULL;
714 NavReplyRecord reply;
715 NavDialogOptions dialogOptions;
716 NavEventUPP eventProc = NULL;
717 NavObjectFilterUPP filterProc = NULL;
718 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000719
Jack Jansenc33a4232001-01-19 23:46:28 +0000720 if ( kw && PyObject_IsTrue(kw) ) {
721 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000722 return NULL;
723 dict = kw;
724 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000725 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000726 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
727 return NULL;
728 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
729 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000730 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000731 if ( err ) {
732 PyErr_Mac(ErrorObject, err);
733 return NULL;
734 }
735 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000736}
737
738static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000739"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000740;
741
742static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000743nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000744{
Jack Jansena07431f1999-12-17 17:14:28 +0000745 PyObject *dict;
746 AEDesc *defaultLocation = NULL;
747 NavReplyRecord reply;
748 NavDialogOptions dialogOptions;
749 NavEventUPP eventProc = NULL;
750 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000751
Jack Jansenc33a4232001-01-19 23:46:28 +0000752 if ( kw && PyObject_IsTrue(kw) ) {
753 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000754 return NULL;
755 dict = kw;
756 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000757 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000758 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
759 return NULL;
760 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000761 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000762 if ( err ) {
763 PyErr_Mac(ErrorObject, err);
764 return NULL;
765 }
766 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000767}
768
Jack Jansena07431f1999-12-17 17:14:28 +0000769#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000770/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000771static char nav_NavCustomControl__doc__[] =
772""
773;
774
Jack Jansena07431f1999-12-17 17:14:28 +0000775
Jack Jansene91a29d1999-12-16 16:54:55 +0000776static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000777nav_NavCustomControl(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000778{
779
780 if (!PyArg_ParseTuple(args, ""))
781 return NULL;
782 Py_INCREF(Py_None);
783 return Py_None;
784}
Jack Jansena07431f1999-12-17 17:14:28 +0000785#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000786
787static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000788"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000789;
790
791static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000792nav_NavServicesCanRun(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000793{
794 Boolean rv;
795 if (!PyArg_ParseTuple(args, ""))
796 return NULL;
797 rv = NavServicesCanRun();
798 return Py_BuildValue("l", (long)rv);
799}
800
801static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000802"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000803;
804
805static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000806nav_NavServicesAvailable(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000807{
808 Boolean rv;
809
810 if (!PyArg_ParseTuple(args, ""))
811 return NULL;
812 rv = NavServicesAvailable();
813 return Py_BuildValue("l", (long)rv);
814}
815/* XX */
816static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000817"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000818;
819
820static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000821nav_NavLoad(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000822{
823
824 if (!PyArg_ParseTuple(args, ""))
825 return NULL;
826 NavLoad();
827 Py_INCREF(Py_None);
828 return Py_None;
829}
830
831static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000832"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000833;
834
835static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000836nav_NavUnload(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000837{
838
839 if (!PyArg_ParseTuple(args, ""))
840 return NULL;
841 NavUnload();
842 Py_INCREF(Py_None);
843 return Py_None;
844}
845
846static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000847"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000848;
849
850static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000851nav_NavLibraryVersion(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000852{
853 UInt32 rv;
854
855 if (!PyArg_ParseTuple(args, ""))
856 return NULL;
857 rv = NavLibraryVersion();
858 return Py_BuildValue("l", (long)rv);
859}
860
Jack Jansene91a29d1999-12-16 16:54:55 +0000861static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000862"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000863;
864
865static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000866nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
Jack Jansene91a29d1999-12-16 16:54:55 +0000867{
Jack Jansena07431f1999-12-17 17:14:28 +0000868 NavDialogOptions dialogOptions;
869 OSErr err;
870
871 err = NavGetDefaultDialogOptions(&dialogOptions);
872 if ( err ) {
873 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000874 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000875 }
876 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&}",
877 "version", dialogOptions.version,
878 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
879 "location", PyMac_BuildPoint, dialogOptions.location,
880 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
881 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
882 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
883 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
884 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
885 "message", PyMac_BuildStr255, &dialogOptions.message,
886 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
887 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000888}
Jack Jansene91a29d1999-12-16 16:54:55 +0000889
890/* List of methods defined in the module */
891
892static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000893 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
894 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
895 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
896 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
897 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
898 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
899 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
900 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
901 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
902 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000903#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000904 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000905#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000906 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
907 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
908 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
909 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
910 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000911 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000912 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
913};
914
915
916/* Initialization function for the module (*must* be called initNav) */
917
918static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000919"Interface to Navigation Services\n"
920"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
921"if you want the default options.\n"
922"Use NavGetDefaultDialogOptions() to find out common option names.\n"
923"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000924"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000925;
926
927void
Jack Jansen1767f932001-09-04 22:20:39 +0000928initNav(void)
Jack Jansene91a29d1999-12-16 16:54:55 +0000929{
930 PyObject *m, *d;
931
Jack Jansen04b85492000-09-14 20:47:00 +0000932 /* Test that we have NavServices */
933 if ( !NavServicesAvailable() ) {
934 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
935 return;
936 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000937 /* Create the module and add the functions */
938 m = Py_InitModule4("Nav", nav_methods,
939 Nav_module_documentation,
940 (PyObject*)NULL,PYTHON_API_VERSION);
941
942 /* Add some symbolic constants to the module */
943 d = PyModule_GetDict(m);
944 ErrorObject = PyString_FromString("Nav.error");
945 PyDict_SetItemString(d, "error", ErrorObject);
946
947 /* XXXX Add constants here */
948
Jack Jansena07431f1999-12-17 17:14:28 +0000949 /* Set UPPs */
Jack Jansen11296712001-05-22 21:48:40 +0000950 my_eventProcUPP = NewNavEventUPP(my_eventProc);
951 my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
952 my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
Jack Jansena07431f1999-12-17 17:14:28 +0000953
Jack Jansene91a29d1999-12-16 16:54:55 +0000954}
955