/*  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 "eb.h"
#include "preference.h"

static 	GtkWidget *fontsel_dlg;
static 	GtkWidget *font_dlg;
static 	GtkWidget *entry_normal;
static 	GtkWidget *entry_bold;
static 	GtkWidget *entry_italic;
static 	GtkWidget *entry_super;
static  gint font_no;

void load_font(){

	gint height;

	font_normal = gdk_fontset_load (fontset_normal);
	font_bold = gdk_fontset_load (fontset_bold);
	font_superscript = gdk_fontset_load (fontset_superscript);
	font_italic = gdk_fontset_load (fontset_italic);

	font_height = 0;

#if 0
	height = gdk_string_height(font_normal, "|");
	if(font_height < height)
		font_height = height;
	height = gdk_string_height(font_bold, "|");
	if(font_height < height)
		font_height = height;
	height = gdk_string_height(font_italic, "|");
	if(font_height < height)
		font_height = height;

	font_height = gdk_string_height(font_normal, "|");
#endif

	font_ascent = font_normal->ascent;
	font_descent = font_normal->descent;
	font_height = font_ascent + font_descent;
	font_width = font_height;

	v_space = font_height * line_space;


}

void unload_font(){
	gdk_font_unref(font_normal);
	gdk_font_unref(font_bold);
	gdk_font_unref(font_italic);
	gdk_font_unref(font_superscript);
}

static void ok_fontsel(GtkWidget *widget,gpointer *data){
	GdkFont *font;
	gchar *fontname;

	fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel_dlg));

	switch(font_no){
	case 0:
		gtk_entry_set_text(GTK_ENTRY(entry_normal), fontname); 
		break;
	case 1:
		gtk_entry_set_text(GTK_ENTRY(entry_bold), fontname); 
		break;
	case 2:
		gtk_entry_set_text(GTK_ENTRY(entry_italic), fontname); 
		break;
	case 3:
		gtk_entry_set_text(GTK_ENTRY(entry_super), fontname); 
		break;
	}

//	font = gtk_font_selection_dialog_get_font(GTK_FONT_SELECTION_DIALOG(fontsel_dlg));

	gtk_widget_destroy(fontsel_dlg);
	auto_lookup_resume();
}

static void delete_fontsel( GtkWidget *widget,
		   GdkEvent  *event,
		   gpointer   data )
{
	ok_fontsel(NULL, NULL);
}

static void show_fontsel(GtkWidget *widget,gpointer *data){

	gchar *fontname;

	font_no = (gint)data;

	fontsel_dlg = gtk_font_selection_dialog_new("Please select font");

	gtk_signal_connect (GTK_OBJECT (fontsel_dlg), "delete_event",
			    GTK_SIGNAL_FUNC (delete_fontsel), NULL);

	gtk_signal_connect (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG (fontsel_dlg)->ok_button), "clicked",
			    GTK_SIGNAL_FUNC (ok_fontsel), NULL);

	gtk_signal_connect_object (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG (fontsel_dlg)->cancel_button), "clicked",
			    GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer)fontsel_dlg);

	gtk_widget_destroy(GTK_FONT_SELECTION_DIALOG (fontsel_dlg)->apply_button);

	switch(font_no){
	case 0:
		fontname = gtk_entry_get_text(GTK_ENTRY(entry_normal));
		break;
	case 1:
		fontname = gtk_entry_get_text(GTK_ENTRY(entry_bold));
		break;
	case 2:
		fontname = gtk_entry_get_text(GTK_ENTRY(entry_italic));
		break;
	case 3:
		fontname = gtk_entry_get_text(GTK_ENTRY(entry_super));
		break;
	}

	gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontsel_dlg), fontname);


	gtk_widget_show_all(fontsel_dlg);
}

static void ok_font(GtkWidget *widget,gpointer *data){
	gchar *fontname;
	gchar *text;


	// unloadするとなぜか死ぬ
//	unload_font();


	fontname = gtk_entry_get_text(GTK_ENTRY(entry_normal));
	free(fontset_normal);
	fontset_normal = strdup(fontname);

	fontname = gtk_entry_get_text(GTK_ENTRY(entry_bold));
	free(fontset_bold);
	fontset_bold = strdup(fontname);

	fontname = gtk_entry_get_text(GTK_ENTRY(entry_italic));
	free(fontset_italic);
	fontset_italic = strdup(fontname);

	fontname = gtk_entry_get_text(GTK_ENTRY(entry_super));
	free(fontset_superscript);
	fontset_superscript = strdup(fontname);

	gtk_widget_destroy(font_dlg);

	load_font();

	 if((current_book_info != NULL) && 
	    (current_position.page != 0) && 
	    (current_position.offset != 0)) {
		 BOOK_INFO *save_book_info;
		 gint save_page;
		 gint save_offset;
		 
		 save_book_info = current_book_info;
		 save_page = current_position.page;
		 save_offset = current_position.offset;

		 show_result_tree();

		 current_book_info = save_book_info;
		 current_position.page = save_page;
		 current_position.offset = save_offset;

		 text = ebook_get_text(current_book_info,
				       current_position.page,
				       current_position.offset);
		 if(text != NULL){
			 show_text(current_book_info, text);
			 free(text);
		 }

	 } else {
		 show_about();
	 }


	 save_preference();
}

static void delete_font( GtkWidget *widget,
		   GdkEvent  *event,
		   gpointer   data )
{
	ok_font(NULL, NULL);
}


void preference_font(){
	GtkWidget *vbox;
	GtkWidget *button;
	GtkWidget *table;
	GtkWidget *label;
	GtkAttachOptions xoption, yoption;

	auto_lookup_suspend();


	xoption = GTK_EXPAND | GTK_SHRINK;
	yoption = GTK_EXPAND | GTK_SHRINK;

	font_dlg = gtk_dialog_new();
	gtk_window_set_position(GTK_WINDOW(font_dlg), GTK_WIN_POS_CENTER_ALWAYS);

	gtk_signal_connect (GTK_OBJECT (font_dlg), "delete_event",
			    GTK_SIGNAL_FUNC (delete_font), NULL);

	button = gtk_button_new_with_label(_("Ok"));
	GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (font_dlg)->action_area), button,
			    TRUE, TRUE, 0);

	gtk_signal_connect (GTK_OBJECT (button), "clicked",
			    GTK_SIGNAL_FUNC (ok_font), NULL);
	gtk_widget_grab_default (button);

	vbox = (GtkWidget *)(GTK_DIALOG(font_dlg)->vbox);
	gtk_container_border_width(GTK_CONTAINER(vbox), 5);



	table = gtk_table_new(3, 5, FALSE);
	gtk_box_pack_start (GTK_BOX(vbox)
			    , table,FALSE, FALSE, 0);

	label = gtk_label_new(_("Normal"));
	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
			 xoption, yoption, 5, 5);	

	entry_normal = gtk_entry_new();
	gtk_entry_set_text(GTK_ENTRY(entry_normal), fontset_normal);
	gtk_widget_set_usize(entry_normal,400,20);
	gtk_table_attach(GTK_TABLE(table), entry_normal, 1, 2, 0, 1,
			 xoption, yoption, 5, 5);	

	button = gtk_button_new_with_label(_("Choose"));
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
			    GTK_SIGNAL_FUNC (show_fontsel), (gpointer)0);
	gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1,
			 xoption, yoption, 5, 5);	


	label = gtk_label_new(_("Bold"));
	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
			 xoption, yoption, 5, 5);	

	entry_bold = gtk_entry_new();
	gtk_entry_set_text(GTK_ENTRY(entry_bold), fontset_bold);
	gtk_widget_set_usize(entry_bold,400,20);
	gtk_table_attach(GTK_TABLE(table), entry_bold, 1, 2, 1, 2,
			 xoption, yoption, 5, 5);	

	button = gtk_button_new_with_label(_("Choose"));
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
			    GTK_SIGNAL_FUNC (show_fontsel), (gpointer)1);
	gtk_table_attach(GTK_TABLE(table), button, 2, 3, 1, 2,
			 xoption, yoption, 5, 5);	


	label = gtk_label_new(_("Italic"));
	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
			 xoption, yoption, 5, 5);	

	entry_italic = gtk_entry_new();
	gtk_entry_set_text(GTK_ENTRY(entry_italic), fontset_italic);
	gtk_widget_set_usize(entry_italic,400,20);
	gtk_table_attach(GTK_TABLE(table), entry_italic, 1, 2, 2, 3,
			 xoption, yoption, 5, 5);	

	button = gtk_button_new_with_label(_("Choose"));
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
			    GTK_SIGNAL_FUNC (show_fontsel), (gpointer)2);
	gtk_table_attach(GTK_TABLE(table), button, 2, 3, 2, 3,
			 xoption, yoption, 5, 5);	

	label = gtk_label_new(_("Superscript"));
	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
			 xoption, yoption, 5, 5);	


	entry_super = gtk_entry_new();
	gtk_entry_set_text(GTK_ENTRY(entry_super), fontset_superscript);
	gtk_widget_set_usize(entry_super,400,20);
	gtk_table_attach(GTK_TABLE(table), entry_super, 1, 2, 3, 4,
			 xoption, yoption, 5, 5);	

	button = gtk_button_new_with_label(_("Choose"));
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
			    GTK_SIGNAL_FUNC (show_fontsel), (gpointer)3);
	gtk_table_attach(GTK_TABLE(table), button, 2, 3, 3, 4,
			 xoption, yoption, 5, 5);	


	gtk_widget_show_all(font_dlg);
}



syntax highlighted by Code2HTML, v. 0.9.1