📄 callbacks.c
字号:
#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <gtk/gtk.h>#include "stdio.h"#include "string.h"#include "callbacks.h"#include "interface.h"#include "support.h"/*定义状态栏提示显示时间,单位:毫秒*/#define INTERVAL 5000/*定义变量*/int id=0;int fanwei=0;GtkWidget *entry1;GtkWidget *entry2;GtkWidget *entry3;GtkWidget *entry4;GtkWidget *clist;GtkWidget *clist_chaxun;GtkWidget *entry_guanjianci;GtkWidget *jiansuo_fanwei;GtkWidget *statusbar;GtkWidget *error;GtkWidget *file_error;char *guanjianci="";int msgid_i;int msgid_s;int msgid_d;int msgid_n;int msgid_j;int timeout;/*定义数据结构体*/struct data{char data_1[50];char data_2[50];char data_3[50];char data_4[50];};gint timeout_callback(gpointer data){/*销毁状态栏过期的提示*/ gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_i);gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_s);gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_d);gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_j); guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_n,"准备就绪! 测试数据库V1.0 作者:孙新贺"); return;}void file_to_clist(){/*从文件中读取数据以显示在CLIST中*/ gtk_clist_clear(GTK_CLIST(clist));FILE *fp_r; if((fp_r=fopen("data.md","rb"))==NULL) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; }struct data data_out;/*查询记录个数,返回的i为记录个数+1*/ int i=0; while(!feof(fp_r)) { fread(&data_out,sizeof(struct data),1,fp_r); i=i+1; } rewind(fp_r);/*根据记录个数取记录,个数为i-1*/ int j=0;while(j<=i-2) { fread(&data_out,sizeof(struct data),1,fp_r); gchar *list[4]={"","","",""}; list[0]=data_out.data_1; list[1]=data_out.data_2; list[2]=data_out.data_3; list[3]=data_out.data_4; gtk_clist_append (GTK_CLIST (clist), list); j++; }fclose(fp_r);}gbooleanon_window1_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data){gtk_main_quit(); return FALSE;}voidon________q_1_activate (GtkMenuItem *menuitem, gpointer user_data){gtk_main_quit(); return FALSE;}voidon_about1_activate (GtkMenuItem *menuitem, gpointer user_data){GtkWidget *aboutdialog1;aboutdialog1 = create_aboutdialog1 (); gtk_widget_show (aboutdialog1);}voidon_save_clicked (GtkButton *button, gpointer user_data){/* 更新需要修改的记录*/ struct data data_new; strcpy(data_new.data_1,gtk_entry_get_text(GTK_ENTRY(entry1))); strcpy(data_new.data_2,gtk_entry_get_text(GTK_ENTRY(entry2))); strcpy(data_new.data_3,gtk_entry_get_text(GTK_ENTRY(entry3))); strcpy(data_new.data_4,gtk_entry_get_text(GTK_ENTRY(entry4))); FILE *fp;if((fp=fopen("data.md","rb+"))==NULL) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; }/*定位至主键值指向的记录*/fseek(fp,id*sizeof(struct data),0);if(fwrite(&data_new,sizeof(struct data),1,fp)!=1) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; } fclose(fp); /* 刷新CLIST显示*/ file_to_clist(); /* 更新状态栏*/ msgid_s=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_s,"记录更新成功!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);}voidon_insert_clicked (GtkButton *button, gpointer user_data){struct data data_f; strcpy(data_f.data_1,gtk_entry_get_text(GTK_ENTRY(entry1))); strcpy(data_f.data_2,gtk_entry_get_text(GTK_ENTRY(entry2))); strcpy(data_f.data_3,gtk_entry_get_text(GTK_ENTRY(entry3))); strcpy(data_f.data_4,gtk_entry_get_text(GTK_ENTRY(entry4)));/*将记录写入文件*/FILE *fp; if((fp=fopen("data.md","ab"))==NULL) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; }if(fwrite(&data_f,sizeof(struct data),1,fp)!=1) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; } fclose(fp);/* 刷新CLIST显示*/ file_to_clist();/* 更新状态栏*/ msgid_i=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_i,"记录成功添加!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL); }voidon_delete_clicked (GtkButton *button, gpointer user_data){/* 将要删除的记录标记为空记录*/ struct data data_null; strcpy(data_null.data_1,""); strcpy(data_null.data_2,""); strcpy(data_null.data_3,""); strcpy(data_null.data_4,""); FILE *fp;if((fp=fopen("data.md","rb+"))==NULL) {printf("the file open error!\n"); return; }fseek(fp,id*sizeof(struct data),0);if(fwrite(&data_null,sizeof(struct data),1,fp)!=1) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; } fclose(fp); /* 刷新CLIST显示*/ file_to_clist(); /* 更新状态栏*/ msgid_d=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_d,"记录删除成功!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);}voidon_window1_show (GtkWidget *widget, gpointer user_data){/*初始化程序:查询构件,给指针赋指向*/entry1=lookup_widget(GTK_WIDGET(widget),"entry1");entry2=lookup_widget(GTK_WIDGET(widget),"entry2");entry3=lookup_widget(GTK_WIDGET(widget),"entry3");entry4=lookup_widget(GTK_WIDGET(widget),"entry4");entry_guanjianci=lookup_widget(GTK_WIDGET(widget),"entry_guanjianci"); clist=lookup_widget(GTK_WIDGET(widget),"clist"); clist_chaxun=lookup_widget(GTK_WIDGET(widget),"clist_chaxun");jiansuo_fanwei=lookup_widget(GTK_WIDGET(widget),"jiansuo_fanwei");statusbar=lookup_widget(GTK_WIDGET(widget),"statusbar");/* 刷新CLIST显示*/ file_to_clist();/*初始化状态栏显示*/ msgid_n=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_n,"准备就绪! 测试数据库V1.0 作者:孙新贺");}voidon_clist_select_row (GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer user_data){gchar *text;gtk_clist_get_text (GTK_CLIST (clist), row, column, &text);/*读出所选项目,并显示于第一部分*/ FILE *fp_r; if((fp_r=fopen("data.md","rb"))==NULL) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; }struct data data_out;fseek(fp_r,row*sizeof(struct data),0);fread(&data_out,sizeof(struct data),1,fp_r);gtk_entry_set_text(GTK_ENTRY(entry1),&data_out.data_1);gtk_entry_set_text(GTK_ENTRY(entry2),&data_out.data_2);gtk_entry_set_text(GTK_ENTRY(entry3),&data_out.data_3);gtk_entry_set_text(GTK_ENTRY(entry4),&data_out.data_4);fclose(fp_r);/*返回数据主键值*/id=row;}voidon_jiansuo_fanwei_changed (GtkComboBox *combobox, gpointer user_data){gchar *c;c=gtk_combo_box_get_active_text(combobox); if (strcmp(c,"all")==0) fanwei=0;else if(strcmp(c,"item1")==0) fanwei=1;else if(strcmp(c,"item2")==0 ) fanwei=2;else if(strcmp(c,"item3")==0 ) fanwei=3;else fanwei=4;}voidon_search_clicked (GtkButton *button, gpointer user_data){guanjianci=gtk_entry_get_text(GTK_ENTRY(entry_guanjianci));if(strcmp(guanjianci,"")==0) { GtkWidget *error; error = create_error (); gtk_widget_show (error); return; }FILE *fp_r; if((fp_r=fopen("data.md","rb"))==NULL) { /*显示文件错误信息*/ file_error = create_file_error (); gtk_widget_show (file_error); return; }struct data data_out;/*查询记录个数,返回i为记录个数+1*/ int i=0; while(!feof(fp_r)) { fread(&data_out,sizeof(struct data),1,fp_r); i=i+1; }/*移动文件指针到文件头,准备搜索*/ rewind(fp_r);/*开始搜索:根据记录个数取记录,个数为i-1,沿文件方向进行线性搜索*/ int j=0; gchar *list[4]={"","","",""}; gtk_clist_clear(GTK_CLIST(clist_chaxun));while(j<=i-2) { fread(&data_out,sizeof(struct data),1,fp_r); switch (fanwei) { case 0: if((strstr(data_out.data_1,guanjianci)||strstr(data_out.data_2,guanjianci)||strstr(data_out.data_3,guanjianci)||strstr(data_out.data_4,guanjianci))!=NULL) { list[0]=data_out.data_1; list[1]=data_out.data_2; list[2]=data_out.data_3; list[3]=data_out.data_4; gtk_clist_append (GTK_CLIST (clist_chaxun),list); } break; case 1: if(strstr(data_out.data_1,guanjianci)!=NULL) { list[0]=data_out.data_1; list[1]=data_out.data_2; list[2]=data_out.data_3; list[3]=data_out.data_4; gtk_clist_append (GTK_CLIST (clist_chaxun),list); } break; case 2: if(strstr(data_out.data_2,guanjianci)!=NULL) { list[0]=data_out.data_1; list[1]=data_out.data_2; list[2]=data_out.data_3; list[3]=data_out.data_4; gtk_clist_append (GTK_CLIST (clist_chaxun),list); } break; case 3: if(strstr(data_out.data_3,guanjianci)!=NULL) { list[0]=data_out.data_1; list[1]=data_out.data_2; list[2]=data_out.data_3; list[3]=data_out.data_4; gtk_clist_append (GTK_CLIST (clist_chaxun),list); } break; case 4: if(strstr(data_out.data_4,guanjianci)!=NULL) { list[0]=data_out.data_1; list[1]=data_out.data_2; list[2]=data_out.data_3; list[3]=data_out.data_4; gtk_clist_append (GTK_CLIST (clist_chaxun),list); } break; } j++; }fclose(fp_r);/* 更新状态栏*/ msgid_j=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint t=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_j,"记录检索完成!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);}voidon_okbutton1_clicked (GtkButton *button, gpointer user_data){error=lookup_widget(GTK_WIDGET(button),"error"); gtk_widget_destroy(GTK_WIDGET(error));}voidon_button1_clicked (GtkButton *button, gpointer user_data){file_error=lookup_widget(GTK_WIDGET(button),"file_error");gtk_widget_destroy(GTK_WIDGET(file_error));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -