/*  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 "dictgroup.h"
#include "weblist.h"
#include "mainmenu.h"
#include "shortcut.h"
#include "multi.h"

GtkWidget *display_menubar;
GtkWidget *display_statusbar;
GtkWidget *display_dictbar;
GtkWidget *display_treetab;

extern GtkWidget *note_tree;

static GtkWidget *menubar=NULL;

static gint menuitem_handler (gchar *string)
{

	if(strcmp(string, "file.exit") == 0){
		exit_program(NULL, NULL);
		return(0);
	}

	if(strcmp(string, "search.all") == 0){
		select_any_search();
		return(0);
	}

	if(strcmp(string, "search.exact") == 0){
		select_exactword_search();
		return(0);
	}

	if(strcmp(string, "search.word") == 0){
		select_word_search();
		return(0);
	}

	if(strcmp(string, "search.endword") == 0){
		select_endword_search();
		return(0);
	}

	if(strcmp(string, "search.keyword") == 0){
		select_keyword_search();
		return(0);
	}

	if(strcmp(string, "search.multi") == 0){
		select_multi_search();
		show_multi();
		return(0);
	}

	if(strcmp(string, "search.fulltext") == 0){
		select_fulltext_search();
		return(0);
	}

	if(strcmp(string, "search.internet") == 0){
		select_internet_search();
		return(0);
	}

	if(strcmp(string, "search.menu") == 0){
		show_menu();
		return(0);
	}


	if(strcmp(string, "search.copyright") == 0){
		show_copyright();
		return(0);
	}

	if(strcmp(string, "view.menubar") == 0){
		if(GTK_CHECK_MENU_ITEM(display_menubar)->active) {
			show_menu_bar();
		} else {
			hide_menu_bar();
		}
		return(0);
	}

	if(strcmp(string, "view.statusbar") == 0){
		if(GTK_CHECK_MENU_ITEM(display_statusbar)->active) {
			show_status_bar();
		} else {
			hide_status_bar();
		}
		return(0);
	}

	if(strcmp(string, "view.dictbar") == 0){
		if(GTK_CHECK_MENU_ITEM(display_dictbar)->active) {
			show_dict_bar();
		} else {
			hide_dict_bar();
		}
		return(0);
	}

	if(strcmp(string, "view.treetab") == 0){
		if(GTK_CHECK_MENU_ITEM(display_treetab)->active) {
			show_tree_tab();
		} else {
			hide_tree_tab();
		}
		return(0);
	}

	if(strcmp(string, "pref.dict") == 0){
//		preference_dict();
		preference_dictgroup();
		return(0);
	}

	if(strcmp(string, "pref.ending") == 0){
		preference_ending();
		return(0);
	}

	if(strcmp(string, "pref.shortcut") == 0){
		preference_shortcut();
		return(0);
	}

	if(strcmp(string, "pref.web") == 0){
		preference_weblist();
		return(0);
	}

	if(strcmp(string, "pref.external") == 0){
		preference_external();
		return(0);
	}

	if(strcmp(string, "pref.font") == 0){
		preference_font();
		return(0);
	}

	if(strcmp(string, "pref.misc") == 0){
		misc_preference();
		return(0);
	}

	if(strcmp(string, "dump.item") == 0){
		dump_hex();
		return(0);
	}

	if(strcmp(string, "dump.text") == 0){
		dump_text();
		return(0);
	}

	if(strcmp(string, "help.usage") == 0){
		show_usage();
		return(0);
	}

	if(strcmp(string, "help.home") == 0){
		show_home();
		return(0);
	}

	if(strcmp(string, "help.about") == 0){
		show_about();
		return(0);
	}

	fprintf(stderr, "Unknown menu : %s\n", string);
	return(0);
}

GtkWidget *create_main_menu()
{
	GtkWidget *menu;
	GtkWidget *item;
	GtkWidget *hseparator;
	gint i;
	gchar buff[512];

	if(menubar)
		gtk_widget_destroy(menubar);

	menubar = gtk_menu_bar_new();

	// Program menu
	menu = gtk_menu_new();

	item = gtk_menu_item_new_with_label(_("Exit"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler), 
				  (gpointer)"file.exit");

	item = gtk_menu_item_new_with_label(_("File"));
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);


	// Display menu
	menu = gtk_menu_new();


	item = gtk_menu_item_new();
	gtk_menu_append(GTK_MENU(menu), item);
	hseparator = gtk_hseparator_new();
	gtk_container_add(GTK_CONTAINER (item), hseparator);


	display_menubar = gtk_check_menu_item_new_with_label(_("Menu Bar"));
	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_menubar),
				       bshow_menu_bar);
	gtk_menu_append(GTK_MENU(menu), display_menubar);
	gtk_signal_connect_object(GTK_OBJECT(display_menubar), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"view.menubar");


	display_dictbar = gtk_check_menu_item_new_with_label(_("Dictionary Selection Bar"));
	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_dictbar),
				       bshow_dict_bar);
	gtk_menu_append(GTK_MENU(menu), display_dictbar);
	gtk_signal_connect_object(GTK_OBJECT(display_dictbar), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"view.dictbar");


	display_statusbar = gtk_check_menu_item_new_with_label(_("Status Bar"));
	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_statusbar), 				       bshow_status_bar);
	gtk_menu_append(GTK_MENU(menu), display_statusbar);
	gtk_signal_connect_object(GTK_OBJECT(display_statusbar), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"view.statusbar");

	display_treetab = gtk_check_menu_item_new_with_label(_("Tree Frame Tab"));
	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_treetab), 				       bshow_tree_tab);
	gtk_menu_append(GTK_MENU(menu), display_treetab);
	gtk_signal_connect_object(GTK_OBJECT(display_treetab), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"view.treetab");


	item = gtk_menu_item_new_with_label(_("View"));
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);


	// Search method
	menu = gtk_menu_new();

	item = gtk_menu_item_new_with_label(_("Automatic Search"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler), 
				  (gpointer)"search.all");

	if(menu_exactword_search == TRUE) {
		item = gtk_menu_item_new_with_label(_("Exactword Search"));
		gtk_menu_append(GTK_MENU(menu), item);
		gtk_signal_connect_object(GTK_OBJECT(item), "activate",
					  GTK_SIGNAL_FUNC(menuitem_handler), 
					  (gpointer)"search.exact");
	}

	if(menu_word_search == TRUE) {
		item = gtk_menu_item_new_with_label(_("Forward Search"));
		gtk_menu_append(GTK_MENU(menu), item);
		gtk_signal_connect_object(GTK_OBJECT(item), "activate",
					  GTK_SIGNAL_FUNC(menuitem_handler),
					  (gpointer)"search.word");
	}

	if(menu_endword_search == TRUE) {
		item = gtk_menu_item_new_with_label(_("Backward Search"));
		gtk_menu_append(GTK_MENU(menu), item);
		gtk_signal_connect_object(GTK_OBJECT(item), "activate",
					  GTK_SIGNAL_FUNC(menuitem_handler),
					  (gpointer)"search.endword");
	}

	if(menu_keyword_search == TRUE) {
		item = gtk_menu_item_new_with_label(_("Keyword Search"));
		gtk_menu_append(GTK_MENU(menu), item);
		gtk_signal_connect_object(GTK_OBJECT(item), "activate",
					  GTK_SIGNAL_FUNC(menuitem_handler),
					  (gpointer)"search.keyword");
	}

	if(menu_multi_search == TRUE){
		item = gtk_menu_item_new_with_label(_("Multiword Search"));;
		gtk_menu_append(GTK_MENU(menu), item);
		gtk_signal_connect_object(GTK_OBJECT(item), "activate",
					  GTK_SIGNAL_FUNC(menuitem_handler), 
					  (gpointer)"search.multi");
	}

	if(menu_multi_search == TRUE){
		item = gtk_menu_item_new_with_label(_("Fulltext Search"));;
		gtk_menu_append(GTK_MENU(menu), item);
		gtk_signal_connect_object(GTK_OBJECT(item), "activate",
					  GTK_SIGNAL_FUNC(menuitem_handler), 
					  (gpointer)"search.fulltext");
	}

	item = gtk_menu_item_new();
	gtk_menu_append(GTK_MENU(menu), item);
	hseparator = gtk_hseparator_new();
	gtk_container_add(GTK_CONTAINER (item), hseparator);

	item = gtk_menu_item_new_with_label(_("Menu"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler), 
				  (gpointer)"search.menu");

	item = gtk_menu_item_new_with_label(_("Copyright"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"search.copyright");

	item = gtk_menu_item_new();
	gtk_menu_append(GTK_MENU(menu), item);
	hseparator = gtk_hseparator_new();
	gtk_container_add(GTK_CONTAINER (item), hseparator);

	item = gtk_menu_item_new_with_label(_("Internet Search"));;
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler), 
				  (gpointer)"search.internet");

	item = gtk_menu_item_new_with_label(_("Search"));
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);


	// Preference menu
	menu = gtk_menu_new();


	item = gtk_menu_item_new_with_label(_("Add/Remove Dictionary"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.dict");

	item = gtk_menu_item_new_with_label(_("Stemming"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.ending");

	item = gtk_menu_item_new_with_label(_("Shortcut"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.shortcut");

#ifdef ENABLE_WEBSEARCH
	item = gtk_menu_item_new_with_label(_("Search Engines"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.web");
#endif

	item = gtk_menu_item_new_with_label(_("External Program"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.external");

	item = gtk_menu_item_new_with_label(_("Font"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.font");

	item = gtk_menu_item_new_with_label(_("Misc"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"pref.misc");


	item = gtk_menu_item_new_with_label(_("Settings"));
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);


	// Debug menu
	menu = gtk_menu_new();

	item = gtk_menu_item_new_with_label(_("Hex Dump"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"dump.item");

	item = gtk_menu_item_new_with_label(_("Text Dump"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"dump.text");

	item = gtk_menu_item_new_with_label(_("Debug"));
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);


	// Help menu
	menu = gtk_menu_new();

	item = gtk_menu_item_new_with_label(_("Usage"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"help.usage");

	item = gtk_menu_item_new_with_label(_("Show EBView Home"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"help.home");

	item = gtk_menu_item_new_with_label(_("About"));
	gtk_menu_append(GTK_MENU(menu), item);
	gtk_signal_connect_object(GTK_OBJECT(item), "activate",
				  GTK_SIGNAL_FUNC(menuitem_handler),
				  (gpointer)"help.about");


	item = gtk_menu_item_new_with_label(_("Help"));
	gtk_menu_item_right_justify(GTK_MENU_ITEM(item));
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);


/*
	item = gtk_menu_item_new();
	gtk_menu_item_right_justify(GTK_MENU_ITEM(item));
	pixmap_book = gtk_pixmap_new (book1_pixmap, book1_mask);
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
	gtk_widget_set_sensitive(pixmap_book, FALSE);
	gtk_container_add (GTK_CONTAINER (item), pixmap_book);
	gtk_menu_bar_append(GTK_MENU_BAR(menubar), item);
*/

	gtk_widget_show_all(menubar);

	return(menubar);
}

void toggle_menu_bar()
{
	if(bshow_menu_bar == 1){
		hide_menu_bar();
	} else {
		show_menu_bar();
	}
}

void show_menu_bar()
{
	gtk_widget_show(menubar);
	bshow_menu_bar = 1;
	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_menubar),
				       bshow_menu_bar);

}

void hide_menu_bar()
{
	gtk_widget_hide(menubar);
	bshow_menu_bar = 0;

	gtk_widget_queue_draw(window);
	gtk_widget_queue_resize(window);
	gtk_container_check_resize(GTK_CONTAINER(window));

	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_menubar),
				       bshow_menu_bar);

}

void show_tree_tab(){
	gtk_notebook_set_show_tabs(GTK_NOTEBOOK(note_tree), TRUE);
	bshow_tree_tab = 1;

	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_treetab),
				       bshow_tree_tab);
}

void hide_tree_tab(){
	gtk_notebook_set_show_tabs(GTK_NOTEBOOK(note_tree), FALSE);
	bshow_tree_tab = 0;

	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_treetab),
				       bshow_tree_tab);
}

void toggle_tree_tab(){
	if(bshow_tree_tab == 1){
		hide_tree_tab();
	} else {
		show_tree_tab();
	}
}


syntax highlighted by Code2HTML, v. 0.9.1