]> git.webhop.me Git - lcd4linux.git/commitdiff
dynamic properties for keypad widget
authormichael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Fri, 19 Jan 2007 05:25:31 +0000 (05:25 +0000)
committermichael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Fri, 19 Jan 2007 05:25:31 +0000 (05:25 +0000)
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@746 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

widget_keypad.c
widget_keypad.h

index f19f105bbe348092907d14977d3cdb98abf2c419..fdc32254f8d541a3fd7e1f7e5c729805c90bb8ee 100644 (file)
@@ -40,7 +40,7 @@
 
 #include "debug.h"
 #include "cfg.h"
-#include "evaluator.h"
+#include "property.h"
 #include "timer.h"
 #include "widget.h"
 #include "widget_keypad.h"
 int widget_keypad_draw(WIDGET * Self)
 {
     WIDGET_KEYPAD *keypad = Self->data;
-    RESULT result = { 0, 0, 0, NULL };
 
-    int val;
+    /* evaluate properties */
+    property_eval(&keypad->expression);
 
-    /* evaluate expression */
-    val = 0;
-    if (keypad->tree != NULL) {
-       Eval(keypad->tree, &result);
-       val = R2N(&result);
-       DelResult(&result);
-    }
-    keypad->val = val;
-
-    return val;
+    return P2N(&keypad->expression);
 }
 
 
@@ -85,17 +76,8 @@ int widget_keypad_init(WIDGET * Self)
     keypad = malloc(sizeof(WIDGET_KEYPAD));
     memset(keypad, 0, sizeof(WIDGET_KEYPAD));
 
-    /* get raw expression (we evaluate them ourselves) */
-    keypad->expression = cfg_get_raw(section, "expression", NULL);
-
-    /* sanity check */
-    if (keypad->expression == NULL || *keypad->expression == '\0') {
-       error("widget %s has no expression, using '0.0'", Self->name);
-       keypad->expression = "0";
-    }
-
-    /* compile expression */
-    Compile(keypad->expression, &keypad->tree);
+    /* load properties */
+    property_load(section, "expression", "0", &keypad->expression);
 
     /* state: pressed (default), released */
     c = cfg_get(section, "state", "pressed");
@@ -145,8 +127,8 @@ int widget_keypad_quit(WIDGET * Self)
 {
     if (Self) {
        if (Self->data) {
-           WIDGET_KEYPAD *KEYPAD = Self->data;
-           DelTree(KEYPAD->tree);
+           WIDGET_KEYPAD *keypad = Self->data;
+           property_free(&keypad->expression);
            free(Self->data);
        }
        Self->data = NULL;
index 89bc78c50d43ccacfa603fbb9e50d71c31348640..117ef1d1dadcad954a5420ba058d747a9fd44c3b 100644 (file)
 #ifndef _WIDGET_KEYPAD_H_
 #define _WIDGET_KEYPAD_H_
 
+
+#include "property.h"
+
+
 typedef enum {
     WIDGET_KEY_UP = 1,
     WIDGET_KEY_DOWN = 2,
@@ -39,10 +43,9 @@ typedef enum {
     WIDGET_KEY_RELEASED = 128
 } KEYPADKEY;
 
+
 typedef struct WIDGET_KEYPAD {
-    char *expression;          /* expression that delivers the value */
-    void *tree;                        /* pre-compiled expression that delivers the value */
-    int val;                   /* current value of the expression */
+    PROPERTY expression;       /* expression that delivers the value */
     KEYPADKEY key;             /* which key */
 } WIDGET_KEYPAD;