blob: 236089f4b88978fc1fa9a2c470ede759bdf90c07 [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"
34#include <Navigation.h>
35
36/* Exported by AEModule.c: */
37extern PyObject *AEDesc_New(AppleEvent *);
38extern int AEDesc_Convert(PyObject *, AppleEvent *);
39/* Exported by Resmodule.c */
40extern PyObject *ResObj_New(Handle);
Jack Jansena07431f1999-12-17 17:14:28 +000041extern PyObject *OptResObj_New(Handle);
Jack Jansene91a29d1999-12-16 16:54:55 +000042extern int ResObj_Convert(PyObject *, Handle *);
43
44static PyObject *ErrorObject;
45
Jack Jansena07431f1999-12-17 17:14:28 +000046static NavEventUPP my_eventProcUPP;
47static NavPreviewUPP my_previewProcUPP;
48static NavObjectFilterUPP my_filterProcUPP;
49
50/* Callback functions */
51static pascal void
52my_eventProc(NavEventCallbackMessage callBackSelector,
53 NavCBRecPtr callBackParms,
54 NavCallBackUserData callbackUD)
55{
56 PyObject *dict = (PyObject *)callbackUD;
57 PyObject *pyfunc;
58 PyObject *rv;
59
60 if (!dict) return;
61 if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
62 PyErr_Clear();
63 return;
64 }
65 if ( pyfunc == Py_None ) {
66 /* Special case: give update events to the Python event handling code */
67 if ( callBackSelector == kNavCBEvent &&
68 callBackParms->eventData.eventDataParms.event->what == updateEvt)
69 PyMac_HandleEvent(callBackParms->eventData.eventDataParms.event);
70 /* Ignore others */
71 return;
72 }
73 rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
74 (void *)callBackParms, sizeof(NavCBRec));
75 if ( rv )
76 Py_DECREF(rv);
77 else {
78 fprintf(stderr, "Nav: exception in eventProc callback\n");
79 PyErr_Clear();
80 }
81}
82
83static pascal Boolean
84my_previewProc(NavCBRecPtr callBackParms,
85 NavCallBackUserData callbackUD)
86{
87 PyObject *dict = (PyObject *)callbackUD;
88 PyObject *pyfunc;
89 PyObject *rv;
90 Boolean c_rv = false;
91
92 if (!dict) return;
93 if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
94 PyErr_Clear();
95 return;
96 }
97 rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
98 if ( rv ) {
99 c_rv = PyObject_IsTrue(rv);
100 Py_DECREF(rv);
101 } else {
102 fprintf(stderr, "Nav: exception in previewProc callback\n");
103 PyErr_Clear();
104 }
105 return c_rv;
106}
107
108static pascal Boolean
109my_filterProc(AEDesc *theItem, void *info,
110 NavCallBackUserData callbackUD,
111 NavFilterModes filterMode)
112{
113 PyObject *dict = (PyObject *)callbackUD;
114 PyObject *pyfunc;
115 PyObject *rv;
116 Boolean c_rv = false;
117
118 if (!dict) return;
119 if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
120 PyErr_Clear();
121 return;
122 }
123 rv = PyObject_CallFunction(pyfunc, "O&s#h",
124 AEDesc_New, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
125 if ( rv ) {
126 c_rv = PyObject_IsTrue(rv);
127 Py_DECREF(rv);
128 } else {
129 fprintf(stderr, "Nav: exception in filterProc callback\n");
130 PyErr_Clear();
131 }
132 return c_rv;
133}
134
Jack Jansene91a29d1999-12-16 16:54:55 +0000135/* ----------------------------------------------------- */
136static int
137filldialogoptions(PyObject *d,
Jack Jansena07431f1999-12-17 17:14:28 +0000138 AEDesc **defaultLocationP,
Jack Jansene91a29d1999-12-16 16:54:55 +0000139 NavDialogOptions *opt,
140 NavEventUPP *eventProcP,
141 NavPreviewUPP *previewProcP,
142 NavObjectFilterUPP *filterProcP,
Jack Jansene1a45b31999-12-16 22:21:30 +0000143 NavTypeListHandle *typeListP,
Jack Jansena07431f1999-12-17 17:14:28 +0000144 OSType *fileTypeP,
145 OSType *fileCreatorP)
Jack Jansene91a29d1999-12-16 16:54:55 +0000146{
147 int pos = 0;
148 PyObject *key, *value;
149 char *keystr;
150
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 ) {
160 if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocationP) )
161 return 0;
162 } else if( strcmp(keystr, "version") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000163 if ( !PyArg_Parse(value, "h", &opt->version) )
164 return 0;
165 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
166 if ( !PyArg_Parse(value, "l", &opt->dialogOptionFlags) )
167 return 0;
168 } else if( strcmp(keystr, "location") == 0 ) {
169 if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
170 return 0;
171 } else if( strcmp(keystr, "clientName") == 0 ) {
172 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
173 return 0;
174 } else if( strcmp(keystr, "windowTitle") == 0 ) {
175 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
176 return 0;
177 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
178 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
179 return 0;
180 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
181 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
182 return 0;
183 } else if( strcmp(keystr, "savedFileName") == 0 ) {
184 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
185 return 0;
186 } else if( strcmp(keystr, "message") == 0 ) {
187 if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
188 return 0;
189 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
190 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
191 return 0;
192 } else if( strcmp(keystr, "popupExtension") == 0 ) {
193 if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
194 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000195 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
Jack Jansena07431f1999-12-17 17:14:28 +0000196 *eventProcP = my_eventProcUPP;
Jack Jansene1a45b31999-12-16 22:21:30 +0000197 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000198 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
199 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000200 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000201 PyErr_SetString(ErrorObject, "No callbacks implemented yet");
202 return 0;
Jack Jansene1a45b31999-12-16 22:21:30 +0000203 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
Jack Jansene91a29d1999-12-16 16:54:55 +0000204 if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
205 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000206 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
207 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000208 return 0;
Jack Jansena07431f1999-12-17 17:14:28 +0000209 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
210 if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
Jack Jansene1a45b31999-12-16 22:21:30 +0000211 return 0;
Jack Jansene91a29d1999-12-16 16:54:55 +0000212 } else {
213 PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
214 return 0;
215 }
216 }
217 return 1;
218}
219
220/* ----------------------------------------------------- */
221
222/* Declarations for objects of type NavReplyRecord */
223
224typedef struct {
225 PyObject_HEAD
226 NavReplyRecord itself;
227} navrrobject;
228
229staticforward PyTypeObject Navrrtype;
230
231
232
233/* ---------------------------------------------------------------- */
234
Jack Jansena07431f1999-12-17 17:14:28 +0000235static char nav_NavTranslateFile__doc__[] =
236"(NavTranslationOptions)->None"
237;
238
239static PyObject *
240nav_NavTranslateFile(self, args)
241 navrrobject *self;
242 PyObject *args;
243{
244 NavTranslationOptions howToTranslate;
245 OSErr err;
246
247 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
248 return NULL;
249 err = NavTranslateFile(&self->itself, howToTranslate);
250 if ( err ) {
251 PyErr_Mac(ErrorObject, err);
252 return NULL;
253 }
254 Py_INCREF(Py_None);
255 return Py_None;
256}
257
258static char nav_NavCompleteSave__doc__[] =
259"(NavTranslationOptions)->None"
260;
261
262static PyObject *
263nav_NavCompleteSave(self, args)
264 navrrobject *self;
265 PyObject *args;
266{
267 NavTranslationOptions howToTranslate;
268 OSErr err;
269
270 if (!PyArg_ParseTuple(args, "l", &howToTranslate))
271 return NULL;
272 err = NavCompleteSave(&self->itself, howToTranslate);
273 if ( err ) {
274 PyErr_Mac(ErrorObject, err);
275 return NULL;
276 }
277 Py_INCREF(Py_None);
278 return Py_None;
279}
280
281
Jack Jansene91a29d1999-12-16 16:54:55 +0000282static struct PyMethodDef navrr_methods[] = {
Jack Jansena07431f1999-12-17 17:14:28 +0000283 {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
284 {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000285
286 {NULL, NULL} /* sentinel */
287};
288
289/* ---------- */
290
291
292static navrrobject *
293newnavrrobject(NavReplyRecord *itself)
294{
295 navrrobject *self;
296
297 self = PyObject_NEW(navrrobject, &Navrrtype);
298 if (self == NULL)
299 return NULL;
300 self->itself = *itself;
301 return self;
302}
303
304
305static void
306navrr_dealloc(self)
307 navrrobject *self;
308{
309 NavDisposeReply(&self->itself);
310 PyMem_DEL(self);
311}
312
313static PyObject *
314navrr_getattr(self, name)
315 navrrobject *self;
316 char *name;
317{
Jack Jansena07431f1999-12-17 17:14:28 +0000318 if( strcmp(name, "__members__") == 0 )
319 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
320 "isStationery", "translationNeeded", "selection", "fileTranslation");
Jack Jansene91a29d1999-12-16 16:54:55 +0000321 if( strcmp(name, "version") == 0 )
322 return Py_BuildValue("h", self->itself.version);
323 if( strcmp(name, "validRecord") == 0 )
324 return Py_BuildValue("l", (long)self->itself.validRecord);
325 if( strcmp(name, "replacing") == 0 )
326 return Py_BuildValue("l", (long)self->itself.replacing);
327 if( strcmp(name, "isStationery") == 0 )
328 return Py_BuildValue("l", (long)self->itself.isStationery);
329 if( strcmp(name, "translationNeeded") == 0 )
330 return Py_BuildValue("l", (long)self->itself.translationNeeded);
Jack Jansena07431f1999-12-17 17:14:28 +0000331 if( strcmp(name, "selection") == 0 ) {
332 SInt32 i, count;
333 OSErr err;
334 PyObject *rv, *rvitem;
335 AEDesc desc;
336
337 if (err=AECountItems(&self->itself.selection, &count)) {
338 PyErr_Mac(ErrorObject, err);
339 return NULL;
340 }
341 if ( (rv=PyList_New(count)) == NULL )
342 return NULL;
343 for(i=0; i<count; i++) {
344 desc.dataHandle = NULL;
345 if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc)) {
346 Py_DECREF(rv);
347 PyErr_Mac(ErrorObject, err);
348 return NULL;
349 }
350 rvitem = PyMac_BuildFSSpec((FSSpec *)*desc.dataHandle);
351 PyList_SetItem(rv, i, rvitem);
352 AEDisposeDesc(&desc);
353 }
354 return rv;
355 }
Jack Jansene91a29d1999-12-16 16:54:55 +0000356 if( strcmp(name, "fileTranslation") == 0 )
357 return ResObj_New((Handle)self->itself.fileTranslation);
358
359
360 return Py_FindMethod(navrr_methods, (PyObject *)self, name);
361}
362
363static int
364navrr_setattr(self, name, v)
365 navrrobject *self;
366 char *name;
367 PyObject *v;
368{
369 /* Set attribute 'name' to value 'v'. v==NULL means delete */
370
371 /* XXXX Add your own setattr code here */
372 return -1;
373}
374
375static char Navrrtype__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000376"Record containing result of a Nav file selection call. Use dir() for member names."
Jack Jansene91a29d1999-12-16 16:54:55 +0000377;
378
379static PyTypeObject Navrrtype = {
380 PyObject_HEAD_INIT(&PyType_Type)
381 0, /*ob_size*/
382 "NavReplyRecord", /*tp_name*/
383 sizeof(navrrobject), /*tp_basicsize*/
384 0, /*tp_itemsize*/
385 /* methods */
386 (destructor)navrr_dealloc, /*tp_dealloc*/
387 (printfunc)0, /*tp_print*/
388 (getattrfunc)navrr_getattr, /*tp_getattr*/
389 (setattrfunc)navrr_setattr, /*tp_setattr*/
390 (cmpfunc)0, /*tp_compare*/
391 (reprfunc)0, /*tp_repr*/
392 0, /*tp_as_number*/
393 0, /*tp_as_sequence*/
394 0, /*tp_as_mapping*/
395 (hashfunc)0, /*tp_hash*/
396 (ternaryfunc)0, /*tp_call*/
397 (reprfunc)0, /*tp_str*/
398
399 /* Space for future expansion */
400 0L,0L,0L,0L,
401 Navrrtype__doc__ /* Documentation string */
402};
403
404/* End of code for NavReplyRecord objects */
405
406/* ----------------------------------------------------- */
407
408static char nav_NavGetFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000409"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000410;
411
412static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000413nav_NavGetFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000414 PyObject *self; /* Not used */
415 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000416 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000417{
418 PyObject *dict;
419 AEDesc *defaultLocation = NULL;
420 NavReplyRecord reply;
421 NavDialogOptions dialogOptions;
422 NavEventUPP eventProc = NULL;
423 NavPreviewUPP previewProc = NULL;
424 NavObjectFilterUPP filterProc = NULL;
425 NavTypeListHandle typeList = NULL;
426 OSErr err;
427
Jack Jansene1a45b31999-12-16 22:21:30 +0000428 if ( kw ) {
429 if (!PyArg_ParseTuple(args, ""))
430 return NULL;
431 dict = kw;
432 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000433 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000434 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
Jack Jansene91a29d1999-12-16 16:54:55 +0000435 return NULL;
436 err = NavGetFile(defaultLocation, &reply, &dialogOptions,
437 eventProc, previewProc, filterProc, typeList, (void *)dict);
438 if ( err ) {
Jack Jansene1a45b31999-12-16 22:21:30 +0000439 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000440 return NULL;
441 }
442 return (PyObject *)newnavrrobject(&reply);
443}
444
445static char nav_NavPutFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000446"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000447;
448
449static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000450nav_NavPutFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000451 PyObject *self; /* Not used */
452 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000453 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000454{
Jack Jansena07431f1999-12-17 17:14:28 +0000455 PyObject *dict;
456 AEDesc *defaultLocation = NULL;
457 NavReplyRecord reply;
458 NavDialogOptions dialogOptions;
459 NavEventUPP eventProc = NULL;
460 OSType fileType;
461 OSType fileCreator;
462 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000463
Jack Jansena07431f1999-12-17 17:14:28 +0000464 if ( kw ) {
465 if (!PyArg_ParseTuple(args, ""))
466 return NULL;
467 dict = kw;
468 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000469 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000470 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
471 return NULL;
472 err = NavPutFile(defaultLocation, &reply, &dialogOptions,
473 eventProc, fileType, fileCreator, (void *)dict);
474 if ( err ) {
475 PyErr_Mac(ErrorObject, err);
476 return NULL;
477 }
478 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000479}
480
481static char nav_NavAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000482"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
483
Jack Jansene91a29d1999-12-16 16:54:55 +0000484;
485
486static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000487nav_NavAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000488 PyObject *self; /* Not used */
489 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000490 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000491{
Jack Jansena07431f1999-12-17 17:14:28 +0000492 PyObject *dict;
493 NavDialogOptions dialogOptions;
494 NavAskSaveChangesAction action;
495 NavAskSaveChangesResult reply;
496 NavEventUPP eventProc = NULL;
497 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000498
Jack Jansena07431f1999-12-17 17:14:28 +0000499 if ( kw ) {
500 if (!PyArg_ParseTuple(args, "l", &action))
501 return NULL;
502 dict = kw;
503 } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000504 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000505 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
506 return NULL;
507 err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
508 if ( err ) {
509 PyErr_Mac(ErrorObject, err);
510 return NULL;
511 }
512 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000513}
514
515static char nav_NavCustomAskSaveChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000516"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000517;
518
519static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000520nav_NavCustomAskSaveChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000521 PyObject *self; /* Not used */
522 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000523 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000524{
Jack Jansena07431f1999-12-17 17:14:28 +0000525 PyObject *dict;
526 NavDialogOptions dialogOptions;
527 NavAskSaveChangesResult reply;
528 NavEventUPP eventProc = NULL;
529 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000530
Jack Jansena07431f1999-12-17 17:14:28 +0000531 if ( kw ) {
532 if (!PyArg_ParseTuple(args, ""))
533 return NULL;
534 dict = kw;
535 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000536 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000537 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
538 return NULL;
539 err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
540 if ( err ) {
541 PyErr_Mac(ErrorObject, err);
542 return NULL;
543 }
544 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000545}
546
547static char nav_NavAskDiscardChanges__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000548"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
Jack Jansene91a29d1999-12-16 16:54:55 +0000549;
550
551static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000552nav_NavAskDiscardChanges(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000553 PyObject *self; /* Not used */
554 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000555 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000556{
Jack Jansena07431f1999-12-17 17:14:28 +0000557 PyObject *dict;
558 NavDialogOptions dialogOptions;
559 NavAskSaveChangesResult reply;
560 NavEventUPP eventProc = NULL;
561 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000562
Jack Jansena07431f1999-12-17 17:14:28 +0000563 if ( kw ) {
564 if (!PyArg_ParseTuple(args, ""))
565 return NULL;
566 dict = kw;
567 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000568 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000569 if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
570 return NULL;
571 err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
572 if ( err ) {
573 PyErr_Mac(ErrorObject, err);
574 return NULL;
575 }
576 return Py_BuildValue("l", (long)reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000577}
578
579static char nav_NavChooseFile__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000580"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000581;
582
583static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000584nav_NavChooseFile(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000585 PyObject *self; /* Not used */
586 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000587 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000588{
Jack Jansena07431f1999-12-17 17:14:28 +0000589 PyObject *dict;
590 AEDesc *defaultLocation = NULL;
591 NavReplyRecord reply;
592 NavDialogOptions dialogOptions;
593 NavEventUPP eventProc = NULL;
594 NavPreviewUPP previewProc = NULL;
595 NavObjectFilterUPP filterProc = NULL;
596 NavTypeListHandle typeList = NULL;
597 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000598
Jack Jansena07431f1999-12-17 17:14:28 +0000599 if ( kw ) {
600 if (!PyArg_ParseTuple(args, ""))
601 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, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
606 return NULL;
607 err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
608 eventProc, previewProc, filterProc, typeList, (void *)dict);
609 if ( err ) {
610 PyErr_Mac(ErrorObject, err);
611 return NULL;
612 }
613 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000614}
615
616static char nav_NavChooseFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000617"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000618;
619
620static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000621nav_NavChooseFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000622 PyObject *self; /* Not used */
623 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000624 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000625{
Jack Jansena07431f1999-12-17 17:14:28 +0000626 PyObject *dict;
627 AEDesc *defaultLocation = NULL;
628 NavReplyRecord reply;
629 NavDialogOptions dialogOptions;
630 NavEventUPP eventProc = NULL;
631 NavObjectFilterUPP filterProc = NULL;
632 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000633
Jack Jansena07431f1999-12-17 17:14:28 +0000634 if ( kw ) {
635 if (!PyArg_ParseTuple(args, ""))
636 return NULL;
637 dict = kw;
638 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000639 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000640 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
641 return NULL;
642 err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
643 eventProc, filterProc, (void *)dict);
644 if ( err ) {
645 PyErr_Mac(ErrorObject, err);
646 return NULL;
647 }
648 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000649}
650
651static char nav_NavChooseVolume__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000652"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000653;
654
655static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000656nav_NavChooseVolume(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000657 PyObject *self; /* Not used */
658 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000659 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000660{
Jack Jansena07431f1999-12-17 17:14:28 +0000661 PyObject *dict;
662 AEDesc *defaultLocation = NULL;
663 NavReplyRecord reply;
664 NavDialogOptions dialogOptions;
665 NavEventUPP eventProc = NULL;
666 NavObjectFilterUPP filterProc = NULL;
667 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000668
Jack Jansena07431f1999-12-17 17:14:28 +0000669 if ( kw ) {
670 if (!PyArg_ParseTuple(args, ""))
671 return NULL;
672 dict = kw;
673 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000674 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000675 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
676 return NULL;
677 err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
678 eventProc, filterProc, (void *)dict);
679 if ( err ) {
680 PyErr_Mac(ErrorObject, err);
681 return NULL;
682 }
683 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000684}
685
686static char nav_NavChooseObject__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000687"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000688;
689
690static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000691nav_NavChooseObject(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000692 PyObject *self; /* Not used */
693 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000694 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000695{
Jack Jansena07431f1999-12-17 17:14:28 +0000696 PyObject *dict;
697 AEDesc *defaultLocation = NULL;
698 NavReplyRecord reply;
699 NavDialogOptions dialogOptions;
700 NavEventUPP eventProc = NULL;
701 NavObjectFilterUPP filterProc = NULL;
702 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000703
Jack Jansena07431f1999-12-17 17:14:28 +0000704 if ( kw ) {
705 if (!PyArg_ParseTuple(args, ""))
706 return NULL;
707 dict = kw;
708 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000709 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000710 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
711 return NULL;
712 err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
713 eventProc, filterProc, (void *)dict);
714 if ( err ) {
715 PyErr_Mac(ErrorObject, err);
716 return NULL;
717 }
718 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000719}
720
721static char nav_NavNewFolder__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000722"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
Jack Jansene91a29d1999-12-16 16:54:55 +0000723;
724
725static PyObject *
Jack Jansene1a45b31999-12-16 22:21:30 +0000726nav_NavNewFolder(self, args, kw)
Jack Jansene91a29d1999-12-16 16:54:55 +0000727 PyObject *self; /* Not used */
728 PyObject *args;
Jack Jansene1a45b31999-12-16 22:21:30 +0000729 PyObject *kw;
Jack Jansene91a29d1999-12-16 16:54:55 +0000730{
Jack Jansena07431f1999-12-17 17:14:28 +0000731 PyObject *dict;
732 AEDesc *defaultLocation = NULL;
733 NavReplyRecord reply;
734 NavDialogOptions dialogOptions;
735 NavEventUPP eventProc = NULL;
736 OSErr err;
Jack Jansene91a29d1999-12-16 16:54:55 +0000737
Jack Jansena07431f1999-12-17 17:14:28 +0000738 if ( kw ) {
739 if (!PyArg_ParseTuple(args, ""))
740 return NULL;
741 dict = kw;
742 } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
Jack Jansene91a29d1999-12-16 16:54:55 +0000743 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000744 if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
745 return NULL;
746 err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
747 if ( err ) {
748 PyErr_Mac(ErrorObject, err);
749 return NULL;
750 }
751 return (PyObject *)newnavrrobject(&reply);
Jack Jansene91a29d1999-12-16 16:54:55 +0000752}
753
Jack Jansena07431f1999-12-17 17:14:28 +0000754#if 0
755XXXX I don't know what to do with the void * argument
Jack Jansene91a29d1999-12-16 16:54:55 +0000756static char nav_NavCustomControl__doc__[] =
757""
758;
759
Jack Jansena07431f1999-12-17 17:14:28 +0000760
Jack Jansene91a29d1999-12-16 16:54:55 +0000761static PyObject *
762nav_NavCustomControl(self, args)
763 PyObject *self; /* Not used */
764 PyObject *args;
765{
766
767 if (!PyArg_ParseTuple(args, ""))
768 return NULL;
769 Py_INCREF(Py_None);
770 return Py_None;
771}
Jack Jansena07431f1999-12-17 17:14:28 +0000772#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000773
774static char nav_NavServicesCanRun__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000775"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000776;
777
778static PyObject *
779nav_NavServicesCanRun(self, args)
780 PyObject *self; /* Not used */
781 PyObject *args;
782{
783 Boolean rv;
784 if (!PyArg_ParseTuple(args, ""))
785 return NULL;
786 rv = NavServicesCanRun();
787 return Py_BuildValue("l", (long)rv);
788}
789
790static char nav_NavServicesAvailable__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000791"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000792;
793
794static PyObject *
795nav_NavServicesAvailable(self, args)
796 PyObject *self; /* Not used */
797 PyObject *args;
798{
799 Boolean rv;
800
801 if (!PyArg_ParseTuple(args, ""))
802 return NULL;
803 rv = NavServicesAvailable();
804 return Py_BuildValue("l", (long)rv);
805}
806/* XX */
807static char nav_NavLoad__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000808"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000809;
810
811static PyObject *
812nav_NavLoad(self, args)
813 PyObject *self; /* Not used */
814 PyObject *args;
815{
816
817 if (!PyArg_ParseTuple(args, ""))
818 return NULL;
819 NavLoad();
820 Py_INCREF(Py_None);
821 return Py_None;
822}
823
824static char nav_NavUnload__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000825"()->None"
Jack Jansene91a29d1999-12-16 16:54:55 +0000826;
827
828static PyObject *
829nav_NavUnload(self, args)
830 PyObject *self; /* Not used */
831 PyObject *args;
832{
833
834 if (!PyArg_ParseTuple(args, ""))
835 return NULL;
836 NavUnload();
837 Py_INCREF(Py_None);
838 return Py_None;
839}
840
841static char nav_NavLibraryVersion__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000842"()->int"
Jack Jansene91a29d1999-12-16 16:54:55 +0000843;
844
845static PyObject *
846nav_NavLibraryVersion(self, args)
847 PyObject *self; /* Not used */
848 PyObject *args;
849{
850 UInt32 rv;
851
852 if (!PyArg_ParseTuple(args, ""))
853 return NULL;
854 rv = NavLibraryVersion();
855 return Py_BuildValue("l", (long)rv);
856}
857
Jack Jansene91a29d1999-12-16 16:54:55 +0000858static char nav_NavGetDefaultDialogOptions__doc__[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000859"()->dict\nPass dict or keyword args with same names to other calls."
Jack Jansene91a29d1999-12-16 16:54:55 +0000860;
861
862static PyObject *
863nav_NavGetDefaultDialogOptions(self, args)
864 PyObject *self; /* Not used */
865 PyObject *args;
866{
Jack Jansena07431f1999-12-17 17:14:28 +0000867 NavDialogOptions dialogOptions;
868 OSErr err;
869
870 err = NavGetDefaultDialogOptions(&dialogOptions);
871 if ( err ) {
872 PyErr_Mac(ErrorObject, err);
Jack Jansene91a29d1999-12-16 16:54:55 +0000873 return NULL;
Jack Jansena07431f1999-12-17 17:14:28 +0000874 }
875 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&}",
876 "version", dialogOptions.version,
877 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
878 "location", PyMac_BuildPoint, dialogOptions.location,
879 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
880 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
881 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
882 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
883 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
884 "message", PyMac_BuildStr255, &dialogOptions.message,
885 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
886 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
Jack Jansene91a29d1999-12-16 16:54:55 +0000887}
Jack Jansene91a29d1999-12-16 16:54:55 +0000888
889/* List of methods defined in the module */
890
891static struct PyMethodDef nav_methods[] = {
Jack Jansene1a45b31999-12-16 22:21:30 +0000892 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
893 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
894 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
895 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
896 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
897 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
898 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
899 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
900 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
901 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000902#if 0
Jack Jansene91a29d1999-12-16 16:54:55 +0000903 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
Jack Jansena07431f1999-12-17 17:14:28 +0000904#endif
Jack Jansene91a29d1999-12-16 16:54:55 +0000905 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
906 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
907 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
908 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
909 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000910 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
Jack Jansene91a29d1999-12-16 16:54:55 +0000911 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
912};
913
914
915/* Initialization function for the module (*must* be called initNav) */
916
917static char Nav_module_documentation[] =
Jack Jansena07431f1999-12-17 17:14:28 +0000918"Interface to Navigation Services\n"
919"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
920"if you want the default options.\n"
921"Use NavGetDefaultDialogOptions() to find out common option names.\n"
922"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
Jack Jansen77abc431999-12-17 23:01:44 +0000923"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
Jack Jansene91a29d1999-12-16 16:54:55 +0000924;
925
926void
927initNav()
928{
929 PyObject *m, *d;
930
931 /* Create the module and add the functions */
932 m = Py_InitModule4("Nav", nav_methods,
933 Nav_module_documentation,
934 (PyObject*)NULL,PYTHON_API_VERSION);
935
936 /* Add some symbolic constants to the module */
937 d = PyModule_GetDict(m);
938 ErrorObject = PyString_FromString("Nav.error");
939 PyDict_SetItemString(d, "error", ErrorObject);
940
941 /* XXXX Add constants here */
942
Jack Jansena07431f1999-12-17 17:14:28 +0000943 /* Set UPPs */
944 my_eventProcUPP = NewNavEventProc(my_eventProc);
945 my_previewProcUPP = NewNavPreviewProc(my_previewProc);
946 my_filterProcUPP = NewNavObjectFilterProc(my_filterProc);
947
Jack Jansene91a29d1999-12-16 16:54:55 +0000948 /* Check for errors */
949 if (PyErr_Occurred())
950 Py_FatalError("can't initialize module Nav");
951}
952