Add widget_{set,delete}_{handler,timer}()
This commit is contained in:
@ -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);
|
||||
|
48
src/widget.c
48
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user