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