diff options
Diffstat (limited to 'Mac/Modules/ctl/ctlsupport.py')
-rw-r--r-- | Mac/Modules/ctl/ctlsupport.py | 826 |
1 files changed, 0 insertions, 826 deletions
diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py deleted file mode 100644 index 04fac8b..0000000 --- a/Mac/Modules/ctl/ctlsupport.py +++ /dev/null @@ -1,826 +0,0 @@ -# This script generates a Python interface for an Apple Macintosh Manager. -# It uses the "bgen" package to generate C code. -# The function specifications are generated by scanning the mamager's header file, -# using the "scantools" package (customized for this particular manager). - -import string - -# Declarations that change for each manager -MACHEADERFILE = 'Controls.h' # The Apple header file -MODNAME = '_Ctl' # The name of the module -OBJECTNAME = 'Control' # The basic name of the objects used here - -# The following is *usually* unchanged but may still require tuning -MODPREFIX = 'Ctl' # The prefix for module-wide routines -OBJECTTYPE = OBJECTNAME + 'Handle' # The C type used to represent them -OBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods -INPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner -OUTPUTFILE = MODNAME + "module.c" # The file generated by this program - -from macsupport import * - -# Create the type objects - -ControlHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX) -ControlRef = ControlHandle -ExistingControlHandle = OpaqueByValueType(OBJECTTYPE, "CtlObj_WhichControl", "BUG") - -RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") -CCTabHandle = OpaqueByValueType("CCTabHandle", "ResObj") -AuxCtlHandle = OpaqueByValueType("AuxCtlHandle", "ResObj") -ControlPartCode = Type("ControlPartCode", "h") -DragConstraint = Type("DragConstraint", "H") -ControlVariant = Type("ControlVariant", "h") -IconTransformType = Type("IconTransformType", "h") -EventModifiers = Type("EventModifiers", "H") -ClickActivationResult = Type("ClickActivationResult", "l") -ControlButtonGraphicAlignment = Type("ControlButtonGraphicAlignment", "h") -ControlButtonTextAlignment = Type("ControlButtonTextAlignment", "h") -ControlButtonTextPlacement = Type("ControlButtonTextPlacement", "h") -ControlContentType = Type("ControlContentType", "h") -ControlFocusPart = Type("ControlFocusPart", "h") - -ControlFontStyleRec = OpaqueType('ControlFontStyleRec', 'ControlFontStyle') -ControlFontStyleRec_ptr = ControlFontStyleRec -ControlID = OpaqueType('ControlID', 'PyControlID') -ControlID_ptr = ControlID - -DragTrackingMessage = Type("DragTrackingMessage", "h") -DragReference = OpaqueByValueType("DragReference", "DragObj") - -CFStringRef = OpaqueByValueType("CFStringRef", "CFStringRefObj") -CFMutableStringRef = OpaqueByValueType("CFMutableStringRef", "CFMutableStringRefObj") -CFDataRef = OpaqueByValueType("CFDataRef", "CFDataRefObj") - -ControlTabSize = UInt16 -ControlTabDirection = UInt16 -ControlPopupArrowOrientation = UInt16 -ControlPopupArrowSize = UInt16 -ControlClockType = UInt16 -ControlClockFlags = UInt32 -ControlRoundButtonSize = SInt16 -DataBrowserViewStyle = OSType -DataBrowserItemID = UInt32 -DataBrowserEditCommand = UInt32 -DataBrowserSelectionAnchorDirection = UInt32 -DataBrowserItemState = UInt32 -DataBrowserPropertyID = UInt32 -DataBrowserRevealOptions = UInt8 -DataBrowserSortOrder = UInt16 -DataBrowserSelectionFlags = UInt32 -DataBrowserPropertyFlags = UInt32 -DataBrowserPropertyPart = OSType -DataBrowserTableViewColumnID = DataBrowserPropertyID -#DataBrowserTableViewColumnDesc = DataBrowserPropertyDesc -DataBrowserTableViewHiliteStyle = UInt32 -DataBrowserTableViewRowIndex = UInt32 -DataBrowserTableViewColumnIndex = UInt32 -DataBrowserPropertyType = OSType -ControlDisclosureTriangleOrientation = UInt16 - -DataBrowserTableViewColumnDesc = OpaqueType("DataBrowserTableViewColumnDesc", - "DataBrowserTableViewColumnDesc") -DataBrowserListViewColumnDesc = OpaqueType("DataBrowserListViewColumnDesc", - "DataBrowserListViewColumnDesc") -ControlButtonContentInfo = OpaqueType("ControlButtonContentInfo", - "ControlButtonContentInfo") -ControlButtonContentInfoPtr = ControlButtonContentInfo_ptr = ControlButtonContentInfo - -ControlTabEntry_ptr = OpaqueType("ControlTabEntry", "ControlTabEntry") - -ControlBevelThickness = UInt16 -ControlBevelButtonBehavior = UInt16 -ControlBevelButtonMenuBehavior = UInt16 -ControlBevelButtonMenuPlacement = UInt16 -ControlPushButtonIconAlignment = UInt16 - -class ControlActionDefinition(Type): - def declare(self, name): - Output("%s %s;", self.typeName, name) - Output("UniversalProcPtr c_callback;") - def passInput(self, name): - return "myactionproc_upp" - def cleanup(self, name): - Output("setcallback((PyObject*)_self, kMyControlActionProcTag, actionProc, &c_callback);") - -class ControlActionDefinitionNewControl(ControlActionDefinition): - def cleanup(self, name): - Output("setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);") - -ControlActionUPP = ControlActionDefinition("PyObject*", "O") -ControlActionUPPNewControl = ControlActionDefinitionNewControl("PyObject*", "O") -ControlSliderOrientation = UInt16 - - -includestuff = includestuff + """ -#include <Carbon/Carbon.h> - -#ifdef USE_TOOLBOX_OBJECT_GLUE -extern PyObject *_CtlObj_New(ControlHandle); -extern int _CtlObj_Convert(PyObject *, ControlHandle *); - -#define CtlObj_New _CtlObj_New -#define CtlObj_Convert _CtlObj_Convert -#endif - -static PyObject *CtlObj_WhichControl(ControlHandle); - -#define as_Control(h) ((ControlHandle)h) -#define as_Resource(ctl) ((Handle)ctl) -#define GetControlRect(ctl, rectp) GetControlBounds(ctl, rectp) - -#define MAXTABS 32 /* maximum number of tabs that we support in a tabs control */ -/* -** Parse/generate ControlFontStyleRec records -*/ -#if 0 /* Not needed */ -static PyObject * -ControlFontStyle_New(ControlFontStyleRec *itself) -{ - - return Py_BuildValue("hhhhhhO&O&", itself->flags, itself->font, - itself->size, itself->style, itself->mode, itself->just, - QdRGB_New, &itself->foreColor, QdRGB_New, &itself->backColor); -} -#endif - -static int -ControlFontStyle_Convert(PyObject *v, ControlFontStyleRec *itself) -{ - return PyArg_Parse(v, "(hhhhhhO&O&)", &itself->flags, - &itself->font, &itself->size, &itself->style, &itself->mode, - &itself->just, QdRGB_Convert, &itself->foreColor, - QdRGB_Convert, &itself->backColor); -} - -/* -** Parse/generate ControlID records -*/ -static PyObject * -PyControlID_New(ControlID *itself) -{ - - return Py_BuildValue("O&l", PyMac_BuildOSType, itself->signature, itself->id); -} - -static int -PyControlID_Convert(PyObject *v, ControlID *itself) -{ - return PyArg_Parse(v, "(O&l)", PyMac_GetOSType, &itself->signature, &itself->id); -} - -/* -** generate DataBrowserListViewColumnDesc records -*/ -static int -DataBrowserTableViewColumnDesc_Convert(PyObject *v, DataBrowserTableViewColumnDesc *itself) -{ - return PyArg_Parse(v, "(lO&l)", - &itself->propertyID, - PyMac_GetOSType, &itself->propertyType, - &itself->propertyFlags); -} - -static int -ControlButtonContentInfo_Convert(PyObject *v, ControlButtonContentInfo *itself) -{ - return PyArg_Parse(v, "(hO&)", - &itself->contentType, - OptResObj_Convert, &itself->u.iconSuite); -} - -static int -DataBrowserListViewHeaderDesc_Convert(PyObject *v, DataBrowserListViewHeaderDesc *itself) -{ - itself->version = kDataBrowserListViewLatestHeaderDesc; - return PyArg_Parse(v, "(HHhO&HO&O&)", - &itself->minimumWidth, - &itself->maximumWidth, - &itself->titleOffset, - CFStringRefObj_Convert, &itself->titleString, - &itself->initialOrder, - ControlFontStyle_Convert, &itself->btnFontStyle, - ControlButtonContentInfo_Convert, &itself->btnContentInfo); -} - -static int -DataBrowserListViewColumnDesc_Convert(PyObject *v, DataBrowserListViewColumnDesc *itself) -{ - return PyArg_Parse(v, "(O&O&)", - DataBrowserTableViewColumnDesc_Convert, &itself->propertyDesc, - DataBrowserListViewHeaderDesc_Convert, &itself->headerBtnDesc); -} - -/* TrackControl and HandleControlClick callback support */ -#define kMyControlActionProcTag 'ACTN' /* not an official tag, only for internal use */ -static PyObject *tracker; -static ControlActionUPP mytracker_upp; -static ControlActionUPP myactionproc_upp; -static ControlUserPaneKeyDownUPP mykeydownproc_upp; -static ControlUserPaneFocusUPP myfocusproc_upp; -static ControlUserPaneDrawUPP mydrawproc_upp; -static ControlUserPaneIdleUPP myidleproc_upp; -static ControlUserPaneHitTestUPP myhittestproc_upp; -static ControlUserPaneTrackingUPP mytrackingproc_upp; - -static int settrackfunc(PyObject *); /* forward */ -static void clrtrackfunc(void); /* forward */ -static int setcallback(PyObject *, OSType, PyObject *, UniversalProcPtr *); -""" - -finalstuff = finalstuff + """ -static PyObject * -CtlObj_NewUnmanaged(ControlHandle itself) -{ - ControlObject *it; - if (itself == NULL) return PyMac_Error(resNotFound); - it = PyObject_NEW(ControlObject, &Control_Type); - if (it == NULL) return NULL; - it->ob_itself = itself; - it->ob_callbackdict = NULL; - return (PyObject *)it; -} - -static PyObject * -CtlObj_WhichControl(ControlHandle c) -{ - PyObject *it; - - if (c == NULL) - it = Py_None; - else { - it = (PyObject *) GetControlReference(c); - /* - ** If the refcon is zero or doesn't point back to the Python object - ** the control is not ours. Return a temporary object. - */ - if (it == NULL || ((ControlObject *)it)->ob_itself != c) - return CtlObj_NewUnmanaged(c); - } - Py_INCREF(it); - return it; -} - -static int -settrackfunc(PyObject *obj) -{ - if (tracker) { - PyErr_SetString(Ctl_Error, "Tracker function in use"); - return 0; - } - tracker = obj; - Py_INCREF(tracker); - return 1; -} - -static void -clrtrackfunc(void) -{ - Py_XDECREF(tracker); - tracker = 0; -} - -static pascal void -mytracker(ControlHandle ctl, short part) -{ - PyObject *args, *rv=0; - - args = Py_BuildValue("(O&i)", CtlObj_WhichControl, ctl, (int)part); - if (args && tracker) { - rv = PyEval_CallObject(tracker, args); - Py_DECREF(args); - } - if (rv) - Py_DECREF(rv); - else { - PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n"); - PyErr_Print(); - } -} - -static int -setcallback(PyObject *myself, OSType which, PyObject *callback, UniversalProcPtr *uppp) -{ - ControlObject *self = (ControlObject *)myself; - char keybuf[9]; - - if ( which == kMyControlActionProcTag ) - *uppp = (UniversalProcPtr)myactionproc_upp; - else if ( which == kControlUserPaneKeyDownProcTag ) - *uppp = (UniversalProcPtr)mykeydownproc_upp; - else if ( which == kControlUserPaneFocusProcTag ) - *uppp = (UniversalProcPtr)myfocusproc_upp; - else if ( which == kControlUserPaneDrawProcTag ) - *uppp = (UniversalProcPtr)mydrawproc_upp; - else if ( which == kControlUserPaneIdleProcTag ) - *uppp = (UniversalProcPtr)myidleproc_upp; - else if ( which == kControlUserPaneHitTestProcTag ) - *uppp = (UniversalProcPtr)myhittestproc_upp; - else if ( which == kControlUserPaneTrackingProcTag ) - *uppp = (UniversalProcPtr)mytrackingproc_upp; - else - return -1; - /* Only now do we test for clearing of the callback: */ - if ( callback == Py_None ) - *uppp = NULL; - /* Create the dict if it doesn't exist yet (so we don't get such a dict for every control) */ - if ( self->ob_callbackdict == NULL ) - if ( (self->ob_callbackdict = PyDict_New()) == NULL ) - return -1; - /* And store the Python callback */ - sprintf(keybuf, "%x", (unsigned)which); - if (PyDict_SetItemString(self->ob_callbackdict, keybuf, callback) < 0) - return -1; - return 0; -} - -static PyObject * -callcallback(ControlObject *self, OSType which, PyObject *arglist) -{ - char keybuf[9]; - PyObject *func, *rv; - - sprintf(keybuf, "%x", (unsigned)which); - if ( self->ob_callbackdict == NULL || - (func = PyDict_GetItemString(self->ob_callbackdict, keybuf)) == NULL ) { - PySys_WriteStderr("Control callback %x without callback object\\n", (unsigned)which); - return NULL; - } - rv = PyEval_CallObject(func, arglist); - if ( rv == NULL ) { - PySys_WriteStderr("Exception in control callback %x handler\\n", (unsigned)which); - PyErr_Print(); - } - return rv; -} - -static pascal void -myactionproc(ControlHandle control, SInt16 part) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - arglist = Py_BuildValue("Oh", ctl_obj, part); - rv = callcallback(ctl_obj, kMyControlActionProcTag, arglist); - Py_XDECREF(arglist); - Py_XDECREF(rv); -} - -static pascal ControlPartCode -mykeydownproc(ControlHandle control, SInt16 keyCode, SInt16 charCode, SInt16 modifiers) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - short c_rv = 0; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - arglist = Py_BuildValue("Ohhh", ctl_obj, keyCode, charCode, modifiers); - rv = callcallback(ctl_obj, kControlUserPaneKeyDownProcTag, arglist); - Py_XDECREF(arglist); - if ( rv ) - if (!PyArg_Parse(rv, "h", &c_rv)) - PyErr_Clear(); - Py_XDECREF(rv); - return (ControlPartCode)c_rv; -} - -static pascal ControlPartCode -myfocusproc(ControlHandle control, ControlPartCode part) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - short c_rv = kControlFocusNoPart; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - arglist = Py_BuildValue("Oh", ctl_obj, part); - rv = callcallback(ctl_obj, kControlUserPaneFocusProcTag, arglist); - Py_XDECREF(arglist); - if ( rv ) - if (!PyArg_Parse(rv, "h", &c_rv)) - PyErr_Clear(); - Py_XDECREF(rv); - return (ControlPartCode)c_rv; -} - -static pascal void -mydrawproc(ControlHandle control, SInt16 part) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - arglist = Py_BuildValue("Oh", ctl_obj, part); - rv = callcallback(ctl_obj, kControlUserPaneDrawProcTag, arglist); - Py_XDECREF(arglist); - Py_XDECREF(rv); -} - -static pascal void -myidleproc(ControlHandle control) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - arglist = Py_BuildValue("O", ctl_obj); - rv = callcallback(ctl_obj, kControlUserPaneIdleProcTag, arglist); - Py_XDECREF(arglist); - Py_XDECREF(rv); -} - -static pascal ControlPartCode -myhittestproc(ControlHandle control, Point where) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - short c_rv = -1; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, where); - rv = callcallback(ctl_obj, kControlUserPaneHitTestProcTag, arglist); - Py_XDECREF(arglist); - /* Ignore errors, nothing we can do about them */ - if ( rv ) - if (!PyArg_Parse(rv, "h", &c_rv)) - PyErr_Clear(); - Py_XDECREF(rv); - return (ControlPartCode)c_rv; -} - -static pascal ControlPartCode -mytrackingproc(ControlHandle control, Point startPt, ControlActionUPP actionProc) -{ - ControlObject *ctl_obj; - PyObject *arglist, *rv; - short c_rv = -1; - - ctl_obj = (ControlObject *)CtlObj_WhichControl(control); - /* We cannot pass the actionProc without lots of work */ - arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, startPt); - rv = callcallback(ctl_obj, kControlUserPaneTrackingProcTag, arglist); - Py_XDECREF(arglist); - if ( rv ) - if (!PyArg_Parse(rv, "h", &c_rv)) - PyErr_Clear(); - Py_XDECREF(rv); - return (ControlPartCode)c_rv; -} -""" - -initstuff = initstuff + """ -mytracker_upp = NewControlActionUPP(mytracker); -myactionproc_upp = NewControlActionUPP(myactionproc); -mykeydownproc_upp = NewControlUserPaneKeyDownUPP(mykeydownproc); -myfocusproc_upp = NewControlUserPaneFocusUPP(myfocusproc); -mydrawproc_upp = NewControlUserPaneDrawUPP(mydrawproc); -myidleproc_upp = NewControlUserPaneIdleUPP(myidleproc); -myhittestproc_upp = NewControlUserPaneHitTestUPP(myhittestproc); -mytrackingproc_upp = NewControlUserPaneTrackingUPP(mytrackingproc); -PyMac_INIT_TOOLBOX_OBJECT_NEW(ControlHandle, CtlObj_New); -PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ControlHandle, CtlObj_Convert); -""" - -class MyObjectDefinition(PEP253Mixin, ObjectIdentityMixin, GlobalObjectDefinition): - def outputStructMembers(self): - GlobalObjectDefinition.outputStructMembers(self) - Output("PyObject *ob_callbackdict;") - def outputCheckNewArg(self): - Output("if (itself == NULL) return PyMac_Error(resNotFound);") - def outputInitStructMembers(self): - GlobalObjectDefinition.outputInitStructMembers(self) - Output("SetControlReference(itself, (long)it);") - Output("it->ob_callbackdict = NULL;") - def outputCleanupStructMembers(self): - Output("Py_XDECREF(self->ob_callbackdict);") - Output("if (self->ob_itself)SetControlReference(self->ob_itself, (long)0); /* Make it forget about us */") - -# Create the generator groups and link them -module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) -object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE) -module.addobject(object) - -# Create the generator classes used to populate the lists -Function = OSErrWeakLinkFunctionGenerator -Method = OSErrWeakLinkMethodGenerator - -# Create and populate the lists -functions = [] -methods = [] -exec(open(INPUTFILE).read()) -exec(open('ctledit.py').read()) - -# add the populated lists to the generator groups -for f in functions: module.add(f) -for f in methods: object.add(f) - -# Manual generator for TrackControl, due to callback ideosyncracies -trackcontrol_body = """ -ControlPartCode _rv; -Point startPoint; -ControlActionUPP upp = 0; -PyObject *callback = 0; - -if (!PyArg_ParseTuple(_args, "O&|O", - PyMac_GetPoint, &startPoint, &callback)) - return NULL; -if (callback && callback != Py_None) { - if (PyInt_Check(callback) && PyInt_AS_LONG(callback) == -1) - upp = (ControlActionUPP)-1; - else { - settrackfunc(callback); - upp = mytracker_upp; - } -} -_rv = TrackControl(_self->ob_itself, - startPoint, - upp); -clrtrackfunc(); -_res = Py_BuildValue("h", - _rv); -return _res; -""" - -f = ManualGenerator("TrackControl", trackcontrol_body); -f.docstring = lambda: "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)" -object.add(f) - -# CJW - added 5/12/99 -# Manual generator for HandleControlClick, as for TrackControl -handlecontrolclick_body = """ -ControlPartCode _rv; -Point startPoint; -SInt16 modifiers; -ControlActionUPP upp = 0; -PyObject *callback = 0; - -if (!PyArg_ParseTuple(_args, "O&h|O", - PyMac_GetPoint, &startPoint, - &modifiers, - &callback)) - return NULL; -if (callback && callback != Py_None) { - if (PyInt_Check(callback) && PyInt_AS_LONG(callback) == -1) - upp = (ControlActionUPP)-1; - else { - settrackfunc(callback); - upp = mytracker_upp; - } -} -_rv = HandleControlClick(_self->ob_itself, - startPoint, - modifiers, - upp); -clrtrackfunc(); -_res = Py_BuildValue("h", - _rv); -return _res; -""" - -f = ManualGenerator("HandleControlClick", handlecontrolclick_body); -f.docstring = lambda: "(Point startPoint, Integer modifiers, [,trackercallback]) -> (ControlPartCode _rv)" -object.add(f) - -# Manual Generator for SetControlData -setcontroldata_body = """ -OSErr _err; -ControlPartCode inPart; -ResType inTagName; -Size bufferSize; -Ptr buffer; - -if (!PyArg_ParseTuple(_args, "hO&s#", - &inPart, - PyMac_GetOSType, &inTagName, - &buffer, &bufferSize)) - return NULL; - -_err = SetControlData(_self->ob_itself, - inPart, - inTagName, - bufferSize, - buffer); - -if (_err != noErr) - return PyMac_Error(_err); -_res = Py_None; -return _res; -""" - -f = ManualGenerator("SetControlData", setcontroldata_body); -f.docstring = lambda: "(stuff) -> None" -object.add(f) - -# Manual Generator for GetControlData -getcontroldata_body = """ -OSErr _err; -ControlPartCode inPart; -ResType inTagName; -Size bufferSize; -Ptr buffer; -Size outSize; - -if (!PyArg_ParseTuple(_args, "hO&", - &inPart, - PyMac_GetOSType, &inTagName)) - return NULL; - -/* allocate a buffer for the data */ -_err = GetControlDataSize(_self->ob_itself, - inPart, - inTagName, - &bufferSize); -if (_err != noErr) - return PyMac_Error(_err); -buffer = PyMem_NEW(char, bufferSize); -if (buffer == NULL) - return PyErr_NoMemory(); - -_err = GetControlData(_self->ob_itself, - inPart, - inTagName, - bufferSize, - buffer, - &outSize); - -if (_err != noErr) { - PyMem_DEL(buffer); - return PyMac_Error(_err); -} -_res = Py_BuildValue("s#", buffer, outSize); -PyMem_DEL(buffer); -return _res; -""" - -f = ManualGenerator("GetControlData", getcontroldata_body); -f.docstring = lambda: "(part, type) -> String" -object.add(f) - -# Manual Generator for SetControlData_Handle -setcontroldata_handle_body = """ -OSErr _err; -ControlPartCode inPart; -ResType inTagName; -Handle buffer; - -if (!PyArg_ParseTuple(_args, "hO&O&", - &inPart, - PyMac_GetOSType, &inTagName, - OptResObj_Convert, &buffer)) - return NULL; - -_err = SetControlData(_self->ob_itself, - inPart, - inTagName, - sizeof(buffer), - (Ptr)&buffer); - -if (_err != noErr) - return PyMac_Error(_err); -_res = Py_None; -return _res; -""" - -f = ManualGenerator("SetControlData_Handle", setcontroldata_handle_body); -f.docstring = lambda: "(ResObj) -> None" -object.add(f) - -# Manual Generator for GetControlData_Handle -getcontroldata_handle_body = """ -OSErr _err; -ControlPartCode inPart; -ResType inTagName; -Size bufferSize; -Handle hdl; - -if (!PyArg_ParseTuple(_args, "hO&", - &inPart, - PyMac_GetOSType, &inTagName)) - return NULL; - -/* Check it is handle-sized */ -_err = GetControlDataSize(_self->ob_itself, - inPart, - inTagName, - &bufferSize); -if (_err != noErr) - return PyMac_Error(_err); -if (bufferSize != sizeof(Handle)) { - PyErr_SetString(Ctl_Error, "GetControlDataSize() != sizeof(Handle)"); - return NULL; -} - -_err = GetControlData(_self->ob_itself, - inPart, - inTagName, - sizeof(Handle), - (Ptr)&hdl, - &bufferSize); - -if (_err != noErr) { - return PyMac_Error(_err); -} -_res = Py_BuildValue("O&", OptResObj_New, hdl); -return _res; -""" - -f = ManualGenerator("GetControlData_Handle", getcontroldata_handle_body); -f.docstring = lambda: "(part, type) -> ResObj" -object.add(f) - -# Manual Generator for SetControlData_Callback -setcontroldata_callback_body = """ -OSErr _err; -ControlPartCode inPart; -ResType inTagName; -PyObject *callback; -UniversalProcPtr c_callback; - -if (!PyArg_ParseTuple(_args, "hO&O", - &inPart, - PyMac_GetOSType, &inTagName, - &callback)) - return NULL; - -if ( setcallback((PyObject *)_self, inTagName, callback, &c_callback) < 0 ) - return NULL; -_err = SetControlData(_self->ob_itself, - inPart, - inTagName, - sizeof(c_callback), - (Ptr)&c_callback); - -if (_err != noErr) - return PyMac_Error(_err); -_res = Py_None; -return _res; -""" - -f = ManualGenerator("SetControlData_Callback", setcontroldata_callback_body); -f.docstring = lambda: "(callbackfunc) -> None" -object.add(f) - - - -createtabscontrol_body = """\ -OSStatus _err; -WindowPtr window; -Rect boundsRect; -UInt16 size; -UInt16 direction; -int i; -UInt16 numTabs; -ControlTabEntry tabArray[MAXTABS]; -ControlHandle outControl; -PyObject *tabArrayObj, *tabEntry; - -#ifndef CreateTabsControl -PyMac_PRECHECK(CreateTabsControl); -#endif -if (!PyArg_ParseTuple(_args, "O&O&HHO", - WinObj_Convert, &window, - PyMac_GetRect, &boundsRect, - &size, - &direction, - &tabArrayObj)) - return NULL; - -i = PySequence_Length(tabArrayObj); -if (i == -1) - return NULL; -if (i > MAXTABS) { - PyErr_SetString(Ctl_Error, "Too many tabs"); - return NULL; -} -numTabs = i; -for (i=0; i<numTabs; i++) { - tabEntry = PySequence_GetItem(tabArrayObj, i); - if (tabEntry == NULL) - return NULL; - if (!PyArg_Parse(tabEntry, "(O&O&B)", - ControlButtonContentInfo_Convert, &tabArray[i].icon, - CFStringRefObj_Convert, &tabArray[i].name, - &tabArray[i].enabled - )) - return NULL; -} - -_err = CreateTabsControl(window, - &boundsRect, - size, - direction, - numTabs, - tabArray, - &outControl); -if (_err != noErr) return PyMac_Error(_err); -_res = Py_BuildValue("O&", - CtlObj_New, outControl); -return _res;""" - -f = ManualGenerator("CreateTabsControl", createtabscontrol_body) -f.docstring = lambda: "(WindowPtr window, Rect boundsRect, UInt16 size, UInt16 direction, ControlTabEntry tabArray) -> (ControlHandle outControl)" -module.add(f) - -# generate output (open the output file as late as possible) -SetOutputFileName(OUTPUTFILE) -module.generate() |