diff options
author | michael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2007-01-17 06:17:44 +0000 |
---|---|---|
committer | michael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2007-01-17 06:17:44 +0000 |
commit | 12b56cb623711a3a8e1772b25c54be7a01ec915d (patch) | |
tree | b810345595c461b788df76ca8c56f782b9bc55ab | |
parent | 4047264052093777b4f9dd7cd6fdc09aba812383 (diff) | |
download | lcd4linux-12b56cb623711a3a8e1772b25c54be7a01ec915d.tar.gz |
dynamic properties for GPO's
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@743 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
-rw-r--r-- | widget_gpo.c | 48 | ||||
-rw-r--r-- | 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; |