Plumb default_widget_handler and default_user_data for widgets read from JSON/File

This commit is contained in:
Pim van Pelt
2017-11-26 19:06:44 +01:00
parent fda8b332db
commit e826324244
7 changed files with 94 additions and 8 deletions

View File

@ -50,11 +50,12 @@ void tft_demo(void)
mgos_ili9341_jpg_image(CENTER, CENTER, 1, "mongoose-os.jpg", NULL, 0);
// mgos_ili9341_jpg_image(200, 150, 2, "flower.jpg", NULL, 0);
screen = screen_create_from_file("/screen_main.json");
screen = screen_create_from_file("/screen_main.json", widget_default_ev, NULL);
if (!screen) {
LOG(LL_ERROR, ("Could not load screen"));
return;
}
w = widget_create("name", 0, 0, 198, 20);
widget_set_handler(w, widget_name_ev, NULL);
screen_widget_add(screen, w);

View File

@ -17,7 +17,7 @@ struct screen_t *screen_create(char *name, uint16_t x, uint16_t y, uint16_t w, u
return screen;
}
struct screen_t *screen_create_from_file(char *fn) {
struct screen_t *screen_create_from_file(char *fn, widget_event_fn handler, void *user_data) {
char *json;
struct screen_t *screen = NULL;
@ -27,12 +27,12 @@ struct screen_t *screen_create_from_file(char *fn) {
return NULL;
}
screen = screen_create_from_json(json);
screen = screen_create_from_json(json, handler, user_data);
free (json);
return screen;
}
struct screen_t *screen_create_from_json(char *json) {
struct screen_t *screen_create_from_json(char *json, widget_event_fn handler, void *user_data) {
void *h = NULL;
// struct json_token key;
struct json_token val;
@ -47,6 +47,9 @@ struct screen_t *screen_create_from_json(char *json) {
screen=NULL; goto exit;
}
screen = screen_create(screen_name, screen_x, screen_y, screen_w, screen_h);
if (!screen)
return NULL;
screen_widget_set_handler(screen, handler, user_data);
/*
// Traverse Object
@ -61,6 +64,7 @@ struct screen_t *screen_create_from_json(char *json) {
// printf("[%d]: [%.*s]\n", idx, val.len, val.ptr);
if (val.len>0 && val.ptr) {
widget = widget_create_from_json(val.ptr);
widget_set_handler(widget, screen->default_widget_handler, screen->default_user_data);
if (!screen_widget_add(screen, widget)) {
LOG(LL_ERROR, ("Could not add widget to screen"));
}
@ -99,6 +103,7 @@ struct widget_t *screen_widget_add_from_file(struct screen_t *s, char *fn) {
w = widget_create_from_file(fn);
if (!w)
return NULL;
widget_set_handler(w, s->default_widget_handler, s->default_user_data);
screen_widget_add(s, w);
return w;
}
@ -145,3 +150,11 @@ struct widget_t *screen_widget_find_by_xy(struct screen_t *s, uint16_t x, uint16
}
return NULL;
}
void screen_widget_set_handler(struct screen_t *s, widget_event_fn handler, void *user_data) {
if (!s)
return;
s->default_widget_handler=handler;
s->default_user_data=user_data;
return;
}

22
src/widget_default.c Normal file
View File

@ -0,0 +1,22 @@
#include "mgos.h"
#include "tft.h"
#include "mongoose-touch.h"
void widget_default_ev(int ev, struct widget_t *w, void *ev_data) {
if (!w)
return;
LOG(LL_INFO, ("Event %d received for widget '%s'", ev, w->name));
switch(ev) {
case EV_WIDGET_CREATE:
case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER:
case EV_WIDGET_TOUCH_UP:
case EV_WIDGET_TOUCH_DOWN:
case EV_WIDGET_DESTROY:
default: // EV_WIDGET_NONE
break;
}
}