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);
|
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_json(const char *json);
|
||||||
struct widget_t *widget_create_from_file(const char *fn);
|
struct widget_t *widget_create_from_file(const char *fn);
|
||||||
void widget_destroy(struct widget_t **widget);
|
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)
|
if ((*widget)->handler)
|
||||||
(*widget)->handler(EV_WIDGET_DESTROY, *widget, NULL);
|
(*widget)->handler(EV_WIDGET_DESTROY, *widget, NULL);
|
||||||
|
|
||||||
if ((*widget)->timer_msec)
|
if ((*widget)->_timer_id)
|
||||||
mgos_clear_timer((*widget)->_timer_id);
|
mgos_clear_timer((*widget)->_timer_id);
|
||||||
if ((*widget)->user_data)
|
if ((*widget)->user_data)
|
||||||
free((*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->y=y;
|
||||||
widget->w=w;
|
widget->w=w;
|
||||||
widget->h=h;
|
widget->h=h;
|
||||||
widget->timer_msec=timer_msec;
|
widget_set_handler(widget, handler, user_data);
|
||||||
widget->handler=handler;
|
widget_set_timer(widget, timer_msec);
|
||||||
widget->user_data=user_data;
|
|
||||||
if (timer_msec > 0)
|
|
||||||
widget->_timer_id = mgos_set_timer(timer_msec, MGOS_TIMER_REPEAT, widget_event_timer, widget);
|
|
||||||
|
|
||||||
if (handler)
|
if (handler)
|
||||||
handler(EV_WIDGET_CREATE, widget, NULL);
|
handler(EV_WIDGET_CREATE, widget, NULL);
|
||||||
|
|
||||||
@ -80,3 +76,41 @@ struct widget_t *widget_create_from_file(const char *fn) {
|
|||||||
free(json);
|
free(json);
|
||||||
return widget;
|
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