Add widget_{set,delete}_{handler,timer}()

This commit is contained in:
Pim van Pelt
2017-11-26 15:55:15 +01:00
parent fd68b1ec03
commit f9c4520b60
2 changed files with 45 additions and 7 deletions

View File

@ -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);

View File

@ -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;
}