ยปCore Development>Code coverage>Mac/Modules/drag/dragsupport.py

Python code coverage for Mac/Modules/drag/dragsupport.py

#countcontent
1n/a# This script generates a Python interface for an Apple Macintosh Manager.
2n/a# It uses the "bgen" package to generate C code.
3n/a# The function specifications are generated by scanning the mamager's header file,
4n/a# using the "scantools" package (customized for this particular manager).
5n/a
6n/aimport string
7n/a
8n/a# Declarations that change for each manager
9n/aMACHEADERFILE = 'Drag.h' # The Apple header file
10n/aMODNAME = '_Drag' # The name of the module
11n/aOBJECTNAME = 'DragObj' # The basic name of the objects used here
12n/a
13n/a# The following is *usually* unchanged but may still require tuning
14n/aMODPREFIX = 'Drag' # The prefix for module-wide routines
15n/aOBJECTTYPE = 'DragRef' # The C type used to represent them
16n/aOBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods
17n/aINPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner
18n/aOUTPUTFILE = MODNAME + "module.c" # The file generated by this program
19n/a
20n/afrom macsupport import *
21n/a
22n/a# Create the type objects
23n/a
24n/aDragRef = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
25n/aDragItemRef = Type("ItemReference", "l")
26n/a# Old names
27n/aDragReference = DragRef
28n/aItemReference = DragItemRef
29n/a
30n/aPixMapHandle = OpaqueByValueType("PixMapHandle", "ResObj")
31n/aRgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
32n/aAEDesc = OpaqueType('AEDesc')
33n/aAEDesc_ptr = AEDesc
34n/aRGBColor = OpaqueType("RGBColor", "QdRGB")
35n/a
36n/aFlavorType = OSTypeType("FlavorType")
37n/aDragAttributes = Type("DragAttributes", "l")
38n/aDragBehaviors = Type("DragBehaviors", "l")
39n/aDragImageFlags = Type("DragImageFlags", "l")
40n/aDragImageTranslucency = Type("DragImageTranslucency", "l")
41n/aDragRegionMessage = Type("DragRegionMessage", "h")
42n/aZoomAcceleration = Type("ZoomAcceleration", "h")
43n/aFlavorFlags = Type("FlavorFlags", "l")
44n/aDragTrackingMessage = Type("DragTrackingMessage", "h")
45n/a
46n/aincludestuff = includestuff + """
47n/a#include <Carbon/Carbon.h>
48n/a
49n/a/* Callback glue routines */
50n/aDragTrackingHandlerUPP dragglue_TrackingHandlerUPP;
51n/aDragReceiveHandlerUPP dragglue_ReceiveHandlerUPP;
52n/aDragSendDataUPP dragglue_SendDataUPP;
53n/a#if 0
54n/aDragInputUPP dragglue_InputUPP;
55n/aDragDrawingUPP dragglue_DrawingUPP;
56n/a#endif
57n/a
58n/a#ifdef USE_TOOLBOX_OBJECT_GLUE
59n/aextern PyObject *_DragObj_New(DragRef);
60n/aextern int _DragObj_Convert(PyObject *, DragRef *);
61n/a
62n/a#define DragObj_New _DragObj_New
63n/a#define DragObj_Convert _DragObj_Convert
64n/a#endif
65n/a"""
66n/a
67n/afinalstuff = finalstuff + """
68n/astatic pascal OSErr
69n/adragglue_TrackingHandler(DragTrackingMessage theMessage, WindowPtr theWindow,
70n/a void *handlerRefCon, DragReference theDrag)
71n/a{
72n/a PyObject *args, *rv;
73n/a int i;
74n/a
75n/a args = Py_BuildValue("hO&O&", theMessage, DragObj_New, theDrag, WinObj_WhichWindow, theWindow);
76n/a if ( args == NULL )
77n/a return -1;
78n/a rv = PyEval_CallObject((PyObject *)handlerRefCon, args);
79n/a Py_DECREF(args);
80n/a if ( rv == NULL ) {
81n/a PySys_WriteStderr("Drag: Exception in TrackingHandler\\n");
82n/a PyErr_Print();
83n/a return -1;
84n/a }
85n/a i = -1;
86n/a if ( rv == Py_None )
87n/a i = 0;
88n/a else
89n/a PyArg_Parse(rv, "l", &i);
90n/a Py_DECREF(rv);
91n/a return i;
92n/a}
93n/a
94n/astatic pascal OSErr
95n/adragglue_ReceiveHandler(WindowPtr theWindow, void *handlerRefCon,
96n/a DragReference theDrag)
97n/a{
98n/a PyObject *args, *rv;
99n/a int i;
100n/a
101n/a args = Py_BuildValue("O&O&", DragObj_New, theDrag, WinObj_WhichWindow, theWindow);
102n/a if ( args == NULL )
103n/a return -1;
104n/a rv = PyEval_CallObject((PyObject *)handlerRefCon, args);
105n/a Py_DECREF(args);
106n/a if ( rv == NULL ) {
107n/a PySys_WriteStderr("Drag: Exception in ReceiveHandler\\n");
108n/a PyErr_Print();
109n/a return -1;
110n/a }
111n/a i = -1;
112n/a if ( rv == Py_None )
113n/a i = 0;
114n/a else
115n/a PyArg_Parse(rv, "l", &i);
116n/a Py_DECREF(rv);
117n/a return i;
118n/a}
119n/a
120n/astatic pascal OSErr
121n/adragglue_SendData(FlavorType theType, void *dragSendRefCon,
122n/a ItemReference theItem, DragReference theDrag)
123n/a{
124n/a DragObjObject *self = (DragObjObject *)dragSendRefCon;
125n/a PyObject *args, *rv;
126n/a int i;
127n/a
128n/a if ( self->sendproc == NULL )
129n/a return -1;
130n/a args = Py_BuildValue("O&l", PyMac_BuildOSType, theType, theItem);
131n/a if ( args == NULL )
132n/a return -1;
133n/a rv = PyEval_CallObject(self->sendproc, args);
134n/a Py_DECREF(args);
135n/a if ( rv == NULL ) {
136n/a PySys_WriteStderr("Drag: Exception in SendDataHandler\\n");
137n/a PyErr_Print();
138n/a return -1;
139n/a }
140n/a i = -1;
141n/a if ( rv == Py_None )
142n/a i = 0;
143n/a else
144n/a PyArg_Parse(rv, "l", &i);
145n/a Py_DECREF(rv);
146n/a return i;
147n/a}
148n/a
149n/a#if 0
150n/astatic pascal OSErr
151n/adragglue_Input(Point *mouse, short *modifiers,
152n/a void *dragSendRefCon, DragReference theDrag)
153n/a{
154n/a return 0;
155n/a}
156n/a
157n/astatic pascal OSErr
158n/adragglue_Drawing(xxxx
159n/a void *dragSendRefCon, DragReference theDrag)
160n/a{
161n/a return 0;
162n/a}
163n/a#endif
164n/a
165n/a"""
166n/a
167n/ainitstuff = initstuff + """
168n/a PyMac_INIT_TOOLBOX_OBJECT_NEW(DragRef, DragObj_New);
169n/a PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DragRef, DragObj_Convert);
170n/a"""
171n/a
172n/avariablestuff = """
173n/adragglue_TrackingHandlerUPP = NewDragTrackingHandlerUPP(dragglue_TrackingHandler);
174n/adragglue_ReceiveHandlerUPP = NewDragReceiveHandlerUPP(dragglue_ReceiveHandler);
175n/adragglue_SendDataUPP = NewDragSendDataUPP(dragglue_SendData);
176n/a#if 0
177n/adragglue_InputUPP = NewDragInputUPP(dragglue_Input);
178n/adragglue_DrawingUPP = NewDragDrawingUPP(dragglue_Drawing);
179n/a#endif
180n/a"""
181n/a
182n/aclass MyObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
183n/a def outputCheckNewArg(self):
184n/a Output("""if (itself == NULL) {
185n/a PyErr_SetString(Drag_Error,"Cannot create null Drag");
186n/a return NULL;
187n/a }""")
188n/a def outputFreeIt(self, itselfname):
189n/a ## Output("DisposeDrag(%s);", itselfname)
190n/a Output("Py_XDECREF(self->sendproc);")
191n/a ## Output("Py_XDECREF(self->inputproc);")
192n/a ## Output("Py_XDECREF(self->drawingproc);")
193n/a
194n/a def outputStructMembers(self):
195n/a GlobalObjectDefinition.outputStructMembers(self)
196n/a Output("PyObject *sendproc;")
197n/a ## Output("PyObject *inputproc;")
198n/a ## Output("PyObject *drawingproc;")
199n/a
200n/a def outputInitStructMembers(self):
201n/a GlobalObjectDefinition.outputInitStructMembers(self)
202n/a Output("it->sendproc = NULL;")
203n/a ## Output("it->inputproc = NULL;")
204n/a ## Output("it->drawingproc = NULL;")
205n/a
206n/a
207n/a# Create the generator groups and link them
208n/amodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff, variablestuff)
209n/aobject = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
210n/amodule.addobject(object)
211n/a
212n/a# Create the generator classes used to populate the lists
213n/aFunction = OSErrWeakLinkFunctionGenerator
214n/aMethod = OSErrWeakLinkMethodGenerator
215n/a
216n/a# Create and populate the lists
217n/afunctions = []
218n/amethods = []
219n/aexecfile(INPUTFILE)
220n/a
221n/a# add the populated lists to the generator groups
222n/afor f in functions: module.add(f)
223n/afor f in methods: object.add(f)
224n/a
225n/a# Manual generators for the callbacks
226n/a
227n/ainstalltracking_body = """
228n/a PyObject *callback;
229n/a WindowPtr theWindow = NULL;
230n/a OSErr _err;
231n/a
232n/a if ( !PyArg_ParseTuple(_args, "O|O&", &callback, WinObj_Convert, &theWindow) )
233n/a return NULL;
234n/a Py_INCREF(callback); /* Cannot decref later, too bad */
235n/a _err = InstallTrackingHandler(dragglue_TrackingHandlerUPP, theWindow, (void *)callback);
236n/a if (_err != noErr) return PyMac_Error(_err);
237n/a Py_INCREF(Py_None);
238n/a _res = Py_None;
239n/a return _res;
240n/a"""
241n/ainstalltracking = ManualGenerator("InstallTrackingHandler", installtracking_body)
242n/amodule.add(installtracking)
243n/a
244n/ainstallreceive_body = """
245n/a PyObject *callback;
246n/a WindowPtr theWindow = NULL;
247n/a OSErr _err;
248n/a
249n/a if ( !PyArg_ParseTuple(_args, "O|O&", &callback, WinObj_Convert, &theWindow) )
250n/a return NULL;
251n/a Py_INCREF(callback); /* Cannot decref later, too bad */
252n/a _err = InstallReceiveHandler(dragglue_ReceiveHandlerUPP, theWindow, (void *)callback);
253n/a if (_err != noErr) return PyMac_Error(_err);
254n/a Py_INCREF(Py_None);
255n/a _res = Py_None;
256n/a return _res;
257n/a"""
258n/ainstallreceive = ManualGenerator("InstallReceiveHandler", installreceive_body)
259n/amodule.add(installreceive)
260n/a
261n/aremovetracking_body = """
262n/a WindowPtr theWindow = NULL;
263n/a OSErr _err;
264n/a
265n/a if ( !PyArg_ParseTuple(_args, "|O&", WinObj_Convert, &theWindow) )
266n/a return NULL;
267n/a _err = RemoveTrackingHandler(dragglue_TrackingHandlerUPP, theWindow);
268n/a if (_err != noErr) return PyMac_Error(_err);
269n/a Py_INCREF(Py_None);
270n/a _res = Py_None;
271n/a return _res;
272n/a"""
273n/aremovetracking = ManualGenerator("RemoveTrackingHandler", removetracking_body)
274n/amodule.add(removetracking)
275n/a
276n/aremovereceive_body = """
277n/a WindowPtr theWindow = NULL;
278n/a OSErr _err;
279n/a
280n/a if ( !PyArg_ParseTuple(_args, "|O&", WinObj_Convert, &theWindow) )
281n/a return NULL;
282n/a _err = RemoveReceiveHandler(dragglue_ReceiveHandlerUPP, theWindow);
283n/a if (_err != noErr) return PyMac_Error(_err);
284n/a Py_INCREF(Py_None);
285n/a _res = Py_None;
286n/a return _res;
287n/a"""
288n/aremovereceive = ManualGenerator("RemoveReceiveHandler", removereceive_body)
289n/amodule.add(removereceive)
290n/a
291n/a# generate output (open the output file as late as possible)
292n/aSetOutputFileName(OUTPUTFILE)
293n/amodule.generate()