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     // Initialize superclass
00052     widget_init(&e->widget, pos, size, context);
00053 
00054     // Override superclass methods
00055     e->widget.notifier.update = (update_func_ptr)editbool_update;
00056 
00057     // Init instance
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 }