Implement EV_WIDGET_DRAW and call screen_widget_broadcast() on screen loads

This commit is contained in:
Pim van Pelt
2017-12-02 14:23:14 +01:00
parent f7a62fce48
commit cda842da53
8 changed files with 12 additions and 7 deletions

View File

@ -60,6 +60,7 @@ void tft_demo(void)
return; return;
} }
screen_add_default_widgets(s_screen); screen_add_default_widgets(s_screen);
screen_widget_broadcast(s_screen, EV_WIDGET_DRAW, NULL);
LOG(LL_INFO, ("Screen '%s' has %d widgets", s_screen->name, screen_get_num_widgets(s_screen))); LOG(LL_INFO, ("Screen '%s' has %d widgets", s_screen->name, screen_get_num_widgets(s_screen)));
} }

View File

@ -65,6 +65,7 @@ void widget_battery_ev(int ev, struct widget_t *w, void *ev_data) {
LOG(LL_INFO, ("Monitoring LiPo voltage on gpio=%d", WIDGET_BATTERY_ADC_PIN)); LOG(LL_INFO, ("Monitoring LiPo voltage on gpio=%d", WIDGET_BATTERY_ADC_PIN));
mgos_adc_enable(WIDGET_BATTERY_ADC_PIN); mgos_adc_enable(WIDGET_BATTERY_ADC_PIN);
mgos_prometheus_metrics_add_handler(prometheus_battery_metrics_fn, NULL); mgos_prometheus_metrics_add_handler(prometheus_battery_metrics_fn, NULL);
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER: case EV_WIDGET_TIMER:

View File

@ -78,7 +78,6 @@ void screen_add_default_widgets(struct screen_t *screen) {
static void widget_default_loadscreen(struct widget_t *w, void *ev_data) { static void widget_default_loadscreen(struct widget_t *w, void *ev_data) {
struct screen_t *new_screen; struct screen_t *new_screen;
char *new_screen_filename;
if (!w) if (!w)
return; return;
@ -87,20 +86,18 @@ static void widget_default_loadscreen(struct widget_t *w, void *ev_data) {
return; return;
} }
// screen_destroy will destroy our widget *w, so take what we need to continue
new_screen_filename=strdup(w->user_data);
screen_destroy(&s_screen); new_screen = screen_create_from_file(w->user_data, widget_default_ev, NULL);
new_screen = screen_create_from_file(new_screen_filename, widget_default_ev, NULL);
free(new_screen_filename);
if (!new_screen) { if (!new_screen) {
LOG(LL_ERROR, ("Could not load screen")); LOG(LL_ERROR, ("Could not load screen"));
return; return;
} }
screen_add_default_widgets(new_screen); screen_add_default_widgets(new_screen);
LOG(LL_INFO, ("Navigating to new screen '%s' which has %d widgets", new_screen->name, screen_get_num_widgets(new_screen))); LOG(LL_INFO, ("Navigating to new screen '%s' which has %d widgets", new_screen->name, screen_get_num_widgets(new_screen)));
screen_destroy(&s_screen);
s_screen = new_screen; s_screen = new_screen;
screen_widget_broadcast(s_screen, EV_WIDGET_DRAW, NULL);
(void) ev_data; (void) ev_data;
} }
@ -116,6 +113,7 @@ void widget_default_ev(int ev, struct widget_t *w, void *ev_data) {
switch(ev) { switch(ev) {
case EV_WIDGET_CREATE: case EV_WIDGET_CREATE:
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER: case EV_WIDGET_TIMER:

View File

@ -74,6 +74,7 @@ void widget_name_ev(int ev, struct widget_t *w, void *ev_data) {
switch(ev) { switch(ev) {
case EV_WIDGET_CREATE: case EV_WIDGET_CREATE:
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER: case EV_WIDGET_TIMER:

View File

@ -58,6 +58,7 @@ void widget_network_ev(int ev, struct widget_t *w, void *ev_data) {
switch(ev) { switch(ev) {
case EV_WIDGET_CREATE: case EV_WIDGET_CREATE:
widget_network=w; widget_network=w;
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
widget_network_render(w, ev_data); widget_network_render(w, ev_data);

View File

@ -32,6 +32,7 @@ void widget_time_ev(int ev, struct widget_t *w, void *ev_data) {
switch(ev) { switch(ev) {
case EV_WIDGET_CREATE: case EV_WIDGET_CREATE:
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER: case EV_WIDGET_TIMER:

View File

@ -18,6 +18,7 @@ void widget_topbar_ev(int ev, struct widget_t *w, void *ev_data) {
switch(ev) { switch(ev) {
case EV_WIDGET_CREATE: case EV_WIDGET_CREATE:
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER: case EV_WIDGET_TIMER:

View File

@ -58,6 +58,7 @@ void widget_wifi_ev(int ev, struct widget_t *w, void *ev_data) {
switch(ev) { switch(ev) {
case EV_WIDGET_CREATE: case EV_WIDGET_CREATE:
break;
case EV_WIDGET_DRAW: case EV_WIDGET_DRAW:
case EV_WIDGET_REDRAW: case EV_WIDGET_REDRAW:
case EV_WIDGET_TIMER: case EV_WIDGET_TIMER: