dynamic properties for GPO's

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@743 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
This commit is contained in:
michael
2007-01-17 06:17:44 +00:00
parent 4047264052
commit 12b56cb623
2 changed files with 26 additions and 33 deletions
+19 -29
View File
@@ -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;
}
+7 -4
View File
@@ -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;