Fixed a linebreak I forgot, added docstrings, (temporarily) blacklisted a few routines that seem to be missing in my CW Pro 5.1.
diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c
index 895187e..627ca8f 100644
--- a/Mac/Modules/ctl/Ctlmodule.c
+++ b/Mac/Modules/ctl/Ctlmodule.c
@@ -75,12 +75,12 @@
ControlFontStyleRec *itself;
{
return PyArg_ParseTuple(v, "hhhhhhO&O&", &itself->flags,
- &itself->font, &itself->size, &itself->style, &itself->mode,
- &itself->just, QdRGB_Convert, &itself->foreColor,
+ &itself->font, &itself->size, &itself->style, &itself->mode,
+ &itself->just, QdRGB_Convert, &itself->foreColor,
QdRGB_Convert, &itself->backColor);
}
-/* TrackControl callback support */
+/* TrackControl and HandleControlClick callback support */
static PyObject *tracker;
static ControlActionUPP mytracker_upp;
@@ -127,7 +127,7 @@
static void CtlObj_dealloc(self)
ControlObject *self;
{
- if (self->ob_itself) SetControlReference(self->ob_itself, (long)0); /* Make it forget about us */
+ if (self->ob_itself)SetControlReference(self->ob_itself, (long)0); /* Make it forget about us */
PyMem_DEL(self);
}
@@ -717,7 +717,7 @@
{
PyObject *_res = NULL;
OSErr _err;
- SInt16 outNumChildren;
+ UInt16 outNumChildren;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = CountSubControls(_self->ob_itself,
@@ -734,7 +734,7 @@
{
PyObject *_res = NULL;
OSErr _err;
- SInt16 inIndex;
+ UInt16 inIndex;
ControlHandle outSubControl;
if (!PyArg_ParseTuple(_args, "h",
&inIndex))
@@ -867,6 +867,119 @@
}
+static PyObject *CtlObj_HandleControlClick(_self, _args)
+ ControlObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+
+ 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;
+
+}
+
+static PyObject *CtlObj_SetControlData(_self, _args)
+ ControlObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+
+ 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;
+
+}
+
+static PyObject *CtlObj_GetControlData(_self, _args)
+ ControlObject *_self;
+ PyObject *_args;
+{
+ PyObject *_res = NULL;
+
+ 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;
+
+}
+
static PyObject *CtlObj_GetPopupData(_self, _args)
ControlObject *_self;
PyObject *_args;
@@ -983,9 +1096,9 @@
{"GetSuperControl", (PyCFunction)CtlObj_GetSuperControl, 1,
"() -> (ControlHandle outParent)"},
{"CountSubControls", (PyCFunction)CtlObj_CountSubControls, 1,
- "() -> (SInt16 outNumChildren)"},
+ "() -> (UInt16 outNumChildren)"},
{"GetIndexedSubControl", (PyCFunction)CtlObj_GetIndexedSubControl, 1,
- "(SInt16 inIndex) -> (ControlHandle outSubControl)"},
+ "(UInt16 inIndex) -> (ControlHandle outSubControl)"},
{"SetControlSupervisor", (PyCFunction)CtlObj_SetControlSupervisor, 1,
"(ControlHandle inBoss) -> None"},
{"GetControlFeatures", (PyCFunction)CtlObj_GetControlFeatures, 1,
@@ -997,7 +1110,13 @@
{"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1,
"() -> None"},
{"TrackControl", (PyCFunction)CtlObj_TrackControl, 1,
- NULL},
+ "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)"},
+ {"HandleControlClick", (PyCFunction)CtlObj_HandleControlClick, 1,
+ "(Point startPoint, Integer modifiers, [,trackercallback]) -> (ControlPartCode _rv)"},
+ {"SetControlData", (PyCFunction)CtlObj_SetControlData, 1,
+ "(stuff) -> None"},
+ {"GetControlData", (PyCFunction)CtlObj_GetControlData, 1,
+ "(part, type) -> String"},
{"GetPopupData", (PyCFunction)CtlObj_GetPopupData, 1,
NULL},
{"SetPopupData", (PyCFunction)CtlObj_SetPopupData, 1,
@@ -1437,7 +1556,7 @@
CtlObj_WhichControl(ControlHandle c)
{
PyObject *it;
-
+
if (c == NULL)
it = Py_None;
else {
@@ -1478,7 +1597,7 @@
short part;
{
PyObject *args, *rv=0;
-
+
args = Py_BuildValue("(O&i)", CtlObj_WhichControl, ctl, (int)part);
if (args && tracker) {
rv = PyEval_CallObject(tracker, args);
@@ -1487,7 +1606,7 @@
if (rv)
Py_DECREF(rv);
else
- PySys_WriteStderr("TrackControl: exception in tracker function\n");
+ PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\n");
}
diff --git a/Mac/Modules/ctl/ctlscan.py b/Mac/Modules/ctl/ctlscan.py
index fd060c0..dc954cf 100644
--- a/Mac/Modules/ctl/ctlscan.py
+++ b/Mac/Modules/ctl/ctlscan.py
@@ -61,6 +61,18 @@
'SetDisclosureTriangleLastValue',
# Unavailable in CW Pro 3 libraries
'SetUpControlTextColor',
+ # Unavailable in Jack's CW Pro 5.1 libraries
+ 'GetControlRegion',
+ 'RemoveControlProperty',
+ 'IsValidControlHandle',
+ 'SetControl32BitMinimum',
+ 'GetControl32BitMinimum',
+ 'SetControl32BitMaximum',
+ 'GetControl32BitMaximum',
+ 'SetControl32BitValue',
+ 'GetControl32BitValue',
+ 'SetControlViewSize',
+ 'GetControlViewSize',
# Generally Bad News
'GetControlProperty',
'SetControlProperty',
diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py
index 79c83a7..70ae285 100644
--- a/Mac/Modules/ctl/ctlsupport.py
+++ b/Mac/Modules/ctl/ctlsupport.py
@@ -218,7 +218,7 @@
"""
f = ManualGenerator("TrackControl", trackcontrol_body);
-#f.docstring = "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)"
+f.docstring = lambda: "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)"
object.add(f)
# CJW - added 5/12/99
@@ -254,8 +254,7 @@
"""
f = ManualGenerator("HandleControlClick", handlecontrolclick_body);
-#f.docstring = "(Point startPoint, Integer modifiers, [,trackercallback])
--> (ControlPartCode _rv)"
+f.docstring = lambda: "(Point startPoint, Integer modifiers, [,trackercallback]) -> (ControlPartCode _rv)"
object.add(f)
# Manual Generator for SetControlData
@@ -285,7 +284,7 @@
"""
f = ManualGenerator("SetControlData", setcontroldata_body);
-#f.docstring = "(stuff) -> None"
+f.docstring = lambda: "(stuff) -> None"
object.add(f)
# Manual Generator for GetControlData
@@ -330,7 +329,7 @@
"""
f = ManualGenerator("GetControlData", getcontroldata_body);
-#f.docstring = "(part, type) -> String"
+f.docstring = lambda: "(part, type) -> String"
object.add(f)
# end CJW