Пример #1
0
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;
}
Пример #2
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;
}