void menuitem_rebuild_screen_ip(MenuItem *item, Screen *s) { Widget *w; debug(RPT_DEBUG, "%s(item=[%s], screen=[%s])", __FUNCTION__, ((item != NULL) ? item->id : "(null)"), ((s != NULL) ? s->id : "(null)")); if ((item == NULL) || (s == NULL)) return; if (display_props->height >= 2) { /* Only add a title if enough space... */ w = widget_create("text", WID_STRING, s); screen_add_widget(s, w); w->text = strdup(item->text); w->x = 1; w->y = 1; } w = widget_create("value", WID_STRING, s); screen_add_widget(s, w); w->text = malloc(item->data.ip.maxlength+1); w->x = 2; w->y = display_props->height / 2 + 1; /* Only display error string if enough space... */ if (display_props->height > 2) { w = widget_create("error", WID_STRING, s); screen_add_widget(s, w); w->text = strdup(""); w->x = 1; w->y = display_props->height; } }
void menuitem_rebuild_screen_slider(MenuItem *item, Screen *s) { Widget *w; debug(RPT_DEBUG, "%s(item=[%s], screen=[%s])", __FUNCTION__, ((item != NULL) ? item->id : "(null)"), ((s != NULL) ? s->id : "(null)")); if ((item == NULL) || (s == NULL)) return; if (display_props->height >= 2) { /* Only add a title if enough space... */ w = widget_create("text", WID_STRING, s); screen_add_widget(s, w); w->text = strdup(item->text); w->x = 1; w->y = 1; } w = widget_create("bar", WID_HBAR, s); screen_add_widget(s, w); w->width = display_props->width; if (display_props->height > 2) { /* This is option 1: we have enought space, so the bar and * min/max texts can be on separate lines. */ w->x = 2; w->y = display_props->height / 2 + 1; w->width = display_props->width - 2; } w = widget_create("min", WID_STRING, s); screen_add_widget(s, w); w->text = NULL; w->x = 1; if (display_props->height > 2) { w->y = display_props->height / 2 + 2; } else { w->y = display_props->height / 2 + 1; } w = widget_create("max", WID_STRING, s); screen_add_widget(s, w); w->text = NULL; w->x = 1; if (display_props->height > 2) { w->y = display_props->height / 2 + 2; } else { w->y = display_props->height / 2 + 1; } }
LOCAL ICACHE_FLASH_ATTR int handleCommandAdd(clientInfo_t *cl) { int x, y; char *end; if (cl->argc<5) { client_senderror(cl,"INVALIDARGS"); } screen_t *s = screen_find(cl->argv[0]); if (!s) { client_senderror(cl,"NOTFOUND"); return -1; } const widgetdef_t *c = widgetdef_find(cl->argv[1]); if (!c) { client_senderror(cl,"INVALID"); return -1; } widget_t *w = widget_find(cl->argv[2]); if (w) { client_senderror(cl,"ALREADY"); return -1; } x = (int)strtol(cl->argv[3],&end,10); if (*end !='\0') { client_senderror(cl,"INVALID"); return -1; } y = (int)strtol(cl->argv[4],&end,10); if (*end !='\0') { client_senderror(cl,"INVALID"); return -1; } /* Ok, create it. */ w = widget_create(cl->argv[1], cl->argv[2]); if (!w) { client_senderror(cl,"INVALID"); return -1; } screen_add_widget(s, w, x, y); client_sendOK(cl,"ADD"); return 0; }
LOCAL ICACHE_FLASH_ATTR int handleCommandClone(clientInfo_t *cl) { int x, y; char *end; if (cl->argc<4) { client_senderror(cl,"INVALIDARGS"); } screen_t *s = screen_find(cl->argv[1]); if (!s) { client_senderror(cl,"NOTFOUND"); return -1; } widget_t *w = widget_find(cl->argv[0]); if (!w) { client_senderror(cl,"NOTFOUND"); return -1; } x = (int)strtol(cl->argv[2],&end,10); if (*end !='\0') { client_senderror(cl,"INVALID"); return -1; } y = (int)strtol(cl->argv[3],&end,10); if (*end !='\0') { client_senderror(cl,"INVALID"); return -1; } /* Ok, create it. */ screen_add_widget(s, w, x, y); client_sendOK(cl,"CLONE"); return 0; }