LOCAL ICACHE_FLASH_ATTR int handleCommandPropset(clientInfo_t *cl) { if (cl->argc!=3) { client_senderror(cl, "INVALIDARGS"); return -1; } widget_t *w = widget_find(cl->argv[0]); if (!w) { client_senderror(cl,"NOTFOUND"); return -1; } if (widget_set_property( w, cl->argv[1], cl->argv[2])<0) { client_senderror(cl,"INVALIDPROP"); return -1; } client_sendOK(cl,"PROPSET"); return 0; }
static GuiWidget *create_widget_list(GuiWidget *parent_widget, xmlNodePtr root) { GuiWidget *widget = NULL, *first_widget = NULL; xmlNodePtr cur = XML_GET_CHILD(root); while(cur != NULL) { if ( xmlStrcmp(cur->name, WIDGET_STR) == 0 ) { xmlChar *widget_name = xmlGetProp(cur, NAME_STR ); xmlChar *classid = xmlGetProp(cur, CLASS_STR); xmlChar *widget_style = xmlGetProp(cur, STYLE_STR); // printf("XmlParser: widget_name=%s\n",(char *)widget_name); widget = widget_new_child(parent_widget, (char *)widget_name, (char *)classid, (char *)widget_style); if (widget_name) xmlFree(widget_name); if (classid) xmlFree(classid); if (widget_style) xmlFree(widget_style); if (widget == NULL) goto next; if (first_widget == NULL) first_widget = widget; xmlNodePtr node = XML_GET_CHILD(cur); while (node != NULL) { if ( xmlStrcmp(node->name, PROPERTY_STR) == 0 ) { xmlChar *key = xmlGetProp(node, NAME_STR); xmlChar *value = xmlGetProp(node, VALUE_STR);//xmlNodeGetContent(node); if (xmlStrcmp(key, (xmlChar*)"tabstop") == 0) widget->tabstop= atoidef((char *)value, 1); else widget_set_property(widget, (char *)key, (char *)value); if (key) xmlFree(key); if (value) xmlFree(value); } else if (xmlStrcmp(node->name, SIGNAL_STR) == 0 ) { xmlChar *name = xmlGetProp(node, NAME_STR); xmlChar *handler = xmlGetProp(node, HANDLER_STR); signal_new(widget, (char *)name, (char *)handler); if (name) xmlFree(name); if (handler) xmlFree(handler); } else if (xmlStrcmp(node->name, CHILDREN_STR) == 0 ) create_widget_list(widget, node); node = node->next; } } else if ( xmlStrcmp(cur->name, FILES_STR) == 0 ) { int i=0; gui->search_num = 0; xmlNodePtr node = XML_GET_CHILD(cur); while (node != NULL) { if (xmlStrcmp(node->name, SEARCH_STR) == 0) gui->search_num++; node = node->next; } gui->search_path = (char **)malloc(sizeof(char*) *gui->search_num + 1); node = XML_GET_CHILD(cur); while (node != NULL) { if (xmlStrcmp(node->name, SEARCH_STR) == 0) gui->search_path[i++] = strdup( (char *)xmlGetProp(node, PATH_STR) ); node = node->next; } gui->search_path[i] = NULL; node = XML_GET_CHILD(cur); while (node != NULL) { if (xmlStrcmp(node->name, FONT_STR) == 0) { xmlChar *font_name = xmlGetProp(node, NAME_STR); xmlChar *file_name = xmlGetProp(node, FILE_STR); if (file_name && font_name) create_fontdesc((char *)font_name, (char *)file_name); if (file_name) xmlFree(file_name); if (font_name) xmlFree(font_name); } else if (xmlStrcmp(node->name, IMAGE_STR) == 0) { xmlChar *image_name = xmlGetProp(node, NAME_STR); xmlChar* file_name = xmlGetProp(node, FILE_STR); if (file_name && image_name) create_imagedesc((char *)image_name, (char *)file_name); if (file_name) xmlFree(file_name); if (image_name) xmlFree(image_name); } node = node->next; } } else if ( xmlStrcmp(cur->name, I18N_STR) == 0 ) { xmlNodePtr node = XML_GET_CHILD(cur); while (node != NULL) { GuiI18n *i18n; if (xmlStrcmp(node->name, LANGUAGE_STR) == 0) { xmlChar *language = xmlGetProp(node, NAME_STR); if (language) { i18n = i18n_add_language((char *)language); xmlFree(language); if (i18n) { xmlNodePtr text_node = XML_GET_CHILD(node); while (text_node != NULL) { if (xmlStrcmp(text_node->name, TRAN_STR) == 0) { xmlChar *key = xmlGetProp(text_node, ID_STR); xmlChar *value = xmlNodeGetContent(text_node); i18n_add_tran(i18n, (char *)key, (char *)value); if (key) xmlFree(key); if (value) xmlFree(value); } text_node = text_node->next; } } } } node = node->next; } } else if ( xmlStrcmp(cur->name, THEMES_STR) == 0) { xmlNodePtr node = XML_GET_CHILD(cur); while (node != NULL) { if (xmlStrcmp(node->name, THEME_STR) == 0) { Theme *theme = (Theme *)malloc(sizeof(Theme)); if (theme == NULL) { printf("memory out\n"); node = node->next; continue; } char *filename = (char *)xmlGetProp(node, FILE_STR); if (file_exists(filename) == -1) { char *oldfile = filename; filename = gui_search_file(filename); free(oldfile); } if (filename) { xmlChar *theme_name = xmlGetProp(node, NAME_STR); if (theme_load(theme, filename) == 0) { if (gui->current_theme == NULL) gui->current_theme = theme; hash_add(gui->theme_hash, (char *)theme_name, theme); } xmlFree(theme_name); free(filename); } } node = node->next; } } next: cur = cur->next; } return first_widget; }