/* 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" #include "pixmap.h" #include "dictgroup.h" #include "preference.h" #include "eb.h" #include "multi.h" extern GList *group_list; extern GtkWidget *display_dictbar; static GtkWidget *dict_bar; GtkWidget *dict_box; GtkWidget *combo_group; void show_dict_bar() { gtk_widget_show(dict_bar); bshow_dict_bar = 1; save_preference(); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_dictbar), bshow_dict_bar); } void hide_dict_bar() { gtk_widget_hide(dict_bar); bshow_dict_bar = 0; save_preference(); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_dictbar), bshow_dict_bar); } void toggle_dict_bar(){ if(bshow_dict_bar == 1) hide_dict_bar(); else show_dict_bar(); } static void dict_toggled(GtkWidget *widget, gpointer data) { DICT_GROUP *group; DICT_MEMBER *member; GList *group_item; GList *member_item; gboolean active; int i; active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); group_item = g_list_first(group_list); while(group_item != NULL){ group = (DICT_GROUP *)(group_item->data); if(group->active == TRUE){ member_item = group->member; i = 0; while(member_item != NULL){ member = (DICT_MEMBER *)(member_item->data); if(i == (int)data) member->active = active; i++; member_item = g_list_next(member_item); } } group_item = g_list_next(group_item); } if(ebook_search_method() == SEARCH_METHOD_MULTI) show_multi(); //print_dict_group(); save_dictgroup(); } static void add_dict_buttons(GtkWidget *bar) { GtkWidget *toggle; int idx; char buff[64]; DICT_GROUP *group; DICT_MEMBER *member; GList *group_item; GList *member_item; idx = 0; group_item = g_list_first(group_list); while(group_item != NULL){ group = (DICT_GROUP *)(group_item->data); if(group->active == TRUE){ member_item = group->member; if(idx != 0){ fprintf(stderr, "multipe group active\n"); return; } while(member_item != NULL){ gchar dict_info[512]; gboolean have_multi=FALSE; gint i; member = (DICT_MEMBER *)(member_item->data); if(member->binfo == NULL) { member_item = g_list_next(member_item); continue; } //strncpy(buff, member->binfo->subbook_title, dict_label_bytes); strncpy(buff, member->name, dict_label_bytes); buff[dict_label_bytes] = '\0'; toggle = gtk_toggle_button_new_with_label(buff); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), member->active); gtk_signal_connect( GTK_OBJECT(toggle),"toggled", (GtkSignalFunc)dict_toggled, (gpointer)idx); #if 0 for(i=0;ibinfo->search_method[SEARCH_METHOD_MULTI1+i]) have_multi = TRUE; } sprintf(dict_info, "%s\n%s,%d\n\n%s:%s\n%s:%s\n%s:%s\n%s:%s\n%s:%s\n", member->binfo->subbook_title, member->binfo->book_path, member->binfo->subbook_no, _("Exactword Search"), (member->binfo->search_method[SEARCH_METHOD_EXACTWORD]? "YES" : "NO"), _("Forward Search"), (member->binfo->search_method[SEARCH_METHOD_WORD]? "YES" : "NO"), _("Backward Search"), (member->binfo->search_method[SEARCH_METHOD_ENDWORD]? "YES" : "NO"), _("Keyword Search"), (member->binfo->search_method[SEARCH_METHOD_KEYWORD]? "YES" : "NO"), _("Multiword Search"), (have_multi ? "YES" : "NO") ); gtk_tooltips_set_tip(tooltip, toggle, dict_info,"Private"); #endif gtk_box_pack_start(GTK_BOX(bar), toggle, FALSE, FALSE, 2); if(member->binfo->available == FALSE) { gtk_widget_set_sensitive(toggle, FALSE); } idx ++; member_item = g_list_next(member_item); } } group_item = g_list_next(group_item); } } void update_dict_bar() { GList *children; GtkBoxChild *child; gtk_widget_hide(dict_box); // ボタンを作りなおす children = GTK_BOX(dict_box)->children; while(children){ child = children->data; children = children->next; if(GTK_IS_TOGGLE_BUTTON(child->widget)) gtk_widget_destroy(child->widget); } add_dict_buttons(dict_box); gtk_widget_show_all(dict_box); } static gint group_changed (GtkWidget *combo){ gchar *text; DICT_GROUP *group; GList *group_item; text = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo_group)->entry)); group_item = g_list_first(group_list); while(group_item != NULL){ group = (DICT_GROUP *)(group_item->data); if(strcmp(group->name, text) == 0){ group->active = TRUE; } else { group->active = FALSE; } group_item = g_list_next(group_item); } update_dict_bar(); save_dictgroup(); if(ebook_search_method() == SEARCH_METHOD_MULTI) show_multi(); //print_dict_group(); return(FALSE); } GtkWidget *create_dict_bar() { GList *list=NULL; GList *group_item; DICT_GROUP *group; gchar *old_group=NULL; GList *children; GtkBoxChild *child; gboolean active; gboolean old; gint active_no; gint old_no; gint i; if(dict_bar){ old_group = strdup(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo_group)->entry))); children = GTK_BOX(dict_bar)->children; while(children){ child = children->data; children = children->next; gtk_widget_destroy(child->widget); } } else { dict_bar = gtk_hbox_new(FALSE, 0); } combo_group = gtk_combo_new(); gtk_widget_set_usize(GTK_WIDGET(combo_group), 120, 10); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(combo_group)->entry), FALSE); gtk_box_pack_start(GTK_BOX(dict_bar), combo_group, FALSE, FALSE, 0); gtk_container_border_width(GTK_CONTAINER(dict_bar), 1); gtk_tooltips_set_tip(tooltip, GTK_COMBO(combo_group)->entry, _("Select dictionary group."),"Private"); active = FALSE; old = FALSE; i = 0; active_no = 0; old_no = 0; group_item = g_list_first(group_list); while(group_item != NULL){ group = (DICT_GROUP *)(group_item->data); if(group->active == TRUE){ active = TRUE; active_no = i; } if(old_group && (strcmp(group->name, old_group) == 0)){ old = TRUE; old_no = i; } list = g_list_append(list, group->name); group_item = g_list_next(group_item); i ++; } if(g_list_length(list) != 0) gtk_combo_set_popdown_strings( GTK_COMBO(combo_group), list) ; if(active == TRUE){ group_item = g_list_nth(group_list, active_no); group = (DICT_GROUP *)(group_item->data); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo_group)->entry), group->name); } else if (old == TRUE){ group_item = g_list_nth(group_list, old_no); group = (DICT_GROUP *)(group_item->data); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo_group)->entry), group->name); } else { group_item = g_list_first(group_list); if(group_item){ group = (DICT_GROUP *)(group_item->data); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo_group)->entry), group->name); group->active = TRUE; } } gtk_signal_connect_object (GTK_OBJECT (GTK_COMBO(combo_group)->entry), "changed", GTK_SIGNAL_FUNC(group_changed), NULL); // ボタンを作りなおす dict_box = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX (dict_bar), dict_box, FALSE, FALSE, 0); add_dict_buttons(dict_box); gtk_widget_show_all(dict_bar); return(dict_bar); }