ยปCore Development>Code coverage>Mac/Modules/ctl/ctlsupport.py

Python code coverage for Mac/Modules/ctl/ctlsupport.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 = 'Controls.h' # The Apple header file
10n/aMODNAME = '_Ctl' # The name of the module
11n/aOBJECTNAME = 'Control' # The basic name of the objects used here
12n/a
13n/a# The following is *usually* unchanged but may still require tuning
14n/aMODPREFIX = 'Ctl' # The prefix for module-wide routines
15n/aOBJECTTYPE = OBJECTNAME + 'Handle' # 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/aControlHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
25n/aControlRef = ControlHandle
26n/aExistingControlHandle = OpaqueByValueType(OBJECTTYPE, "CtlObj_WhichControl", "BUG")
27n/a
28n/aRgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
29n/aCCTabHandle = OpaqueByValueType("CCTabHandle", "ResObj")
30n/aAuxCtlHandle = OpaqueByValueType("AuxCtlHandle", "ResObj")
31n/aControlPartCode = Type("ControlPartCode", "h")
32n/aDragConstraint = Type("DragConstraint", "H")
33n/aControlVariant = Type("ControlVariant", "h")
34n/aIconTransformType = Type("IconTransformType", "h")
35n/aEventModifiers = Type("EventModifiers", "H")
36n/aClickActivationResult = Type("ClickActivationResult", "l")
37n/aControlButtonGraphicAlignment = Type("ControlButtonGraphicAlignment", "h")
38n/aControlButtonTextAlignment = Type("ControlButtonTextAlignment", "h")
39n/aControlButtonTextPlacement = Type("ControlButtonTextPlacement", "h")
40n/aControlContentType = Type("ControlContentType", "h")
41n/aControlFocusPart = Type("ControlFocusPart", "h")
42n/a
43n/aControlFontStyleRec = OpaqueType('ControlFontStyleRec', 'ControlFontStyle')
44n/aControlFontStyleRec_ptr = ControlFontStyleRec
45n/aControlID = OpaqueType('ControlID', 'PyControlID')
46n/aControlID_ptr = ControlID
47n/a
48n/aDragTrackingMessage = Type("DragTrackingMessage", "h")
49n/aDragReference = OpaqueByValueType("DragReference", "DragObj")
50n/a
51n/aCFStringRef = OpaqueByValueType("CFStringRef", "CFStringRefObj")
52n/aCFMutableStringRef = OpaqueByValueType("CFMutableStringRef", "CFMutableStringRefObj")
53n/aCFDataRef = OpaqueByValueType("CFDataRef", "CFDataRefObj")
54n/a
55n/aControlTabSize = UInt16
56n/aControlTabDirection = UInt16
57n/aControlPopupArrowOrientation = UInt16
58n/aControlPopupArrowSize = UInt16
59n/aControlClockType = UInt16
60n/aControlClockFlags = UInt32
61n/aControlRoundButtonSize = SInt16
62n/aDataBrowserViewStyle = OSType
63n/aDataBrowserItemID = UInt32
64n/aDataBrowserEditCommand = UInt32
65n/aDataBrowserSelectionAnchorDirection = UInt32
66n/aDataBrowserItemState = UInt32
67n/aDataBrowserPropertyID = UInt32
68n/aDataBrowserRevealOptions = UInt8
69n/aDataBrowserSortOrder = UInt16
70n/aDataBrowserSelectionFlags = UInt32
71n/aDataBrowserPropertyFlags = UInt32
72n/aDataBrowserPropertyPart = OSType
73n/aDataBrowserTableViewColumnID = DataBrowserPropertyID
74n/a#DataBrowserTableViewColumnDesc = DataBrowserPropertyDesc
75n/aDataBrowserTableViewHiliteStyle = UInt32
76n/aDataBrowserTableViewRowIndex = UInt32
77n/aDataBrowserTableViewColumnIndex = UInt32
78n/aDataBrowserPropertyType = OSType
79n/aControlDisclosureTriangleOrientation = UInt16
80n/a
81n/aDataBrowserTableViewColumnDesc = OpaqueType("DataBrowserTableViewColumnDesc",
82n/a "DataBrowserTableViewColumnDesc")
83n/aDataBrowserListViewColumnDesc = OpaqueType("DataBrowserListViewColumnDesc",
84n/a "DataBrowserListViewColumnDesc")
85n/aControlButtonContentInfo = OpaqueType("ControlButtonContentInfo",
86n/a "ControlButtonContentInfo")
87n/aControlButtonContentInfoPtr = ControlButtonContentInfo_ptr = ControlButtonContentInfo
88n/a
89n/aControlTabEntry_ptr = OpaqueType("ControlTabEntry", "ControlTabEntry")
90n/a
91n/aControlBevelThickness = UInt16
92n/aControlBevelButtonBehavior = UInt16
93n/aControlBevelButtonMenuBehavior = UInt16
94n/aControlBevelButtonMenuPlacement = UInt16
95n/aControlPushButtonIconAlignment = UInt16
96n/a
97n/aclass ControlActionDefinition(Type):
98n/a def declare(self, name):
99n/a Output("%s %s;", self.typeName, name)
100n/a Output("UniversalProcPtr c_callback;")
101n/a def passInput(self, name):
102n/a return "myactionproc_upp"
103n/a def cleanup(self, name):
104n/a Output("setcallback((PyObject*)_self, kMyControlActionProcTag, actionProc, &c_callback);")
105n/a
106n/aclass ControlActionDefinitionNewControl(ControlActionDefinition):
107n/a def cleanup(self, name):
108n/a Output("setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);")
109n/a
110n/aControlActionUPP = ControlActionDefinition("PyObject*", "O")
111n/aControlActionUPPNewControl = ControlActionDefinitionNewControl("PyObject*", "O")
112n/aControlSliderOrientation = UInt16
113n/a
114n/a
115n/aincludestuff = includestuff + """
116n/a#include <Carbon/Carbon.h>
117n/a
118n/a#ifdef USE_TOOLBOX_OBJECT_GLUE
119n/aextern PyObject *_CtlObj_New(ControlHandle);
120n/aextern int _CtlObj_Convert(PyObject *, ControlHandle *);
121n/a
122n/a#define CtlObj_New _CtlObj_New
123n/a#define CtlObj_Convert _CtlObj_Convert
124n/a#endif
125n/a
126n/astatic PyObject *CtlObj_WhichControl(ControlHandle);
127n/a
128n/a#define as_Control(h) ((ControlHandle)h)
129n/a#define as_Resource(ctl) ((Handle)ctl)
130n/a#define GetControlRect(ctl, rectp) GetControlBounds(ctl, rectp)
131n/a
132n/a#define MAXTABS 32 /* maximum number of tabs that we support in a tabs control */
133n/a/*
134n/a** Parse/generate ControlFontStyleRec records
135n/a*/
136n/a#if 0 /* Not needed */
137n/astatic PyObject *
138n/aControlFontStyle_New(ControlFontStyleRec *itself)
139n/a{
140n/a
141n/a return Py_BuildValue("hhhhhhO&O&", itself->flags, itself->font,
142n/a itself->size, itself->style, itself->mode, itself->just,
143n/a QdRGB_New, &itself->foreColor, QdRGB_New, &itself->backColor);
144n/a}
145n/a#endif
146n/a
147n/astatic int
148n/aControlFontStyle_Convert(PyObject *v, ControlFontStyleRec *itself)
149n/a{
150n/a return PyArg_Parse(v, "(hhhhhhO&O&)", &itself->flags,
151n/a &itself->font, &itself->size, &itself->style, &itself->mode,
152n/a &itself->just, QdRGB_Convert, &itself->foreColor,
153n/a QdRGB_Convert, &itself->backColor);
154n/a}
155n/a
156n/a/*
157n/a** Parse/generate ControlID records
158n/a*/
159n/astatic PyObject *
160n/aPyControlID_New(ControlID *itself)
161n/a{
162n/a
163n/a return Py_BuildValue("O&l", PyMac_BuildOSType, itself->signature, itself->id);
164n/a}
165n/a
166n/astatic int
167n/aPyControlID_Convert(PyObject *v, ControlID *itself)
168n/a{
169n/a return PyArg_Parse(v, "(O&l)", PyMac_GetOSType, &itself->signature, &itself->id);
170n/a}
171n/a
172n/a/*
173n/a** generate DataBrowserListViewColumnDesc records
174n/a*/
175n/astatic int
176n/aDataBrowserTableViewColumnDesc_Convert(PyObject *v, DataBrowserTableViewColumnDesc *itself)
177n/a{
178n/a return PyArg_Parse(v, "(lO&l)",
179n/a &itself->propertyID,
180n/a PyMac_GetOSType, &itself->propertyType,
181n/a &itself->propertyFlags);
182n/a}
183n/a
184n/astatic int
185n/aControlButtonContentInfo_Convert(PyObject *v, ControlButtonContentInfo *itself)
186n/a{
187n/a return PyArg_Parse(v, "(hO&)",
188n/a &itself->contentType,
189n/a OptResObj_Convert, &itself->u.iconSuite);
190n/a}
191n/a
192n/astatic int
193n/aDataBrowserListViewHeaderDesc_Convert(PyObject *v, DataBrowserListViewHeaderDesc *itself)
194n/a{
195n/a itself->version = kDataBrowserListViewLatestHeaderDesc;
196n/a return PyArg_Parse(v, "(HHhO&HO&O&)",
197n/a &itself->minimumWidth,
198n/a &itself->maximumWidth,
199n/a &itself->titleOffset,
200n/a CFStringRefObj_Convert, &itself->titleString,
201n/a &itself->initialOrder,
202n/a ControlFontStyle_Convert, &itself->btnFontStyle,
203n/a ControlButtonContentInfo_Convert, &itself->btnContentInfo);
204n/a}
205n/a
206n/astatic int
207n/aDataBrowserListViewColumnDesc_Convert(PyObject *v, DataBrowserListViewColumnDesc *itself)
208n/a{
209n/a return PyArg_Parse(v, "(O&O&)",
210n/a DataBrowserTableViewColumnDesc_Convert, &itself->propertyDesc,
211n/a DataBrowserListViewHeaderDesc_Convert, &itself->headerBtnDesc);
212n/a}
213n/a
214n/a/* TrackControl and HandleControlClick callback support */
215n/a#define kMyControlActionProcTag 'ACTN' /* not an official tag, only for internal use */
216n/astatic PyObject *tracker;
217n/astatic ControlActionUPP mytracker_upp;
218n/astatic ControlActionUPP myactionproc_upp;
219n/astatic ControlUserPaneKeyDownUPP mykeydownproc_upp;
220n/astatic ControlUserPaneFocusUPP myfocusproc_upp;
221n/astatic ControlUserPaneDrawUPP mydrawproc_upp;
222n/astatic ControlUserPaneIdleUPP myidleproc_upp;
223n/astatic ControlUserPaneHitTestUPP myhittestproc_upp;
224n/astatic ControlUserPaneTrackingUPP mytrackingproc_upp;
225n/a
226n/astatic int settrackfunc(PyObject *); /* forward */
227n/astatic void clrtrackfunc(void); /* forward */
228n/astatic int setcallback(PyObject *, OSType, PyObject *, UniversalProcPtr *);
229n/a"""
230n/a
231n/afinalstuff = finalstuff + """
232n/astatic PyObject *
233n/aCtlObj_NewUnmanaged(ControlHandle itself)
234n/a{
235n/a ControlObject *it;
236n/a if (itself == NULL) return PyMac_Error(resNotFound);
237n/a it = PyObject_NEW(ControlObject, &Control_Type);
238n/a if (it == NULL) return NULL;
239n/a it->ob_itself = itself;
240n/a it->ob_callbackdict = NULL;
241n/a return (PyObject *)it;
242n/a}
243n/a
244n/astatic PyObject *
245n/aCtlObj_WhichControl(ControlHandle c)
246n/a{
247n/a PyObject *it;
248n/a
249n/a if (c == NULL)
250n/a it = Py_None;
251n/a else {
252n/a it = (PyObject *) GetControlReference(c);
253n/a /*
254n/a ** If the refcon is zero or doesn't point back to the Python object
255n/a ** the control is not ours. Return a temporary object.
256n/a */
257n/a if (it == NULL || ((ControlObject *)it)->ob_itself != c)
258n/a return CtlObj_NewUnmanaged(c);
259n/a }
260n/a Py_INCREF(it);
261n/a return it;
262n/a}
263n/a
264n/astatic int
265n/asettrackfunc(PyObject *obj)
266n/a{
267n/a if (tracker) {
268n/a PyErr_SetString(Ctl_Error, "Tracker function in use");
269n/a return 0;
270n/a }
271n/a tracker = obj;
272n/a Py_INCREF(tracker);
273n/a return 1;
274n/a}
275n/a
276n/astatic void
277n/aclrtrackfunc(void)
278n/a{
279n/a Py_XDECREF(tracker);
280n/a tracker = 0;
281n/a}
282n/a
283n/astatic pascal void
284n/amytracker(ControlHandle ctl, short part)
285n/a{
286n/a PyObject *args, *rv=0;
287n/a
288n/a args = Py_BuildValue("(O&i)", CtlObj_WhichControl, ctl, (int)part);
289n/a if (args && tracker) {
290n/a rv = PyEval_CallObject(tracker, args);
291n/a Py_DECREF(args);
292n/a }
293n/a if (rv)
294n/a Py_DECREF(rv);
295n/a else {
296n/a PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n");
297n/a PyErr_Print();
298n/a }
299n/a}
300n/a
301n/astatic int
302n/asetcallback(PyObject *myself, OSType which, PyObject *callback, UniversalProcPtr *uppp)
303n/a{
304n/a ControlObject *self = (ControlObject *)myself;
305n/a char keybuf[9];
306n/a
307n/a if ( which == kMyControlActionProcTag )
308n/a *uppp = (UniversalProcPtr)myactionproc_upp;
309n/a else if ( which == kControlUserPaneKeyDownProcTag )
310n/a *uppp = (UniversalProcPtr)mykeydownproc_upp;
311n/a else if ( which == kControlUserPaneFocusProcTag )
312n/a *uppp = (UniversalProcPtr)myfocusproc_upp;
313n/a else if ( which == kControlUserPaneDrawProcTag )
314n/a *uppp = (UniversalProcPtr)mydrawproc_upp;
315n/a else if ( which == kControlUserPaneIdleProcTag )
316n/a *uppp = (UniversalProcPtr)myidleproc_upp;
317n/a else if ( which == kControlUserPaneHitTestProcTag )
318n/a *uppp = (UniversalProcPtr)myhittestproc_upp;
319n/a else if ( which == kControlUserPaneTrackingProcTag )
320n/a *uppp = (UniversalProcPtr)mytrackingproc_upp;
321n/a else
322n/a return -1;
323n/a /* Only now do we test for clearing of the callback: */
324n/a if ( callback == Py_None )
325n/a *uppp = NULL;
326n/a /* Create the dict if it doesn't exist yet (so we don't get such a dict for every control) */
327n/a if ( self->ob_callbackdict == NULL )
328n/a if ( (self->ob_callbackdict = PyDict_New()) == NULL )
329n/a return -1;
330n/a /* And store the Python callback */
331n/a sprintf(keybuf, "%x", (unsigned)which);
332n/a if (PyDict_SetItemString(self->ob_callbackdict, keybuf, callback) < 0)
333n/a return -1;
334n/a return 0;
335n/a}
336n/a
337n/astatic PyObject *
338n/acallcallback(ControlObject *self, OSType which, PyObject *arglist)
339n/a{
340n/a char keybuf[9];
341n/a PyObject *func, *rv;
342n/a
343n/a sprintf(keybuf, "%x", (unsigned)which);
344n/a if ( self->ob_callbackdict == NULL ||
345n/a (func = PyDict_GetItemString(self->ob_callbackdict, keybuf)) == NULL ) {
346n/a PySys_WriteStderr("Control callback %x without callback object\\n", (unsigned)which);
347n/a return NULL;
348n/a }
349n/a rv = PyEval_CallObject(func, arglist);
350n/a if ( rv == NULL ) {
351n/a PySys_WriteStderr("Exception in control callback %x handler\\n", (unsigned)which);
352n/a PyErr_Print();
353n/a }
354n/a return rv;
355n/a}
356n/a
357n/astatic pascal void
358n/amyactionproc(ControlHandle control, SInt16 part)
359n/a{
360n/a ControlObject *ctl_obj;
361n/a PyObject *arglist, *rv;
362n/a
363n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
364n/a arglist = Py_BuildValue("Oh", ctl_obj, part);
365n/a rv = callcallback(ctl_obj, kMyControlActionProcTag, arglist);
366n/a Py_XDECREF(arglist);
367n/a Py_XDECREF(rv);
368n/a}
369n/a
370n/astatic pascal ControlPartCode
371n/amykeydownproc(ControlHandle control, SInt16 keyCode, SInt16 charCode, SInt16 modifiers)
372n/a{
373n/a ControlObject *ctl_obj;
374n/a PyObject *arglist, *rv;
375n/a short c_rv = 0;
376n/a
377n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
378n/a arglist = Py_BuildValue("Ohhh", ctl_obj, keyCode, charCode, modifiers);
379n/a rv = callcallback(ctl_obj, kControlUserPaneKeyDownProcTag, arglist);
380n/a Py_XDECREF(arglist);
381n/a if ( rv )
382n/a if (!PyArg_Parse(rv, "h", &c_rv))
383n/a PyErr_Clear();
384n/a Py_XDECREF(rv);
385n/a return (ControlPartCode)c_rv;
386n/a}
387n/a
388n/astatic pascal ControlPartCode
389n/amyfocusproc(ControlHandle control, ControlPartCode part)
390n/a{
391n/a ControlObject *ctl_obj;
392n/a PyObject *arglist, *rv;
393n/a short c_rv = kControlFocusNoPart;
394n/a
395n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
396n/a arglist = Py_BuildValue("Oh", ctl_obj, part);
397n/a rv = callcallback(ctl_obj, kControlUserPaneFocusProcTag, arglist);
398n/a Py_XDECREF(arglist);
399n/a if ( rv )
400n/a if (!PyArg_Parse(rv, "h", &c_rv))
401n/a PyErr_Clear();
402n/a Py_XDECREF(rv);
403n/a return (ControlPartCode)c_rv;
404n/a}
405n/a
406n/astatic pascal void
407n/amydrawproc(ControlHandle control, SInt16 part)
408n/a{
409n/a ControlObject *ctl_obj;
410n/a PyObject *arglist, *rv;
411n/a
412n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
413n/a arglist = Py_BuildValue("Oh", ctl_obj, part);
414n/a rv = callcallback(ctl_obj, kControlUserPaneDrawProcTag, arglist);
415n/a Py_XDECREF(arglist);
416n/a Py_XDECREF(rv);
417n/a}
418n/a
419n/astatic pascal void
420n/amyidleproc(ControlHandle control)
421n/a{
422n/a ControlObject *ctl_obj;
423n/a PyObject *arglist, *rv;
424n/a
425n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
426n/a arglist = Py_BuildValue("O", ctl_obj);
427n/a rv = callcallback(ctl_obj, kControlUserPaneIdleProcTag, arglist);
428n/a Py_XDECREF(arglist);
429n/a Py_XDECREF(rv);
430n/a}
431n/a
432n/astatic pascal ControlPartCode
433n/amyhittestproc(ControlHandle control, Point where)
434n/a{
435n/a ControlObject *ctl_obj;
436n/a PyObject *arglist, *rv;
437n/a short c_rv = -1;
438n/a
439n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
440n/a arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, where);
441n/a rv = callcallback(ctl_obj, kControlUserPaneHitTestProcTag, arglist);
442n/a Py_XDECREF(arglist);
443n/a /* Ignore errors, nothing we can do about them */
444n/a if ( rv )
445n/a if (!PyArg_Parse(rv, "h", &c_rv))
446n/a PyErr_Clear();
447n/a Py_XDECREF(rv);
448n/a return (ControlPartCode)c_rv;
449n/a}
450n/a
451n/astatic pascal ControlPartCode
452n/amytrackingproc(ControlHandle control, Point startPt, ControlActionUPP actionProc)
453n/a{
454n/a ControlObject *ctl_obj;
455n/a PyObject *arglist, *rv;
456n/a short c_rv = -1;
457n/a
458n/a ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
459n/a /* We cannot pass the actionProc without lots of work */
460n/a arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, startPt);
461n/a rv = callcallback(ctl_obj, kControlUserPaneTrackingProcTag, arglist);
462n/a Py_XDECREF(arglist);
463n/a if ( rv )
464n/a if (!PyArg_Parse(rv, "h", &c_rv))
465n/a PyErr_Clear();
466n/a Py_XDECREF(rv);
467n/a return (ControlPartCode)c_rv;
468n/a}
469n/a"""
470n/a
471n/ainitstuff = initstuff + """
472n/amytracker_upp = NewControlActionUPP(mytracker);
473n/amyactionproc_upp = NewControlActionUPP(myactionproc);
474n/amykeydownproc_upp = NewControlUserPaneKeyDownUPP(mykeydownproc);
475n/amyfocusproc_upp = NewControlUserPaneFocusUPP(myfocusproc);
476n/amydrawproc_upp = NewControlUserPaneDrawUPP(mydrawproc);
477n/amyidleproc_upp = NewControlUserPaneIdleUPP(myidleproc);
478n/amyhittestproc_upp = NewControlUserPaneHitTestUPP(myhittestproc);
479n/amytrackingproc_upp = NewControlUserPaneTrackingUPP(mytrackingproc);
480n/aPyMac_INIT_TOOLBOX_OBJECT_NEW(ControlHandle, CtlObj_New);
481n/aPyMac_INIT_TOOLBOX_OBJECT_CONVERT(ControlHandle, CtlObj_Convert);
482n/a"""
483n/a
484n/aclass MyObjectDefinition(PEP253Mixin, ObjectIdentityMixin, GlobalObjectDefinition):
485n/a def outputStructMembers(self):
486n/a GlobalObjectDefinition.outputStructMembers(self)
487n/a Output("PyObject *ob_callbackdict;")
488n/a def outputCheckNewArg(self):
489n/a Output("if (itself == NULL) return PyMac_Error(resNotFound);")
490n/a def outputInitStructMembers(self):
491n/a GlobalObjectDefinition.outputInitStructMembers(self)
492n/a Output("SetControlReference(itself, (long)it);")
493n/a Output("it->ob_callbackdict = NULL;")
494n/a def outputCleanupStructMembers(self):
495n/a Output("Py_XDECREF(self->ob_callbackdict);")
496n/a Output("if (self->ob_itself)SetControlReference(self->ob_itself, (long)0); /* Make it forget about us */")
497n/a
498n/a# Create the generator groups and link them
499n/amodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
500n/aobject = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
501n/amodule.addobject(object)
502n/a
503n/a# Create the generator classes used to populate the lists
504n/aFunction = OSErrWeakLinkFunctionGenerator
505n/aMethod = OSErrWeakLinkMethodGenerator
506n/a
507n/a# Create and populate the lists
508n/afunctions = []
509n/amethods = []
510n/aexecfile(INPUTFILE)
511n/aexecfile('ctledit.py')
512n/a
513n/a# add the populated lists to the generator groups
514n/afor f in functions: module.add(f)
515n/afor f in methods: object.add(f)
516n/a
517n/a# Manual generator for TrackControl, due to callback ideosyncracies
518n/atrackcontrol_body = """
519n/aControlPartCode _rv;
520n/aPoint startPoint;
521n/aControlActionUPP upp = 0;
522n/aPyObject *callback = 0;
523n/a
524n/aif (!PyArg_ParseTuple(_args, "O&|O",
525n/a PyMac_GetPoint, &startPoint, &callback))
526n/a return NULL;
527n/aif (callback && callback != Py_None) {
528n/a if (PyInt_Check(callback) && PyInt_AS_LONG(callback) == -1)
529n/a upp = (ControlActionUPP)-1;
530n/a else {
531n/a settrackfunc(callback);
532n/a upp = mytracker_upp;
533n/a }
534n/a}
535n/a_rv = TrackControl(_self->ob_itself,
536n/a startPoint,
537n/a upp);
538n/aclrtrackfunc();
539n/a_res = Py_BuildValue("h",
540n/a _rv);
541n/areturn _res;
542n/a"""
543n/a
544n/af = ManualGenerator("TrackControl", trackcontrol_body);
545n/af.docstring = lambda: "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)"
546n/aobject.add(f)
547n/a
548n/a# CJW - added 5/12/99
549n/a# Manual generator for HandleControlClick, as for TrackControl
550n/ahandlecontrolclick_body = """
551n/aControlPartCode _rv;
552n/aPoint startPoint;
553n/aSInt16 modifiers;
554n/aControlActionUPP upp = 0;
555n/aPyObject *callback = 0;
556n/a
557n/aif (!PyArg_ParseTuple(_args, "O&h|O",
558n/a PyMac_GetPoint, &startPoint,
559n/a &modifiers,
560n/a &callback))
561n/a return NULL;
562n/aif (callback && callback != Py_None) {
563n/a if (PyInt_Check(callback) && PyInt_AS_LONG(callback) == -1)
564n/a upp = (ControlActionUPP)-1;
565n/a else {
566n/a settrackfunc(callback);
567n/a upp = mytracker_upp;
568n/a }
569n/a}
570n/a_rv = HandleControlClick(_self->ob_itself,
571n/a startPoint,
572n/a modifiers,
573n/a upp);
574n/aclrtrackfunc();
575n/a_res = Py_BuildValue("h",
576n/a _rv);
577n/areturn _res;
578n/a"""
579n/a
580n/af = ManualGenerator("HandleControlClick", handlecontrolclick_body);
581n/af.docstring = lambda: "(Point startPoint, Integer modifiers, [,trackercallback]) -> (ControlPartCode _rv)"
582n/aobject.add(f)
583n/a
584n/a# Manual Generator for SetControlData
585n/asetcontroldata_body = """
586n/aOSErr _err;
587n/aControlPartCode inPart;
588n/aResType inTagName;
589n/aSize bufferSize;
590n/aPtr buffer;
591n/a
592n/aif (!PyArg_ParseTuple(_args, "hO&s#",
593n/a &inPart,
594n/a PyMac_GetOSType, &inTagName,
595n/a &buffer, &bufferSize))
596n/a return NULL;
597n/a
598n/a_err = SetControlData(_self->ob_itself,
599n/a inPart,
600n/a inTagName,
601n/a bufferSize,
602n/a buffer);
603n/a
604n/aif (_err != noErr)
605n/a return PyMac_Error(_err);
606n/a_res = Py_None;
607n/areturn _res;
608n/a"""
609n/a
610n/af = ManualGenerator("SetControlData", setcontroldata_body);
611n/af.docstring = lambda: "(stuff) -> None"
612n/aobject.add(f)
613n/a
614n/a# Manual Generator for GetControlData
615n/agetcontroldata_body = """
616n/aOSErr _err;
617n/aControlPartCode inPart;
618n/aResType inTagName;
619n/aSize bufferSize;
620n/aPtr buffer;
621n/aSize outSize;
622n/a
623n/aif (!PyArg_ParseTuple(_args, "hO&",
624n/a &inPart,
625n/a PyMac_GetOSType, &inTagName))
626n/a return NULL;
627n/a
628n/a/* allocate a buffer for the data */
629n/a_err = GetControlDataSize(_self->ob_itself,
630n/a inPart,
631n/a inTagName,
632n/a &bufferSize);
633n/aif (_err != noErr)
634n/a return PyMac_Error(_err);
635n/abuffer = PyMem_NEW(char, bufferSize);
636n/aif (buffer == NULL)
637n/a return PyErr_NoMemory();
638n/a
639n/a_err = GetControlData(_self->ob_itself,
640n/a inPart,
641n/a inTagName,
642n/a bufferSize,
643n/a buffer,
644n/a &outSize);
645n/a
646n/aif (_err != noErr) {
647n/a PyMem_DEL(buffer);
648n/a return PyMac_Error(_err);
649n/a}
650n/a_res = Py_BuildValue("s#", buffer, outSize);
651n/aPyMem_DEL(buffer);
652n/areturn _res;
653n/a"""
654n/a
655n/af = ManualGenerator("GetControlData", getcontroldata_body);
656n/af.docstring = lambda: "(part, type) -> String"
657n/aobject.add(f)
658n/a
659n/a# Manual Generator for SetControlData_Handle
660n/asetcontroldata_handle_body = """
661n/aOSErr _err;
662n/aControlPartCode inPart;
663n/aResType inTagName;
664n/aHandle buffer;
665n/a
666n/aif (!PyArg_ParseTuple(_args, "hO&O&",
667n/a &inPart,
668n/a PyMac_GetOSType, &inTagName,
669n/a OptResObj_Convert, &buffer))
670n/a return NULL;
671n/a
672n/a_err = SetControlData(_self->ob_itself,
673n/a inPart,
674n/a inTagName,
675n/a sizeof(buffer),
676n/a (Ptr)&buffer);
677n/a
678n/aif (_err != noErr)
679n/a return PyMac_Error(_err);
680n/a_res = Py_None;
681n/areturn _res;
682n/a"""
683n/a
684n/af = ManualGenerator("SetControlData_Handle", setcontroldata_handle_body);
685n/af.docstring = lambda: "(ResObj) -> None"
686n/aobject.add(f)
687n/a
688n/a# Manual Generator for GetControlData_Handle
689n/agetcontroldata_handle_body = """
690n/aOSErr _err;
691n/aControlPartCode inPart;
692n/aResType inTagName;
693n/aSize bufferSize;
694n/aHandle hdl;
695n/a
696n/aif (!PyArg_ParseTuple(_args, "hO&",
697n/a &inPart,
698n/a PyMac_GetOSType, &inTagName))
699n/a return NULL;
700n/a
701n/a/* Check it is handle-sized */
702n/a_err = GetControlDataSize(_self->ob_itself,
703n/a inPart,
704n/a inTagName,
705n/a &bufferSize);
706n/aif (_err != noErr)
707n/a return PyMac_Error(_err);
708n/aif (bufferSize != sizeof(Handle)) {
709n/a PyErr_SetString(Ctl_Error, "GetControlDataSize() != sizeof(Handle)");
710n/a return NULL;
711n/a}
712n/a
713n/a_err = GetControlData(_self->ob_itself,
714n/a inPart,
715n/a inTagName,
716n/a sizeof(Handle),
717n/a (Ptr)&hdl,
718n/a &bufferSize);
719n/a
720n/aif (_err != noErr) {
721n/a return PyMac_Error(_err);
722n/a}
723n/a_res = Py_BuildValue("O&", OptResObj_New, hdl);
724n/areturn _res;
725n/a"""
726n/a
727n/af = ManualGenerator("GetControlData_Handle", getcontroldata_handle_body);
728n/af.docstring = lambda: "(part, type) -> ResObj"
729n/aobject.add(f)
730n/a
731n/a# Manual Generator for SetControlData_Callback
732n/asetcontroldata_callback_body = """
733n/aOSErr _err;
734n/aControlPartCode inPart;
735n/aResType inTagName;
736n/aPyObject *callback;
737n/aUniversalProcPtr c_callback;
738n/a
739n/aif (!PyArg_ParseTuple(_args, "hO&O",
740n/a &inPart,
741n/a PyMac_GetOSType, &inTagName,
742n/a &callback))
743n/a return NULL;
744n/a
745n/aif ( setcallback((PyObject *)_self, inTagName, callback, &c_callback) < 0 )
746n/a return NULL;
747n/a_err = SetControlData(_self->ob_itself,
748n/a inPart,
749n/a inTagName,
750n/a sizeof(c_callback),
751n/a (Ptr)&c_callback);
752n/a
753n/aif (_err != noErr)
754n/a return PyMac_Error(_err);
755n/a_res = Py_None;
756n/areturn _res;
757n/a"""
758n/a
759n/af = ManualGenerator("SetControlData_Callback", setcontroldata_callback_body);
760n/af.docstring = lambda: "(callbackfunc) -> None"
761n/aobject.add(f)
762n/a
763n/a
764n/a
765n/acreatetabscontrol_body = """\
766n/aOSStatus _err;
767n/aWindowPtr window;
768n/aRect boundsRect;
769n/aUInt16 size;
770n/aUInt16 direction;
771n/aint i;
772n/aUInt16 numTabs;
773n/aControlTabEntry tabArray[MAXTABS];
774n/aControlHandle outControl;
775n/aPyObject *tabArrayObj, *tabEntry;
776n/a
777n/a#ifndef CreateTabsControl
778n/aPyMac_PRECHECK(CreateTabsControl);
779n/a#endif
780n/aif (!PyArg_ParseTuple(_args, "O&O&HHO",
781n/a WinObj_Convert, &window,
782n/a PyMac_GetRect, &boundsRect,
783n/a &size,
784n/a &direction,
785n/a &tabArrayObj))
786n/a return NULL;
787n/a
788n/ai = PySequence_Length(tabArrayObj);
789n/aif (i == -1)
790n/a return NULL;
791n/aif (i > MAXTABS) {
792n/a PyErr_SetString(Ctl_Error, "Too many tabs");
793n/a return NULL;
794n/a}
795n/anumTabs = i;
796n/afor (i=0; i<numTabs; i++) {
797n/a tabEntry = PySequence_GetItem(tabArrayObj, i);
798n/a if (tabEntry == NULL)
799n/a return NULL;
800n/a if (!PyArg_Parse(tabEntry, "(O&O&B)",
801n/a ControlButtonContentInfo_Convert, &tabArray[i].icon,
802n/a CFStringRefObj_Convert, &tabArray[i].name,
803n/a &tabArray[i].enabled
804n/a ))
805n/a return NULL;
806n/a}
807n/a
808n/a_err = CreateTabsControl(window,
809n/a &boundsRect,
810n/a size,
811n/a direction,
812n/a numTabs,
813n/a tabArray,
814n/a &outControl);
815n/aif (_err != noErr) return PyMac_Error(_err);
816n/a_res = Py_BuildValue("O&",
817n/a CtlObj_New, outControl);
818n/areturn _res;"""
819n/a
820n/af = ManualGenerator("CreateTabsControl", createtabscontrol_body)
821n/af.docstring = lambda: "(WindowPtr window, Rect boundsRect, UInt16 size, UInt16 direction, ControlTabEntry tabArray) -> (ControlHandle outControl)"
822n/amodule.add(f)
823n/a
824n/a# generate output (open the output file as late as possible)
825n/aSetOutputFileName(OUTPUTFILE)
826n/amodule.generate()