code.c

来自「超强的嵌入式GUI系统」· C语言 代码 · 共 786 行 · 第 1/2 页

C
786
字号
	button->object->priv = priv;}void code_generate_object_textbox (s_hashtable_t *htable, s_xml_node_t *node){	s_xml_node_t *tmp;	w_textbox_t *textbox;	w_object_t *pobject;	w_object_t *wobject;	s_xml_node_t *window = s_xml_node_get_parent(node, "window");	wobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(window, "id"));	pobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(node->parent, "id"));	w_textbox_init(wobject->window, &textbox, pobject);	s_hashtable_add(htable, s_xml_node_get_attr_value(node, "id"), textbox->object);	while ((tmp = s_xml_node_get_path(node, "style")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_textbox_set_style(textbox->object, fshape, fshadow); 		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "image")) != NULL) {		char **var;		unsigned int count;		unsigned int style;		unsigned int rotate;		code_get_image(htable, tmp, &style, &rotate, &count, &var);		if (var != NULL) {			w_textbox_set_image(textbox->object, style, rotate, count, var);			while (count--) s_free(var[count]);			s_free(var);		}		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "properties")) != NULL) {		TEXTBOX_PROPERTIES prop;		code_get_enum(htable, tmp->value, &prop);		w_textbox_set_properties(textbox->object, prop);		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "size")) != NULL) {		int size = atoi(tmp->value);		w_textbox_set_size(textbox->object, size);		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "color")) != NULL) {		int cr = atoi(s_xml_node_get_path_value(tmp, "red"));		int cg = atoi(s_xml_node_get_path_value(tmp, "green"));		int cb = atoi(s_xml_node_get_path_value(tmp, "blue"));		w_textbox_set_rgb(textbox->object, cr, cg, cb);		if ((tmp = s_xml_node_get_path(node, "color/red")) != NULL) { tmp->dontparse = 1; }		if ((tmp = s_xml_node_get_path(node, "color/green")) != NULL) { tmp->dontparse = 1; }		if ((tmp = s_xml_node_get_path(node, "color/blue")) != NULL) { tmp->dontparse = 1; }		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "string")) != NULL) {		w_textbox_set_str(textbox->object, code_trim_quota(tmp->value));		tmp->dontparse = 1;	}}void code_generate_object_editbox (s_hashtable_t *htable, s_xml_node_t *node){	s_xml_node_t *tmp;	w_editbox_t *editbox;	w_object_t *pobject;	w_object_t *wobject;	s_xml_node_t *window = s_xml_node_get_parent(node, "window");	wobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(window, "id"));	pobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(node->parent, "id"));	w_editbox_init(wobject->window, &editbox, pobject);	s_hashtable_add(htable, s_xml_node_get_attr_value(node, "id"), editbox->object);	while ((tmp = s_xml_node_get_path(node, "style")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_editbox_set_style(editbox->object, fshape, fshadow); 		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "image")) != NULL) {		char **var;		unsigned int count;		unsigned int style;		unsigned int rotate;		code_get_image(htable, tmp, &style, &rotate, &count, &var);		if (var != NULL) {			w_editbox_set_image(editbox->object, style, rotate, count, var);			while (count--) s_free(var[count]);			s_free(var);		}		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "properties")) != NULL) {		TEXTBOX_PROPERTIES prop;		code_get_enum(htable, tmp->value, &prop);		w_editbox_set_properties(editbox->object, prop);		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "size")) != NULL) {		int size = atoi(tmp->value);		w_editbox_set_size(editbox->object, size);		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "color")) != NULL) {		int cr = atoi(s_xml_node_get_path_value(tmp, "red"));		int cg = atoi(s_xml_node_get_path_value(tmp, "green"));		int cb = atoi(s_xml_node_get_path_value(tmp, "blue"));		w_editbox_set_rgb(editbox->object, cr, cg, cb);		if ((tmp = s_xml_node_get_path(node, "color/red")) != NULL) { tmp->dontparse = 1; }		if ((tmp = s_xml_node_get_path(node, "color/green")) != NULL) { tmp->dontparse = 1; }		if ((tmp = s_xml_node_get_path(node, "color/blue")) != NULL) { tmp->dontparse = 1; }		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "string")) != NULL) {		w_editbox_set_str(editbox->object, code_trim_quota(tmp->value));		tmp->dontparse = 1;	}}void code_generate_object_checkbox (s_hashtable_t *htable, s_xml_node_t *node){	s_xml_node_t *tmp;	w_checkbox_t *checkbox;	w_object_t *pobject;	w_object_t *wobject;	s_xml_node_t *window = s_xml_node_get_parent(node, "window");	wobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(window, "id"));	pobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(node->parent, "id"));	w_checkbox_init(wobject->window, &checkbox, pobject);	s_hashtable_add(htable, s_xml_node_get_attr_value(node, "id"), checkbox->object);	while ((tmp = s_xml_node_get_path(node, "style")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_checkbox_set_style(checkbox->object, fshape, fshadow); 		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "boxstyle")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_checkbox_set_boxstyle(checkbox->object, fshape, fshadow); 		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "image")) != NULL) {		char **var;		unsigned int count;		unsigned int style;		unsigned int rotate;		code_get_image(htable, tmp, &style, &rotate, &count, &var);		if (var != NULL) {			w_checkbox_set_image(checkbox->object, style, rotate, count, var);			while (count--) s_free(var[count]);			s_free(var);		}		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "boximage")) != NULL) {		char **var;		unsigned int count;		unsigned int style;		unsigned int rotate;		code_get_image(htable, tmp, &style, &rotate, &count, &var);		if (var != NULL) {			w_checkbox_set_boximage(checkbox->object, style, rotate, count, var);			while (count--) s_free(var[count]);			s_free(var);		}		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "properties")) != NULL) {		TEXTBOX_PROPERTIES prop;		code_get_enum(htable, tmp->value, &prop);		w_checkbox_set_properties(checkbox->object, prop);		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "size")) != NULL) {		int size = atoi(tmp->value);		w_checkbox_set_size(checkbox->object, size);		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "color")) != NULL) {		int cr = atoi(s_xml_node_get_path_value(tmp, "red"));		int cg = atoi(s_xml_node_get_path_value(tmp, "green"));		int cb = atoi(s_xml_node_get_path_value(tmp, "blue"));		w_checkbox_set_rgb(checkbox->object, cr, cg, cb);		if ((tmp = s_xml_node_get_path(node, "color/red")) != NULL) { tmp->dontparse = 1; }		if ((tmp = s_xml_node_get_path(node, "color/green")) != NULL) { tmp->dontparse = 1; }		if ((tmp = s_xml_node_get_path(node, "color/blue")) != NULL) { tmp->dontparse = 1; }		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "changed")) != NULL) {		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "string")) != NULL) {		w_checkbox_set_str(checkbox->object, code_trim_quota(tmp->value));		tmp->dontparse = 1;	}}void code_generate_object_progressbar (s_hashtable_t *htable, s_xml_node_t *node){	s_xml_node_t *tmp;	w_progressbar_t *progressbar;	w_object_t *pobject;	w_object_t *wobject;	s_xml_node_t *window = s_xml_node_get_parent(node, "window");	wobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(window, "id"));	pobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(node->parent, "id"));	w_progressbar_init(wobject->window, &progressbar, pobject);	s_hashtable_add(htable, s_xml_node_get_attr_value(node, "id"), progressbar->object);	while ((tmp = s_xml_node_get_path(node, "style")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_progressbar_set_style(progressbar->object, fshape, fshadow); 		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "boxstyle")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_progressbar_set_boxstyle(progressbar->object, fshape, fshadow); 		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "image")) != NULL) {		char **var;		unsigned int count;		unsigned int style;		unsigned int rotate;		code_get_image(htable, tmp, &style, &rotate, &count, &var);		if (var != NULL) {			w_progressbar_set_image(progressbar->object, style, rotate, count, var);			while (count--) s_free(var[count]);			s_free(var);		}		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "boximage")) != NULL) {		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "changed")) != NULL) {		tmp->dontparse = 1;	}}void code_generate_object_scrollbuffer (s_hashtable_t *htable, s_xml_node_t *node){	s_xml_node_t *tmp;	w_scrollbuffer_t *scrollbuffer;	w_object_t *pobject;	w_object_t *wobject;	s_xml_node_t *window = s_xml_node_get_parent(node, "window");	wobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(window, "id"));	pobject = (w_object_t *) s_hashtable_get_data(htable, s_xml_node_get_attr_value(node->parent, "id"));	w_scrollbuffer_init(wobject->window, &scrollbuffer, pobject);	s_hashtable_add(htable, s_xml_node_get_attr_value(node, "id"), scrollbuffer->object);	while ((tmp = s_xml_node_get_path(node, "object")) != NULL) {		code_parse_generate(htable, tmp);		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "child")) != NULL) {		w_object_t *cobject = (w_object_t *) s_hashtable_get_data(htable, tmp->value);		w_scrollbuffer_set_child(scrollbuffer->object, cobject);		tmp->dontparse = 1;	}	if ((tmp = s_xml_node_get_path(node, "slide")) != NULL) {		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "boxstyle")) != NULL) {		FRAME_SHAPE fshape;		FRAME_SHADOW fshadow;		code_get_style(htable, tmp, &fshape, &fshadow);		w_scrollbuffer_set_boxstyle(scrollbuffer->object, fshape, fshadow); 		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "boximage")) != NULL) {		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "addstyle")) != NULL) {		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "addimage")) != NULL) {		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "substyle")) != NULL) {		tmp->dontparse = 1;	}	while ((tmp = s_xml_node_get_path(node, "subimage")) != NULL) {		tmp->dontparse = 1;	}}void code_generate_object (s_hashtable_t *htable, s_xml_node_t *node){	char *type = s_xml_node_get_attr_value(node, "type");	if (strcmp(type, "frame") == 0) {		code_generate_object_frame(htable, node);	} else if (strcmp(type, "button") == 0) {		code_generate_object_button(htable, node);	} else if (strcmp(type, "textbox") == 0) {		code_generate_object_textbox(htable, node);	} else if (strcmp(type, "editbox") == 0) {		code_generate_object_editbox(htable, node);	} else if (strcmp(type, "checkbox") == 0) {		code_generate_object_checkbox(htable, node);	} else if (strcmp(type, "progressbar") == 0) {		code_generate_object_progressbar(htable, node);	} else if (strcmp(type, "scrollbuffer") == 0) {		code_generate_object_scrollbuffer(htable, node);	}}void code_parse_generate (s_hashtable_t *htable, s_xml_node_t *node){	int p;	s_xml_node_t *tmp;	if (node->dontparse != 0) {		return;	}	if (strcmp(node->name, "window") == 0) {		code_generate_window(htable, node);	} else if (strcmp(node->name, "object") == 0) {		code_generate_object(htable, node);	} else if (strcmp(node->name, "move") == 0) {		code_generate_move(htable, node);	} else if (strcmp(node->name, "show") == 0) {		code_generate_show(htable, node);	}	p = 0;	while (!s_list_eol(node->nodes, p)) {		tmp = (s_xml_node_t *) s_list_get(node->nodes, p);		code_parse_generate(htable, tmp);		p++;	}}void code_parse (s_hashtable_t *htable, s_xml_node_t *file, s_xml_node_t *style, char *script, char *engine){	code_script_t **sengine;		s_hashtable_add(htable, "WINDOW_NOFORM", (void *) WINDOW_NOFORM);	s_hashtable_add(htable, "WINDOW_MAIN", (void *) WINDOW_MAIN);	s_hashtable_add(htable, "WINDOW_TEMP", (void *) WINDOW_TEMP);	s_hashtable_add(htable, "WINDOW_CHILD", (void *) WINDOW_CHILD);	s_hashtable_add(htable, "WINDOW_DESKTOP", (void *) WINDOW_DESKTOP);	s_hashtable_add(htable, "FRAME_NOFRAME", (void *) FRAME_NOFRAME);	s_hashtable_add(htable, "FRAME_BOX", (void *) FRAME_BOX);	s_hashtable_add(htable, "FRAME_PANEL", (void *) FRAME_PANEL);	s_hashtable_add(htable, "FRAME_WINPANEL", (void *) FRAME_WINPANEL);	s_hashtable_add(htable, "FRAME_HLINE", (void *) FRAME_HLINE);	s_hashtable_add(htable, "FRAME_VLINE", (void *) FRAME_VLINE);	s_hashtable_add(htable, "FRAME_STYLEDPANEL", (void *) FRAME_STYLEDPANEL);	s_hashtable_add(htable, "FRAME_POPUPPANEL", (void *) FRAME_POPUPPANEL);	s_hashtable_add(htable, "FRAME_MENUBARPANEL", (void *) FRAME_MENUBARPANEL);	s_hashtable_add(htable, "FRAME_TOOLBARPANEL", (void *) FRAME_TOOLBARPANEL);	s_hashtable_add(htable, "FRAME_LINEEDITPANEL", (void *) FRAME_LINEEDITPANEL);	s_hashtable_add(htable, "FRAME_TABWIDGETPANEL", (void *) FRAME_TABWIDGETPANEL);	s_hashtable_add(htable, "FRAME_GROUPBOXPANEL", (void *) FRAME_GROUPBOXPANEL);	s_hashtable_add(htable, "FRAME_EMPTY", (void *) FRAME_EMPTY);	s_hashtable_add(htable, "FRAME_PLAIN", (void *) FRAME_PLAIN);	s_hashtable_add(htable, "FRAME_RAISED", (void *) FRAME_RAISED);	s_hashtable_add(htable, "FRAME_SUNKEN", (void *) FRAME_SUNKEN);	s_hashtable_add(htable, "FRAME_FOCUSED", (void *) FRAME_FOCUSED);	s_hashtable_add(htable, "TEXTBOX_WRAP", (void *) TEXTBOX_WRAP);	s_hashtable_add(htable, "TEXTBOX_VCENTER", (void *) TEXTBOX_VCENTER);	s_hashtable_add(htable, "TEXTBOX_HCENTER", (void *) TEXTBOX_HCENTER);		s_hashtable_add(htable, "FRAME_IMAGE_SOLID", (void *) FRAME_IMAGE_SOLID);	s_hashtable_add(htable, "FRAME_IMAGE_VERTICAL", (void *) FRAME_IMAGE_VERTICAL);	s_hashtable_add(htable, "FRAME_IMAGE_HORIZONTAL", (void *) FRAME_IMAGE_HORIZONTAL);	s_hashtable_add(htable, "EFFECT_NONE", (void *) EFFECT_NONE);	s_hashtable_add(htable, "EFFECT_FADEIN", (void *) EFFECT_FADEIN);	s_hashtable_add(htable, "EFFECT_FADEOUT", (void *) EFFECT_FADEOUT);	s_hashtable_add(htable, "EFFECT_POPIN", (void *) EFFECT_POPIN);	s_hashtable_add(htable, "EFFECT_POPOUT", (void *) EFFECT_POPOUT);	for (sengine = code_scripts; *sengine && engine; sengine++) {		if (strcmp((*sengine)->name, engine) == 0) {			g_engine = *sengine;		} 	}	if (g_engine) g_engine->init(htable, script);		code_parse_element(file, style);	code_parse_generate(htable, file);		if (g_engine) g_engine->uninit();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?