/* minidict.c mini dictionary * Copyright (c) 2004 by SmartLu All Rights Reserved * Distributed under the terms of the GNU General Public License (GPL) * See the GNU Library General Public License for more details. */ #include "srecite.h" static void dict_search();//search dict static GtkWidget *dict_win,*input_entry; static GtkWidget *book_label,*result_label,*ps1_label,*ps2_label,*ps3_label; static GtkWidget *pad_label; static GtkWidget *quit_button,*search_button; static int old_word_index; //search CH_word result array static struct line_st CH_line_result[8]; static int CH_line_index=0; static void dict_quit() { gtk_grab_remove(dict_win); gtk_widget_destroy(dict_win); show_play(); S_state.word_index = old_word_index; gtk_widget_show(window); } /* window of minidict */ void minidict_window() { GtkWidget *vbox,*hbox,*h_line; GtkWidget *xpm_label; gchar temp[256]; gchar str[256]; /* dictionary window */ dict_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(dict_win),"Mini EN-CH and CH-EN Dictionary"); gtk_widget_set_usize(dict_win,480,300); gtk_widget_set_uposition(dict_win,300,200); // gtk_window_set_policy(GTK_WINDOW(dict_win),FALSE,FALSE,FALSE); gtk_container_border_width(GTK_CONTAINER(dict_win),0); gtk_signal_connect (GTK_OBJECT (dict_win), "delete_event", GTK_SIGNAL_FUNC(dict_quit), dict_win); /* vbox */ vbox = gtk_vbox_new(TRUE,0); gtk_container_add(GTK_CONTAINER(dict_win),vbox); gtk_widget_show(vbox); /* hbox */ hbox = gtk_hbox_new(TRUE,0); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); gtk_widget_show(hbox); /* dict label */ xpm_label = create_img_box(PRE_DIR"icon/dict.png","Search:"); gtk_box_pack_start(GTK_BOX(hbox),xpm_label,FALSE,FALSE,0); gtk_widget_show(xpm_label); /* input word editor */ input_entry = gtk_entry_new(); gtk_entry_set_max_length (GTK_ENTRY(input_entry), 50); g_signal_connect (G_OBJECT(input_entry), "activate", G_CALLBACK (dict_search),input_entry); gtk_box_pack_start(GTK_BOX(hbox),input_entry,FALSE,FALSE,0); gtk_widget_show(input_entry); // font gtk_widget_modify_font((GtkWidget *) input_entry, font); /* search button */ search_button = create_img_button(PRE_DIR"icon/search.png", "Go", "Go", dict_search, search_button); gtk_box_pack_start(GTK_BOX(hbox),search_button,FALSE,FALSE,0); gtk_widget_show(search_button); /* h_line */ h_line = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox),h_line,FALSE,FALSE,0); gtk_widget_show(h_line); /* result label */ sprintf(temp,"%d",word_count); strcpy(str,""); strcat(str,"Wordbook: "); strcat(str,S_conf.filename); strcat(str," Total words: "); strcat(str,temp); book_label = gtk_label_new(str); gtk_box_pack_start(GTK_BOX(vbox),book_label,FALSE,FALSE,0); // left // gtk_label_set_justify(GTK_LABEL(book_label),GTK_JUSTIFY_LEFT); gtk_widget_show(book_label); pad_label = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(vbox),pad_label,FALSE,FALSE,0); gtk_widget_show(pad_label); result_label = gtk_label_new("EN-CH and CH-EN Dictionary"); gtk_box_pack_start(GTK_BOX(vbox),result_label,FALSE,FALSE,0); gtk_widget_show(result_label); ps1_label = gtk_label_new("You can input English or Chinese word"); gtk_box_pack_start(GTK_BOX(vbox),ps1_label,FALSE,FALSE,0); gtk_widget_show(ps1_label); ps2_label = gtk_label_new("It will search in the config wordbook"); gtk_box_pack_start(GTK_BOX(vbox),ps2_label,FALSE,FALSE,0); gtk_widget_show(ps2_label); ps3_label = gtk_label_new("mini dictionary "); gtk_box_pack_start(GTK_BOX(vbox),ps3_label,FALSE,FALSE,0); gtk_widget_show(ps3_label); //font //gtk_widget_modify_font((GtkWidget *) book_label, font2); gtk_widget_modify_font((GtkWidget *) result_label, font2); gtk_widget_modify_font((GtkWidget *) ps1_label, font2); gtk_widget_modify_font((GtkWidget *) ps2_label, font2); gtk_widget_modify_font((GtkWidget *) ps3_label, font2); /* h_line */ h_line = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox),h_line,FALSE,FALSE,0); gtk_widget_show(h_line); /* button */ hbox = gtk_hbox_new(TRUE,0); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); gtk_widget_show(hbox); quit_button = create_img_button(PRE_DIR"icon/exit.png", "Quit", "Quit", dict_quit, quit_button); gtk_box_pack_start(GTK_BOX(hbox),quit_button,FALSE,FALSE,0); gtk_widget_show(quit_button); /* show all!over! */ gtk_widget_set_sensitive(input_entry,1); show_stop(); old_word_index = S_state.word_index; gtk_widget_hide(window); gtk_widget_show(dict_win); } //half search,S_line have result //search for EN int do_EN_search(gchar word[256],int begin,int end) { int i ; for(i=begin;i<=end;i++) { //S_state.word_index = (begin + end)/2; S_state.word_index = i; read_line();//load in S_line struct; //g_print("strcmp %d \n",strcmp(word,S_line.EN_word)); if((strcmp(word,S_line.EN_word))==0) { //found! return 1; } } return 0; } //search for CH int do_CH_search(gchar word[256],int begin,int end) { int i ; int flag=0; //init 0 CH_line_index = 0; g_print("CH search \n"); for(i=begin;i<=end;i++) { //S_state.word_index = (begin + end)/2; S_state.word_index = i; read_line();//load in S_line struct; if((strstr(S_line.CH_word,word)) != NULL) { //found! flag = 1; CH_line_result[CH_line_index] = S_line; CH_line_index++; //avoid overflow if(CH_line_index>=8) break; } } return flag; } //search EN successfully,show result void dict_show_EN_success() { gchar result_str[256]; gchar ps1_str[256]; gchar ps2_str[256]; gchar ps3_str[256]; g_print("search successfully !\n"); strcpy(result_str,""); strcpy(ps1_str,""); strcpy(ps2_str,""); strcpy(ps3_str,""); strcat(result_str,S_line.EN_word); strcat(result_str,"\n"); strcat(ps1_str,""); strcat(ps1_str,S_line.TK_word); strcat(ps1_str,"\n"); strcat(ps2_str,""); strcat(ps2_str,S_line.CH_word); gtk_label_set(GTK_LABEL(result_label),result_str); gtk_label_set(GTK_LABEL(ps1_label),ps1_str); gtk_label_set(GTK_LABEL(ps2_label),ps2_str); gtk_label_set(GTK_LABEL(ps3_label),ps3_str); read_word(S_line.EN_word); } //search CH successfully,show result void dict_show_CH_success() { int i; struct line_st myline; gchar result_str[256]; gchar ps1_str[256]; g_print("search successfully !\n"); strcpy(result_str,""); strcpy(ps1_str,""); gtk_label_set(GTK_LABEL(result_label),""); gtk_label_set(GTK_LABEL(ps1_label),""); gtk_label_set(GTK_LABEL(ps2_label),""); gtk_label_set(GTK_LABEL(ps3_label),""); for(i=0;itext_length); }