diff options
Diffstat (limited to '')
-rw-r--r-- | widget_bar.c | 152 |
1 files changed, 29 insertions, 123 deletions
diff --git a/widget_bar.c b/widget_bar.c index a03f74d..cd2fd1d 100644 --- a/widget_bar.c +++ b/widget_bar.c @@ -1,4 +1,5 @@ -/* $Id: widget_bar.c,v 1.19 2006/08/09 17:25:34 harbaum Exp $ +/* $Id: widget_bar.c 753 2007-01-21 06:19:17Z michael $ + * $URL: https://ssl.bulix.org/svn/lcd4linux/branches/0.10.1/widget_bar.c $ * * bar widget handling * @@ -19,85 +20,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * - * $Log: widget_bar.c,v $ - * Revision 1.19 2006/08/09 17:25:34 harbaum - * Better bar color support and new bold font - * - * Revision 1.18 2006/01/23 06:17:18 reinelt - * timer widget added - * - * Revision 1.17 2005/12/18 16:18:36 reinelt - * GPO's added again - * - * Revision 1.16 2005/05/08 04:32:45 reinelt - * CodingStyle added and applied - * - * Revision 1.15 2005/05/06 06:37:34 reinelt - * hollow bar patch from geronet - * - * Revision 1.14 2005/01/18 06:30:24 reinelt - * added (C) to all copyright statements - * - * Revision 1.13 2004/11/29 04:42:07 reinelt - * removed the 99999 msec limit on widget update time (thanks to Petri Damsten) - * - * Revision 1.12 2004/06/26 12:05:00 reinelt - * - * uh-oh... the last CVS log message messed up things a lot... - * - * Revision 1.11 2004/06/26 09:27:21 reinelt - * - * added '-W' to CFLAGS - * changed all C++ comments to C ones - * cleaned up a lot of signed/unsigned mistakes - * - * Revision 1.10 2004/03/11 06:39:59 reinelt - * big patch from Martin: - * - reuse filehandles - * - memory leaks fixed - * - earlier busy-flag checking with HD44780 - * - reuse memory for strings in RESULT and hash - * - netdev_fast to wavid time-consuming regex - * - * Revision 1.9 2004/03/06 20:31:16 reinelt - * Complete rewrite of the evaluator to get rid of the code - * from mark Morley (because of license issues). - * The new Evaluator does a pre-compile of expressions, and - * stores them in trees. Therefore it should be reasonable faster... - * - * Revision 1.8 2004/03/03 03:47:04 reinelt - * big patch from Martin Hejl: - * - use qprintf() where appropriate - * - save CPU cycles on gettimeofday() - * - add quit() functions to free allocated memory - * - fixed lots of memory leaks - * - * Revision 1.7 2004/01/30 20:57:56 reinelt - * HD44780 patch from Martin Hejl - * dmalloc integrated - * - * Revision 1.6 2004/01/29 04:40:03 reinelt - * every .c file includes "config.h" now - * - * Revision 1.5 2004/01/23 04:54:00 reinelt - * icon widget added (not finished yet!) - * - * Revision 1.4 2004/01/20 14:25:12 reinelt - * some reorganization - * moved drv_generic to drv_generic_serial - * moved port locking stuff to drv_generic_serial - * - * Revision 1.3 2004/01/20 12:45:47 reinelt - * "Default screen" working with MatrixOrbital - * - * Revision 1.2 2004/01/20 04:51:39 reinelt - * moved generic stuff from drv_MatrixOrbital to drv_generic - * implemented new-stylish bars which are nearly finished - * - * Revision 1.1 2004/01/18 21:25:16 reinelt - * Framework for bar widget opened - * */ /* @@ -118,7 +40,7 @@ #include "debug.h" #include "cfg.h" -#include "evaluator.h" +#include "property.h" #include "timer.h" #include "widget.h" #include "widget_bar.h" @@ -132,31 +54,25 @@ void widget_bar_update(void *Self) { WIDGET *W = (WIDGET *) Self; WIDGET_BAR *Bar = W->data; - RESULT result = { 0, 0, 0, NULL }; double val1, val2; double min, max; - /* evaluate expressions */ - val1 = 0.0; - if (Bar->tree1 != NULL) { - Eval(Bar->tree1, &result); - val1 = R2N(&result); - DelResult(&result); - } + /* evaluate properties */ + property_eval(&Bar->expression1); + val1 = P2N(&Bar->expression1); - val2 = val1; - if (Bar->tree2 != NULL) { - Eval(Bar->tree2, &result); - val2 = R2N(&result); - DelResult(&result); + if (property_valid(&Bar->expression2)) { + property_eval(&Bar->expression2); + val2 = P2N(&Bar->expression2); + } else { + val2 = val1; } /* minimum: if expression is empty, do auto-scaling */ - if (Bar->tree_min != NULL) { - Eval(Bar->tree_min, &result); - min = R2N(&result); - DelResult(&result); + if (property_valid(&Bar->expr_min)) { + property_eval(&Bar->expr_min); + min = P2N(&Bar->expr_min); } else { min = Bar->min; if (val1 < min) @@ -166,10 +82,9 @@ void widget_bar_update(void *Self) } /* maximum: if expression is empty, do auto-scaling */ - if (Bar->tree_max != NULL) { - Eval(Bar->tree_max, &result); - max = R2N(&result); - DelResult(&result); + if (property_valid(&Bar->expr_max)) { + property_eval(&Bar->expr_max); + max = P2N(&Bar->expr_min); } else { max = Bar->max; if (val1 > max) @@ -211,26 +126,17 @@ int widget_bar_init(WIDGET * Self) Bar = malloc(sizeof(WIDGET_BAR)); memset(Bar, 0, sizeof(WIDGET_BAR)); - /* get raw expressions (we evaluate them ourselves) */ - Bar->expression1 = cfg_get_raw(section, "expression", NULL); - Bar->expression2 = cfg_get_raw(section, "expression2", NULL); + /* load properties */ + property_load(section, "expression", NULL, &Bar->expression1); + property_load(section, "expression2", NULL, &Bar->expression2); + property_load(section, "min", NULL, &Bar->expr_min); + property_load(section, "max", NULL, &Bar->expr_max); - /* sanity check */ - if (Bar->expression1 == NULL || *Bar->expression1 == '\0') { - error("widget %s has no expression, using '0.0'", Self->name); - Bar->expression1 = "0"; + /* sanity checks */ + if (!property_valid(&Bar->expression1)) { + error("Warning: widget %s has no expression", section); } - /* minimum and maximum value */ - Bar->expr_min = cfg_get_raw(section, "min", NULL); - Bar->expr_max = cfg_get_raw(section, "max", NULL); - - /* compile all expressions */ - Compile(Bar->expression1, &Bar->tree1); - Compile(Bar->expression2, &Bar->tree2); - Compile(Bar->expr_min, &Bar->tree_min); - Compile(Bar->expr_max, &Bar->tree_max); - /* bar length, default 1 */ cfg_number(section, "length", 1, 0, -1, &(Bar->length)); @@ -291,10 +197,10 @@ int widget_bar_quit(WIDGET * Self) if (Self) { if (Self->data) { WIDGET_BAR *Bar = Self->data; - DelTree(Bar->tree1); - DelTree(Bar->tree2); - DelTree(Bar->tree_min); - DelTree(Bar->tree_max); + property_free(&Bar->expression1); + property_free(&Bar->expression2); + property_free(&Bar->expr_min); + property_free(&Bar->expr_max); free(Self->data); } Self->data = NULL; |