#include #include #include "eve.h" #include "eve_kbd.h" #include "eve_font.h" #include "screen/window.h" #include "screen/page.h" #include "widget.h" extern const size_t _eve_widget_size[]; extern const eve_widget_create_t _eve_widget_create[]; extern const eve_widget_destroy_t _eve_widget_destroy[]; void eve_widget_init(EVEWidget *widget, uint8_t type, EVERect *g, EVEPage *page, eve_widget_draw_t draw, eve_widget_touch_t touch, eve_kbd_input_handler_t putc) { if (g) widget->g = *g; widget->page = page; widget->draw = draw; widget->touch = touch; widget->putc = putc; widget->type = type; } size_t eve_widget_size(uint8_t type) { return _eve_widget_size[type]; } void eve_widget_set_label(EVEWidget *widget, EVELabel *label) { widget->label = label; } EVEWidget *eve_widget_next(EVEWidget *widget) { char *_w = (char *)widget; return (EVEWidget *)(_w + _eve_widget_size[widget->type]); } int eve_widget_create(EVEWidget *widget, EVEWidgetSpec *spec, EVEPage *page) { int rv; rv = _eve_widget_create[spec->type](widget, spec, page); if (!rv) eve_widget_set_flags(widget, spec->flags); return rv; } void eve_widget_destroy(EVEWidget *widget) { if (_eve_widget_destroy[widget->type]) _eve_widget_destroy[widget->type](widget); } void eve_widget_set_focus(EVEWidget *widget) { EVEPage *page = widget->page; eve_page_set_focus(page, widget); } void eve_widget_set_flags(EVEWidget *widget, uint8_t flags) { widget->flags |= flags; } void eve_widget_clr_flags(EVEWidget *widget, uint8_t flags) { widget->flags &= ~flags; }