]> git.ipfire.org Git - thirdparty/newt.git/commitdiff
o entry flag setting
authormsw <msw>
Mon, 2 Aug 1999 04:25:14 +0000 (04:25 +0000)
committermsw <msw>
Mon, 2 Aug 1999 04:25:14 +0000 (04:25 +0000)
o  form setcurrent
o  per widget callbacks
o  data argument for widget callbacks

entry.c
snack.py
snackmodule.c

diff --git a/entry.c b/entry.c
index acb683062fc75645aa4f95e3efb16d4773c50db7..9befda44a67ad86329cd330f4355f04f7be48810 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -203,7 +203,8 @@ static struct eventResult entryEvent(newtComponent co,
            /*SLtt_set_cursor_visibility(1);*/
            newtGotorc(0, 0);
            er.result = ER_SWALLOWED;
-           if (co->callback) co->callback(co, co->callbackData);
+           if (co->callback)
+               co->callback(co, co->callbackData);
            break;
 
        case EV_KEYPRESS:
index 8af5557a044a958a09c75fdbc9b42e91251487ec..0ddf6680121975788bb8b69a6ba52d947d598669 100644 (file)
--- a/snack.py
+++ b/snack.py
@@ -11,10 +11,14 @@ import string
 snackArgs = {}
 snackArgs['append'] = -1
 
-class Widget:
+FLAG_DISABLED = _snack.FLAG_DISABLED
+FLAGS_SET = _snack.FLAGS_SET
+FLAGS_RESET = _snack.FLAGS_RESET
+FLAGS_TOGGLE = _snack.FLAGS_TOGGLE
 
-    def setCallback(self, obj):
-       self.w.setCallback(obj)
+class Widget:
+    def setCallback(self, obj, data):
+       self.w.setCallback(obj, data)
 
 class Button(Widget):
 
@@ -122,6 +126,9 @@ class Entry(Widget):
     def set(self, text):
        return self.w.entrySetValue(text)
 
+    def setFlags (self, flag, sense):
+        return self.w.entrySetFlags(flag, sense)
+
     def __init__(self, width, text = "", hidden = 0, scroll = 1, 
                 returnExit = 0):
        self.w = _snack.entry(width, text, hidden, scroll, returnExit)
@@ -170,6 +177,9 @@ class Form:
        self.trans = {}
        self.w = _snack.form()
 
+    def setCurrent (self, co):
+        self.w.setcurrent (co.w)
+
 class Grid:
 
     def place(self, x, y):
@@ -376,6 +386,9 @@ class GridForm(Grid):
        self.screen.popWindow()
        return result
 
+    def setCurrent (self, co):
+        self.form.setCurrent (co)
+
 class CheckboxTree(Widget):
     def append(self, text, item = None, selected = 0):
        self.addItem(text, (snackArgs['append'], ), item, selected)
index b2cecc83f38705b3b6934d338d862149ad64fdb5..2b1def4d81913da026f23cd17bc01e4afde53323 100644 (file)
@@ -11,7 +11,7 @@ typedef struct snackWidget_s snackWidget;
 typedef struct snackGrid_s snackGrid;
 typedef struct snackForm_s snackForm;
 
-struct suspendCallbackStruct {
+struct callbackStruct {
     PyObject * cb, * data;
 };
 
@@ -119,12 +119,14 @@ static PyObject * formAdd(snackForm * s, PyObject * args);
 static PyObject * formDraw(snackForm * s, PyObject * args);
 static PyObject * formRun(snackForm * s, PyObject * args);
 static PyObject * formHotKey(snackForm * s, PyObject * args);
+static PyObject * formSetCurrent(snackForm * form, PyObject * args);
 
 static PyMethodDef formMethods[] = {
     { "add", (PyCFunction) formAdd, METH_VARARGS, NULL },
     { "draw", (PyCFunction) formDraw, METH_VARARGS, NULL },
     { "run", (PyCFunction) formRun, METH_VARARGS, NULL },
     { "addhotkey", (PyCFunction) formHotKey, METH_VARARGS, NULL },
+    { "setcurrent", (PyCFunction) formSetCurrent, METH_VARARGS, NULL },
     { NULL }
 };
 
@@ -151,6 +153,7 @@ struct snackWidget_s {
     char achar;
     void * apointer;
     int anint;
+    struct callbackStruct scs;
 } ;
 
 static PyObject * widgetAddCallback(snackWidget * s, PyObject * args);
@@ -164,8 +167,8 @@ static PyObject * widgetListboxDel(snackWidget * s, PyObject * args);
 static PyObject * widgetListboxGet(snackWidget * s, PyObject * args);
 static PyObject * widgetTextboxText(snackWidget * s, PyObject * args);
 static PyObject * widgetCheckboxTreeAddItem(snackWidget * s, PyObject * args);
-static PyObject * widgetCheckboxTreeGetSel(snackWidget * s,
-                                          PyObject * args);
+static PyObject * widgetCheckboxTreeGetSel(snackWidget * s, PyObject * args);
+static PyObject * widgetEntrySetFlags(snackWidget * s, PyObject * args);
 
 static PyMethodDef widgetMethods[] = {
     { "setCallback", (PyCFunction) widgetAddCallback, METH_VARARGS, NULL },
@@ -182,6 +185,7 @@ static PyMethodDef widgetMethods[] = {
       METH_VARARGS, NULL },
     { "checkboxtreeGetSelection", (PyCFunction) widgetCheckboxTreeGetSel,
       METH_VARARGS, NULL },
+    { "entrySetFlags", (PyCFunction) widgetEntrySetFlags, METH_VARARGS, NULL },
     { NULL }
 };
 
@@ -202,10 +206,6 @@ 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();
@@ -260,13 +260,31 @@ static PyObject * screenSize(PyObject * s, PyObject * args) {
     return Py_BuildValue("(ii)", width, height);
 }
 
-static void suspendCallback(void * data) {
-    struct suspendCallbackStruct * scs = data;
+static void suspendCallbackMarshall(void * data) {
+    struct callbackStruct * scs = data;
+    PyObject * args, * result;
+
+    args = Py_BuildValue("(O)", scs->data);
+    result = PyEval_CallObject(scs->cb, args);
+
+    Py_DECREF(args);
+    Py_XDECREF(result);
+
+    return;
+}
+
+static void callbackMarshall(newtComponent co, void * data) {
+    struct callbackStruct * scs = data;
     PyObject * args, * result;
 
     args = Py_BuildValue("(O)", scs->data);
     result = PyEval_CallObject(scs->cb, args);
 
+    if (!result) {
+       PyErr_Print();
+       PyErr_Clear();
+    }
+    
     Py_DECREF(args);
     Py_XDECREF(result);
 
@@ -274,12 +292,12 @@ static void suspendCallback(void * data) {
 }
 
 static PyObject * setSuspendCallback(PyObject * s, PyObject * args) {
-    static struct suspendCallbackStruct scs;
+    static struct callbackStruct scs;
 
-    if (!PyArg_ParseTuple(args, "OO", &scs.cb, &scs.data))
+    if (!PyArg_ParseTuple(args, "O|O", &scs.cb, &scs.data))
        return NULL;
 
-    newtSetSuspendCallback(suspendCallback, &scs);
+    newtSetSuspendCallback(suspendCallbackMarshall, &scs);
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -670,6 +688,18 @@ static PyObject * formHotKey(snackForm * s, PyObject * args) {
     return Py_None;
 }
 
+static PyObject * formSetCurrent(snackForm * form, PyObject * args) {
+    snackWidget * w;
+
+    if (!PyArg_ParseTuple(args, "O", &w))
+       return NULL;
+
+    newtFormSetCurrent(form->fo, w->co);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
 static PyObject * widgetGetAttr(PyObject * s, char * name) {
     snackWidget * w = (snackWidget *) s;
 
@@ -687,12 +717,10 @@ static PyObject * widgetGetAttr(PyObject * s, char * name) {
 }
 
 static PyObject * widgetAddCallback(snackWidget * s, PyObject * args) {
-    PyObject * object;
-
-    if (!PyArg_ParseTuple(args, "O", &object))
+    if (!PyArg_ParseTuple(args, "O|O", &s->scs.cb, &s->scs.data))
        return NULL;
 
-    newtComponentAddCallback(s->co, callbackEntry, object);
+    newtComponentAddCallback(s->co, callbackMarshall, &s->scs);
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -710,6 +738,18 @@ static PyObject * widgetEntrySetValue(snackWidget * s, PyObject * args) {
     return Py_None;
 }
 
+static PyObject * widgetEntrySetFlags(snackWidget * s, PyObject * args) {
+    int flag, sense;
+
+    if (!PyArg_ParseTuple(args, "ii", &flag, &sense)) return NULL;
+
+    newtEntrySetFlags(s->co, flag, sense);
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
 static PyObject * widgetListboxAdd(snackWidget * s, PyObject * args) {
     char * text;
     
@@ -862,4 +902,9 @@ void init_snack(void) {
     PyDict_SetItemString(d, "KEY_F10", PyInt_FromLong(NEWT_KEY_F10));
     PyDict_SetItemString(d, "KEY_F11", PyInt_FromLong(NEWT_KEY_F11));
     PyDict_SetItemString(d, "KEY_F12", PyInt_FromLong(NEWT_KEY_F12));
+
+    PyDict_SetItemString(d, "FLAG_DISABLED", PyInt_FromLong(NEWT_FLAG_DISABLED));
+    PyDict_SetItemString(d, "FLAGS_SET", PyInt_FromLong(NEWT_FLAGS_SET));
+    PyDict_SetItemString(d, "FLAGS_RESET", PyInt_FromLong(NEWT_FLAGS_RESET));
+    PyDict_SetItemString(d, "FLAGS_TOGGLE", PyInt_FromLong(NEWT_FLAGS_TOGGLE));
 }