1 /***********************************************************
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
7 Permission to use, copy, modify, and distribute this software and its
8 documentation for any purpose and without fee is hereby granted,
9 provided that the above copyright notice appear in all copies and that
10 both that copyright notice and this permission notice appear in
11 supporting documentation, and that the names of Stichting Mathematisch
12 Centrum or CWI or Corporation for National Research Initiatives or
13 CNRI not be used in advertising or publicity pertaining to
14 distribution of the software without specific, written prior
17 While CWI is the initial source for this software, a modified version
18 is made available by the Corporation for National Research Initiatives
19 (CNRI) at the Internet address ftp://ftp.python.org.
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28 PERFORMANCE OF THIS SOFTWARE.
30 ******************************************************************/
34 #include "pymactoolbox.h"
35 #include <Navigation.h>
37 static PyObject
*ErrorObject
;
39 static NavEventUPP my_eventProcUPP
;
40 static NavPreviewUPP my_previewProcUPP
;
41 static NavObjectFilterUPP my_filterProcUPP
;
43 /* Callback functions */
45 my_eventProc(NavEventCallbackMessage callBackSelector
,
46 NavCBRecPtr callBackParms
,
47 NavCallBackUserData callbackUD
)
49 PyObject
*dict
= (PyObject
*)callbackUD
;
54 if ( (pyfunc
= PyDict_GetItemString(dict
, "eventProc")) == NULL
) {
58 if ( pyfunc
== Py_None
) {
59 /* Special case: give update events to the Python event handling code */
60 if ( callBackSelector
== kNavCBEvent
&&
61 callBackParms
->eventData
.eventDataParms
.event
->what
== updateEvt
)
62 PyMac_HandleEvent(callBackParms
->eventData
.eventDataParms
.event
);
66 rv
= PyObject_CallFunction(pyfunc
, "ls#", (long)callBackSelector
,
67 (void *)callBackParms
, sizeof(NavCBRec
));
71 fprintf(stderr
, "Nav: exception in eventProc callback\n");
77 my_previewProc(NavCBRecPtr callBackParms
,
78 NavCallBackUserData callbackUD
)
80 PyObject
*dict
= (PyObject
*)callbackUD
;
86 if ( (pyfunc
= PyDict_GetItemString(dict
, "previewProc")) == NULL
) {
90 rv
= PyObject_CallFunction(pyfunc
, "s#", (void *)callBackParms
, sizeof(NavCBRec
));
92 c_rv
= PyObject_IsTrue(rv
);
95 fprintf(stderr
, "Nav: exception in previewProc callback\n");
101 static pascal Boolean
102 my_filterProc(AEDesc
*theItem
, void *info
,
103 NavCallBackUserData callbackUD
,
104 NavFilterModes filterMode
)
106 PyObject
*dict
= (PyObject
*)callbackUD
;
109 Boolean c_rv
= false;
112 if ( (pyfunc
= PyDict_GetItemString(dict
, "filterProc")) == NULL
) {
116 rv
= PyObject_CallFunction(pyfunc
, "O&s#h",
117 AEDesc_New
, theItem
, info
, sizeof(NavFileOrFolderInfo
), (short)filterMode
);
119 c_rv
= PyObject_IsTrue(rv
);
122 fprintf(stderr
, "Nav: exception in filterProc callback\n");
128 /* ----------------------------------------------------- */
130 filldialogoptions(PyObject
*d
,
131 AEDesc
**defaultLocationP
,
132 NavDialogOptions
*opt
,
133 NavEventUPP
*eventProcP
,
134 NavPreviewUPP
*previewProcP
,
135 NavObjectFilterUPP
*filterProcP
,
136 NavTypeListHandle
*typeListP
,
138 OSType
*fileCreatorP
)
141 PyObject
*key
, *value
;
143 AEDesc
*defaultLocation_storage
;
145 NavGetDefaultDialogOptions(opt
);
147 while ( PyDict_Next(d
, &pos
, &key
, &value
) ) {
148 if ( !key
|| !value
|| !PyString_Check(key
) ) {
149 PyErr_SetString(ErrorObject
, "DialogOption has non-string key");
152 keystr
= PyString_AsString(key
);
153 if( strcmp(keystr
, "defaultLocation") == 0 ) {
154 if ( (defaultLocation_storage
= PyMem_NEW(AEDesc
, 1)) == NULL
) {
158 if ( !PyArg_Parse(value
, "O&", AEDesc_Convert
, defaultLocation_storage
) ) {
159 PyMem_DEL(defaultLocation_storage
);
162 *defaultLocationP
= defaultLocation_storage
;
163 } else if( strcmp(keystr
, "version") == 0 ) {
164 if ( !PyArg_Parse(value
, "h", &opt
->version
) )
166 } else if( strcmp(keystr
, "dialogOptionFlags") == 0 ) {
167 if ( !PyArg_Parse(value
, "l", &opt
->dialogOptionFlags
) )
169 } else if( strcmp(keystr
, "location") == 0 ) {
170 if ( !PyArg_Parse(value
, "O&", PyMac_GetPoint
, &opt
->location
) )
172 } else if( strcmp(keystr
, "clientName") == 0 ) {
173 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->clientName
) )
175 } else if( strcmp(keystr
, "windowTitle") == 0 ) {
176 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->windowTitle
) )
178 } else if( strcmp(keystr
, "actionButtonLabel") == 0 ) {
179 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->actionButtonLabel
) )
181 } else if( strcmp(keystr
, "cancelButtonLabel") == 0 ) {
182 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->cancelButtonLabel
) )
184 } else if( strcmp(keystr
, "savedFileName") == 0 ) {
185 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->savedFileName
) )
187 } else if( strcmp(keystr
, "message") == 0 ) {
188 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->message
) )
190 } else if( strcmp(keystr
, "preferenceKey") == 0 ) {
191 if ( !PyArg_Parse(value
, "O&", PyMac_GetOSType
, &opt
->preferenceKey
) )
193 } else if( strcmp(keystr
, "popupExtension") == 0 ) {
194 if ( !PyArg_Parse(value
, "O&", ResObj_Convert
, &opt
->popupExtension
) )
196 } else if( eventProcP
&& strcmp(keystr
, "eventProc") == 0 ) {
197 *eventProcP
= my_eventProcUPP
;
198 } else if( previewProcP
&& strcmp(keystr
, "previewProc") == 0 ) {
199 PyErr_SetString(ErrorObject
, "No callbacks implemented yet");
201 } else if( filterProcP
&& strcmp(keystr
, "filterProc") == 0 ) {
202 PyErr_SetString(ErrorObject
, "No callbacks implemented yet");
204 } else if( typeListP
&& strcmp(keystr
, "typeList") == 0 ) {
205 if ( !PyArg_Parse(value
, "O&", ResObj_Convert
, typeListP
) )
207 } else if( fileTypeP
&& strcmp(keystr
, "fileType") == 0 ) {
208 if ( !PyArg_Parse(value
, "O&", PyMac_GetOSType
, fileTypeP
) )
210 } else if( fileCreatorP
&& strcmp(keystr
, "fileCreator") == 0 ) {
211 if ( !PyArg_Parse(value
, "O&", PyMac_GetOSType
, fileCreatorP
) )
214 PyErr_Format(ErrorObject
, "Unknown DialogOption key: %s", keystr
);
221 /* ----------------------------------------------------- */
223 /* Declarations for objects of type NavReplyRecord */
227 NavReplyRecord itself
;
230 staticforward PyTypeObject Navrrtype
;
234 /* ---------------------------------------------------------------- */
236 static char nav_NavTranslateFile__doc__
[] =
237 "(NavTranslationOptions)->None"
241 nav_NavTranslateFile(self
, args
)
245 NavTranslationOptions howToTranslate
;
248 if (!PyArg_ParseTuple(args
, "l", &howToTranslate
))
250 err
= NavTranslateFile(&self
->itself
, howToTranslate
);
252 PyErr_Mac(ErrorObject
, err
);
259 static char nav_NavCompleteSave__doc__
[] =
260 "(NavTranslationOptions)->None"
264 nav_NavCompleteSave(self
, args
)
268 NavTranslationOptions howToTranslate
;
271 if (!PyArg_ParseTuple(args
, "l", &howToTranslate
))
273 err
= NavCompleteSave(&self
->itself
, howToTranslate
);
275 PyErr_Mac(ErrorObject
, err
);
283 static struct PyMethodDef navrr_methods
[] = {
284 {"NavTranslateFile", (PyCFunction
)nav_NavTranslateFile
, METH_VARARGS
, nav_NavTranslateFile__doc__
},
285 {"NavCompleteSave", (PyCFunction
)nav_NavCompleteSave
, METH_VARARGS
, nav_NavCompleteSave__doc__
},
287 {NULL
, NULL
} /* sentinel */
294 newnavrrobject(NavReplyRecord
*itself
)
298 self
= PyObject_NEW(navrrobject
, &Navrrtype
);
301 self
->itself
= *itself
;
310 NavDisposeReply(&self
->itself
);
315 navrr_getattr(self
, name
)
321 if( strcmp(name
, "__members__") == 0 )
322 return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
323 "isStationery", "translationNeeded", "selection", "fileTranslation");
324 if( strcmp(name
, "version") == 0 )
325 return Py_BuildValue("h", self
->itself
.version
);
326 if( strcmp(name
, "validRecord") == 0 )
327 return Py_BuildValue("l", (long)self
->itself
.validRecord
);
328 if( strcmp(name
, "replacing") == 0 )
329 return Py_BuildValue("l", (long)self
->itself
.replacing
);
330 if( strcmp(name
, "isStationery") == 0 )
331 return Py_BuildValue("l", (long)self
->itself
.isStationery
);
332 if( strcmp(name
, "translationNeeded") == 0 )
333 return Py_BuildValue("l", (long)self
->itself
.translationNeeded
);
334 if( strcmp(name
, "selection") == 0 ) {
337 PyObject
*rv
, *rvitem
;
340 if (err
=AECountItems(&self
->itself
.selection
, &count
)) {
341 PyErr_Mac(ErrorObject
, err
);
344 if ( (rv
=PyList_New(count
)) == NULL
)
346 for(i
=0; i
<count
; i
++) {
347 desc
.dataHandle
= NULL
;
348 if (err
=AEGetNthDesc(&self
->itself
.selection
, i
+1, typeFSS
, NULL
, &desc
)) {
350 PyErr_Mac(ErrorObject
, err
);
353 #if TARGET_API_MAC_CARBON
354 if (err
=AEGetDescData(&desc
, &fss
, sizeof(FSSpec
))) {
356 PyErr_Mac(ErrorObject
, err
);
360 memcpy((void *)&fss
, (void *)*desc
.dataHandle
, sizeof(FSSpec
));
362 rvitem
= PyMac_BuildFSSpec(&fss
);
363 PyList_SetItem(rv
, i
, rvitem
);
364 AEDisposeDesc(&desc
);
368 if( strcmp(name
, "fileTranslation") == 0 )
369 return ResObj_New((Handle
)self
->itself
.fileTranslation
);
372 return Py_FindMethod(navrr_methods
, (PyObject
*)self
, name
);
376 navrr_setattr(self
, name
, v
)
381 /* Set attribute 'name' to value 'v'. v==NULL means delete */
383 /* XXXX Add your own setattr code here */
387 static char Navrrtype__doc__
[] =
388 "Record containing result of a Nav file selection call. Use dir() for member names."
391 static PyTypeObject Navrrtype
= {
392 PyObject_HEAD_INIT(&PyType_Type
)
394 "NavReplyRecord", /*tp_name*/
395 sizeof(navrrobject
), /*tp_basicsize*/
398 (destructor
)navrr_dealloc
, /*tp_dealloc*/
399 (printfunc
)0, /*tp_print*/
400 (getattrfunc
)navrr_getattr
, /*tp_getattr*/
401 (setattrfunc
)navrr_setattr
, /*tp_setattr*/
402 (cmpfunc
)0, /*tp_compare*/
403 (reprfunc
)0, /*tp_repr*/
405 0, /*tp_as_sequence*/
407 (hashfunc
)0, /*tp_hash*/
408 (ternaryfunc
)0, /*tp_call*/
409 (reprfunc
)0, /*tp_str*/
411 /* Space for future expansion */
413 Navrrtype__doc__
/* Documentation string */
416 /* End of code for NavReplyRecord objects */
418 /* ----------------------------------------------------- */
420 static char nav_NavGetFile__doc__
[] =
421 "(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
425 nav_NavGetFile(self
, args
, kw
)
426 PyObject
*self
; /* Not used */
431 AEDesc
*defaultLocation
= NULL
;
432 NavReplyRecord reply
;
433 NavDialogOptions dialogOptions
;
434 NavEventUPP eventProc
= NULL
;
435 NavPreviewUPP previewProc
= NULL
;
436 NavObjectFilterUPP filterProc
= NULL
;
437 NavTypeListHandle typeList
= NULL
;
441 if (!PyArg_ParseTuple(args
, ""))
444 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
446 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, &previewProc
, &filterProc
, &typeList
, NULL
, NULL
))
448 err
= NavGetFile(defaultLocation
, &reply
, &dialogOptions
,
449 eventProc
, previewProc
, filterProc
, typeList
, (void *)dict
);
450 PyMem_DEL(defaultLocation
);
452 PyErr_Mac(ErrorObject
, err
);
455 return (PyObject
*)newnavrrobject(&reply
);
458 static char nav_NavPutFile__doc__
[] =
459 "(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
463 nav_NavPutFile(self
, args
, kw
)
464 PyObject
*self
; /* Not used */
469 AEDesc
*defaultLocation
= NULL
;
470 NavReplyRecord reply
;
471 NavDialogOptions dialogOptions
;
472 NavEventUPP eventProc
= NULL
;
478 if (!PyArg_ParseTuple(args
, ""))
481 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
483 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, &fileType
, &fileCreator
))
485 err
= NavPutFile(defaultLocation
, &reply
, &dialogOptions
,
486 eventProc
, fileType
, fileCreator
, (void *)dict
);
487 PyMem_DEL(defaultLocation
);
489 PyErr_Mac(ErrorObject
, err
);
492 return (PyObject
*)newnavrrobject(&reply
);
495 static char nav_NavAskSaveChanges__doc__
[] =
496 "(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
501 nav_NavAskSaveChanges(self
, args
, kw
)
502 PyObject
*self
; /* Not used */
507 NavDialogOptions dialogOptions
;
508 NavAskSaveChangesAction action
;
509 NavAskSaveChangesResult reply
;
510 NavEventUPP eventProc
= NULL
;
514 if (!PyArg_ParseTuple(args
, "l", &action
))
517 } else if (!PyArg_ParseTuple(args
, "lO!", &action
, &PyDict_Type
, &dict
))
519 if (!filldialogoptions(dict
, NULL
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
521 err
= NavAskSaveChanges(&dialogOptions
, action
, &reply
, eventProc
, (void *)dict
);
523 PyErr_Mac(ErrorObject
, err
);
526 return Py_BuildValue("l", (long)reply
);
529 static char nav_NavCustomAskSaveChanges__doc__
[] =
530 "(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
534 nav_NavCustomAskSaveChanges(self
, args
, kw
)
535 PyObject
*self
; /* Not used */
540 NavDialogOptions dialogOptions
;
541 NavAskSaveChangesResult reply
;
542 NavEventUPP eventProc
= NULL
;
546 if (!PyArg_ParseTuple(args
, ""))
549 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
551 if (!filldialogoptions(dict
, NULL
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
553 err
= NavCustomAskSaveChanges(&dialogOptions
, &reply
, eventProc
, (void *)dict
);
555 PyErr_Mac(ErrorObject
, err
);
558 return Py_BuildValue("l", (long)reply
);
561 static char nav_NavAskDiscardChanges__doc__
[] =
562 "(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
566 nav_NavAskDiscardChanges(self
, args
, kw
)
567 PyObject
*self
; /* Not used */
572 NavDialogOptions dialogOptions
;
573 NavAskSaveChangesResult reply
;
574 NavEventUPP eventProc
= NULL
;
578 if (!PyArg_ParseTuple(args
, ""))
581 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
583 if (!filldialogoptions(dict
, NULL
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
585 err
= NavAskDiscardChanges(&dialogOptions
, &reply
, eventProc
, (void *)dict
);
587 PyErr_Mac(ErrorObject
, err
);
590 return Py_BuildValue("l", (long)reply
);
593 static char nav_NavChooseFile__doc__
[] =
594 "(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
598 nav_NavChooseFile(self
, args
, kw
)
599 PyObject
*self
; /* Not used */
604 AEDesc
*defaultLocation
= NULL
;
605 NavReplyRecord reply
;
606 NavDialogOptions dialogOptions
;
607 NavEventUPP eventProc
= NULL
;
608 NavPreviewUPP previewProc
= NULL
;
609 NavObjectFilterUPP filterProc
= NULL
;
610 NavTypeListHandle typeList
= NULL
;
614 if (!PyArg_ParseTuple(args
, ""))
617 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
619 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, &previewProc
, &filterProc
, &typeList
, NULL
, NULL
))
621 err
= NavChooseFile(defaultLocation
, &reply
, &dialogOptions
,
622 eventProc
, previewProc
, filterProc
, typeList
, (void *)dict
);
623 PyMem_DEL(defaultLocation
);
625 PyErr_Mac(ErrorObject
, err
);
628 return (PyObject
*)newnavrrobject(&reply
);
631 static char nav_NavChooseFolder__doc__
[] =
632 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
636 nav_NavChooseFolder(self
, args
, kw
)
637 PyObject
*self
; /* Not used */
642 AEDesc
*defaultLocation
= NULL
;
643 NavReplyRecord reply
;
644 NavDialogOptions dialogOptions
;
645 NavEventUPP eventProc
= NULL
;
646 NavObjectFilterUPP filterProc
= NULL
;
650 if (!PyArg_ParseTuple(args
, ""))
653 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
655 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, &filterProc
, NULL
, NULL
, NULL
))
657 err
= NavChooseFolder(defaultLocation
, &reply
, &dialogOptions
,
658 eventProc
, filterProc
, (void *)dict
);
659 PyMem_DEL(defaultLocation
);
661 PyErr_Mac(ErrorObject
, err
);
664 return (PyObject
*)newnavrrobject(&reply
);
667 static char nav_NavChooseVolume__doc__
[] =
668 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
672 nav_NavChooseVolume(self
, args
, kw
)
673 PyObject
*self
; /* Not used */
678 AEDesc
*defaultLocation
= NULL
;
679 NavReplyRecord reply
;
680 NavDialogOptions dialogOptions
;
681 NavEventUPP eventProc
= NULL
;
682 NavObjectFilterUPP filterProc
= NULL
;
686 if (!PyArg_ParseTuple(args
, ""))
689 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
691 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, &filterProc
, NULL
, NULL
, NULL
))
693 err
= NavChooseVolume(defaultLocation
, &reply
, &dialogOptions
,
694 eventProc
, filterProc
, (void *)dict
);
695 PyMem_DEL(defaultLocation
);
697 PyErr_Mac(ErrorObject
, err
);
700 return (PyObject
*)newnavrrobject(&reply
);
703 static char nav_NavChooseObject__doc__
[] =
704 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
708 nav_NavChooseObject(self
, args
, kw
)
709 PyObject
*self
; /* Not used */
714 AEDesc
*defaultLocation
= NULL
;
715 NavReplyRecord reply
;
716 NavDialogOptions dialogOptions
;
717 NavEventUPP eventProc
= NULL
;
718 NavObjectFilterUPP filterProc
= NULL
;
722 if (!PyArg_ParseTuple(args
, ""))
725 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
727 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, &filterProc
, NULL
, NULL
, NULL
))
729 err
= NavChooseObject(defaultLocation
, &reply
, &dialogOptions
,
730 eventProc
, filterProc
, (void *)dict
);
731 PyMem_DEL(defaultLocation
);
733 PyErr_Mac(ErrorObject
, err
);
736 return (PyObject
*)newnavrrobject(&reply
);
739 static char nav_NavNewFolder__doc__
[] =
740 "(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
744 nav_NavNewFolder(self
, args
, kw
)
745 PyObject
*self
; /* Not used */
750 AEDesc
*defaultLocation
= NULL
;
751 NavReplyRecord reply
;
752 NavDialogOptions dialogOptions
;
753 NavEventUPP eventProc
= NULL
;
757 if (!PyArg_ParseTuple(args
, ""))
760 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
762 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
764 err
= NavNewFolder(defaultLocation
, &reply
, &dialogOptions
, eventProc
, (void *)dict
);
765 PyMem_DEL(defaultLocation
);
767 PyErr_Mac(ErrorObject
, err
);
770 return (PyObject
*)newnavrrobject(&reply
);
774 XXXX I don
't know what to do with the void * argument
775 static char nav_NavCustomControl__doc__[] =
781 nav_NavCustomControl(self, args)
782 PyObject *self; /* Not used */
786 if (!PyArg_ParseTuple(args, ""))
793 static char nav_NavServicesCanRun__doc__[] =
798 nav_NavServicesCanRun(self, args)
799 PyObject *self; /* Not used */
803 if (!PyArg_ParseTuple(args, ""))
805 rv = NavServicesCanRun();
806 return Py_BuildValue("l", (long)rv);
809 static char nav_NavServicesAvailable__doc__[] =
814 nav_NavServicesAvailable(self, args)
815 PyObject *self; /* Not used */
820 if (!PyArg_ParseTuple(args, ""))
822 rv = NavServicesAvailable();
823 return Py_BuildValue("l", (long)rv);
826 static char nav_NavLoad__doc__[] =
831 nav_NavLoad(self, args)
832 PyObject *self; /* Not used */
836 if (!PyArg_ParseTuple(args, ""))
843 static char nav_NavUnload__doc__[] =
848 nav_NavUnload(self, args)
849 PyObject *self; /* Not used */
853 if (!PyArg_ParseTuple(args, ""))
860 static char nav_NavLibraryVersion__doc__[] =
865 nav_NavLibraryVersion(self, args)
866 PyObject *self; /* Not used */
871 if (!PyArg_ParseTuple(args, ""))
873 rv = NavLibraryVersion();
874 return Py_BuildValue("l", (long)rv);
877 static char nav_NavGetDefaultDialogOptions__doc__[] =
878 "()->dict\nPass dict or keyword args with same names to other calls."
882 nav_NavGetDefaultDialogOptions(self, args)
883 PyObject *self; /* Not used */
886 NavDialogOptions dialogOptions;
889 err = NavGetDefaultDialogOptions(&dialogOptions);
891 PyErr_Mac(ErrorObject, err);
894 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&}",
895 "version", dialogOptions.version,
896 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
897 "location", PyMac_BuildPoint, dialogOptions.location,
898 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
899 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
900 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
901 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
902 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
903 "message", PyMac_BuildStr255, &dialogOptions.message,
904 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey,
905 "popupExtension", OptResObj_New, dialogOptions.popupExtension);
908 /* List of methods defined in the module */
910 static struct PyMethodDef nav_methods[] = {
911 {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
912 {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
913 {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
914 {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
915 {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
916 {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
917 {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
918 {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
919 {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
920 {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
922 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
924 {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
925 {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
926 {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
927 {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
928 {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
929 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
930 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
934 /* Initialization function for the module (*must* be called initNav) */
936 static char Nav_module_documentation[] =
937 "Interface to Navigation Services\n"
938 "Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
939 "if you want the default options.\n"
940 "Use NavGetDefaultDialogOptions() to find out common option names.\n"
941 "See individual docstrings for additional keyword args/dictentries supported by each call.\n"
942 "Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
950 /* Create the module and add the functions */
951 m = Py_InitModule4("Nav", nav_methods,
952 Nav_module_documentation,
953 (PyObject*)NULL,PYTHON_API_VERSION);
955 /* Add some symbolic constants to the module */
956 d = PyModule_GetDict(m);
957 ErrorObject = PyString_FromString("Nav.error");
958 PyDict_SetItemString(d, "error", ErrorObject);
960 /* XXXX Add constants here */
963 my_eventProcUPP = NewNavEventProc(my_eventProc);
964 my_previewProcUPP = NewNavPreviewProc(my_previewProc);
965 my_filterProcUPP = NewNavObjectFilterProc(my_filterProc);
967 /* Check for errors */
968 if (PyErr_Occurred())
969 Py_FatalError("can't initialize module Nav
");