From f9c4520b603e2b1103f048724a1e057bf3ff1310 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 26 Nov 2017 15:55:15 +0100 Subject: [PATCH] Add widget_{set,delete}_{handler,timer}() --- include/widget.h | 4 ++++ src/widget.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/include/widget.h b/include/widget.h index 5637b9f..bb70f80 100644 --- a/include/widget.h +++ b/include/widget.h @@ -39,6 +39,10 @@ void widget_remove(struct widget_t *widget); */ struct widget_t *widget_create(char *name, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint32_t timer_msec, widget_event_fn handler, void *user_data); +void widget_set_handler(struct widget_t *w, widget_event_fn handler, void *user_data); +void widget_delete_handler(struct widget_t *w); +void widget_set_timer(struct widget_t *w, uint32_t timer_msec); +void widget_delete_timer(struct widget_t *w); struct widget_t *widget_create_from_json(const char *json); struct widget_t *widget_create_from_file(const char *fn); void widget_destroy(struct widget_t **widget); diff --git a/src/widget.c b/src/widget.c index 5d6dc02..4305b1b 100644 --- a/src/widget.c +++ b/src/widget.c @@ -17,7 +17,7 @@ void widget_destroy(struct widget_t **widget) { if ((*widget)->handler) (*widget)->handler(EV_WIDGET_DESTROY, *widget, NULL); - if ((*widget)->timer_msec) + if ((*widget)->_timer_id) mgos_clear_timer((*widget)->_timer_id); if ((*widget)->user_data) free((*widget)->user_data); @@ -37,12 +37,8 @@ struct widget_t *widget_create(char *name, uint16_t x, uint16_t y, uint16_t w, u widget->y=y; widget->w=w; widget->h=h; - widget->timer_msec=timer_msec; - widget->handler=handler; - widget->user_data=user_data; - if (timer_msec > 0) - widget->_timer_id = mgos_set_timer(timer_msec, MGOS_TIMER_REPEAT, widget_event_timer, widget); - + widget_set_handler(widget, handler, user_data); + widget_set_timer(widget, timer_msec); if (handler) handler(EV_WIDGET_CREATE, widget, NULL); @@ -80,3 +76,41 @@ struct widget_t *widget_create_from_file(const char *fn) { free(json); return widget; } + +void widget_set_handler(struct widget_t *w, widget_event_fn handler, void *user_data) { + if (!w) + return; + w->handler = handler; + w->user_data = user_data; + return; +} + +void widget_delete_handler(struct widget_t *w) { + if (!w) + return; + w->handler = NULL; + return; +} + +void widget_set_timer(struct widget_t *w, uint32_t timer_msec) { + if (!w) + return; + if (w->_timer_id) + mgos_clear_timer(w->_timer_id); + + w->timer_msec=timer_msec; + if (timer_msec == 0) + w->_timer_id = 0; + else + w->_timer_id = mgos_set_timer(timer_msec, MGOS_TIMER_REPEAT, widget_event_timer, w); + + return; +} + +void widget_delete_timer(struct widget_t *w) { + if (!w) + return; + + widget_set_timer(w, 0); + return; +}