From 4c704131ca47f185870c48326539d6b8a377db34 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Fri, 19 Jun 1998 13:35:14 +0000 Subject: Added {Get,Set}PopupData calls to get at the data for popup menu controls. --- Mac/Modules/ctl/Ctlmodule.c | 48 +++++++++++++++++++++++++++++++++++++++++++ Mac/Modules/ctl/ctlsupport.py | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c index bfa88a1..6b43b68 100644 --- a/Mac/Modules/ctl/Ctlmodule.c +++ b/Mac/Modules/ctl/Ctlmodule.c @@ -866,6 +866,50 @@ static PyObject *CtlObj_TrackControl(_self, _args) } +static PyObject *CtlObj_GetPopupData(_self, _args) + ControlObject *_self; + PyObject *_args; +{ + PyObject *_res = NULL; + + 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; + +} + +static PyObject *CtlObj_SetPopupData(_self, _args) + ControlObject *_self; + PyObject *_args; +{ + PyObject *_res = NULL; + + 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; + +} + static PyMethodDef CtlObj_methods[] = { {"HiliteControl", (PyCFunction)CtlObj_HiliteControl, 1, "(ControlPartCode hiliteState) -> None"}, @@ -953,6 +997,10 @@ static PyMethodDef CtlObj_methods[] = { "() -> None"}, {"TrackControl", (PyCFunction)CtlObj_TrackControl, 1, NULL}, + {"GetPopupData", (PyCFunction)CtlObj_GetPopupData, 1, + NULL}, + {"SetPopupData", (PyCFunction)CtlObj_SetPopupData, 1, + NULL}, {NULL, NULL, 0} }; diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py index 75e7aa7..e01e871 100644 --- a/Mac/Modules/ctl/ctlsupport.py +++ b/Mac/Modules/ctl/ctlsupport.py @@ -204,6 +204,43 @@ f = ManualGenerator("TrackControl", trackcontrol_body); #f.docstring = "(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)" object.add(f) +# 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; +""" +f = ManualGenerator("GetPopupData", getpopupdata_body) +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; +""" +f = ManualGenerator("SetPopupData", setpopupdata_body) +object.add(f) + # generate output (open the output file as late as possible) SetOutputFileName(OUTPUTFILE) -- cgit v0.12