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