📄 rc.c
字号:
#include "yqtype.h"#include "configfile.h"#include <gtk/gtk.h> #include <string.h>#include "treenode.h"#include "pixmaps/boy.xpm"#include "pixmaps/girl.xpm"#include "pixmaps/zu_open.xpm"#include "pixmaps/zu_close.xpm"#include "pixmaps/yqfile.xpm"#include "pixmaps/yqfile_open.xpm"#include "pixmaps/yqfile_close.xpm"#include "pixmaps/laji.xpm"gboolean tree_selectiszu;ConfigFile *cfgfile;gchar tree_selectzuname[256],tree_selectjilu[4];GtkWidget *tree_selectitem,*tree_selectrootleaf;GtkTree *tree_selecttree,*tree_selectuptree;extern GtkWidget*nb_1_1,*nb_1_2,*nb_1_3,*nb_1_4,*nb_1_5,*nb_1_6,*nb_1_7,*nb_1_8,*nb_1_9,*nb_1_10,*nb_1_11,*nb_1_12,*nb_1_13,*nb_1_14,*nb_1_15,*nb_1_16,*nb_1_17,*nb_1_18,*nb_2_1,*nb_2_2,*nb_2_3,*nb_2_4,*nb_2_5,*nb_2_6,*nb_2_7,*nb_2_8,*nb_2_9,*nb_2_10,*nb_2_11,*nb_2_12,*nb_2_13,*nb_3_1,*nb_3_2;extern GtkWidget *tree_main,*root_leaf;extern ConfigFile *rccfgfile;extern gboolean nb_changed;GdkPixmap *yqpixmaps[MAX_IMAGE_TYPES];GdkBitmap *yqmasks[MAX_IMAGE_TYPES];GtkWidget *yq_createnulltree();GtkWidget *yq_readzu(tree_node *tnode);void Popup (gchar *szMessage);void leaf_selected (GtkWidget *widget, tree_node *tnode);void zu_selected (GtkWidget *widget, tree_node *tnode);void tree_set_pixmap(GtkTreeItem *treeitem,ImageType ed);void zu_expanded(GtkWidget *widget, tree_node *tnode);void zu_collapsed(GtkWidget *widget, tree_node *tnode);void yqfile_expanded(GtkWidget *widget, tree_node *tnode);void yqfile_collapsed(GtkWidget *widget, tree_node *tnode);void leaf_setnb(gchar *ab);gchar *leaf_formattext(gchar *bd);void clist_openzu(gchar *zu);void yq_set_list_type(ListType type);GtkWidget* yq_createleaf(gchar *ab,ImageType ed);voidyq_load_pixmaps(GtkWidget *parent){ static gboolean loaded = FALSE; static GtkStyle *style; if (!loaded) { loaded = TRUE; style = gtk_widget_get_style(parent); yqpixmaps[BOY] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[BOY], &style->bg[GTK_STATE_NORMAL], (gchar **)boy_xpm); yqpixmaps[GIRL] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[GIRL], &style->bg[GTK_STATE_NORMAL], (gchar **)girl_xpm); yqpixmaps[ZU_OPEN] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[ZU_OPEN], &style->bg[GTK_STATE_NORMAL], (gchar **)zu_open_xpm); yqpixmaps[ZU_CLOSE] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[ZU_CLOSE], &style->bg[GTK_STATE_NORMAL], (gchar **)zu_close_xpm); yqpixmaps[YQFILE_OPEN] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[YQFILE_OPEN], &style->bg[GTK_STATE_NORMAL], (gchar **)yqfile_open_xpm); yqpixmaps[YQFILE] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[YQFILE], &style->bg[GTK_STATE_NORMAL], (gchar **)yqfile_xpm); yqpixmaps[YQFILE_CLOSE] = gdk_pixmap_create_from_xpm_d( parent->window, &yqmasks[YQFILE_CLOSE], &style->bg[GTK_STATE_NORMAL], (gchar **)yqfile_close_xpm); }}void tree_set_pixmap(GtkTreeItem *treeitem, ImageType ed){ GtkPixmap *hbox, *pixmap; hbox = gtk_container_children(GTK_CONTAINER(treeitem))->data; pixmap = gtk_container_children(GTK_CONTAINER(hbox))->data; gtk_pixmap_set(GTK_PIXMAP(pixmap),yqpixmaps[ed],yqmasks[ed]); }void tree_set_text(GtkTreeItem *treeitem, gchar *ab){ GtkWidget *hbox, *label; hbox = gtk_container_children(GTK_CONTAINER(treeitem))->data; label = gtk_container_children(GTK_CONTAINER(hbox))->next->data; gtk_label_set_text(GTK_LABEL(label),ab); }voidleaf_selected (GtkWidget *widget, tree_node *tnode){ gchar zu[260],*ti,*ab;sprintf(zu,"%s-%s",tree_selectzuname,tree_selectjilu);if ((cfgfile==tnode->cfg)&&(!strcmp(zu,tnode->nodename))&&(!tree_selectiszu)) return;tree_selecttree=tnode->attree;tree_selectuptree=tnode->uptree;tree_selectitem=widget;tree_selectrootleaf=tnode->root_leaf; cfgfile=tnode->cfg; yq_set_list_type(LIST_NOTEBOOK); strcpy(zu,tnode->nodename); ti= strchr(zu,'-'); *ti='\0'; ti++; tree_selectiszu=FALSE; strcpy(tree_selectzuname,zu); strcpy(tree_selectjilu,ti); yq_cfg_read_string(cfgfile,zu,ti,&ab); nb_changed=TRUE; leaf_setnb(ab); nb_changed=FALSE; g_free(ab);}gchar*leaf_formattext(gchar *bd){ gchar *ab,*bb; ab=bd; bb=bd; while (*bb!='\0') { if (*bb!='~') { if (ab!=bb) *ab=*bb; ab++; bb++; } else { bb++; switch (*bb) { case '0': return ""; case '~': *ab='~';break; case 'n': *ab='\n';break; case 'd': *ab=',';break; } ab++; bb++; } } *ab='\0'; return bd;}voidleaf_setnb(gchar *ab){ gchar *bb;gtk_entry_set_text(GTK_ENTRY(nb_1_1),leaf_formattext(strtok(ab,","))); if (*(strtok(NULL,","))=='1') gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(nb_1_2)->entry),"男"); else gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(nb_1_2)->entry), "女"); if (*(strtok(NULL,","))=='1') gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(nb_1_3)->entry), "阳历"); else gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(nb_1_3)->entry), "阴历"); gtk_entry_set_text(GTK_ENTRY(nb_1_5),leaf_formattext(strtok(NULL,","))); if (*(strtok(NULL,","))=='1') gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(nb_1_4), 1); else gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(nb_1_4), 0); gtk_entry_set_text(GTK_ENTRY(nb_1_6),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_7),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_8),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_9),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_10),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_11),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_12),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_13),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_14),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_15),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_16),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_17),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_1_18),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_1),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_2),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_3),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_4),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_5),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_6),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_7),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_8),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_9),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_10),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_11),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_12),leaf_formattext(strtok(NULL,",")));gtk_entry_set_text(GTK_ENTRY(nb_2_13),leaf_formattext(strtok(NULL,","))); gtk_text_freeze (GTK_TEXT (nb_3_1)); gtk_editable_delete_text (GTK_EDITABLE (nb_3_1), 0, -1); bb=leaf_formattext(strtok(NULL,",")); gtk_text_insert (GTK_TEXT (nb_3_1), NULL, NULL, NULL, bb, strlen(bb)); gtk_text_thaw (GTK_TEXT (nb_3_1)); gtk_text_freeze (GTK_TEXT (nb_3_2)); gtk_editable_delete_text (GTK_EDITABLE (nb_3_2), 0, -1); bb=leaf_formattext(strtok(NULL,",")); gtk_text_insert (GTK_TEXT (nb_3_2), NULL, NULL, NULL, bb, strlen(bb)); gtk_text_thaw (GTK_TEXT (nb_3_2)); }voidzu_selected (GtkWidget *widget, tree_node *tnode){if ((cfgfile==tnode->cfg)&&(!strcmp(tnode->nodename,tree_selectzuname))&&(tree_selectiszu)) return;tree_selecttree=tnode->attree;tree_selectitem=widget;tree_selectrootleaf=tnode->root_leaf;tree_selectuptree=tnode->uptree; strcpy(tree_selectzuname,tnode->nodename); cfgfile=tnode->cfg; tree_selectiszu=TRUE; yq_set_list_type(LIST_DETAILS); clist_openzu(tnode->nodename);}void open_zu(gchar *zuname){ yq_set_list_type(LIST_DETAILS); clist_openzu(zuname);}voidyqfile_expanded(GtkWidget *widget, tree_node *tnode){ tree_set_pixmap(GTK_TREE_ITEM(widget),YQFILE_OPEN);}voidyqfile_collapsed(GtkWidget *widget, tree_node *tnode){gint i; tree_set_pixmap(GTK_TREE_ITEM(widget),YQFILE_CLOSE); if (cfgfile!=tnode->cfg) return; i=strcmp(tree_selectzuname,"yq"); if ((i==0)&&(tree_selectiszu)) return; gtk_tree_select_child(tnode->attree, widget);}voidzu_expanded(GtkWidget *widget, tree_node *tnode){ tree_set_pixmap(GTK_TREE_ITEM(widget),ZU_OPEN);}voidzu_collapsed(GtkWidget *widget, tree_node *tnode){gint i; tree_set_pixmap(GTK_TREE_ITEM(widget),ZU_CLOSE); if (cfgfile!=tnode->cfg) return; i=strcmp(tree_selectzuname,tnode->nodename); if (i<0) return; if ((i==0)&&(tree_selectiszu)) return; if (((i>0)&&(tree_selectzuname[strlen(tnode->nodename)]=='_'))||(i==0)) gtk_tree_select_child(tnode->attree, widget);}GtkWidget* yq_createleaf(gchar *ab,ImageType ed){GtkWidget *hbox,*leaf,*pixmap_widget,*label; leaf = gtk_tree_item_new(); hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); pixmap_widget = gtk_pixmap_new (yqpixmaps[ed], yqmasks[ed]); gtk_widget_show (pixmap_widget); gtk_box_pack_start(GTK_BOX(hbox),pixmap_widget, FALSE, FALSE, 0); label = gtk_label_new(ab); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); gtk_container_add(GTK_CONTAINER(leaf), hbox); gtk_widget_show(leaf); return leaf;}GtkWidget* yq_readzu(tree_node *uptnode){GtkWidget *tree,*leaf;gchar *ab,*bb,ti[4],tz[260];gint i,z;tree_node *tnode; tree=gtk_tree_new(); gtk_widget_show (tree); yq_cfg_read_int(uptnode->cfg,uptnode->nodename,"z",&z); for (i=1;i<=z;i++) { sprintf(tz,"%s_%d",uptnode->nodename,i); yq_cfg_read_string(uptnode->cfg,tz,"n",&ab); leaf=yq_createleaf(ab,ZU_CLOSE); g_free(ab); tnode = g_malloc(sizeof(tree_node)); tnode -> cfg = uptnode->cfg; tnode->uptree=uptnode->attree; tnode->attree=GTK_TREE(tree); tnode->root_leaf=uptnode->root_leaf; strcpy(tnode -> nodename, tz); gtk_signal_connect(GTK_OBJECT(leaf), "expand", GTK_SIGNAL_FUNC(zu_expanded),tnode); gtk_signal_connect(GTK_OBJECT(leaf), "collapse", GTK_SIGNAL_FUNC(zu_collapsed),tnode); gtk_signal_connect(GTK_OBJECT(leaf), "select", GTK_SIGNAL_FUNC(zu_selected),tnode); gtk_tree_append(GTK_TREE(tree),leaf); gtk_tree_item_set_subtree(GTK_TREE_ITEM(leaf),yq_readzu(tnode)); } yq_cfg_read_int(uptnode->cfg,uptnode->nodename,"a",&z); for (i=1;i<=z;i++) { sprintf(ti,"%d",i); sprintf(tz,"%s-%s",uptnode->nodename,ti); yq_cfg_read_string(uptnode->cfg,uptnode->nodename,ti,&ab); bb=strchr(ab,',');*bb='\0'; if (*(bb+1)=='1') leaf=yq_createleaf(leaf_formattext(ab),BOY); else leaf=yq_createleaf(leaf_formattext(ab),GIRL); tnode = g_malloc(sizeof(tree_node)); tnode -> cfg = uptnode->cfg; tnode->uptree=uptnode->attree; tnode->attree=GTK_TREE(tree); tnode->root_leaf=uptnode->root_leaf; strcpy(tnode -> nodename, tz); gtk_signal_connect(GTK_OBJECT(leaf), "select", GTK_SIGNAL_FUNC(leaf_selected),tnode); gtk_tree_append(GTK_TREE(tree),leaf); g_free(ab); } return tree;}void yq_readfile(GtkWidget *widget, gpointer open_file){ GtkWidget *leaf; gchar *ab,*bb,ti[4]; tree_node *tnode; gint i,a,j; cfgfile=yq_cfg_open_file(open_file); if(cfgfile) { if (!yq_cfg_read_string(cfgfile,"yq","n",&ab)) { Popup("这不是YQ文件"); yq_cfg_free(cfgfile); g_free(cfgfile); return; } yq_cfg_read_int(rccfgfile,"file","a",&a); for (i=1;i<=a;i++) { sprintf(ti,"%d",i); yq_cfg_read_string(rccfgfile,"file",ti,&bb); if (!strcmp(bb,open_file)) { g_free(bb); for (j=i;j<a;j++) { sprintf(ti,"%d",j+1); yq_cfg_read_string(rccfgfile,"file",ti,&bb); sprintf(ti,"%d",j); yq_cfg_write_string(rccfgfile,"file",ti,bb); g_free(bb); } sprintf(ti,"%d",a); yq_cfg_remove_key(rccfgfile,"file",ti); a--; break; } g_free(bb); } for (i=a;i>0;i--) { if (i!=5) { sprintf(ti,"%d",i); yq_cfg_read_string(rccfgfile,"file",ti,&bb); sprintf(ti,"%d",i+1); yq_cfg_write_string(rccfgfile,"file",ti,bb); g_free(bb); } } yq_cfg_write_string(rccfgfile,"file","1",open_file); if (a!=5) a++; yq_cfg_write_int(rccfgfile,"file","a",a); leaf=yq_createleaf(ab,YQFILE_CLOSE); if (!GTK_TREE_ITEM(root_leaf)->subtree) { tree_main=yq_createnulltree(); gtk_tree_item_set_subtree(GTK_TREE_ITEM(root_leaf),tree_main); } gtk_tree_prepend(GTK_TREE(tree_main),leaf); tnode = g_malloc(sizeof(tree_node)); tnode -> cfg = cfgfile; tnode->uptree=GTK_TREE(tree_main)->root_tree; tnode->attree=GTK_TREE(tree_main); tnode->root_leaf=leaf; strcpy(tnode -> nodename, "yq"); gtk_signal_connect(GTK_OBJECT(leaf), "expand", GTK_SIGNAL_FUNC(yqfile_expanded),tnode); gtk_signal_connect(GTK_OBJECT(leaf), "collapse", GTK_SIGNAL_FUNC(yqfile_collapsed),tnode); gtk_signal_connect(GTK_OBJECT(leaf),"select", GTK_SIGNAL_FUNC(zu_selected),tnode); gtk_tree_item_set_subtree(GTK_TREE_ITEM(leaf),yq_readzu(tnode)); g_free(ab); gtk_tree_item_expand(GTK_TREE_ITEM(leaf)); if (!GTK_TREE_ITEM(root_leaf)->expanded) gtk_tree_item_expand(GTK_TREE_ITEM(root_leaf)); cfgfile=NULL; gtk_tree_select_item(GTK_TREE(tree_main),0); } else Popup("读取文件时出错!"); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -