[Python-checkins] CVS: python/dist/src/Mac/Modules/ctl _Ctlmodule.c,1.13,1.13.4.1 ctlscan.py,1.25,1.25.4.1 ctlsupport.py,1.47,1.47.4.1
Jack Jansen
jackjansen@users.sourceforge.net
Wed, 27 Feb 2002 15:11:44 -0800
- Previous message: [Python-checkins] CVS: python/dist/src/Mac/Modules/cf _CFmodule.c,1.9,1.9.4.1 cfscan.py,1.5,1.5.18.1 cfsupport.py,1.13,1.13.4.1
- Next message: [Python-checkins] CVS: python/dist/src/Mac/Modules/drag _Dragmodule.c,1.6,1.6.4.1 dragsupport.py,1.8,1.8.14.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Mac/Modules/ctl
In directory usw-pr-cvs1:/tmp/cvs-serv1140/ctl
Modified Files:
Tag: release22-maint
_Ctlmodule.c ctlscan.py ctlsupport.py
Log Message:
Backport of 1.4 thru 1.16 (of _Ctlmodule.c):
- added support for UserPaneKeyDownProc and UserPaneFocusProc
- clear error after failing PyArg_Parse()
- Oops, forgot to mark CreateScrollBarControl and CreateSliderControl
as Carbon-only
- added support for ControlActionProcs, exposing the following calls:
- ctl.SetControlAction()
- CreateScrollBarControl()
- CreateSliderControl()
Index: _Ctlmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/ctl/_Ctlmodule.c,v
retrieving revision 1.13
retrieving revision 1.13.4.1
diff -C2 -d -r1.13 -r1.13.4.1
*** _Ctlmodule.c 18 Dec 2001 20:15:26 -0000 1.13
--- _Ctlmodule.c 27 Feb 2002 23:11:42 -0000 1.13.4.1
***************
*** 129,134 ****
--- 129,138 ----
/* 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;
***************
*** 1184,1187 ****
--- 1188,1210 ----
}
+ static PyObject *CtlObj_SetControlAction(ControlObject *_self, PyObject *_args)
+ {
+ PyObject *_res = NULL;
+ PyObject* actionProc;
+ UniversalProcPtr c_callback;
+ #ifndef SetControlAction
+ PyMac_PRECHECK(SetControlAction);
+ #endif
+ if (!PyArg_ParseTuple(_args, "O",
+ &actionProc))
+ return NULL;
+ SetControlAction(_self->ob_itself,
+ myactionproc_upp);
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ setcallback((PyObject*)_self, kMyControlActionProcTag, actionProc, &c_callback);
+ return _res;
+ }
+
static PyObject *CtlObj_SetControlReference(ControlObject *_self, PyObject *_args)
{
***************
*** 4005,4008 ****
--- 4028,4033 ----
{"GetControlVariant", (PyCFunction)CtlObj_GetControlVariant, 1,
"() -> (ControlVariant _rv)"},
+ {"SetControlAction", (PyCFunction)CtlObj_SetControlAction, 1,
+ "(PyObject* actionProc) -> None"},
{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
"(SInt32 data) -> None"},
***************
*** 4992,4995 ****
--- 5017,5069 ----
#if TARGET_API_MAC_CARBON
+ static PyObject *Ctl_CreateSliderControl(PyObject *_self, PyObject *_args)
+ {
+ PyObject *_res = NULL;
+ OSStatus _err;
+ WindowPtr window;
+ Rect boundsRect;
+ SInt32 value;
+ SInt32 minimum;
+ SInt32 maximum;
+ UInt16 orientation;
+ UInt16 numTickMarks;
+ Boolean liveTracking;
+ PyObject* liveTrackingProc;
+ UniversalProcPtr c_callback;
+ ControlHandle outControl;
+ #ifndef CreateSliderControl
+ PyMac_PRECHECK(CreateSliderControl);
+ #endif
+ if (!PyArg_ParseTuple(_args, "O&O&lllHHbO",
+ WinObj_Convert, &window,
+ PyMac_GetRect, &boundsRect,
+ &value,
+ &minimum,
+ &maximum,
+ &orientation,
+ &numTickMarks,
+ &liveTracking,
+ &liveTrackingProc))
+ return NULL;
+ _err = CreateSliderControl(window,
+ &boundsRect,
+ value,
+ minimum,
+ maximum,
+ orientation,
+ numTickMarks,
+ liveTracking,
+ myactionproc_upp,
+ &outControl);
+ if (_err != noErr) return PyMac_Error(_err);
+ _res = Py_BuildValue("O&",
+ CtlObj_New, outControl);
+ setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);
+ return _res;
+ }
+ #endif
+
+ #if TARGET_API_MAC_CARBON
+
static PyObject *Ctl_CreateDisclosureTriangleControl(PyObject *_self, PyObject *_args)
{
***************
*** 5758,5761 ****
--- 5832,5881 ----
#if TARGET_API_MAC_CARBON
+ static PyObject *Ctl_CreateScrollBarControl(PyObject *_self, PyObject *_args)
+ {
+ PyObject *_res = NULL;
+ OSStatus _err;
+ WindowPtr window;
+ Rect boundsRect;
+ SInt32 value;
+ SInt32 minimum;
+ SInt32 maximum;
+ SInt32 viewSize;
+ Boolean liveTracking;
+ PyObject* liveTrackingProc;
+ UniversalProcPtr c_callback;
+ ControlHandle outControl;
+ #ifndef CreateScrollBarControl
+ PyMac_PRECHECK(CreateScrollBarControl);
+ #endif
+ if (!PyArg_ParseTuple(_args, "O&O&llllbO",
+ WinObj_Convert, &window,
+ PyMac_GetRect, &boundsRect,
+ &value,
+ &minimum,
+ &maximum,
+ &viewSize,
+ &liveTracking,
+ &liveTrackingProc))
+ return NULL;
+ _err = CreateScrollBarControl(window,
+ &boundsRect,
+ value,
+ minimum,
+ maximum,
+ viewSize,
+ liveTracking,
+ myactionproc_upp,
+ &outControl);
+ if (_err != noErr) return PyMac_Error(_err);
+ _res = Py_BuildValue("O&",
+ CtlObj_New, outControl);
+ setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);
+ return _res;
+ }
+ #endif
+
+ #if TARGET_API_MAC_CARBON
+
static PyObject *Ctl_CreatePopupButtonControl(PyObject *_self, PyObject *_args)
{
***************
*** 6147,6150 ****
--- 6267,6275 ----
#if TARGET_API_MAC_CARBON
+ {"CreateSliderControl", (PyCFunction)Ctl_CreateSliderControl, 1,
+ "(WindowPtr window, Rect boundsRect, SInt32 value, SInt32 minimum, SInt32 maximum, UInt16 orientation, UInt16 numTickMarks, Boolean liveTracking, PyObject* liveTrackingProc) -> (ControlHandle outControl)"},
+ #endif
+
+ #if TARGET_API_MAC_CARBON
{"CreateDisclosureTriangleControl", (PyCFunction)Ctl_CreateDisclosureTriangleControl, 1,
"(WindowPtr window, Rect boundsRect, UInt16 orientation, CFStringRef title, SInt32 initialValue, Boolean drawTitle, Boolean autoToggles) -> (ControlHandle outControl)"},
***************
*** 6262,6265 ****
--- 6387,6395 ----
#if TARGET_API_MAC_CARBON
+ {"CreateScrollBarControl", (PyCFunction)Ctl_CreateScrollBarControl, 1,
+ "(WindowPtr window, Rect boundsRect, SInt32 value, SInt32 minimum, SInt32 maximum, SInt32 viewSize, Boolean liveTracking, PyObject* liveTrackingProc) -> (ControlHandle outControl)"},
+ #endif
+
+ #if TARGET_API_MAC_CARBON
{"CreatePopupButtonControl", (PyCFunction)Ctl_CreatePopupButtonControl, 1,
"(WindowPtr window, Rect boundsRect, CFStringRef title, SInt16 menuID, Boolean variableWidth, SInt16 titleWidth, SInt16 titleJustification, Style titleStyle) -> (ControlHandle outControl)"},
***************
*** 6372,6377 ****
if (rv)
Py_DECREF(rv);
! else
PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\n");
}
--- 6502,6509 ----
if (rv)
Py_DECREF(rv);
! else {
PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\n");
+ PyErr_Print();
+ }
}
***************
*** 6382,6386 ****
char keybuf[9];
! if ( which == kControlUserPaneDrawProcTag )
*uppp = (UniversalProcPtr)mydrawproc_upp;
else if ( which == kControlUserPaneIdleProcTag )
--- 6514,6524 ----
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 )
***************
*** 6419,6428 ****
}
rv = PyEval_CallObject(func, arglist);
! if ( rv == NULL )
PySys_WriteStderr("Exception in control callback %x handler\n", (unsigned)which);
return rv;
}
static pascal void
mydrawproc(ControlHandle control, SInt16 part)
{
--- 6557,6617 ----
}
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)
{
***************
*** 6463,6467 ****
/* Ignore errors, nothing we can do about them */
if ( rv )
! PyArg_Parse(rv, "h", &c_rv);
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
--- 6652,6657 ----
/* 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;
***************
*** 6481,6485 ****
Py_XDECREF(arglist);
if ( rv )
! PyArg_Parse(rv, "h", &c_rv);
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
--- 6671,6676 ----
Py_XDECREF(arglist);
if ( rv )
! if (!PyArg_Parse(rv, "h", &c_rv))
! PyErr_Clear();
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
***************
*** 6495,6498 ****
--- 6686,6692 ----
mytracker_upp = NewControlActionUPP(mytracker);
+ myactionproc_upp = NewControlActionUPP(myactionproc);
+ mykeydownproc_upp = NewControlUserPaneKeyDownUPP(mykeydownproc);
+ myfocusproc_upp = NewControlUserPaneFocusUPP(myfocusproc);
mydrawproc_upp = NewControlUserPaneDrawUPP(mydrawproc);
myidleproc_upp = NewControlUserPaneIdleUPP(myidleproc);
Index: ctlscan.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/ctl/ctlscan.py,v
retrieving revision 1.25
retrieving revision 1.25.4.1
diff -C2 -d -r1.25 -r1.25.4.1
*** ctlscan.py 18 Dec 2001 20:15:27 -0000 1.25
--- ctlscan.py 27 Feb 2002 23:11:42 -0000 1.25.4.1
***************
*** 89,92 ****
--- 89,93 ----
'SendControlMessage', # Parameter changed from long to void* from UH3.3 to UH3.4
'CreateTabsControl', # wrote manually
+ 'GetControlAction', # too much effort for too little usefulness
# too lazy for now
***************
*** 126,129 ****
--- 127,132 ----
'HandleControlContextualMenuClick',
+ "CreateScrollBarControl",
+ "CreateSliderControl",
"CreateBevelButtonControl",
"CreateImageWellControl",
***************
*** 260,264 ****
return [
'ProcPtr',
! 'ControlActionUPP',
'Ptr',
'ControlDefSpec', # Don't know how to do this yet
--- 263,267 ----
return [
'ProcPtr',
! # 'ControlActionUPP',
'Ptr',
'ControlDefSpec', # Don't know how to do this yet
***************
*** 320,323 ****
--- 323,329 ----
([("ControlButtonContentInfo", '*', "OutMode")],
[("ControlButtonContentInfo", '*', "InMode")]),
+
+ ([("ControlActionUPP", 'liveTrackingProc', "InMode")],
+ [("ControlActionUPPNewControl", 'liveTrackingProc', "InMode")]),
]
Index: ctlsupport.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/ctl/ctlsupport.py,v
retrieving revision 1.47
retrieving revision 1.47.4.1
diff -C2 -d -r1.47 -r1.47.4.1
*** ctlsupport.py 18 Dec 2001 12:53:47 -0000 1.47
--- ctlsupport.py 27 Feb 2002 23:11:42 -0000 1.47.4.1
***************
*** 95,98 ****
--- 95,116 ----
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 + """
#ifdef WITHOUT_FRAMEWORKS
***************
*** 204,209 ****
--- 222,231 ----
/* 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;
***************
*** 280,285 ****
if (rv)
Py_DECREF(rv);
! else
PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n");
}
--- 302,309 ----
if (rv)
Py_DECREF(rv);
! else {
PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n");
+ PyErr_Print();
+ }
}
***************
*** 290,294 ****
char keybuf[9];
! if ( which == kControlUserPaneDrawProcTag )
*uppp = (UniversalProcPtr)mydrawproc_upp;
else if ( which == kControlUserPaneIdleProcTag )
--- 314,324 ----
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 )
***************
*** 327,336 ****
}
rv = PyEval_CallObject(func, arglist);
! if ( rv == NULL )
PySys_WriteStderr("Exception in control callback %x handler\\n", (unsigned)which);
return rv;
}
static pascal void
mydrawproc(ControlHandle control, SInt16 part)
{
--- 357,417 ----
}
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)
{
***************
*** 371,375 ****
/* Ignore errors, nothing we can do about them */
if ( rv )
! PyArg_Parse(rv, "h", &c_rv);
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
--- 452,457 ----
/* 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;
***************
*** 389,393 ****
Py_XDECREF(arglist);
if ( rv )
! PyArg_Parse(rv, "h", &c_rv);
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
--- 471,476 ----
Py_XDECREF(arglist);
if ( rv )
! if (!PyArg_Parse(rv, "h", &c_rv))
! PyErr_Clear();
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
***************
*** 397,400 ****
--- 480,486 ----
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);
- Previous message: [Python-checkins] CVS: python/dist/src/Mac/Modules/cf _CFmodule.c,1.9,1.9.4.1 cfscan.py,1.5,1.5.18.1 cfsupport.py,1.13,1.13.4.1
- Next message: [Python-checkins] CVS: python/dist/src/Mac/Modules/drag _Dragmodule.c,1.6,1.6.4.1 dragsupport.py,1.8,1.8.14.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]