editbool.c
Go to the documentation of this file.00001
00040 #include "editbool.h"
00041 #include <dt/dtag.h>
00042
00043 #include <drv/lcd_text.h>
00044
00048 void editbool_init(DEditBool *e, dpos_t pos, dpos_t size, dcontext_t *context, bool *value, const char *true_string, const char *false_string)
00049 {
00050
00051 widget_init(&e->widget, pos, size, context);
00052
00053
00054 e->widget.notifier.update = (update_func_ptr)editbool_update;
00055
00056
00057 e->value = value;
00058 e->true_string = true_string;
00059 e->false_string = false_string;
00060 e->draw = editbool_draw;
00061 }
00062
00066 void editbool_update(DEditBool *e, dtag_t tag, dval_t _val)
00067 {
00068 bool changed = false;
00069
00070 switch (tag)
00071 {
00072 case TAG_SETVALUE:
00073 *e->value = (bool)_val;
00074 changed = true;
00075 break;
00076
00077 case TAG_TOGGLE:
00078 *e->value = !*e->value;
00079 changed = true;
00080 break;
00081 default:
00082 break;
00083 }
00084
00085 if (changed)
00086 {
00087 e->draw(e);
00088 dnotify_targets(&e->widget.notifier, TAG_SETVALUE, (dval_t)*e->value);
00089 }
00090 }
00091
00095 void editbool_draw(DEditBool *e)
00096 {
00097 lcd_printf((Layer *)e->widget.context, (lcdpos_t)e->widget.pos, LCD_NORMAL, "%*s", (int)e->widget.size , *e->value? e->true_string: e->false_string);
00098 }