/* Copyright (C) 2001-2002 Kenichi Suto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "global.h" GtkWidget *ending_dlg; GtkWidget *clist_ending; GtkWidget *entry_pattern; GtkWidget *entry_normal; GtkWidget *check_nohit; void clear_ending() { ENDING *ending; GList *list; list = g_list_first(ending_list); while(list){ ending = (ENDING *)(list->data); free(ending->pattern); free(ending->normal); list = g_list_next(list); } g_list_free(ending_list); ending_list = NULL; } void add_ending(ENDING *ending){ ending_list = g_list_append(ending_list, ending); } static void check_changed(GtkWidget *widget,gpointer *data){ if(GTK_TOGGLE_BUTTON(widget)->active){ gtk_widget_set_sensitive(clist_ending, TRUE); gtk_widget_set_sensitive(entry_pattern, TRUE); gtk_widget_set_sensitive(entry_normal, TRUE); gtk_widget_set_sensitive(check_nohit, TRUE); bending_correction = TRUE; } else { gtk_widget_set_sensitive(clist_ending, FALSE); gtk_widget_set_sensitive(entry_pattern, FALSE); gtk_widget_set_sensitive(entry_normal, FALSE); gtk_widget_set_sensitive(check_nohit, FALSE); bending_correction = FALSE; } save_ending(); } static void check_changed2(GtkWidget *widget,gpointer *data){ if(GTK_TOGGLE_BUTTON(widget)->active){ bending_only_nohit = TRUE; } else { bending_only_nohit = FALSE; } save_ending(); } static void ok_ending(GtkWidget *widget,gpointer *data){ int i; gchar *list_pattern; gchar *list_normal; ENDING *ending; gtk_grab_remove(ending_dlg); clear_ending(); for(i=0;;i++){ list_pattern = list_normal = NULL; gtk_clist_get_text(GTK_CLIST(clist_ending), i, 0, &list_pattern); gtk_clist_get_text(GTK_CLIST(clist_ending), i, 1, &list_normal); if(list_pattern == NULL) break; ending = (ENDING *)calloc(sizeof(ENDING), 1); if(ending == NULL){ fprintf(stderr, "No memory\n"); exit(1); } ending->pattern = strdup(list_pattern); ending->normal = strdup(list_normal); add_ending(ending); } save_ending(); gtk_widget_destroy(GTK_WIDGET(data)); auto_lookup_resume(); } static void delete_event( GtkWidget *widget, GdkEvent *event, gpointer data ) { ok_ending(NULL, NULL); } static void remove_entry(GtkWidget *widget,gpointer *data){ GList *selection; int line_no; selection = GTK_CLIST(clist_ending)->selection; if(selection == NULL){ // warning(_("Please select entry.")); return; } line_no = GPOINTER_TO_INT(selection->data); gtk_clist_remove(GTK_CLIST(clist_ending), line_no); } static void add_entry(GtkWidget *widget,gpointer *data){ gchar *pattern; gchar *normal; gchar *list_pattern; gchar *list_normal; char *text[2]; gint i; pattern = gtk_entry_get_text(GTK_ENTRY(entry_pattern)); normal = gtk_entry_get_text(GTK_ENTRY(entry_normal)); if((strlen(pattern) == 0) && (strlen(normal) == 0)){ return; } for(i=0;;i++){ list_pattern = list_normal = NULL; gtk_clist_get_text(GTK_CLIST(clist_ending), 0, i, &list_pattern); gtk_clist_get_text(GTK_CLIST(clist_ending), 1, i, &list_normal); if(list_pattern == NULL) break; if((strcmp(pattern, list_pattern)==0) || strcmp(normal, list_normal)==0){ warning(_("entry already exists")); return; } } text[0] = pattern; text[1] = normal; gtk_clist_append(GTK_CLIST(clist_ending), text); } void preference_ending() { GtkWidget *button; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *vbox2; GtkWidget *label; GtkWidget *scroll; GtkWidget *check_ending; char *text[2]; char *title[2]; ENDING *ending; GList *list; auto_lookup_suspend(); title[0] = _("Pattern"); title[1] = _("Correction"); ending_dlg = gtk_dialog_new(); gtk_window_set_position(GTK_WINDOW(ending_dlg), GTK_WIN_POS_CENTER_ALWAYS); gtk_signal_connect (GTK_OBJECT (ending_dlg), "delete_event", GTK_SIGNAL_FUNC (delete_event), NULL); // gtk_widget_set_usize(ending_dlg,400,280); gtk_grab_add(ending_dlg); gtk_widget_realize(ending_dlg); button = gtk_button_new_with_label(_("Ok")); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (ending_dlg)->action_area), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (ok_ending), (gpointer)ending_dlg); gtk_widget_grab_default (button); vbox = (GtkWidget *)(GTK_DIALOG(ending_dlg)->vbox); gtk_container_border_width(GTK_CONTAINER(vbox), 5); // gtk_container_add(GTK_CONTAINER(frame), vbox); check_ending = gtk_check_button_new_with_label(_("Perform stemming")); gtk_tooltips_set_tip(tooltip, check_ending, _("When ending of each words matches the pattern in the list, normal form of the word will also be tried. It takes longer."),"Private"); gtk_box_pack_start (GTK_BOX(vbox) , check_ending,FALSE,FALSE, 0); gtk_signal_connect (GTK_OBJECT (check_ending), "clicked", GTK_SIGNAL_FUNC (check_changed), NULL); check_nohit = gtk_check_button_new_with_label(_("Stemming only when no hit")); gtk_tooltips_set_tip(tooltip, check_nohit, _("Do not perform stemming when original words hit."),"Private"); gtk_box_pack_start (GTK_BOX(vbox) , check_nohit,FALSE,FALSE, 0); gtk_signal_connect (GTK_OBJECT (check_nohit), "clicked", GTK_SIGNAL_FUNC (check_changed2), NULL); hbox = gtk_hbox_new(FALSE,0); gtk_box_pack_start (GTK_BOX(vbox) , hbox,FALSE, FALSE, 0); vbox2 = gtk_vbox_new(FALSE,0); gtk_box_pack_start (GTK_BOX(hbox) , vbox2,TRUE, TRUE, 0); label = gtk_label_new(_("Pattern")); gtk_box_pack_start (GTK_BOX(vbox2) , label,FALSE, FALSE, 0); entry_pattern = gtk_entry_new(); gtk_widget_set_usize(entry_pattern,90,20); gtk_box_pack_start (GTK_BOX(vbox2) , entry_pattern,FALSE, FALSE, 0); vbox2 = gtk_vbox_new(FALSE,0); gtk_box_pack_start (GTK_BOX(hbox) , vbox2,TRUE, TRUE, 0); label = gtk_label_new(_("Correction")); gtk_box_pack_start (GTK_BOX(vbox2) , label,FALSE, FALSE, 0); entry_normal = gtk_entry_new(); gtk_widget_set_usize(entry_normal,90, 20); gtk_box_pack_start (GTK_BOX(vbox2) , entry_normal, FALSE, FALSE, 0); button = gtk_button_new_with_label(_("Add")); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (add_entry), (gpointer)NULL); button = gtk_button_new_with_label(_("Remove")); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (remove_entry), (gpointer)NULL); scroll = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(scroll,200,150); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX(vbox) ,scroll ,TRUE, TRUE, 0); clist_ending = gtk_clist_new_with_titles(2, title); gtk_clist_column_titles_passive (GTK_CLIST (clist_ending)); gtk_container_add (GTK_CONTAINER (scroll), clist_ending); gtk_clist_set_column_width(GTK_CLIST(clist_ending), 0, 100); gtk_clist_set_column_width(GTK_CLIST(clist_ending), 1, 100); gtk_clist_set_reorderable(GTK_CLIST(clist_ending), TRUE); // gtk_box_pack_start (GTK_BOX(vbox) // , clist_ending,FALSE,FALSE, 0); // gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), // clist_ending); list = g_list_first(ending_list); while(list){ ending = (ENDING *)(list->data); text[0] = ending->pattern; text[1] = ending->normal; gtk_clist_append(GTK_CLIST(clist_ending), text); list = g_list_next(list); } gtk_widget_set_sensitive(clist_ending, bending_correction); gtk_widget_set_sensitive(entry_pattern, bending_correction); gtk_widget_set_sensitive(entry_normal, bending_correction); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_ending), bending_correction); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_nohit), bending_only_nohit); gtk_widget_show_all(ending_dlg); }