ยปCore Development>Code coverage>Mac/Modules/Nav.c

Python code coverage for Mac/Modules/Nav.c

#countcontent
1n/a/***********************************************************
2n/aCopyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3n/aThe Netherlands.
4n/a
5n/a All Rights Reserved
6n/a
7n/aPermission to use, copy, modify, and distribute this software and its
8n/adocumentation for any purpose and without fee is hereby granted,
9n/aprovided that the above copyright notice appear in all copies and that
10n/aboth that copyright notice and this permission notice appear in
11n/asupporting documentation, and that the names of Stichting Mathematisch
12n/aCentrum or CWI or Corporation for National Research Initiatives or
13n/aCNRI not be used in advertising or publicity pertaining to
14n/adistribution of the software without specific, written prior
15n/apermission.
16n/a
17n/aWhile CWI is the initial source for this software, a modified version
18n/ais made available by the Corporation for National Research Initiatives
19n/a(CNRI) at the Internet address ftp://ftp.python.org.
20n/a
21n/aSTICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22n/aREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23n/aMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24n/aCENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25n/aDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26n/aPROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27n/aTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28n/aPERFORMANCE OF THIS SOFTWARE.
29n/a
30n/a******************************************************************/
31n/a
32n/a#include "Python.h"
33n/a#include "pymactoolbox.h"
34n/a#include <Carbon/Carbon.h>
35n/a
36n/a#ifndef __LP64__
37n/a
38n/astatic PyObject *ErrorObject;
39n/a
40n/astatic NavEventUPP my_eventProcUPP;
41n/astatic NavPreviewUPP my_previewProcUPP;
42n/astatic NavObjectFilterUPP my_filterProcUPP;
43n/a
44n/a/* Callback functions */
45n/astatic pascal void
46n/amy_eventProc(NavEventCallbackMessage callBackSelector,
47n/a NavCBRecPtr callBackParms,
48n/a NavCallBackUserData callbackUD)
49n/a{
50n/a PyObject *dict = (PyObject *)callbackUD;
51n/a PyObject *pyfunc;
52n/a PyObject *rv;
53n/a
54n/a if (!dict) return;
55n/a if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
56n/a PyErr_Print();
57n/a return;
58n/a }
59n/a if ( pyfunc == Py_None ) {
60n/a return;
61n/a }
62n/a rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
63n/a (void *)callBackParms, sizeof(NavCBRec));
64n/a if ( rv )
65n/a Py_DECREF(rv);
66n/a else {
67n/a PySys_WriteStderr("Nav: exception in eventProc callback\n");
68n/a PyErr_Print();
69n/a }
70n/a}
71n/a
72n/astatic pascal Boolean
73n/amy_previewProc(NavCBRecPtr callBackParms,
74n/a NavCallBackUserData callbackUD)
75n/a{
76n/a PyObject *dict = (PyObject *)callbackUD;
77n/a PyObject *pyfunc;
78n/a PyObject *rv;
79n/a Boolean c_rv = false;
80n/a
81n/a if (!dict) return false;
82n/a if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
83n/a PyErr_Print();
84n/a return false;
85n/a }
86n/a rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
87n/a if ( rv ) {
88n/a c_rv = PyObject_IsTrue(rv);
89n/a Py_DECREF(rv);
90n/a } else {
91n/a PySys_WriteStderr("Nav: exception in previewProc callback\n");
92n/a PyErr_Print();
93n/a }
94n/a return c_rv;
95n/a}
96n/a
97n/astatic pascal Boolean
98n/amy_filterProc(AEDesc *theItem, void *info,
99n/a NavCallBackUserData callbackUD,
100n/a NavFilterModes filterMode)
101n/a{
102n/a PyObject *dict = (PyObject *)callbackUD;
103n/a PyObject *pyfunc;
104n/a PyObject *rv;
105n/a Boolean c_rv = false;
106n/a
107n/a if (!dict) return false;
108n/a if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
109n/a PyErr_Print();
110n/a return false;
111n/a }
112n/a rv = PyObject_CallFunction(pyfunc, "O&s#h",
113n/a AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
114n/a if ( rv ) {
115n/a c_rv = PyObject_IsTrue(rv);
116n/a Py_DECREF(rv);
117n/a } else {
118n/a PySys_WriteStderr("Nav: exception in filterProc callback\n");
119n/a PyErr_Print();
120n/a }
121n/a return c_rv;
122n/a}
123n/a
124n/a/* ----------------------------------------------------- */
125n/astatic int
126n/afilldialogoptions(PyObject *d,
127n/a AEDesc **defaultLocationP,
128n/a NavDialogOptions *opt,
129n/a NavEventUPP *eventProcP,
130n/a NavPreviewUPP *previewProcP,
131n/a NavObjectFilterUPP *filterProcP,
132n/a NavTypeListHandle *typeListP,
133n/a OSType *fileTypeP,
134n/a OSType *fileCreatorP)
135n/a{
136n/a Py_ssize_t pos = 0;
137n/a PyObject *key, *value;
138n/a char *keystr;
139n/a AEDesc *defaultLocation_storage;
140n/a
141n/a NavGetDefaultDialogOptions(opt);
142n/a
143n/a while ( PyDict_Next(d, &pos, &key, &value) ) {
144n/a if ( !key || !value || !PyString_Check(key) ) {
145n/a PyErr_SetString(ErrorObject, "DialogOption has non-string key");
146n/a return 0;
147n/a }
148n/a keystr = PyString_AsString(key);
149n/a if( strcmp(keystr, "defaultLocation") == 0 ) {
150n/a if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
151n/a PyErr_NoMemory();
152n/a return 0;
153n/a }
154n/a if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
155n/a PyMem_DEL(defaultLocation_storage);
156n/a return 0;
157n/a }
158n/a *defaultLocationP = defaultLocation_storage;
159n/a } else if( strcmp(keystr, "version") == 0 ) {
160n/a if ( !PyArg_Parse(value, "H", &opt->version) )
161n/a return 0;
162n/a } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
163n/a if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
164n/a return 0;
165n/a } else if( strcmp(keystr, "location") == 0 ) {
166n/a if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
167n/a return 0;
168n/a } else if( strcmp(keystr, "clientName") == 0 ) {
169n/a if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
170n/a return 0;
171n/a } else if( strcmp(keystr, "windowTitle") == 0 ) {
172n/a if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
173n/a return 0;
174n/a } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
175n/a if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
176n/a return 0;
177n/a } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
178n/a if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
179n/a return 0;
180n/a } else if( strcmp(keystr, "savedFileName") == 0 ) {
181n/a if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
182n/a return 0;
183n/a } else if( strcmp(keystr, "message") == 0 ) {
184n/a if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
185n/a return 0;
186n/a } else if( strcmp(keystr, "preferenceKey") == 0 ) {
187n/a if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
188n/a return 0;
189n/a } else if( strcmp(keystr, "popupExtension") == 0 ) {
190n/a if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
191n/a return 0;
192n/a } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
193n/a *eventProcP = my_eventProcUPP;
194n/a } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
195n/a *previewProcP = my_previewProcUPP;
196n/a } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
197n/a *filterProcP = my_filterProcUPP;
198n/a } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
199n/a if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
200n/a return 0;
201n/a } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
202n/a if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
203n/a return 0;
204n/a } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
205n/a if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
206n/a return 0;
207n/a } else {
208n/a PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
209n/a return 0;
210n/a }
211n/a }
212n/a return 1;
213n/a}
214n/a
215n/a/* ----------------------------------------------------- */
216n/a
217n/a/* Declarations for objects of type NavReplyRecord */
218n/a
219n/atypedef struct {
220n/a PyObject_HEAD
221n/a NavReplyRecord itself;
222n/a} navrrobject;
223n/a
224n/astatic PyTypeObject Navrrtype;
225n/a
226n/a
227n/a
228n/a/* ---------------------------------------------------------------- */
229n/a
230n/astatic char nav_NavTranslateFile__doc__[] =
231n/a"(NavTranslationOptions)->None"
232n/a;
233n/a
234n/astatic PyObject *
235n/anav_NavTranslateFile(navrrobject *self, PyObject *args)
236n/a{
237n/a NavTranslationOptions howToTranslate;
238n/a OSErr err;
239n/a
240n/a if (!PyArg_ParseTuple(args, "k", &howToTranslate))
241n/a return NULL;
242n/a err = NavTranslateFile(&self->itself, howToTranslate);
243n/a if ( err ) {
244n/a PyErr_Mac(ErrorObject, err);
245n/a return NULL;
246n/a }
247n/a Py_INCREF(Py_None);
248n/a return Py_None;
249n/a}
250n/a
251n/astatic char nav_NavCompleteSave__doc__[] =
252n/a"(NavTranslationOptions)->None"
253n/a;
254n/a
255n/astatic PyObject *
256n/anav_NavCompleteSave(navrrobject *self, PyObject *args)
257n/a{
258n/a NavTranslationOptions howToTranslate;
259n/a OSErr err;
260n/a
261n/a if (!PyArg_ParseTuple(args, "k", &howToTranslate))
262n/a return NULL;
263n/a err = NavCompleteSave(&self->itself, howToTranslate);
264n/a if ( err ) {
265n/a PyErr_Mac(ErrorObject, err);
266n/a return NULL;
267n/a }
268n/a Py_INCREF(Py_None);
269n/a return Py_None;
270n/a}
271n/a
272n/a
273n/astatic struct PyMethodDef navrr_methods[] = {
274n/a {"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
275n/a {"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
276n/a
277n/a {NULL, NULL} /* sentinel */
278n/a};
279n/a
280n/a/* ---------- */
281n/a
282n/a
283n/astatic navrrobject *
284n/anewnavrrobject(NavReplyRecord *itself)
285n/a{
286n/a navrrobject *self;
287n/a
288n/a self = PyObject_NEW(navrrobject, &Navrrtype);
289n/a if (self == NULL)
290n/a return NULL;
291n/a self->itself = *itself;
292n/a return self;
293n/a}
294n/a
295n/a
296n/astatic void
297n/anavrr_dealloc(navrrobject *self)
298n/a{
299n/a NavDisposeReply(&self->itself);
300n/a PyObject_DEL(self);
301n/a}
302n/a
303n/astatic PyObject *
304n/anavrr_getattr(navrrobject *self, char *name)
305n/a{
306n/a FSRef fsr;
307n/a FSSpec fss;
308n/a
309n/a if( strcmp(name, "__members__") == 0 )
310n/a return Py_BuildValue(
311n/a "ssssssssss",
312n/a "version", "validRecord", "replacing",
313n/a "isStationery", "translationNeeded",
314n/a "selection",
315n/a "selection_fsr",
316n/a "fileTranslation", "keyScript", "saveFileName");
317n/a
318n/a if( strcmp(name, "version") == 0 )
319n/a return Py_BuildValue("h", self->itself.version);
320n/a if( strcmp(name, "validRecord") == 0 )
321n/a return Py_BuildValue("l", (long)self->itself.validRecord);
322n/a if( strcmp(name, "replacing") == 0 )
323n/a return Py_BuildValue("l", (long)self->itself.replacing);
324n/a if( strcmp(name, "isStationery") == 0 )
325n/a return Py_BuildValue("l", (long)self->itself.isStationery);
326n/a if( strcmp(name, "translationNeeded") == 0 )
327n/a return Py_BuildValue("l", (long)self->itself.translationNeeded);
328n/a if( strcmp(name, "selection") == 0 ) {
329n/a SInt32 i;
330n/a long count;
331n/a OSErr err;
332n/a PyObject *rv, *rvitem;
333n/a AEDesc desc;
334n/a
335n/a if ((err=AECountItems(&self->itself.selection, &count))) {
336n/a PyErr_Mac(ErrorObject, err);
337n/a return NULL;
338n/a }
339n/a if ( (rv=PyList_New(count)) == NULL )
340n/a return NULL;
341n/a for(i=0; i<count; i++) {
342n/a desc.dataHandle = NULL;
343n/a if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
344n/a Py_DECREF(rv);
345n/a PyErr_Mac(ErrorObject, err);
346n/a return NULL;
347n/a }
348n/a if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
349n/a Py_DECREF(rv);
350n/a PyErr_Mac(ErrorObject, err);
351n/a return NULL;
352n/a }
353n/a rvitem = PyMac_BuildFSSpec(&fss);
354n/a PyList_SetItem(rv, i, rvitem);
355n/a AEDisposeDesc(&desc);
356n/a }
357n/a return rv;
358n/a }
359n/a if( strcmp(name, "selection_fsr") == 0 ) {
360n/a SInt32 i;
361n/a long count;
362n/a OSErr err;
363n/a PyObject *rv, *rvitem;
364n/a AEDesc desc;
365n/a
366n/a if ((err=AECountItems(&self->itself.selection, &count))) {
367n/a PyErr_Mac(ErrorObject, err);
368n/a return NULL;
369n/a }
370n/a if ( (rv=PyList_New(count)) == NULL )
371n/a return NULL;
372n/a for(i=0; i<count; i++) {
373n/a desc.dataHandle = NULL;
374n/a if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
375n/a Py_DECREF(rv);
376n/a PyErr_Mac(ErrorObject, err);
377n/a return NULL;
378n/a }
379n/a if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
380n/a Py_DECREF(rv);
381n/a PyErr_Mac(ErrorObject, err);
382n/a return NULL;
383n/a }
384n/a rvitem = PyMac_BuildFSRef(&fsr);
385n/a PyList_SetItem(rv, i, rvitem);
386n/a AEDisposeDesc(&desc);
387n/a }
388n/a return rv;
389n/a }
390n/a if( strcmp(name, "fileTranslation") == 0 )
391n/a return ResObj_New((Handle)self->itself.fileTranslation);
392n/a if( strcmp(name, "keyScript") == 0 )
393n/a return Py_BuildValue("h", (short)self->itself.keyScript);
394n/a if( strcmp(name, "saveFileName") == 0 )
395n/a return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
396n/a
397n/a
398n/a return Py_FindMethod(navrr_methods, (PyObject *)self, name);
399n/a}
400n/a
401n/astatic int
402n/anavrr_setattr(navrrobject *self, char *name, PyObject *v)
403n/a{
404n/a /* Set attribute 'name' to value 'v'. v==NULL means delete */
405n/a
406n/a /* XXXX Add your own setattr code here */
407n/a return -1;
408n/a}
409n/a
410n/astatic char Navrrtype__doc__[] =
411n/a"Record containing result of a Nav file selection call. Use dir() for member names."
412n/a;
413n/a
414n/astatic PyTypeObject Navrrtype = {
415n/a PyObject_HEAD_INIT(&PyType_Type)
416n/a 0, /*ob_size*/
417n/a "Nav.NavReplyRecord", /*tp_name*/
418n/a sizeof(navrrobject), /*tp_basicsize*/
419n/a 0, /*tp_itemsize*/
420n/a /* methods */
421n/a (destructor)navrr_dealloc, /*tp_dealloc*/
422n/a (printfunc)0, /*tp_print*/
423n/a (getattrfunc)navrr_getattr, /*tp_getattr*/
424n/a (setattrfunc)navrr_setattr, /*tp_setattr*/
425n/a (cmpfunc)0, /*tp_compare*/
426n/a (reprfunc)0, /*tp_repr*/
427n/a 0, /*tp_as_number*/
428n/a 0, /*tp_as_sequence*/
429n/a 0, /*tp_as_mapping*/
430n/a (hashfunc)0, /*tp_hash*/
431n/a (ternaryfunc)0, /*tp_call*/
432n/a (reprfunc)0, /*tp_str*/
433n/a
434n/a /* Space for future expansion */
435n/a 0L,0L,0L,0L,
436n/a Navrrtype__doc__ /* Documentation string */
437n/a};
438n/a
439n/a/* End of code for NavReplyRecord objects */
440n/a
441n/a/* ----------------------------------------------------- */
442n/a
443n/astatic char nav_NavGetFile__doc__[] =
444n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
445n/a;
446n/a
447n/astatic PyObject *
448n/anav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
449n/a{
450n/a PyObject *dict;
451n/a AEDesc *defaultLocation = NULL;
452n/a NavReplyRecord reply;
453n/a NavDialogOptions dialogOptions;
454n/a NavEventUPP eventProc = NULL;
455n/a NavPreviewUPP previewProc = NULL;
456n/a NavObjectFilterUPP filterProc = NULL;
457n/a NavTypeListHandle typeList = NULL;
458n/a OSErr err;
459n/a
460n/a if ( kw && PyObject_IsTrue(kw) ) {
461n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
462n/a return NULL;
463n/a dict = kw;
464n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
465n/a return NULL;
466n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
467n/a return NULL;
468n/a err = NavGetFile(defaultLocation, &reply, &dialogOptions,
469n/a eventProc, previewProc, filterProc, typeList, (void *)dict);
470n/a PyMem_DEL(defaultLocation);
471n/a if ( err ) {
472n/a PyErr_Mac(ErrorObject, err);
473n/a return NULL;
474n/a }
475n/a return (PyObject *)newnavrrobject(&reply);
476n/a}
477n/a
478n/astatic char nav_NavPutFile__doc__[] =
479n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
480n/a;
481n/a
482n/astatic PyObject *
483n/anav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
484n/a{
485n/a PyObject *dict;
486n/a AEDesc *defaultLocation = NULL;
487n/a NavReplyRecord reply;
488n/a NavDialogOptions dialogOptions;
489n/a NavEventUPP eventProc = NULL;
490n/a OSType fileType;
491n/a OSType fileCreator;
492n/a OSErr err;
493n/a
494n/a if ( kw && PyObject_IsTrue(kw) ) {
495n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
496n/a return NULL;
497n/a dict = kw;
498n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
499n/a return NULL;
500n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
501n/a return NULL;
502n/a err = NavPutFile(defaultLocation, &reply, &dialogOptions,
503n/a eventProc, fileType, fileCreator, (void *)dict);
504n/a PyMem_DEL(defaultLocation);
505n/a if ( err ) {
506n/a PyErr_Mac(ErrorObject, err);
507n/a return NULL;
508n/a }
509n/a return (PyObject *)newnavrrobject(&reply);
510n/a}
511n/a
512n/astatic char nav_NavAskSaveChanges__doc__[] =
513n/a"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
514n/a
515n/a;
516n/a
517n/astatic PyObject *
518n/anav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
519n/a{
520n/a PyObject *dict;
521n/a NavDialogOptions dialogOptions;
522n/a NavAskSaveChangesAction action;
523n/a NavAskSaveChangesResult reply;
524n/a NavEventUPP eventProc = NULL;
525n/a OSErr err;
526n/a
527n/a if ( kw && PyObject_IsTrue(kw) ) {
528n/a if (!PyArg_ParseTuple(args, "k", &action))
529n/a return NULL;
530n/a dict = kw;
531n/a } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
532n/a return NULL;
533n/a if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
534n/a return NULL;
535n/a err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
536n/a if ( err ) {
537n/a PyErr_Mac(ErrorObject, err);
538n/a return NULL;
539n/a }
540n/a return Py_BuildValue("l", (long)reply);
541n/a}
542n/a
543n/astatic char nav_NavCustomAskSaveChanges__doc__[] =
544n/a"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
545n/a;
546n/a
547n/astatic PyObject *
548n/anav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
549n/a{
550n/a PyObject *dict;
551n/a NavDialogOptions dialogOptions;
552n/a NavAskSaveChangesResult reply;
553n/a NavEventUPP eventProc = NULL;
554n/a OSErr err;
555n/a
556n/a if ( kw && PyObject_IsTrue(kw) ) {
557n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
558n/a return NULL;
559n/a dict = kw;
560n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
561n/a return NULL;
562n/a if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
563n/a return NULL;
564n/a err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
565n/a if ( err ) {
566n/a PyErr_Mac(ErrorObject, err);
567n/a return NULL;
568n/a }
569n/a return Py_BuildValue("l", (long)reply);
570n/a}
571n/a
572n/astatic char nav_NavAskDiscardChanges__doc__[] =
573n/a"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
574n/a;
575n/a
576n/astatic PyObject *
577n/anav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
578n/a{
579n/a PyObject *dict;
580n/a NavDialogOptions dialogOptions;
581n/a NavAskSaveChangesResult reply;
582n/a NavEventUPP eventProc = NULL;
583n/a OSErr err;
584n/a
585n/a if ( kw && PyObject_IsTrue(kw) ) {
586n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
587n/a return NULL;
588n/a dict = kw;
589n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
590n/a return NULL;
591n/a if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
592n/a return NULL;
593n/a err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
594n/a if ( err ) {
595n/a PyErr_Mac(ErrorObject, err);
596n/a return NULL;
597n/a }
598n/a return Py_BuildValue("l", (long)reply);
599n/a}
600n/a
601n/astatic char nav_NavChooseFile__doc__[] =
602n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
603n/a;
604n/a
605n/astatic PyObject *
606n/anav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
607n/a{
608n/a PyObject *dict;
609n/a AEDesc *defaultLocation = NULL;
610n/a NavReplyRecord reply;
611n/a NavDialogOptions dialogOptions;
612n/a NavEventUPP eventProc = NULL;
613n/a NavPreviewUPP previewProc = NULL;
614n/a NavObjectFilterUPP filterProc = NULL;
615n/a NavTypeListHandle typeList = NULL;
616n/a OSErr err;
617n/a
618n/a if ( kw && PyObject_IsTrue(kw) ) {
619n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
620n/a return NULL;
621n/a dict = kw;
622n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
623n/a return NULL;
624n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
625n/a return NULL;
626n/a err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
627n/a eventProc, previewProc, filterProc, typeList, (void *)dict);
628n/a PyMem_DEL(defaultLocation);
629n/a if ( err ) {
630n/a PyErr_Mac(ErrorObject, err);
631n/a return NULL;
632n/a }
633n/a return (PyObject *)newnavrrobject(&reply);
634n/a}
635n/a
636n/astatic char nav_NavChooseFolder__doc__[] =
637n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
638n/a;
639n/a
640n/astatic PyObject *
641n/anav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
642n/a{
643n/a PyObject *dict;
644n/a AEDesc *defaultLocation = NULL;
645n/a NavReplyRecord reply;
646n/a NavDialogOptions dialogOptions;
647n/a NavEventUPP eventProc = NULL;
648n/a NavObjectFilterUPP filterProc = NULL;
649n/a OSErr err;
650n/a
651n/a if ( kw && PyObject_IsTrue(kw) ) {
652n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
653n/a return NULL;
654n/a dict = kw;
655n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
656n/a return NULL;
657n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
658n/a return NULL;
659n/a err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
660n/a eventProc, filterProc, (void *)dict);
661n/a PyMem_DEL(defaultLocation);
662n/a if ( err ) {
663n/a PyErr_Mac(ErrorObject, err);
664n/a return NULL;
665n/a }
666n/a return (PyObject *)newnavrrobject(&reply);
667n/a}
668n/a
669n/astatic char nav_NavChooseVolume__doc__[] =
670n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
671n/a;
672n/a
673n/astatic PyObject *
674n/anav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
675n/a{
676n/a PyObject *dict;
677n/a AEDesc *defaultLocation = NULL;
678n/a NavReplyRecord reply;
679n/a NavDialogOptions dialogOptions;
680n/a NavEventUPP eventProc = NULL;
681n/a NavObjectFilterUPP filterProc = NULL;
682n/a OSErr err;
683n/a
684n/a if ( kw && PyObject_IsTrue(kw) ) {
685n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
686n/a return NULL;
687n/a dict = kw;
688n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
689n/a return NULL;
690n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
691n/a return NULL;
692n/a err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
693n/a eventProc, filterProc, (void *)dict);
694n/a PyMem_DEL(defaultLocation);
695n/a if ( err ) {
696n/a PyErr_Mac(ErrorObject, err);
697n/a return NULL;
698n/a }
699n/a return (PyObject *)newnavrrobject(&reply);
700n/a}
701n/a
702n/astatic char nav_NavChooseObject__doc__[] =
703n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
704n/a;
705n/a
706n/astatic PyObject *
707n/anav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
708n/a{
709n/a PyObject *dict;
710n/a AEDesc *defaultLocation = NULL;
711n/a NavReplyRecord reply;
712n/a NavDialogOptions dialogOptions;
713n/a NavEventUPP eventProc = NULL;
714n/a NavObjectFilterUPP filterProc = NULL;
715n/a OSErr err;
716n/a
717n/a if ( kw && PyObject_IsTrue(kw) ) {
718n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
719n/a return NULL;
720n/a dict = kw;
721n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
722n/a return NULL;
723n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
724n/a return NULL;
725n/a err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
726n/a eventProc, filterProc, (void *)dict);
727n/a PyMem_DEL(defaultLocation);
728n/a if ( err ) {
729n/a PyErr_Mac(ErrorObject, err);
730n/a return NULL;
731n/a }
732n/a return (PyObject *)newnavrrobject(&reply);
733n/a}
734n/a
735n/astatic char nav_NavNewFolder__doc__[] =
736n/a"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
737n/a;
738n/a
739n/astatic PyObject *
740n/anav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
741n/a{
742n/a PyObject *dict;
743n/a AEDesc *defaultLocation = NULL;
744n/a NavReplyRecord reply;
745n/a NavDialogOptions dialogOptions;
746n/a NavEventUPP eventProc = NULL;
747n/a OSErr err;
748n/a
749n/a if ( kw && PyObject_IsTrue(kw) ) {
750n/a if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
751n/a return NULL;
752n/a dict = kw;
753n/a } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
754n/a return NULL;
755n/a if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
756n/a return NULL;
757n/a err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
758n/a PyMem_DEL(defaultLocation);
759n/a if ( err ) {
760n/a PyErr_Mac(ErrorObject, err);
761n/a return NULL;
762n/a }
763n/a return (PyObject *)newnavrrobject(&reply);
764n/a}
765n/a
766n/a#if 0
767n/a/* XXXX I don't know what to do with the void * argument */
768n/astatic char nav_NavCustomControl__doc__[] =
769n/a""
770n/a;
771n/a
772n/a
773n/astatic PyObject *
774n/anav_NavCustomControl(PyObject *self, PyObject *args)
775n/a{
776n/a
777n/a if (!PyArg_ParseTuple(args, ""))
778n/a return NULL;
779n/a Py_INCREF(Py_None);
780n/a return Py_None;
781n/a}
782n/a#endif
783n/a
784n/astatic char nav_NavServicesCanRun__doc__[] =
785n/a"()->int"
786n/a;
787n/a
788n/astatic PyObject *
789n/anav_NavServicesCanRun(PyObject *self, PyObject *args)
790n/a{
791n/a Boolean rv;
792n/a if (!PyArg_ParseTuple(args, ""))
793n/a return NULL;
794n/a rv = NavServicesCanRun();
795n/a return Py_BuildValue("l", (long)rv);
796n/a}
797n/a
798n/astatic char nav_NavServicesAvailable__doc__[] =
799n/a"()->int"
800n/a;
801n/a
802n/astatic PyObject *
803n/anav_NavServicesAvailable(PyObject *self, PyObject *args)
804n/a{
805n/a Boolean rv;
806n/a
807n/a if (!PyArg_ParseTuple(args, ""))
808n/a return NULL;
809n/a rv = NavServicesAvailable();
810n/a return Py_BuildValue("l", (long)rv);
811n/a}
812n/a/* XX */
813n/astatic char nav_NavLoad__doc__[] =
814n/a"()->None"
815n/a;
816n/a
817n/astatic PyObject *
818n/anav_NavLoad(PyObject *self, PyObject *args)
819n/a{
820n/a
821n/a if (!PyArg_ParseTuple(args, ""))
822n/a return NULL;
823n/a NavLoad();
824n/a Py_INCREF(Py_None);
825n/a return Py_None;
826n/a}
827n/a
828n/astatic char nav_NavUnload__doc__[] =
829n/a"()->None"
830n/a;
831n/a
832n/astatic PyObject *
833n/anav_NavUnload(PyObject *self, PyObject *args)
834n/a{
835n/a
836n/a if (!PyArg_ParseTuple(args, ""))
837n/a return NULL;
838n/a NavUnload();
839n/a Py_INCREF(Py_None);
840n/a return Py_None;
841n/a}
842n/a
843n/astatic char nav_NavLibraryVersion__doc__[] =
844n/a"()->int"
845n/a;
846n/a
847n/astatic PyObject *
848n/anav_NavLibraryVersion(PyObject *self, PyObject *args)
849n/a{
850n/a UInt32 rv;
851n/a
852n/a if (!PyArg_ParseTuple(args, ""))
853n/a return NULL;
854n/a rv = NavLibraryVersion();
855n/a return Py_BuildValue("l", (long)rv);
856n/a}
857n/a
858n/astatic char nav_NavGetDefaultDialogOptions__doc__[] =
859n/a"()->dict\nPass dict or keyword args with same names to other calls."
860n/a;
861n/a
862n/astatic PyObject *
863n/anav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
864n/a{
865n/a NavDialogOptions dialogOptions;
866n/a OSErr err;
867n/a
868n/a err = NavGetDefaultDialogOptions(&dialogOptions);
869n/a if ( err ) {
870n/a PyErr_Mac(ErrorObject, err);
871n/a return NULL;
872n/a }
873n/a return Py_BuildValue(
874n/a "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
875n/a "version", dialogOptions.version,
876n/a "dialogOptionFlags", dialogOptions.dialogOptionFlags,
877n/a "location", PyMac_BuildPoint, dialogOptions.location,
878n/a "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
879n/a "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
880n/a "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
881n/a "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
882n/a "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
883n/a "message", PyMac_BuildStr255, &dialogOptions.message,
884n/a "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
885n/a ,"popupExtension", OptResObj_New, dialogOptions.popupExtension
886n/a );
887n/a}
888n/a
889n/a/* List of methods defined in the module */
890n/a
891n/astatic struct PyMethodDef nav_methods[] = {
892n/a {"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
893n/a {"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
894n/a {"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
895n/a {"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
896n/a {"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
897n/a {"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
898n/a {"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
899n/a {"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
900n/a {"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
901n/a {"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
902n/a#if 0
903n/a {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
904n/a#endif
905n/a {"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
906n/a {"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
907n/a {"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
908n/a {"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
909n/a {"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
910n/a {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
911n/a {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
912n/a};
913n/a
914n/a
915n/a/* Initialization function for the module (*must* be called initNav) */
916n/a
917n/astatic char Nav_module_documentation[] =
918n/a"Interface to Navigation Services\n"
919n/a"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
920n/a"if you want the default options.\n"
921n/a"Use NavGetDefaultDialogOptions() to find out common option names.\n"
922n/a"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
923n/a"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
924n/a;
925n/a
926n/a
927n/a#endif /* !__LP64__ */
928n/a
929n/a
930n/avoid
931n/ainitNav(void)
932n/a{
933n/a PyObject *m, *d;
934n/a
935n/a if (PyErr_WarnPy3k("In 3.x, the Nav module is removed.", 1))
936n/a return;
937n/a
938n/a#ifdef __LP64__
939n/a PyErr_SetString(PyExc_ImportError, "Navigation Services not available in 64-bit mode");
940n/a return;
941n/a
942n/a#else /* !__LP64__ */
943n/a
944n/a /* Test that we have NavServices */
945n/a if ( !NavServicesAvailable() ) {
946n/a PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
947n/a return;
948n/a }
949n/a /* Create the module and add the functions */
950n/a m = Py_InitModule4("Nav", nav_methods,
951n/a Nav_module_documentation,
952n/a (PyObject*)NULL,PYTHON_API_VERSION);
953n/a
954n/a /* Add some symbolic constants to the module */
955n/a d = PyModule_GetDict(m);
956n/a ErrorObject = PyString_FromString("Nav.error");
957n/a PyDict_SetItemString(d, "error", ErrorObject);
958n/a
959n/a /* XXXX Add constants here */
960n/a
961n/a /* Set UPPs */
962n/a my_eventProcUPP = NewNavEventUPP(my_eventProc);
963n/a my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
964n/a my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
965n/a#endif /* !__LP64__ */
966n/a
967n/a}
968n/a