blob: ff7724e5306d4254bbc38f4326e474d395ce0587 [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 ) {
59 PyErr_Clear();
60 return;
61 }
62 if ( pyfunc == Py_None ) {
63 /* Special case: give update events to the Python event handling code */
64 if ( callBackSelector == kNavCBEvent &&
65 callBackParms->eventData.eventDataParms.event->what == updateEvt)
66 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
67 /* Ignore others */
68 return;
69 }
70 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
71 (void *)callBackParms, sizeof(NavCBRec));
72 if ( rv )
73 Py_DECREF(rv);
74 else {
75 fprintf(stderr, "Nav: exception in eventProc callback\n");
76 PyErr_Clear();
77 }
78}
79
80static pascal Boolean
81my_previewProc(NavCBRecPtr callBackParms,
82 NavCallBackUserData callbackUD)
83{
84 PyObject *dict = (PyObject *)callbackUD;
85 PyObject *pyfunc;
86 PyObject *rv;
87 Boolean c_rv = false;
88
89 if (!dict) return;
90 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
91 PyErr_Clear();
92 return;
93 }
94 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
95 if ( rv ) {
96 c_rv = PyObject_IsTrue(rv);
97 Py_DECREF(rv);
98 } else {
99 fprintf(stderr, "Nav: exception in previewProc callback\n");
100 PyErr_Clear();
101 }
102 return c_rv;
103}
104
105static pascal Boolean
106my_filterProc(AEDesc *theItem, void *info,
107 NavCallBackUserData callbackUD,
108 NavFilterModes filterMode)
109{
110 PyObject *dict = (PyObject *)callbackUD;
111 PyObject *pyfunc;
112 PyObject *rv;
113 Boolean c_rv = false;
114
115 if (!dict) return;
116 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
117 PyErr_Clear();
118 return;
119 }
120 rv = PyObject_CallFunction(pyfunc, "O&s#h",
121 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
122 if ( rv ) {
123 c_rv = PyObject_IsTrue(rv);
124 Py_DECREF(rv);
125 } else {
126 fprintf(stderr, "Nav: exception in filterProc callback\n");
127 PyErr_Clear();
128 }
129 return c_rv;
130}
131
Jack Jansene91a29d1999-12-16 16:54:55 +0000132/* ----------------------------------------------------- */
133static int
134filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000135 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000136 NavDialogOptions *opt,
137 NavEventUPP *eventProcP,
138 NavPreviewUPP *previewProcP,
139 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000140 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000141 OSType *fileTypeP,
142 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000143{
144 int pos = 0;
145 PyObject *key, *value;
146 char *keystr;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000147 AEDesc *defaultLocation_storage;
Jack Jansene91a29d1999-12-16 16:54:55 +0000148
Jack Jansene1a45b31999-12-16 22:21:30 +0000149 NavGetDefaultDialogOptions(opt);
Jack Jansene91a29d1999-12-16 16:54:55 +0000150
151 while ( PyDict_Next(d, &pos, &key, &value) ) {
152 if ( !key || !value || !PyString_Check(key) ) {
153 PyErr_SetString(ErrorObject, "DialogOption has non-string key");
154 return 0;
155 }
156 keystr = PyString_AsString(key);
Jack Jansena07431f1999-12-17 17:14:28 +0000157 if( strcmp(keystr, "defaultLocation") == 0 ) {
Jack Jansen2c6cf972000-01-13 16:24:32 +0000158 if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
159 PyErr_NoMemory();
Jack Jansena07431f1999-12-17 17:14:28 +0000160 return 0;
Jack Jansen2c6cf972000-01-13 16:24:32 +0000161 }
162 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
163 PyMem_DEL(defaultLocation_storage);
164 return 0;
165 }
166 *defaultLocationP = defaultLocation_storage;
Jack Jansena07431f1999-12-17 17:14:28 +0000167 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000168 if ( !PyArg_Parse(value, "h", &opt->version) )
169 return 0;
170 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
171 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
172 return 0;
173 } else if( strcmp(keystr, "location") == 0 ) {
174 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
175 return 0;
176 } else if( strcmp(keystr, "clientName") == 0 ) {
177 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
178 return 0;
179 } else if( strcmp(keystr, "windowTitle") == 0 ) {
180 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
181 return 0;
182 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
183 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
184 return 0;
185 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
186 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
187 return 0;
188 } else if( strcmp(keystr, "savedFileName") == 0 ) {
189 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
190 return 0;
191 } else if( strcmp(keystr, "message") == 0 ) {
192 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
193 return 0;
194 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
195 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
196 return 0;
197 } else if( strcmp(keystr, "popupExtension") == 0 ) {
198 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
199 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000200 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000201 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000202 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000203 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
204 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000205 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000206 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
207 return 0;
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
234staticforward PyTypeObject Navrrtype;
235
236
237
238/* ---------------------------------------------------------------- */
239
Jack Jansena07431f1999-12-17 17:14:28 +0000240static char nav_NavTranslateFile__doc__[] =
241"(NavTranslationOptions)->None"
242;
243
244static PyObject *
245nav_NavTranslateFile(self, args)
246 navrrobject *self;
247 PyObject *args;
248{
249 NavTranslationOptions howToTranslate;
250 OSErr err;
251
252 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
253 return NULL;
254 err = NavTranslateFile(&self->itself, howToTranslate);
255 if ( err ) {
256 PyErr_Mac(ErrorObject, err);
257 return NULL;
258 }
259 Py_INCREF(Py_None);
260 return Py_None;
261}
262
263static char nav_NavCompleteSave__doc__[] =
264"(NavTranslationOptions)->None"
265;
266
267static PyObject *
268nav_NavCompleteSave(self, args)
269 navrrobject *self;
270 PyObject *args;
271{
272 NavTranslationOptions howToTranslate;
273 OSErr err;
274
275 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
276 return NULL;
277 err = NavCompleteSave(&self->itself, howToTranslate);
278 if ( err ) {
279 PyErr_Mac(ErrorObject, err);
280 return NULL;
281 }
282 Py_INCREF(Py_None);
283 return Py_None;
284}
285
286
Jack Jansene91a29d1999-12-16 16:54:55 +0000287static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000288 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
289 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000290
291 {NULL, NULL} /* sentinel */
292};
293
294/* ---------- */
295
296
297static navrrobject *
298newnavrrobject(NavReplyRecord *itself)
299{
300 navrrobject *self;
301
302 self = PyObject_NEW(navrrobject, &Navrrtype);
303 if (self == NULL)
304 return NULL;
305 self->itself = *itself;
306 return self;
307}
308
309
310static void
311navrr_dealloc(self)
312 navrrobject *self;
313{
314 NavDisposeReply(&self->itself);
315 PyMem_DEL(self);
316}
317
318static PyObject *
319navrr_getattr(self, name)
320 navrrobject *self;
321 char *name;
322{
Jack Jansene79dc762000-06-02 21:35:07 +0000323 FSSpec fss;
324
Jack Jansena07431f1999-12-17 17:14:28 +0000325 if( strcmp(name, "__members__") == 0 )
326 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
327 "isStationery", "translationNeeded", "selection", "fileTranslation");
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);
Jack Jansena07431f1999-12-17 17:14:28 +0000338 if( strcmp(name, "selection") == 0 ) {
339 SInt32 i, count;
340 OSErr err;
341 PyObject *rv, *rvitem;
342 AEDesc desc;
343
344 if (err=AECountItems(&self->itself.selection, &count)) {
345 PyErr_Mac(ErrorObject, err);
346 return NULL;
347 }
348 if ( (rv=PyList_New(count)) == NULL )
349 return NULL;
350 for(i=0; i<count; i++) {
351 desc.dataHandle = NULL;
352 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
353 Py_DECREF(rv);
354 PyErr_Mac(ErrorObject, err);
355 return NULL;
356 }
Jack Jansen74a1e632000-07-14 22:37:27 +0000357#if TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000358 if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
359 Py_DECREF(rv);
360 PyErr_Mac(ErrorObject, err);
361 return NULL;
362 }
363#else
364 memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
365#endif
366 rvitem = PyMac_BuildFSSpec(&fss);
Jack Jansena07431f1999-12-17 17:14:28 +0000367 PyList_SetItem(rv, i, rvitem);
368 AEDisposeDesc(&desc);
369 }
370 return rv;
371 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000372 if( strcmp(name, "fileTranslation") == 0 )
373 return ResObj_New((Handle)self->itself.fileTranslation);
374
375
376 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
377}
378
379static int
380navrr_setattr(self, name, v)
381 navrrobject *self;
382 char *name;
383 PyObject *v;
384{
385 /* Set attribute 'name' to value 'v'. v==NULL means delete */
386
387 /* XXXX Add your own setattr code here */
388 return -1;
389}
390
391static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000392"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000393;
394
395static PyTypeObject Navrrtype = {
396 PyObject_HEAD_INIT(&PyType_Type)
397 0, /*ob_size*/
398 "NavReplyRecord", /*tp_name*/
399 sizeof(navrrobject), /*tp_basicsize*/
400 0, /*tp_itemsize*/
401 /* methods */
402 (destructor)navrr_dealloc, /*tp_dealloc*/
403 (printfunc)0, /*tp_print*/
404 (getattrfunc)navrr_getattr, /*tp_getattr*/
405 (setattrfunc)navrr_setattr, /*tp_setattr*/
406 (cmpfunc)0, /*tp_compare*/
407 (reprfunc)0, /*tp_repr*/
408 0, /*tp_as_number*/
409 0, /*tp_as_sequence*/
410 0, /*tp_as_mapping*/
411 (hashfunc)0, /*tp_hash*/
412 (ternaryfunc)0, /*tp_call*/
413 (reprfunc)0, /*tp_str*/
414
415 /* Space for future expansion */
416 0L,0L,0L,0L,
417 Navrrtype__doc__ /* Documentation string */
418};
419
420/* End of code for NavReplyRecord objects */
421
422/* ----------------------------------------------------- */
423
424static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000425"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000426;
427
428static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000429nav_NavGetFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000430 PyObject *self; /* Not used */
431 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000432 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000433{
434 PyObject *dict;
435 AEDesc *defaultLocation = NULL;
436 NavReplyRecord reply;
437 NavDialogOptions dialogOptions;
438 NavEventUPP eventProc = NULL;
439 NavPreviewUPP previewProc = NULL;
440 NavObjectFilterUPP filterProc = NULL;
441 NavTypeListHandle typeList = NULL;
442 OSErr err;
443
Jack Jansenc33a4232001-01-19 23:46:28 +0000444 if ( kw && PyObject_IsTrue(kw) ) {
445 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansene1a45b31999-12-16 22:21:30 +0000446 return NULL;
447 dict = kw;
448 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000449 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000450 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000451 return NULL;
452 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
453 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000454 PyMem_DEL(defaultLocation);
Jack Jansene91a29d1999-12-16 16:54:55 +0000455 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000456 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000457 return NULL;
458 }
459 return (PyObject *)newnavrrobject(&reply);
460}
461
462static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000463"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000464;
465
466static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000467nav_NavPutFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000468 PyObject *self; /* Not used */
469 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000470 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000471{
Jack Jansena07431f1999-12-17 17:14:28 +0000472 PyObject *dict;
473 AEDesc *defaultLocation = NULL;
474 NavReplyRecord reply;
475 NavDialogOptions dialogOptions;
476 NavEventUPP eventProc = NULL;
477 OSType fileType;
478 OSType fileCreator;
479 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000480
Jack Jansenc33a4232001-01-19 23:46:28 +0000481 if ( kw && PyObject_IsTrue(kw) ) {
482 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000483 return NULL;
484 dict = kw;
485 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000486 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000487 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
488 return NULL;
489 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
490 eventProc, fileType, fileCreator, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000491 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000492 if ( err ) {
493 PyErr_Mac(ErrorObject, err);
494 return NULL;
495 }
496 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000497}
498
499static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000500"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
501
Jack Jansene91a29d1999-12-16 16:54:55 +0000502;
503
504static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000505nav_NavAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000506 PyObject *self; /* Not used */
507 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000508 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000509{
Jack Jansena07431f1999-12-17 17:14:28 +0000510 PyObject *dict;
511 NavDialogOptions dialogOptions;
512 NavAskSaveChangesAction action;
513 NavAskSaveChangesResult reply;
514 NavEventUPP eventProc = NULL;
515 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000516
Jack Jansenc33a4232001-01-19 23:46:28 +0000517 if ( kw && PyObject_IsTrue(kw) ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000518 if (!PyArg_ParseTuple(args, "l", &action))
519 return NULL;
520 dict = kw;
521 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000522 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000523 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
524 return NULL;
525 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
526 if ( err ) {
527 PyErr_Mac(ErrorObject, err);
528 return NULL;
529 }
530 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000531}
532
533static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000534"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000535;
536
537static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000538nav_NavCustomAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000539 PyObject *self; /* Not used */
540 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000541 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000542{
Jack Jansena07431f1999-12-17 17:14:28 +0000543 PyObject *dict;
544 NavDialogOptions dialogOptions;
545 NavAskSaveChangesResult reply;
546 NavEventUPP eventProc = NULL;
547 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000548
Jack Jansenc33a4232001-01-19 23:46:28 +0000549 if ( kw && PyObject_IsTrue(kw) ) {
550 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000551 return NULL;
552 dict = kw;
553 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000554 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000555 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
556 return NULL;
557 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
558 if ( err ) {
559 PyErr_Mac(ErrorObject, err);
560 return NULL;
561 }
562 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000563}
564
565static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000566"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000567;
568
569static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000570nav_NavAskDiscardChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000571 PyObject *self; /* Not used */
572 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000573 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000574{
Jack Jansena07431f1999-12-17 17:14:28 +0000575 PyObject *dict;
576 NavDialogOptions dialogOptions;
577 NavAskSaveChangesResult reply;
578 NavEventUPP eventProc = NULL;
579 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000580
Jack Jansenc33a4232001-01-19 23:46:28 +0000581 if ( kw && PyObject_IsTrue(kw) ) {
582 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000583 return NULL;
584 dict = kw;
585 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000586 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000587 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
588 return NULL;
589 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
590 if ( err ) {
591 PyErr_Mac(ErrorObject, err);
592 return NULL;
593 }
594 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000595}
596
597static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000598"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000599;
600
601static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000602nav_NavChooseFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000603 PyObject *self; /* Not used */
604 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000605 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000606{
Jack Jansena07431f1999-12-17 17:14:28 +0000607 PyObject *dict;
608 AEDesc *defaultLocation = NULL;
609 NavReplyRecord reply;
610 NavDialogOptions dialogOptions;
611 NavEventUPP eventProc = NULL;
612 NavPreviewUPP previewProc = NULL;
613 NavObjectFilterUPP filterProc = NULL;
614 NavTypeListHandle typeList = NULL;
615 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000616
Jack Jansenc33a4232001-01-19 23:46:28 +0000617 if ( kw && PyObject_IsTrue(kw) ) {
618 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000619 return NULL;
620 dict = kw;
621 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000622 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000623 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
624 return NULL;
625 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
626 eventProc, previewProc, filterProc, typeList, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000627 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000628 if ( err ) {
629 PyErr_Mac(ErrorObject, err);
630 return NULL;
631 }
632 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000633}
634
635static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000636"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000637;
638
639static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000640nav_NavChooseFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000641 PyObject *self; /* Not used */
642 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000643 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000644{
Jack Jansena07431f1999-12-17 17:14:28 +0000645 PyObject *dict;
646 AEDesc *defaultLocation = NULL;
647 NavReplyRecord reply;
648 NavDialogOptions dialogOptions;
649 NavEventUPP eventProc = NULL;
650 NavObjectFilterUPP filterProc = NULL;
651 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000652
Jack Jansenc33a4232001-01-19 23:46:28 +0000653 if ( kw && PyObject_IsTrue(kw) ) {
654 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000655 return NULL;
656 dict = kw;
657 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000658 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000659 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
660 return NULL;
661 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
662 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000663 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000664 if ( err ) {
665 PyErr_Mac(ErrorObject, err);
666 return NULL;
667 }
668 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000669}
670
671static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000672"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000673;
674
675static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000676nav_NavChooseVolume(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000677 PyObject *self; /* Not used */
678 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000679 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000680{
Jack Jansena07431f1999-12-17 17:14:28 +0000681 PyObject *dict;
682 AEDesc *defaultLocation = NULL;
683 NavReplyRecord reply;
684 NavDialogOptions dialogOptions;
685 NavEventUPP eventProc = NULL;
686 NavObjectFilterUPP filterProc = NULL;
687 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000688
Jack Jansenc33a4232001-01-19 23:46:28 +0000689 if ( kw && PyObject_IsTrue(kw) ) {
690 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000691 return NULL;
692 dict = kw;
693 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000694 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000695 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
696 return NULL;
697 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
698 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000699 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000700 if ( err ) {
701 PyErr_Mac(ErrorObject, err);
702 return NULL;
703 }
704 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000705}
706
707static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000708"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000709;
710
711static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000712nav_NavChooseObject(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000713 PyObject *self; /* Not used */
714 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000715 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000716{
Jack Jansena07431f1999-12-17 17:14:28 +0000717 PyObject *dict;
718 AEDesc *defaultLocation = NULL;
719 NavReplyRecord reply;
720 NavDialogOptions dialogOptions;
721 NavEventUPP eventProc = NULL;
722 NavObjectFilterUPP filterProc = NULL;
723 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000724
Jack Jansenc33a4232001-01-19 23:46:28 +0000725 if ( kw && PyObject_IsTrue(kw) ) {
726 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000727 return NULL;
728 dict = kw;
729 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000730 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000731 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
732 return NULL;
733 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
734 eventProc, filterProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000735 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000736 if ( err ) {
737 PyErr_Mac(ErrorObject, err);
738 return NULL;
739 }
740 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000741}
742
743static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000744"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000745;
746
747static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000748nav_NavNewFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000749 PyObject *self; /* Not used */
750 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000751 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000752{
Jack Jansena07431f1999-12-17 17:14:28 +0000753 PyObject *dict;
754 AEDesc *defaultLocation = NULL;
755 NavReplyRecord reply;
756 NavDialogOptions dialogOptions;
757 NavEventUPP eventProc = NULL;
758 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000759
Jack Jansenc33a4232001-01-19 23:46:28 +0000760 if ( kw && PyObject_IsTrue(kw) ) {
761 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
Jack Jansena07431f1999-12-17 17:14:28 +0000762 return NULL;
763 dict = kw;
764 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000765 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000766 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
767 return NULL;
768 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
Jack Jansen9d61d1b2000-05-05 23:09:16 +0000769 PyMem_DEL(defaultLocation);
Jack Jansena07431f1999-12-17 17:14:28 +0000770 if ( err ) {
771 PyErr_Mac(ErrorObject, err);
772 return NULL;
773 }
774 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000775}
776
Jack Jansena07431f1999-12-17 17:14:28 +0000777#if 0
Jack Jansenc33a4232001-01-19 23:46:28 +0000778/* XXXX I don't know what to do with the void * argument */
Jack Jansene91a29d1999-12-16 16:54:55 +0000779static char nav_NavCustomControl__doc__[] =
780""
781;
782
Jack Jansena07431f1999-12-17 17:14:28 +0000783
Jack Jansene91a29d1999-12-16 16:54:55 +0000784static PyObject *
785nav_NavCustomControl(self, args)
786 PyObject *self; /* Not used */
787 PyObject *args;
788{
789
790 if (!PyArg_ParseTuple(args, ""))
791 return NULL;
792 Py_INCREF(Py_None);
793 return Py_None;
794}
Jack Jansena07431f1999-12-17 17:14:28 +0000795#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000796
797static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000798"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000799;
800
801static PyObject *
802nav_NavServicesCanRun(self, args)
803 PyObject *self; /* Not used */
804 PyObject *args;
805{
806 Boolean rv;
807 if (!PyArg_ParseTuple(args, ""))
808 return NULL;
809 rv = NavServicesCanRun();
810 return Py_BuildValue("l", (long)rv);
811}
812
813static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000814"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000815;
816
817static PyObject *
818nav_NavServicesAvailable(self, args)
819 PyObject *self; /* Not used */
820 PyObject *args;
821{
822 Boolean rv;
823
824 if (!PyArg_ParseTuple(args, ""))
825 return NULL;
826 rv = NavServicesAvailable();
827 return Py_BuildValue("l", (long)rv);
828}
829/* XX */
830static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000831"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000832;
833
834static PyObject *
835nav_NavLoad(self, args)
836 PyObject *self; /* Not used */
837 PyObject *args;
838{
839
840 if (!PyArg_ParseTuple(args, ""))
841 return NULL;
842 NavLoad();
843 Py_INCREF(Py_None);
844 return Py_None;
845}
846
847static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000848"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000849;
850
851static PyObject *
852nav_NavUnload(self, args)
853 PyObject *self; /* Not used */
854 PyObject *args;
855{
856
857 if (!PyArg_ParseTuple(args, ""))
858 return NULL;
859 NavUnload();
860 Py_INCREF(Py_None);
861 return Py_None;
862}
863
864static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000865"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000866;
867
868static PyObject *
869nav_NavLibraryVersion(self, args)
870 PyObject *self; /* Not used */
871 PyObject *args;
872{
873 UInt32 rv;
874
875 if (!PyArg_ParseTuple(args, ""))
876 return NULL;
877 rv = NavLibraryVersion();
878 return Py_BuildValue("l", (long)rv);
879}
880
Jack Jansene91a29d1999-12-16 16:54:55 +0000881static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000882"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000883;
884
885static PyObject *
886nav_NavGetDefaultDialogOptions(self, args)
887 PyObject *self; /* Not used */
888 PyObject *args;
889{
Jack Jansena07431f1999-12-17 17:14:28 +0000890 NavDialogOptions dialogOptions;
891 OSErr err;
892
893 err = NavGetDefaultDialogOptions(&dialogOptions);
894 if ( err ) {
895 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000896 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000897 }
898 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&}",
899 "version", dialogOptions.version,
900 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
901 "location", PyMac_BuildPoint, dialogOptions.location,
902 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
903 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
904 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
905 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
906 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
907 "message", PyMac_BuildStr255, &dialogOptions.message,
908 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
909 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000910}
Jack Jansene91a29d1999-12-16 16:54:55 +0000911
912/* List of methods defined in the module */
913
914static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000915 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
916 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
917 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
918 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
919 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
920 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
921 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
922 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
923 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
924 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000925#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000926 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000927#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000928 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
929 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
930 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
931 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
932 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000933 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000934 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
935};
936
937
938/* Initialization function for the module (*must* be called initNav) */
939
940static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000941"Interface to Navigation Services\n"
942"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
943"if you want the default options.\n"
944"Use NavGetDefaultDialogOptions() to find out common option names.\n"
945"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000946"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000947;
948
949void
950initNav()
951{
952 PyObject *m, *d;
953
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);
966 ErrorObject = PyString_FromString("Nav.error");
967 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