BeRTOS
|
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 }