| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | # 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 | 
					
						
							| 
									
										
										
										
											2001-08-23 13:51:46 +00:00
										 |  |  | MODNAME = '_Ctl'				# The name of the module | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | OBJECTNAME = 'Control'			# The basic name of the objects used here | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The following is *usually* unchanged but may still require tuning | 
					
						
							| 
									
										
										
										
											2001-08-23 13:51:46 +00:00
										 |  |  | MODPREFIX = 'Ctl'			# The prefix for module-wide routines | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											1995-06-06 12:55:40 +00:00
										 |  |  | ControlRef = ControlHandle | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | ExistingControlHandle = OpaqueByValueType(OBJECTTYPE, "CtlObj_WhichControl", "BUG") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-04-10 14:48:19 +00:00
										 |  |  | RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") | 
					
						
							| 
									
										
										
										
											1997-08-15 14:32:18 +00:00
										 |  |  | CCTabHandle = OpaqueByValueType("CCTabHandle", "ResObj") | 
					
						
							|  |  |  | AuxCtlHandle = OpaqueByValueType("AuxCtlHandle", "ResObj") | 
					
						
							| 
									
										
										
										
											1995-06-09 20:56:31 +00:00
										 |  |  | ControlPartCode = Type("ControlPartCode", "h") | 
					
						
							| 
									
										
										
										
											2000-07-07 13:09:35 +00:00
										 |  |  | DragConstraint = Type("DragConstraint", "H") | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | ControlVariant = Type("ControlVariant", "h") | 
					
						
							|  |  |  | IconTransformType = Type("IconTransformType", "h") | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | EventModifiers = Type("EventModifiers", "H") | 
					
						
							|  |  |  | ClickActivationResult = Type("ClickActivationResult", "l") | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | ControlID = OpaqueType('ControlID', 'PyControlID') | 
					
						
							|  |  |  | ControlID_ptr = ControlID | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-12-12 22:10:21 +00:00
										 |  |  | DragTrackingMessage = Type("DragTrackingMessage", "h") | 
					
						
							|  |  |  | DragReference = OpaqueByValueType("DragReference", "DragObj") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-12 22:40:27 +00:00
										 |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | includestuff = includestuff + """
 | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | #ifdef WITHOUT_FRAMEWORKS | 
					
						
							|  |  |  | #include <Controls.h> | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | #include <ControlDefinitions.h> | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | #else | 
					
						
							|  |  |  | #include <Carbon/Carbon.h> | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | #endif | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-05-17 21:58:34 +00:00
										 |  |  | #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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-14 22:16:45 +00:00
										 |  |  | staticforward PyObject *CtlObj_WhichControl(ControlHandle); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-07 14:02:03 +00:00
										 |  |  | #define as_Control(h) ((ControlHandle)h) | 
					
						
							| 
									
										
										
										
											1999-12-23 14:32:06 +00:00
										 |  |  | #define as_Resource(ctl) ((Handle)ctl) | 
					
						
							| 
									
										
										
										
											2000-07-14 22:37:27 +00:00
										 |  |  | #if TARGET_API_MAC_CARBON | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | #define GetControlRect(ctl, rectp) GetControlBounds(ctl, rectp) | 
					
						
							|  |  |  | #else | 
					
						
							| 
									
										
										
										
											2000-03-21 16:25:23 +00:00
										 |  |  | #define GetControlRect(ctl, rectp) (*(rectp) = ((*(ctl))->contrlRect)) | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | #endif | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | /* | 
					
						
							|  |  |  | ** Parse/generate ControlFontStyleRec records | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | #if 0 /* Not needed */ | 
					
						
							| 
									
										
										
										
											2000-07-14 22:16:45 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | ControlFontStyle_New(ControlFontStyleRec *itself) | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-14 22:16:45 +00:00
										 |  |  | static int | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | ControlFontStyle_Convert(PyObject *v, ControlFontStyleRec *itself) | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return PyArg_ParseTuple(v, "hhhhhhO&O&", &itself->flags, | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 		&itself->font, &itself->size, &itself->style, &itself->mode, | 
					
						
							|  |  |  | 		&itself->just, QdRGB_Convert, &itself->foreColor, | 
					
						
							| 
									
										
										
										
											1998-02-20 16:02:09 +00:00
										 |  |  | 		QdRGB_Convert, &itself->backColor); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | /* | 
					
						
							|  |  |  | ** Parse/generate ControlID records | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | PyControlID_New(ControlID *itself) | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return Py_BuildValue("O&l", PyMac_BuildOSType, itself->signature, itself->id); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | PyControlID_Convert(PyObject *v, ControlID *itself) | 
					
						
							| 
									
										
										
										
											2000-12-10 23:43:49 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return PyArg_ParseTuple(v, "O&l", PyMac_GetOSType, &itself->signature, &itself->id); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | /* TrackControl and HandleControlClick callback support */ | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | static PyObject *tracker; | 
					
						
							|  |  |  | static ControlActionUPP mytracker_upp; | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | static ControlUserPaneDrawUPP mydrawproc_upp; | 
					
						
							|  |  |  | static ControlUserPaneIdleUPP myidleproc_upp; | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | static ControlUserPaneHitTestUPP myhittestproc_upp; | 
					
						
							|  |  |  | static ControlUserPaneTrackingUPP mytrackingproc_upp; | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-06-20 21:31:28 +00:00
										 |  |  | staticforward int settrackfunc(PyObject *); 	/* forward */ | 
					
						
							|  |  |  | staticforward void clrtrackfunc(void);	/* forward */ | 
					
						
							| 
									
										
										
										
											2000-07-11 21:12:55 +00:00
										 |  |  | staticforward int setcallback(PyObject *, OSType, PyObject *, UniversalProcPtr *); | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | finalstuff = finalstuff + """
 | 
					
						
							| 
									
										
										
										
											2000-07-14 22:16:45 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | CtlObj_NewUnmanaged(ControlHandle itself) | 
					
						
							| 
									
										
										
										
											1999-03-13 23:07:32 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	ControlObject *it; | 
					
						
							|  |  |  | 	if (itself == NULL) return PyMac_Error(resNotFound); | 
					
						
							|  |  |  | 	it = PyObject_NEW(ControlObject, &Control_Type); | 
					
						
							|  |  |  | 	if (it == NULL) return NULL; | 
					
						
							|  |  |  | 	it->ob_itself = itself; | 
					
						
							| 
									
										
										
										
											2000-03-21 16:25:23 +00:00
										 |  |  | 	it->ob_callbackdict = NULL; | 
					
						
							| 
									
										
										
										
											1999-03-13 23:07:32 +00:00
										 |  |  | 	return (PyObject *)it; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-14 22:16:45 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | CtlObj_WhichControl(ControlHandle c) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *it; | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	if (c == NULL) | 
					
						
							|  |  |  | 		it = Py_None; | 
					
						
							| 
									
										
										
										
											1999-03-13 23:07:32 +00:00
										 |  |  | 	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); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	Py_INCREF(it); | 
					
						
							|  |  |  | 	return it; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | settrackfunc(PyObject *obj) | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (tracker) { | 
					
						
							|  |  |  | 		PyErr_SetString(Ctl_Error, "Tracker function in use"); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	tracker = obj; | 
					
						
							|  |  |  | 	Py_INCREF(tracker); | 
					
						
							| 
									
										
										
										
											2001-09-05 10:31:52 +00:00
										 |  |  | 	return 1; | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | clrtrackfunc(void) | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	Py_XDECREF(tracker); | 
					
						
							|  |  |  | 	tracker = 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static pascal void | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | mytracker(ControlHandle ctl, short part) | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyObject *args, *rv=0; | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | 	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 | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 		PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n"); | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | setcallback(PyObject *myself, OSType which, PyObject *callback, UniversalProcPtr *uppp) | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-07-11 21:12:55 +00:00
										 |  |  | 	ControlObject *self = (ControlObject *)myself; | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	char keybuf[9]; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if ( which == kControlUserPaneDrawProcTag ) | 
					
						
							| 
									
										
										
										
											2000-04-05 21:30:57 +00:00
										 |  |  | 		*uppp = (UniversalProcPtr)mydrawproc_upp; | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	else if ( which == kControlUserPaneIdleProcTag ) | 
					
						
							| 
									
										
										
										
											2000-04-05 21:30:57 +00:00
										 |  |  | 		*uppp = (UniversalProcPtr)myidleproc_upp; | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | 	else if ( which == kControlUserPaneHitTestProcTag ) | 
					
						
							| 
									
										
										
										
											2000-04-05 21:30:57 +00:00
										 |  |  | 		*uppp = (UniversalProcPtr)myhittestproc_upp; | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | 	else if ( which == kControlUserPaneTrackingProcTag ) | 
					
						
							| 
									
										
										
										
											2000-04-05 21:30:57 +00:00
										 |  |  | 		*uppp = (UniversalProcPtr)mytrackingproc_upp; | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	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 */ | 
					
						
							| 
									
										
										
										
											2001-09-05 10:31:52 +00:00
										 |  |  | 	sprintf(keybuf, "%x", (unsigned)which); | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	if (PyDict_SetItemString(self->ob_callbackdict, keybuf, callback) < 0) | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | callcallback(ControlObject *self, OSType which, PyObject *arglist) | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	char keybuf[9]; | 
					
						
							|  |  |  | 	PyObject *func, *rv; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2001-09-05 10:31:52 +00:00
										 |  |  | 	sprintf(keybuf, "%x", (unsigned)which); | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	if ( self->ob_callbackdict == NULL || | 
					
						
							|  |  |  | 			(func = PyDict_GetItemString(self->ob_callbackdict, keybuf)) == NULL ) { | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | 		PySys_WriteStderr("Control callback %x without callback object\\n", which); | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	rv = PyEval_CallObject(func, arglist); | 
					
						
							|  |  |  | 	if ( rv == NULL ) | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | 		PySys_WriteStderr("Exception in control callback %x handler\\n", which); | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	return 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); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | static pascal ControlPartCode | 
					
						
							|  |  |  | myhittestproc(ControlHandle control, Point where) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	ControlObject *ctl_obj; | 
					
						
							|  |  |  | 	PyObject *arglist, *rv; | 
					
						
							|  |  |  | 	short c_rv = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ctl_obj = (ControlObject *)CtlObj_WhichControl(control); | 
					
						
							| 
									
										
										
										
											2000-03-22 15:35:24 +00:00
										 |  |  | 	arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, where); | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | 	rv = callcallback(ctl_obj, kControlUserPaneHitTestProcTag, arglist); | 
					
						
							|  |  |  | 	Py_XDECREF(arglist); | 
					
						
							|  |  |  | 	/* Ignore errors, nothing we can do about them */ | 
					
						
							|  |  |  | 	if ( rv ) | 
					
						
							|  |  |  | 		PyArg_Parse(rv, "h", &c_rv); | 
					
						
							|  |  |  | 	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 */ | 
					
						
							| 
									
										
										
										
											2000-03-22 15:35:24 +00:00
										 |  |  | 	arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, startPt); | 
					
						
							| 
									
										
										
										
											2000-03-21 23:03:02 +00:00
										 |  |  | 	rv = callcallback(ctl_obj, kControlUserPaneTrackingProcTag, arglist); | 
					
						
							|  |  |  | 	Py_XDECREF(arglist); | 
					
						
							|  |  |  | 	if ( rv ) | 
					
						
							|  |  |  | 		PyArg_Parse(rv, "h", &c_rv); | 
					
						
							|  |  |  | 	Py_XDECREF(rv); | 
					
						
							|  |  |  | 	return (ControlPartCode)c_rv; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | initstuff = initstuff + """
 | 
					
						
							| 
									
										
										
										
											2001-05-22 21:56:42 +00:00
										 |  |  | mytracker_upp = NewControlActionUPP(mytracker); | 
					
						
							|  |  |  | 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); | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-13 23:07:32 +00:00
										 |  |  | class MyObjectDefinition(ObjectIdentityMixin, GlobalObjectDefinition): | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	def outputStructMembers(self): | 
					
						
							|  |  |  | 		GlobalObjectDefinition.outputStructMembers(self) | 
					
						
							|  |  |  | 		Output("PyObject *ob_callbackdict;") | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 	def outputCheckNewArg(self): | 
					
						
							|  |  |  | 		Output("if (itself == NULL) return PyMac_Error(resNotFound);") | 
					
						
							|  |  |  | 	def outputInitStructMembers(self): | 
					
						
							|  |  |  | 		GlobalObjectDefinition.outputInitStructMembers(self) | 
					
						
							| 
									
										
										
										
											1997-04-08 15:26:03 +00:00
										 |  |  | 		Output("SetControlReference(itself, (long)it);") | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 		Output("it->ob_callbackdict = NULL;") | 
					
						
							| 
									
										
										
										
											1996-04-12 16:26:59 +00:00
										 |  |  | 	def outputCleanupStructMembers(self): | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 		Output("Py_XDECREF(self->ob_callbackdict);") | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 		Output("if (self->ob_itself)SetControlReference(self->ob_itself, (long)0); /* Make it forget about us */") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | # 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 | 
					
						
							| 
									
										
										
										
											2001-11-30 14:16:36 +00:00
										 |  |  | Function = OSErrWeakLinkFunctionGenerator | 
					
						
							|  |  |  | Method = OSErrWeakLinkMethodGenerator | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Create and populate the lists | 
					
						
							|  |  |  | functions = [] | 
					
						
							|  |  |  | methods = [] | 
					
						
							|  |  |  | execfile(INPUTFILE) | 
					
						
							| 
									
										
										
										
											1995-06-18 20:16:33 +00:00
										 |  |  | execfile('ctledit.py') | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # add the populated lists to the generator groups | 
					
						
							|  |  |  | for f in functions: module.add(f) | 
					
						
							|  |  |  | for f in methods: object.add(f) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | # 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); | 
					
						
							| 
									
										
										
										
											1999-12-09 22:49:51 +00:00
										 |  |  | f.docstring = lambda: "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)" | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | object.add(f) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | # 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); | 
					
						
							| 
									
										
										
										
											1999-12-09 22:49:51 +00:00
										 |  |  | f.docstring = lambda: "(Point startPoint, Integer modifiers, [,trackercallback]) -> (ControlPartCode _rv)" | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 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); | 
					
						
							| 
									
										
										
										
											1999-12-09 22:49:51 +00:00
										 |  |  | f.docstring = lambda: "(stuff) -> None" | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 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); | 
					
						
							| 
									
										
										
										
											1999-12-09 22:49:51 +00:00
										 |  |  | f.docstring = lambda: "(part, type) -> String" | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | object.add(f) | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-09 22:10:16 +00:00
										 |  |  | # Manual Generator for SetControlData_Handle | 
					
						
							|  |  |  | setcontroldata_handle_body = """
 | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | OSErr _err; | 
					
						
							|  |  |  | ControlPartCode inPart; | 
					
						
							|  |  |  | ResType inTagName; | 
					
						
							|  |  |  | Handle buffer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!PyArg_ParseTuple(_args, "hO&O&", | 
					
						
							|  |  |  |                       &inPart, | 
					
						
							|  |  |  |                       PyMac_GetOSType, &inTagName, | 
					
						
							| 
									
										
										
										
											1999-12-23 23:06:07 +00:00
										 |  |  |                       OptResObj_Convert, &buffer)) | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | 	return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _err = SetControlData(_self->ob_itself, | 
					
						
							|  |  |  | 	              inPart, | 
					
						
							|  |  |  | 	              inTagName, | 
					
						
							|  |  |  | 	              sizeof(buffer), | 
					
						
							| 
									
										
										
										
											1999-12-29 12:37:22 +00:00
										 |  |  |                       (Ptr)&buffer); | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if (_err != noErr) | 
					
						
							|  |  |  | 	return PyMac_Error(_err); | 
					
						
							|  |  |  | _res = Py_None; | 
					
						
							|  |  |  | return _res; | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-09 22:10:16 +00:00
										 |  |  | f = ManualGenerator("SetControlData_Handle", setcontroldata_handle_body); | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | f.docstring = lambda: "(ResObj) -> None" | 
					
						
							|  |  |  | object.add(f) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-09 22:10:16 +00:00
										 |  |  | # Manual Generator for GetControlData_Handle | 
					
						
							|  |  |  | getcontroldata_handle_body = """
 | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | 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); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-09-05 10:31:52 +00:00
										 |  |  | _res = Py_BuildValue("O&", OptResObj_New, hdl); | 
					
						
							|  |  |  | return _res; | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-09 22:10:16 +00:00
										 |  |  | f = ManualGenerator("GetControlData_Handle", getcontroldata_handle_body); | 
					
						
							| 
									
										
										
										
											1999-12-19 00:05:50 +00:00
										 |  |  | f.docstring = lambda: "(part, type) -> ResObj" | 
					
						
							|  |  |  | object.add(f) | 
					
						
							| 
									
										
										
										
											1999-12-09 16:03:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-09 22:10:16 +00:00
										 |  |  | # Manual Generator for SetControlData_Callback | 
					
						
							|  |  |  | setcontroldata_callback_body = """
 | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | OSErr _err; | 
					
						
							|  |  |  | ControlPartCode inPart; | 
					
						
							|  |  |  | ResType inTagName; | 
					
						
							|  |  |  | PyObject *callback; | 
					
						
							| 
									
										
										
										
											2000-07-11 21:12:55 +00:00
										 |  |  | UniversalProcPtr c_callback; | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if (!PyArg_ParseTuple(_args, "hO&O", | 
					
						
							|  |  |  |                       &inPart, | 
					
						
							|  |  |  |                       PyMac_GetOSType, &inTagName, | 
					
						
							|  |  |  |                       &callback)) | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-11 21:12:55 +00:00
										 |  |  | if ( setcallback((PyObject *)_self, inTagName, callback, &c_callback) < 0 ) | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | 	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; | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-12 23:39:00 +00:00
										 |  |  | f = ManualGenerator("SetControlData_Callback", setcontroldata_callback_body); | 
					
						
							| 
									
										
										
										
											2000-03-20 16:09:09 +00:00
										 |  |  | f.docstring = lambda: "(callbackfunc) -> None" | 
					
						
							|  |  |  | object.add(f) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-06-19 13:35:14 +00:00
										 |  |  | # And manual generators to get/set popup menu information | 
					
						
							|  |  |  | getpopupdata_body = """
 | 
					
						
							|  |  |  | PopupPrivateDataHandle hdl; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if ( (*_self->ob_itself)->contrlData == NULL ) { | 
					
						
							|  |  |  | 	PyErr_SetString(Ctl_Error, "No contrlData handle in control"); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | hdl = (PopupPrivateDataHandle)(*_self->ob_itself)->contrlData; | 
					
						
							|  |  |  | HLock((Handle)hdl); | 
					
						
							|  |  |  | _res = Py_BuildValue("O&i", MenuObj_New, (*hdl)->mHandle, (int)(*hdl)->mID); | 
					
						
							|  |  |  | HUnlock((Handle)hdl); | 
					
						
							|  |  |  | return _res; | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2001-01-12 23:39:00 +00:00
										 |  |  | f = ManualGenerator("GetPopupData", getpopupdata_body, condition="#if !TARGET_API_MAC_CARBON") | 
					
						
							| 
									
										
										
										
											1998-06-19 13:35:14 +00:00
										 |  |  | object.add(f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setpopupdata_body = """
 | 
					
						
							|  |  |  | PopupPrivateDataHandle hdl; | 
					
						
							|  |  |  | MenuHandle mHandle; | 
					
						
							|  |  |  | short mID; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!PyArg_ParseTuple(_args, "O&h", MenuObj_Convert, &mHandle, &mID) ) | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | if ( (*_self->ob_itself)->contrlData == NULL ) { | 
					
						
							|  |  |  | 	PyErr_SetString(Ctl_Error, "No contrlData handle in control"); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | hdl = (PopupPrivateDataHandle)(*_self->ob_itself)->contrlData; | 
					
						
							|  |  |  | (*hdl)->mHandle = mHandle; | 
					
						
							|  |  |  | (*hdl)->mID = mID; | 
					
						
							|  |  |  | Py_INCREF(Py_None); | 
					
						
							|  |  |  | return Py_None; | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2001-01-12 23:39:00 +00:00
										 |  |  | f = ManualGenerator("SetPopupData", setpopupdata_body, condition="#if !TARGET_API_MAC_CARBON") | 
					
						
							| 
									
										
										
										
											1998-06-19 13:35:14 +00:00
										 |  |  | object.add(f) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-05-28 14:20:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | # generate output (open the output file as late as possible) | 
					
						
							|  |  |  | SetOutputFileName(OUTPUTFILE) | 
					
						
							|  |  |  | module.generate() |