From: ewt Date: Mon, 3 Nov 1997 15:42:34 +0000 (+0000) Subject: began adding callbacks (unsuccessfully) X-Git-Tag: r0-20~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a703ca812fcc1e0fa3bfae0a8ee1aa4052cd0e1;p=thirdparty%2Fnewt.git began adding callbacks (unsuccessfully) --- diff --git a/popcorn.py b/popcorn.py index 88e89c3..6827142 100755 --- a/popcorn.py +++ b/popcorn.py @@ -15,6 +15,11 @@ cb = Checkbox("checkbox") r1 = SingleRadioButton("Radio 1", None, 1) r2 = SingleRadioButton("Radio 2", r1) +def something(): + print hello + +e.setCallback(lambda: sys.exit(1)) + screen = SnackScreen() sg = Grid(2, 3) diff --git a/snack.py b/snack.py index eddb811..0468328 100644 --- a/snack.py +++ b/snack.py @@ -7,7 +7,9 @@ import _snack class Widget: - pass + + def setCallback(self, obj): + self.w.setCallback(obj) class Button(Widget): diff --git a/snackmodule.c b/snackmodule.c index d2eead7..ace7f40 100644 --- a/snackmodule.c +++ b/snackmodule.c @@ -140,6 +140,7 @@ struct snackWidget_s { int anint; } ; +static PyObject * widgetAddCallback(snackWidget * s, PyObject * args); static PyObject * widgetGetAttr(PyObject * s, char * name); static PyObject * widgetEntrySetValue(snackWidget * s, PyObject * args); static PyObject * widgetListboxSetW(snackWidget * s, PyObject * args); @@ -149,6 +150,7 @@ static PyObject * widgetListboxDel(snackWidget * s, PyObject * args); static PyObject * widgetListboxGet(snackWidget * s, PyObject * args); static PyMethodDef widgetMethods[] = { + { "setCallback", (PyCFunction) widgetAddCallback, METH_VARARGS, NULL }, { "entrySetValue", (PyCFunction) widgetEntrySetValue, METH_VARARGS, NULL }, { "listboxAddItem", (PyCFunction) widgetListboxAdd, METH_VARARGS, NULL }, { "listboxInsertItem", (PyCFunction) widgetListboxIns, METH_VARARGS, NULL }, @@ -175,6 +177,10 @@ static PyTypeObject snackWidgetType = { 0, /* tp_as_mapping */ }; +static void callbackEntry(newtComponent co, void * arg) { + PyEval_CallObject(arg, arg); +} + static PyObject * initScreen(PyObject * s, PyObject * args) { newtInit(); newtCls(); @@ -581,6 +587,18 @@ static PyObject * widgetGetAttr(PyObject * s, char * name) { return Py_FindMethod(widgetMethods, s, name); } +static PyObject * widgetAddCallback(snackWidget * s, PyObject * args) { + PyObject * object; + + if (!PyArg_ParseTuple(args, "O", &object)) + return NULL; + + newtComponentAddCallback(s->co, callbackEntry, object); + + Py_INCREF(Py_None); + return Py_None; +} + static PyObject * widgetEntrySetValue(snackWidget * s, PyObject * args) { char * val;