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 ******************************************************************/
33 #include "pymactoolbox.h"
34 #include <Carbon/Carbon.h>
36 static PyObject
*ErrorObject
;
38 static NavEventUPP my_eventProcUPP
;
39 static NavPreviewUPP my_previewProcUPP
;
40 static NavObjectFilterUPP my_filterProcUPP
;
42 /* Callback functions */
44 my_eventProc(NavEventCallbackMessage callBackSelector
,
45 NavCBRecPtr callBackParms
,
46 NavCallBackUserData callbackUD
)
48 PyObject
*dict
= (PyObject
*)callbackUD
;
53 if ( (pyfunc
= PyDict_GetItemString(dict
, "eventProc")) == NULL
) {
57 if ( pyfunc
== Py_None
) {
60 rv
= PyObject_CallFunction(pyfunc
, "ls#", (long)callBackSelector
,
61 (void *)callBackParms
, sizeof(NavCBRec
));
65 PySys_WriteStderr("Nav: exception in eventProc callback\n");
71 my_previewProc(NavCBRecPtr callBackParms
,
72 NavCallBackUserData callbackUD
)
74 PyObject
*dict
= (PyObject
*)callbackUD
;
79 if (!dict
) return false;
80 if ( (pyfunc
= PyDict_GetItemString(dict
, "previewProc")) == NULL
) {
84 rv
= PyObject_CallFunction(pyfunc
, "s#", (void *)callBackParms
, sizeof(NavCBRec
));
86 c_rv
= PyObject_IsTrue(rv
);
89 PySys_WriteStderr("Nav: exception in previewProc callback\n");
96 my_filterProc(AEDesc
*theItem
, void *info
,
97 NavCallBackUserData callbackUD
,
98 NavFilterModes filterMode
)
100 PyObject
*dict
= (PyObject
*)callbackUD
;
103 Boolean c_rv
= false;
105 if (!dict
) return false;
106 if ( (pyfunc
= PyDict_GetItemString(dict
, "filterProc")) == NULL
) {
110 rv
= PyObject_CallFunction(pyfunc
, "O&s#h",
111 AEDesc_NewBorrowed
, theItem
, info
, sizeof(NavFileOrFolderInfo
), (short)filterMode
);
113 c_rv
= PyObject_IsTrue(rv
);
116 PySys_WriteStderr("Nav: exception in filterProc callback\n");
122 /* ----------------------------------------------------- */
124 filldialogoptions(PyObject
*d
,
125 AEDesc
**defaultLocationP
,
126 NavDialogOptions
*opt
,
127 NavEventUPP
*eventProcP
,
128 NavPreviewUPP
*previewProcP
,
129 NavObjectFilterUPP
*filterProcP
,
130 NavTypeListHandle
*typeListP
,
132 OSType
*fileCreatorP
)
135 PyObject
*key
, *value
;
137 AEDesc
*defaultLocation_storage
;
139 NavGetDefaultDialogOptions(opt
);
141 while ( PyDict_Next(d
, &pos
, &key
, &value
) ) {
142 if ( !key
|| !value
|| !PyString_Check(key
) ) {
143 PyErr_SetString(ErrorObject
, "DialogOption has non-string key");
146 keystr
= PyString_AsString(key
);
147 if( strcmp(keystr
, "defaultLocation") == 0 ) {
148 if ( (defaultLocation_storage
= PyMem_NEW(AEDesc
, 1)) == NULL
) {
152 if ( !PyArg_Parse(value
, "O&", AEDesc_Convert
, defaultLocation_storage
) ) {
153 PyMem_DEL(defaultLocation_storage
);
156 *defaultLocationP
= defaultLocation_storage
;
157 } else if( strcmp(keystr
, "version") == 0 ) {
158 if ( !PyArg_Parse(value
, "H", &opt
->version
) )
160 } else if( strcmp(keystr
, "dialogOptionFlags") == 0 ) {
161 if ( !PyArg_Parse(value
, "k", &opt
->dialogOptionFlags
) )
163 } else if( strcmp(keystr
, "location") == 0 ) {
164 if ( !PyArg_Parse(value
, "O&", PyMac_GetPoint
, &opt
->location
) )
166 } else if( strcmp(keystr
, "clientName") == 0 ) {
167 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->clientName
) )
169 } else if( strcmp(keystr
, "windowTitle") == 0 ) {
170 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->windowTitle
) )
172 } else if( strcmp(keystr
, "actionButtonLabel") == 0 ) {
173 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->actionButtonLabel
) )
175 } else if( strcmp(keystr
, "cancelButtonLabel") == 0 ) {
176 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->cancelButtonLabel
) )
178 } else if( strcmp(keystr
, "savedFileName") == 0 ) {
179 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->savedFileName
) )
181 } else if( strcmp(keystr
, "message") == 0 ) {
182 if ( !PyArg_Parse(value
, "O&", PyMac_GetStr255
, &opt
->message
) )
184 } else if( strcmp(keystr
, "preferenceKey") == 0 ) {
185 if ( !PyArg_Parse(value
, "O&", PyMac_GetOSType
, &opt
->preferenceKey
) )
188 } else if( strcmp(keystr
, "popupExtension") == 0 ) {
189 if ( !PyArg_Parse(value
, "O&", ResObj_Convert
, &opt
->popupExtension
) )
191 #endif /* !__LP64__ */
192 } else if( eventProcP
&& strcmp(keystr
, "eventProc") == 0 ) {
193 *eventProcP
= my_eventProcUPP
;
194 } else if( previewProcP
&& strcmp(keystr
, "previewProc") == 0 ) {
195 *previewProcP
= my_previewProcUPP
;
196 } else if( filterProcP
&& strcmp(keystr
, "filterProc") == 0 ) {
197 *filterProcP
= my_filterProcUPP
;
199 } else if( typeListP
&& strcmp(keystr
, "typeList") == 0 ) {
200 if ( !PyArg_Parse(value
, "O&", ResObj_Convert
, typeListP
) )
202 #endif /* !__LP64__ */
203 } else if( fileTypeP
&& strcmp(keystr
, "fileType") == 0 ) {
204 if ( !PyArg_Parse(value
, "O&", PyMac_GetOSType
, fileTypeP
) )
206 } else if( fileCreatorP
&& strcmp(keystr
, "fileCreator") == 0 ) {
207 if ( !PyArg_Parse(value
, "O&", PyMac_GetOSType
, fileCreatorP
) )
210 PyErr_Format(ErrorObject
, "Unknown DialogOption key: %s", keystr
);
217 /* ----------------------------------------------------- */
219 /* Declarations for objects of type NavReplyRecord */
223 NavReplyRecord itself
;
226 static PyTypeObject Navrrtype
;
230 /* ---------------------------------------------------------------- */
232 static char nav_NavTranslateFile__doc__
[] =
233 "(NavTranslationOptions)->None"
237 nav_NavTranslateFile(navrrobject
*self
, PyObject
*args
)
239 NavTranslationOptions howToTranslate
;
242 if (!PyArg_ParseTuple(args
, "k", &howToTranslate
))
244 err
= NavTranslateFile(&self
->itself
, howToTranslate
);
246 PyErr_Mac(ErrorObject
, err
);
253 static char nav_NavCompleteSave__doc__
[] =
254 "(NavTranslationOptions)->None"
258 nav_NavCompleteSave(navrrobject
*self
, PyObject
*args
)
260 NavTranslationOptions howToTranslate
;
263 if (!PyArg_ParseTuple(args
, "k", &howToTranslate
))
265 err
= NavCompleteSave(&self
->itself
, howToTranslate
);
267 PyErr_Mac(ErrorObject
, err
);
275 static struct PyMethodDef navrr_methods
[] = {
276 {"NavTranslateFile", (PyCFunction
)nav_NavTranslateFile
, METH_VARARGS
, nav_NavTranslateFile__doc__
},
277 {"NavCompleteSave", (PyCFunction
)nav_NavCompleteSave
, METH_VARARGS
, nav_NavCompleteSave__doc__
},
279 {NULL
, NULL
} /* sentinel */
286 newnavrrobject(NavReplyRecord
*itself
)
290 self
= PyObject_NEW(navrrobject
, &Navrrtype
);
293 self
->itself
= *itself
;
299 navrr_dealloc(navrrobject
*self
)
301 NavDisposeReply(&self
->itself
);
306 navrr_getattr(navrrobject
*self
, char *name
)
311 #endif /* !__LP64__ */
313 if( strcmp(name
, "__members__") == 0 )
314 return Py_BuildValue(
319 #endif /* __LP64__ */
320 "version", "validRecord", "replacing",
321 "isStationery", "translationNeeded",
324 #endif /* !__LP64__ */
326 "fileTranslation", "keyScript", "saveFileName");
328 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
);
339 if( strcmp(name
, "selection") == 0 ) {
343 PyObject
*rv
, *rvitem
;
346 if ((err
=AECountItems(&self
->itself
.selection
, &count
))) {
347 PyErr_Mac(ErrorObject
, err
);
350 if ( (rv
=PyList_New(count
)) == NULL
)
352 for(i
=0; i
<count
; i
++) {
353 desc
.dataHandle
= NULL
;
354 if ((err
=AEGetNthDesc(&self
->itself
.selection
, i
+1, typeFSS
, NULL
, &desc
))) {
356 PyErr_Mac(ErrorObject
, err
);
359 if ((err
=AEGetDescData(&desc
, &fss
, sizeof(FSSpec
)))) {
361 PyErr_Mac(ErrorObject
, err
);
364 rvitem
= PyMac_BuildFSSpec(&fss
);
365 PyList_SetItem(rv
, i
, rvitem
);
366 AEDisposeDesc(&desc
);
370 #endif /* !__LP64__ */
371 if( strcmp(name
, "selection_fsr") == 0 ) {
375 PyObject
*rv
, *rvitem
;
378 if ((err
=AECountItems(&self
->itself
.selection
, &count
))) {
379 PyErr_Mac(ErrorObject
, err
);
382 if ( (rv
=PyList_New(count
)) == NULL
)
384 for(i
=0; i
<count
; i
++) {
385 desc
.dataHandle
= NULL
;
386 if ((err
=AEGetNthDesc(&self
->itself
.selection
, i
+1, typeFSRef
, NULL
, &desc
))) {
388 PyErr_Mac(ErrorObject
, err
);
391 if ((err
=AEGetDescData(&desc
, &fsr
, sizeof(FSRef
)))) {
393 PyErr_Mac(ErrorObject
, err
);
396 rvitem
= PyMac_BuildFSRef(&fsr
);
397 PyList_SetItem(rv
, i
, rvitem
);
398 AEDisposeDesc(&desc
);
403 if( strcmp(name
, "fileTranslation") == 0 )
404 return ResObj_New((Handle
)self
->itself
.fileTranslation
);
406 if( strcmp(name
, "keyScript") == 0 )
407 return Py_BuildValue("h", (short)self
->itself
.keyScript
);
408 if( strcmp(name
, "saveFileName") == 0 )
409 return Py_BuildValue("O&", CFStringRefObj_New
, self
->itself
.saveFileName
);
412 return Py_FindMethod(navrr_methods
, (PyObject
*)self
, name
);
416 navrr_setattr(navrrobject
*self
, char *name
, PyObject
*v
)
418 /* Set attribute 'name' to value 'v'. v==NULL means delete */
420 /* XXXX Add your own setattr code here */
424 static char Navrrtype__doc__
[] =
425 "Record containing result of a Nav file selection call. Use dir() for member names."
428 static PyTypeObject Navrrtype
= {
429 PyObject_HEAD_INIT(&PyType_Type
)
431 "Nav.NavReplyRecord", /*tp_name*/
432 sizeof(navrrobject
), /*tp_basicsize*/
435 (destructor
)navrr_dealloc
, /*tp_dealloc*/
436 (printfunc
)0, /*tp_print*/
437 (getattrfunc
)navrr_getattr
, /*tp_getattr*/
438 (setattrfunc
)navrr_setattr
, /*tp_setattr*/
439 (cmpfunc
)0, /*tp_compare*/
440 (reprfunc
)0, /*tp_repr*/
442 0, /*tp_as_sequence*/
444 (hashfunc
)0, /*tp_hash*/
445 (ternaryfunc
)0, /*tp_call*/
446 (reprfunc
)0, /*tp_str*/
448 /* Space for future expansion */
450 Navrrtype__doc__
/* Documentation string */
453 /* End of code for NavReplyRecord objects */
455 /* ----------------------------------------------------- */
457 static char nav_NavGetFile__doc__
[] =
458 "(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
462 nav_NavGetFile(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
465 AEDesc
*defaultLocation
= NULL
;
466 NavReplyRecord reply
;
467 NavDialogOptions dialogOptions
;
468 NavEventUPP eventProc
= NULL
;
469 NavPreviewUPP previewProc
= NULL
;
470 NavObjectFilterUPP filterProc
= NULL
;
471 NavTypeListHandle typeList
= NULL
;
474 if ( kw
&& PyObject_IsTrue(kw
) ) {
475 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
478 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
480 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, &previewProc
, &filterProc
, &typeList
, NULL
, NULL
))
482 err
= NavGetFile(defaultLocation
, &reply
, &dialogOptions
,
483 eventProc
, previewProc
, filterProc
, typeList
, (void *)dict
);
484 PyMem_DEL(defaultLocation
);
486 PyErr_Mac(ErrorObject
, err
);
489 return (PyObject
*)newnavrrobject(&reply
);
492 static char nav_NavPutFile__doc__
[] =
493 "(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
497 nav_NavPutFile(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
500 AEDesc
*defaultLocation
= NULL
;
501 NavReplyRecord reply
;
502 NavDialogOptions dialogOptions
;
503 NavEventUPP eventProc
= NULL
;
508 if ( kw
&& PyObject_IsTrue(kw
) ) {
509 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
512 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
514 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, &fileType
, &fileCreator
))
516 err
= NavPutFile(defaultLocation
, &reply
, &dialogOptions
,
517 eventProc
, fileType
, fileCreator
, (void *)dict
);
518 PyMem_DEL(defaultLocation
);
520 PyErr_Mac(ErrorObject
, err
);
523 return (PyObject
*)newnavrrobject(&reply
);
526 static char nav_NavAskSaveChanges__doc__
[] =
527 "(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
532 nav_NavAskSaveChanges(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
535 NavDialogOptions dialogOptions
;
536 NavAskSaveChangesAction action
;
537 NavAskSaveChangesResult reply
;
538 NavEventUPP eventProc
= NULL
;
541 if ( kw
&& PyObject_IsTrue(kw
) ) {
542 if (!PyArg_ParseTuple(args
, "k", &action
))
545 } else if (!PyArg_ParseTuple(args
, "lO!", &action
, &PyDict_Type
, &dict
))
547 if (!filldialogoptions(dict
, NULL
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
549 err
= NavAskSaveChanges(&dialogOptions
, action
, &reply
, eventProc
, (void *)dict
);
551 PyErr_Mac(ErrorObject
, err
);
554 return Py_BuildValue("l", (long)reply
);
557 static char nav_NavCustomAskSaveChanges__doc__
[] =
558 "(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
562 nav_NavCustomAskSaveChanges(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
565 NavDialogOptions dialogOptions
;
566 NavAskSaveChangesResult reply
;
567 NavEventUPP eventProc
= NULL
;
570 if ( kw
&& PyObject_IsTrue(kw
) ) {
571 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
574 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
576 if (!filldialogoptions(dict
, NULL
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
578 err
= NavCustomAskSaveChanges(&dialogOptions
, &reply
, eventProc
, (void *)dict
);
580 PyErr_Mac(ErrorObject
, err
);
583 return Py_BuildValue("l", (long)reply
);
586 static char nav_NavAskDiscardChanges__doc__
[] =
587 "(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
591 nav_NavAskDiscardChanges(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
594 NavDialogOptions dialogOptions
;
595 NavAskSaveChangesResult reply
;
596 NavEventUPP eventProc
= NULL
;
599 if ( kw
&& PyObject_IsTrue(kw
) ) {
600 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
603 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
605 if (!filldialogoptions(dict
, NULL
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
607 err
= NavAskDiscardChanges(&dialogOptions
, &reply
, eventProc
, (void *)dict
);
609 PyErr_Mac(ErrorObject
, err
);
612 return Py_BuildValue("l", (long)reply
);
615 static char nav_NavChooseFile__doc__
[] =
616 "(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
620 nav_NavChooseFile(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
623 AEDesc
*defaultLocation
= NULL
;
624 NavReplyRecord reply
;
625 NavDialogOptions dialogOptions
;
626 NavEventUPP eventProc
= NULL
;
627 NavPreviewUPP previewProc
= NULL
;
628 NavObjectFilterUPP filterProc
= NULL
;
629 NavTypeListHandle typeList
= NULL
;
632 if ( kw
&& PyObject_IsTrue(kw
) ) {
633 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
636 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
638 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, &previewProc
, &filterProc
, &typeList
, NULL
, NULL
))
640 err
= NavChooseFile(defaultLocation
, &reply
, &dialogOptions
,
641 eventProc
, previewProc
, filterProc
, typeList
, (void *)dict
);
642 PyMem_DEL(defaultLocation
);
644 PyErr_Mac(ErrorObject
, err
);
647 return (PyObject
*)newnavrrobject(&reply
);
650 static char nav_NavChooseFolder__doc__
[] =
651 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
655 nav_NavChooseFolder(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
658 AEDesc
*defaultLocation
= NULL
;
659 NavReplyRecord reply
;
660 NavDialogOptions dialogOptions
;
661 NavEventUPP eventProc
= NULL
;
662 NavObjectFilterUPP filterProc
= NULL
;
665 if ( kw
&& PyObject_IsTrue(kw
) ) {
666 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
669 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
671 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, &filterProc
, NULL
, NULL
, NULL
))
673 err
= NavChooseFolder(defaultLocation
, &reply
, &dialogOptions
,
674 eventProc
, filterProc
, (void *)dict
);
675 PyMem_DEL(defaultLocation
);
677 PyErr_Mac(ErrorObject
, err
);
680 return (PyObject
*)newnavrrobject(&reply
);
683 static char nav_NavChooseVolume__doc__
[] =
684 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
688 nav_NavChooseVolume(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
691 AEDesc
*defaultLocation
= NULL
;
692 NavReplyRecord reply
;
693 NavDialogOptions dialogOptions
;
694 NavEventUPP eventProc
= NULL
;
695 NavObjectFilterUPP filterProc
= NULL
;
698 if ( kw
&& PyObject_IsTrue(kw
) ) {
699 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
702 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
704 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, &filterProc
, NULL
, NULL
, NULL
))
706 err
= NavChooseVolume(defaultLocation
, &reply
, &dialogOptions
,
707 eventProc
, filterProc
, (void *)dict
);
708 PyMem_DEL(defaultLocation
);
710 PyErr_Mac(ErrorObject
, err
);
713 return (PyObject
*)newnavrrobject(&reply
);
716 static char nav_NavChooseObject__doc__
[] =
717 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
721 nav_NavChooseObject(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
724 AEDesc
*defaultLocation
= NULL
;
725 NavReplyRecord reply
;
726 NavDialogOptions dialogOptions
;
727 NavEventUPP eventProc
= NULL
;
728 NavObjectFilterUPP filterProc
= NULL
;
731 if ( kw
&& PyObject_IsTrue(kw
) ) {
732 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
735 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
737 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, &filterProc
, NULL
, NULL
, NULL
))
739 err
= NavChooseObject(defaultLocation
, &reply
, &dialogOptions
,
740 eventProc
, filterProc
, (void *)dict
);
741 PyMem_DEL(defaultLocation
);
743 PyErr_Mac(ErrorObject
, err
);
746 return (PyObject
*)newnavrrobject(&reply
);
749 static char nav_NavNewFolder__doc__
[] =
750 "(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
754 nav_NavNewFolder(PyObject
*self
, PyObject
*args
, PyObject
*kw
)
757 AEDesc
*defaultLocation
= NULL
;
758 NavReplyRecord reply
;
759 NavDialogOptions dialogOptions
;
760 NavEventUPP eventProc
= NULL
;
763 if ( kw
&& PyObject_IsTrue(kw
) ) {
764 if (!PyArg_ParseTuple(args
, ";either keyword arguments or dictionary expected"))
767 } else if (!PyArg_ParseTuple(args
, "O!", &PyDict_Type
, &dict
))
769 if (!filldialogoptions(dict
, &defaultLocation
, &dialogOptions
, &eventProc
, NULL
, NULL
, NULL
, NULL
, NULL
))
771 err
= NavNewFolder(defaultLocation
, &reply
, &dialogOptions
, eventProc
, (void *)dict
);
772 PyMem_DEL(defaultLocation
);
774 PyErr_Mac(ErrorObject
, err
);
777 return (PyObject
*)newnavrrobject(&reply
);
781 /* XXXX I don't know what to do with the void * argument */
782 static char nav_NavCustomControl__doc__
[] =
788 nav_NavCustomControl(PyObject
*self
, PyObject
*args
)
791 if (!PyArg_ParseTuple(args
, ""))
798 static char nav_NavServicesCanRun__doc__
[] =
803 nav_NavServicesCanRun(PyObject
*self
, PyObject
*args
)
806 if (!PyArg_ParseTuple(args
, ""))
808 rv
= NavServicesCanRun();
809 return Py_BuildValue("l", (long)rv
);
812 static char nav_NavServicesAvailable__doc__
[] =
817 nav_NavServicesAvailable(PyObject
*self
, PyObject
*args
)
821 if (!PyArg_ParseTuple(args
, ""))
823 rv
= NavServicesAvailable();
824 return Py_BuildValue("l", (long)rv
);
827 static char nav_NavLoad__doc__
[] =
832 nav_NavLoad(PyObject
*self
, PyObject
*args
)
835 if (!PyArg_ParseTuple(args
, ""))
842 static char nav_NavUnload__doc__
[] =
847 nav_NavUnload(PyObject
*self
, PyObject
*args
)
850 if (!PyArg_ParseTuple(args
, ""))
857 static char nav_NavLibraryVersion__doc__
[] =
862 nav_NavLibraryVersion(PyObject
*self
, PyObject
*args
)
866 if (!PyArg_ParseTuple(args
, ""))
868 rv
= NavLibraryVersion();
869 return Py_BuildValue("l", (long)rv
);
872 static char nav_NavGetDefaultDialogOptions__doc__
[] =
873 "()->dict\nPass dict or keyword args with same names to other calls."
877 nav_NavGetDefaultDialogOptions(PyObject
*self
, PyObject
*args
)
879 NavDialogOptions dialogOptions
;
882 err
= NavGetDefaultDialogOptions(&dialogOptions
);
884 PyErr_Mac(ErrorObject
, err
);
887 return Py_BuildValue(
889 "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
891 "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
892 #endif /* __LP64__ */
893 "version", dialogOptions
.version
,
894 "dialogOptionFlags", dialogOptions
.dialogOptionFlags
,
895 "location", PyMac_BuildPoint
, dialogOptions
.location
,
896 "clientName", PyMac_BuildStr255
, &dialogOptions
.clientName
,
897 "windowTitle", PyMac_BuildStr255
, &dialogOptions
.windowTitle
,
898 "actionButtonLabel", PyMac_BuildStr255
, &dialogOptions
.actionButtonLabel
,
899 "cancelButtonLabel", PyMac_BuildStr255
, &dialogOptions
.cancelButtonLabel
,
900 "savedFileName", PyMac_BuildStr255
, &dialogOptions
.savedFileName
,
901 "message", PyMac_BuildStr255
, &dialogOptions
.message
,
902 "preferenceKey", PyMac_BuildOSType
, dialogOptions
.preferenceKey
904 ,"popupExtension", OptResObj_New
, dialogOptions
.popupExtension
905 #endif /* __LP64__ */
909 /* List of methods defined in the module */
911 static struct PyMethodDef nav_methods
[] = {
912 {"NavGetFile", (PyCFunction
)nav_NavGetFile
, METH_VARARGS
|METH_KEYWORDS
, nav_NavGetFile__doc__
},
913 {"NavPutFile", (PyCFunction
)nav_NavPutFile
, METH_VARARGS
|METH_KEYWORDS
, nav_NavPutFile__doc__
},
914 {"NavAskSaveChanges", (PyCFunction
)nav_NavAskSaveChanges
, METH_VARARGS
|METH_KEYWORDS
, nav_NavAskSaveChanges__doc__
},
915 {"NavCustomAskSaveChanges", (PyCFunction
)nav_NavCustomAskSaveChanges
, METH_VARARGS
|METH_KEYWORDS
, nav_NavCustomAskSaveChanges__doc__
},
916 {"NavAskDiscardChanges", (PyCFunction
)nav_NavAskDiscardChanges
, METH_VARARGS
|METH_KEYWORDS
, nav_NavAskDiscardChanges__doc__
},
917 {"NavChooseFile", (PyCFunction
)nav_NavChooseFile
, METH_VARARGS
|METH_KEYWORDS
, nav_NavChooseFile__doc__
},
918 {"NavChooseFolder", (PyCFunction
)nav_NavChooseFolder
, METH_VARARGS
|METH_KEYWORDS
, nav_NavChooseFolder__doc__
},
919 {"NavChooseVolume", (PyCFunction
)nav_NavChooseVolume
, METH_VARARGS
|METH_KEYWORDS
, nav_NavChooseVolume__doc__
},
920 {"NavChooseObject", (PyCFunction
)nav_NavChooseObject
, METH_VARARGS
|METH_KEYWORDS
, nav_NavChooseObject__doc__
},
921 {"NavNewFolder", (PyCFunction
)nav_NavNewFolder
, METH_VARARGS
|METH_KEYWORDS
, nav_NavNewFolder__doc__
},
923 {"NavCustomControl", (PyCFunction
)nav_NavCustomControl
, METH_VARARGS
, nav_NavCustomControl__doc__
},
925 {"NavServicesCanRun", (PyCFunction
)nav_NavServicesCanRun
, METH_VARARGS
, nav_NavServicesCanRun__doc__
},
926 {"NavServicesAvailable", (PyCFunction
)nav_NavServicesAvailable
, METH_VARARGS
, nav_NavServicesAvailable__doc__
},
927 {"NavLoad", (PyCFunction
)nav_NavLoad
, METH_VARARGS
, nav_NavLoad__doc__
},
928 {"NavUnload", (PyCFunction
)nav_NavUnload
, METH_VARARGS
, nav_NavUnload__doc__
},
929 {"NavLibraryVersion", (PyCFunction
)nav_NavLibraryVersion
, METH_VARARGS
, nav_NavLibraryVersion__doc__
},
930 {"NavGetDefaultDialogOptions", (PyCFunction
)nav_NavGetDefaultDialogOptions
, METH_VARARGS
, nav_NavGetDefaultDialogOptions__doc__
},
931 {NULL
, (PyCFunction
)NULL
, 0, NULL
} /* sentinel */
935 /* Initialization function for the module (*must* be called initNav) */
937 static char Nav_module_documentation
[] =
938 "Interface to Navigation Services\n"
939 "Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
940 "if you want the default options.\n"
941 "Use NavGetDefaultDialogOptions() to find out common option names.\n"
942 "See individual docstrings for additional keyword args/dictentries supported by each call.\n"
943 "Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
951 if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
954 /* Test that we have NavServices */
955 if ( !NavServicesAvailable() ) {
956 PyErr_SetString(PyExc_ImportError
, "Navigation Services not available");
959 /* Create the module and add the functions */
960 m
= Py_InitModule4("Nav", nav_methods
,
961 Nav_module_documentation
,
962 (PyObject
*)NULL
,PYTHON_API_VERSION
);
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
);
969 /* XXXX Add constants here */
972 my_eventProcUPP
= NewNavEventUPP(my_eventProc
);
973 my_previewProcUPP
= NewNavPreviewUPP(my_previewProc
);
974 my_filterProcUPP
= NewNavObjectFilterUPP(my_filterProc
);