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 + -
显示快捷键?