aboutsummaryrefslogtreecommitdiffstats
path: root/drv_generic_text.c (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2006-07-31[lcd4linux @ 2006-07-31 03:48:09 by reinelt]reinelt1-84/+111
2006-03-29[lcd4linux @ 2006-03-29 08:57:58 by reinelt]reinelt1-3/+6
2006-02-27[lcd4linux @ 2006-02-27 08:12:34 by reinelt]reinelt1-7/+12
2006-02-27[lcd4linux @ 2006-02-27 06:15:55 by reinelt]reinelt1-2/+5
2006-02-25[lcd4linux @ 2006-02-25 13:36:33 by geronet]geronet1-2/+5
2006-01-30[lcd4linux @ 2006-01-30 05:47:34 by reinelt]reinelt1-7/+13
2006-01-03[lcd4linux @ 2006-01-03 06:13:44 by reinelt]reinelt1-11/+26
2005-11-06[lcd4linux @ 2005-11-06 09:54:43 by reinelt]reinelt1-5/+7
2005-08-22[lcd4linux @ 2005-08-22 05:44:43 by reinelt]reinelt1-8/+24
2005-05-08[lcd4linux @ 2005-05-08 04:32:43 by reinelt]reinelt1-615/+662
2005-05-06[lcd4linux @ 2005-05-06 06:37:34 by reinelt]reinelt1-27/+85
2005-02-24[lcd4linux @ 2005-02-24 07:06:45 by reinelt]reinelt1-2/+5
2005-01-18[lcd4linux @ 2005-01-18 06:30:21 by reinelt]reinelt1-3/+6
2005-01-09[lcd4linux @ 2005-01-09 10:53:22 by reinelt]reinelt1-5/+7
2004-11-28[lcd4linux @ 2004-11-28 15:50:24 by reinelt]reinelt1-183/+219
2004-06-26[lcd4linux @ 2004-06-26 12:04:59 by reinelt]reinelt1-2/+6
2004-06-26[lcd4linux @ 2004-06-26 09:27:20 by reinelt]reinelt1-63/+69
2004-06-26[lcd4linux @ 2004-06-26 06:12:14 by reinelt]reinelt1-3/+11
2004-06-20[lcd4linux @ 2004-06-20 10:09:52 by reinelt]reinelt1-9/+13
2004-06-05[lcd4linux @ 2004-06-05 06:41:39 by reinelt]reinelt1-5/+17
2004-06-02[lcd4linux @ 2004-06-02 10:09:22 by reinelt]reinelt1-94/+149
2004-06-01[lcd4linux @ 2004-06-01 06:45:28 by reinelt]reinelt1-2/+51
2004-05-26[lcd4linux @ 2004-05-26 11:37:35 by reinelt]reinelt1-10/+24
2004-03-19[lcd4linux @ 2004-03-19 09:17:46 by reinelt]reinelt1-11/+15
2004-03-03[lcd4linux @ 2004-03-03 03:47:04 by reinelt]reinelt1-2/+10
2004-02-15[lcd4linux @ 2004-02-15 21:43:43 by reinelt]reinelt1-4/+10
2004-02-14[lcd4linux @ 2004-02-14 11:56:11 by reinelt]reinelt1-3/+7
2004-02-07[lcd4linux @ 2004-02-07 13:45:23 by reinelt]reinelt1-5/+12
2004-01-30[lcd4linux @ 2004-01-30 20:57:55 by reinelt]reinelt1-1/+9
2004-01-29[lcd4linux @ 2004-01-29 04:40:02 by reinelt]reinelt1-1/+6
2004-01-23[lcd4linux @ 2004-01-23 07:04:03 by reinelt]reinelt1-27/+49
2004-01-23[lcd4linux @ 2004-01-23 04:53:23 by reinelt]reinelt1-54/+99
2004-01-22[lcd4linux @ 2004-01-22 07:57:45 by reinelt]reinelt1-28/+61
2004-01-20[lcd4linux @ 2004-01-20 14:25:12 by reinelt]reinelt1-3/+6
2004-01-20[lcd4linux @ 2004-01-20 12:45:47 by reinelt]reinelt1-11/+11
2004-01-20[lcd4linux @ 2004-01-20 05:36:59 by reinelt]reinelt1-41/+182
2004-01-20[lcd4linux @ 2004-01-20 04:51:39 by reinelt]reinelt1-0/+471
"cm"> * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ /* * exported functions: * * WIDGET_CLASS Widget_Bar * the bar widget * */ #include "config.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <ctype.h> #include "debug.h" #include "cfg.h" #include "property.h" #include "timer.h" #include "widget.h" #include "widget_bar.h" #ifdef WITH_DMALLOC #include <dmalloc.h> #endif void widget_bar_update(void *Self) { WIDGET *W = (WIDGET *) Self; WIDGET_BAR *Bar = W->data; double val1, val2; double min, max; /* evaluate properties */ property_eval(&Bar->expression1); val1 = P2N(&Bar->expression1); 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 (property_valid(&Bar->expr_min)) { property_eval(&Bar->expr_min); min = P2N(&Bar->expr_min); } else { min = Bar->min; if (val1 < min) { min = val1; } if (val2 < min) { min = val2; } } /* maximum: if expression is empty, do auto-scaling */ if (property_valid(&Bar->expr_max)) { property_eval(&Bar->expr_max); max = P2N(&Bar->expr_max); } else { max = Bar->max; if (val1 > max) { max = val1; } if (val2 > max) { max = val2; } } /* debugging */ if (Bar->min != min || Bar->max != max) { debug("Bar '%s': new scale %G - %G", W->name, min, max); } /* calculate bar values */ Bar->min = min; Bar->max = max; if (max > min) { Bar->val1 = (val1 - min) / (max - min); Bar->val2 = (val2 - min) / (max - min); } else { Bar->val1 = 0.0; Bar->val2 = 0.0; } /* finally, draw it! */ if (W->class->draw) W->class->draw(W); } int widget_bar_init(WIDGET * Self) { char *section; char *c; WIDGET_BAR *Bar; /* prepare config section */ /* strlen("Widget:")=7 */ section = malloc(strlen(Self->name) + 8); strcpy(section, "Widget:"); strcat(section, Self->name); Bar = malloc(sizeof(WIDGET_BAR)); memset(Bar, 0, sizeof(WIDGET_BAR)); /* 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 checks */ if (!property_valid(&Bar->expression1)) { error("Warning: widget %s has no expression", section); } /* bar length, default 1 */ cfg_number(section, "length", 1, 0, -1, &(Bar->length)); /* direction: East (default), West, North, South */ c = cfg_get(section, "direction", "E"); switch (toupper(*c)) { case 'E': Bar->direction = DIR_EAST; break; case 'W': Bar->direction = DIR_WEST; break; case 'N': Bar->direction = DIR_NORTH; break; case 'S': Bar->direction = DIR_SOUTH; break; default: error("widget %s has unknown direction '%s'; known directions: 'E', 'W', 'N', 'S'; using 'E(ast)'", Self->name, c); Bar->direction = DIR_EAST; } free(c); /* style: none (default), hollow */ c = cfg_get(section, "style", "0"); switch (toupper(*c)) { case 'H': Bar->style = STYLE_HOLLOW; break; case '0': Bar->style = 0; break; default: error("widget %s has unknown style '%s'; known styles: '0' or 'H'; using '0'", Self->name, c); Bar->style = 0; } free(c); /* update interval (msec), default 1 sec */ cfg_number(section, "update", 1000, 10, -1, &(Bar->update)); /* get widget special colors */ Bar->color_valid[0] = widget_color(section, Self->name, "barcolor0", &Bar->color[0]); Bar->color_valid[1] = widget_color(section, Self->name, "barcolor1", &Bar->color[1]); free(section); Self->data = Bar; timer_add(widget_bar_update, Self, Bar->update, 0); return 0; } int widget_bar_quit(WIDGET * Self) { if (Self) { if (Self->data) { WIDGET_BAR *Bar = Self->data; property_free(&Bar->expression1); property_free(&Bar->expression2); property_free(&Bar->expr_min); property_free(&Bar->expr_max); free(Self->data); } Self->data = NULL; } return 0; } WIDGET_CLASS Widget_Bar = { .name = "bar", .type = WIDGET_TYPE_RC, .init = widget_bar_init, .draw = NULL, .quit = widget_bar_quit, };