Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1f9249c

Browse files
committed
Added {Get,Set}ControlDataHandle methods. These are {Get,Set}ControlData for
keys that expect a Handle, and have a ResObj as parameter.
1 parent 54b9ce1 commit 1f9249c

2 files changed

Lines changed: 148 additions & 1 deletion

File tree

Mac/Modules/ctl/Ctlmodule.c

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,79 @@ static PyObject *CtlObj_GetControlData(_self, _args)
11771177

11781178
}
11791179

1180+
static PyObject *CtlObj_SetControlDataHandle(_self, _args)
1181+
ControlObject *_self;
1182+
PyObject *_args;
1183+
{
1184+
PyObject *_res = NULL;
1185+
1186+
OSErr _err;
1187+
ControlPartCode inPart;
1188+
ResType inTagName;
1189+
Handle buffer;
1190+
1191+
if (!PyArg_ParseTuple(_args, "hO&O&",
1192+
&inPart,
1193+
PyMac_GetOSType, &inTagName,
1194+
OptResObj_Convert, buffer))
1195+
return NULL;
1196+
1197+
_err = SetControlData(_self->ob_itself,
1198+
inPart,
1199+
inTagName,
1200+
sizeof(buffer),
1201+
(Ptr)buffer);
1202+
1203+
if (_err != noErr)
1204+
return PyMac_Error(_err);
1205+
_res = Py_None;
1206+
return _res;
1207+
1208+
}
1209+
1210+
static PyObject *CtlObj_GetControlDataHandle(_self, _args)
1211+
ControlObject *_self;
1212+
PyObject *_args;
1213+
{
1214+
PyObject *_res = NULL;
1215+
1216+
OSErr _err;
1217+
ControlPartCode inPart;
1218+
ResType inTagName;
1219+
Size bufferSize;
1220+
Handle hdl;
1221+
1222+
if (!PyArg_ParseTuple(_args, "hO&",
1223+
&inPart,
1224+
PyMac_GetOSType, &inTagName))
1225+
return NULL;
1226+
1227+
/* Check it is handle-sized */
1228+
_err = GetControlDataSize(_self->ob_itself,
1229+
inPart,
1230+
inTagName,
1231+
&bufferSize);
1232+
if (_err != noErr)
1233+
return PyMac_Error(_err);
1234+
if (bufferSize != sizeof(Handle)) {
1235+
PyErr_SetString(Ctl_Error, "GetControlDataSize() != sizeof(Handle)");
1236+
return NULL;
1237+
}
1238+
1239+
_err = GetControlData(_self->ob_itself,
1240+
inPart,
1241+
inTagName,
1242+
sizeof(Handle),
1243+
(Ptr)&hdl,
1244+
&bufferSize);
1245+
1246+
if (_err != noErr) {
1247+
return PyMac_Error(_err);
1248+
}
1249+
return Py_BuildValue("O&", OptResObj_New, hdl);
1250+
1251+
}
1252+
11801253
static PyObject *CtlObj_GetPopupData(_self, _args)
11811254
ControlObject *_self;
11821255
PyObject *_args;
@@ -1338,6 +1411,10 @@ static PyMethodDef CtlObj_methods[] = {
13381411
"(stuff) -> None"},
13391412
{"GetControlData", (PyCFunction)CtlObj_GetControlData, 1,
13401413
"(part, type) -> String"},
1414+
{"SetControlDataHandle", (PyCFunction)CtlObj_SetControlDataHandle, 1,
1415+
"(ResObj) -> None"},
1416+
{"GetControlDataHandle", (PyCFunction)CtlObj_GetControlDataHandle, 1,
1417+
"(part, type) -> ResObj"},
13411418
{"GetPopupData", (PyCFunction)CtlObj_GetPopupData, 1,
13421419
NULL},
13431420
{"SetPopupData", (PyCFunction)CtlObj_SetPopupData, 1,

Mac/Modules/ctl/ctlsupport.py

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,77 @@ def outputCleanupStructMembers(self):
331331
f = ManualGenerator("GetControlData", getcontroldata_body);
332332
f.docstring = lambda: "(part, type) -> String"
333333
object.add(f)
334-
# end CJW
334+
335+
# Manual Generator for SetControlDataHandle
336+
setcontroldatahandle_body = """
337+
OSErr _err;
338+
ControlPartCode inPart;
339+
ResType inTagName;
340+
Handle buffer;
341+
342+
if (!PyArg_ParseTuple(_args, "hO&O&",
343+
&inPart,
344+
PyMac_GetOSType, &inTagName,
345+
OptResObj_Convert, buffer))
346+
return NULL;
347+
348+
_err = SetControlData(_self->ob_itself,
349+
inPart,
350+
inTagName,
351+
sizeof(buffer),
352+
(Ptr)buffer);
353+
354+
if (_err != noErr)
355+
return PyMac_Error(_err);
356+
_res = Py_None;
357+
return _res;
358+
"""
359+
360+
f = ManualGenerator("SetControlDataHandle", setcontroldatahandle_body);
361+
f.docstring = lambda: "(ResObj) -> None"
362+
object.add(f)
363+
364+
# Manual Generator for GetControlDataHandle
365+
getcontroldatahandle_body = """
366+
OSErr _err;
367+
ControlPartCode inPart;
368+
ResType inTagName;
369+
Size bufferSize;
370+
Handle hdl;
371+
372+
if (!PyArg_ParseTuple(_args, "hO&",
373+
&inPart,
374+
PyMac_GetOSType, &inTagName))
375+
return NULL;
376+
377+
/* Check it is handle-sized */
378+
_err = GetControlDataSize(_self->ob_itself,
379+
inPart,
380+
inTagName,
381+
&bufferSize);
382+
if (_err != noErr)
383+
return PyMac_Error(_err);
384+
if (bufferSize != sizeof(Handle)) {
385+
PyErr_SetString(Ctl_Error, "GetControlDataSize() != sizeof(Handle)");
386+
return NULL;
387+
}
388+
389+
_err = GetControlData(_self->ob_itself,
390+
inPart,
391+
inTagName,
392+
sizeof(Handle),
393+
(Ptr)&hdl,
394+
&bufferSize);
395+
396+
if (_err != noErr) {
397+
return PyMac_Error(_err);
398+
}
399+
return Py_BuildValue("O&", OptResObj_New, hdl);
400+
"""
401+
402+
f = ManualGenerator("GetControlDataHandle", getcontroldatahandle_body);
403+
f.docstring = lambda: "(part, type) -> ResObj"
404+
object.add(f)
335405

336406
# And manual generators to get/set popup menu information
337407
getpopupdata_body = """

0 commit comments

Comments
 (0)