From 12b56cb623711a3a8e1772b25c54be7a01ec915d Mon Sep 17 00:00:00 2001
From: michael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Date: Wed, 17 Jan 2007 06:17:44 +0000
Subject: dynamic properties for GPO's

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@743 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
---
 widget_gpo.c | 48 +++++++++++++++++++-----------------------------
 widget_gpo.h | 11 +++++++----
 2 files changed, 26 insertions(+), 33 deletions(-)

diff --git a/widget_gpo.c b/widget_gpo.c
index 08e15f6..74b8f61 100644
--- a/widget_gpo.c
+++ b/widget_gpo.c
@@ -4,7 +4,7 @@
  * GPO widget handling
  *
  * Copyright (C) 2005 Michael Reinelt <reinelt@eunet.at>
- * Copyright (C) 2005 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ * Copyright (C) 2005, 2006, 2007 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@
 
 #include "debug.h"
 #include "cfg.h"
-#include "evaluator.h"
+#include "property.h"
 #include "timer.h"
 #include "widget.h"
 #include "widget_gpo.h"
@@ -54,24 +54,23 @@ void widget_gpo_update(void *Self)
 {
     WIDGET *W = (WIDGET *) Self;
     WIDGET_GPO *GPO = W->data;
-    RESULT result = { 0, 0, 0, NULL };
 
-    int val;
+    /* evaluate properties */
+    property_eval(&GPO->expression);
+    property_eval(&GPO->update);
 
-    /* evaluate expression */
-    val = 0;
-    if (GPO->tree != NULL) {
-	Eval(GPO->tree, &result);
-	val = R2N(&result);
-	DelResult(&result);
-    }
     GPO->num = W->row;
-    GPO->val = val;
+    GPO->val = P2N(&GPO->expression);
 
     /* finally, draw it! */
     if (W->class->draw)
 	W->class->draw(W);
 
+    /* add a new one-shot timer */
+    if (P2N(&GPO->update) > 0) {
+	timer_add(widget_gpo_update, Self, P2N(&GPO->update), 1);
+    }
+
 }
 
 
@@ -89,25 +88,15 @@ int widget_gpo_init(WIDGET * Self)
     GPO = malloc(sizeof(WIDGET_GPO));
     memset(GPO, 0, sizeof(WIDGET_GPO));
 
-    /* get raw expression (we evaluate them ourselves) */
-    GPO->expression = cfg_get_raw(section, "expression", NULL);
-
-    /* sanity check */
-    if (GPO->expression == NULL || *GPO->expression == '\0') {
-	error("widget %s has no expression, using '0.0'", Self->name);
-	GPO->expression = "0";
-    }
-
-    /* compile expression */
-    Compile(GPO->expression, &GPO->tree);
-
-    /* update interval (msec), default 1 sec */
-    cfg_number(section, "update", 1000, 10, -1, &(GPO->update));
+    /* load properties */
+    property_load(section, "expression", "0", &GPO->expression);
+    property_load(section, "update", "1000", &GPO->update);
 
     free(section);
     Self->data = GPO;
 
-    timer_add(widget_gpo_update, Self, GPO->update, 0);
+    /* fire it the first time */
+    widget_gpo_update(Self);
 
     return 0;
 }
@@ -118,10 +107,11 @@ int widget_gpo_quit(WIDGET * Self)
     if (Self) {
 	if (Self->data) {
 	    WIDGET_GPO *GPO = Self->data;
-	    DelTree(GPO->tree);
+	    property_free(&GPO->expression);
+	    property_free(&GPO->update);
 	    free(Self->data);
+	    Self->data = NULL;
 	}
-	Self->data = NULL;
     }
     return 0;
 }
diff --git a/widget_gpo.h b/widget_gpo.h
index 4e4b128..d263c47 100644
--- a/widget_gpo.h
+++ b/widget_gpo.h
@@ -4,7 +4,7 @@
  * GPO widget handling
  *
  * Copyright (C) 2005 Michael Reinelt <reinelt@eunet.at>
- * Copyright (C) 2005 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ * Copyright (C) 2005, 2006, 2007 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
  *
  * This file is part of LCD4Linux.
  *
@@ -28,10 +28,13 @@
 #ifndef _WIDGET_GPO_H_
 #define _WIDGET_GPO_H_
 
+
+#include "property.h"
+
+
 typedef struct WIDGET_GPO {
-    char *expression;		/* expression that delivers the value */
-    void *tree;			/* pre-compiled expression that delivers the value */
-    int update;			/* update interval (msec) */
+    PROPERTY expression;	/* main GPO expression */
+    PROPERTY update;		/* update interval (msec) */
     int num;			/* GPO number */
     int val;			/* GPO value */
 } WIDGET_GPO;
-- 
cgit v1.2.3