/*  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"

static void ok_warning(GtkWidget *widget, gpointer *data);

GtkWidget *dialog;
GtkWidget *warningDlg;

void center_dialog(GtkWidget *window, GtkWidget *dialog){
	gint window_x, window_y;
	gint window_width, window_height;
	gint dialog_x, dialog_y;
	gint dialog_width, dialog_height;

	gdk_window_get_root_origin(window->window, &window_x, &window_y);
	window_width = window->allocation.width;
	window_height = window->allocation.height;
	dialog_width = dialog->allocation.width;
	dialog_height = dialog->allocation.height;

	if((window_width <= dialog_width) || 
	   (window_height <= dialog_height))
		return;

	dialog_x = window_x + (window_width - dialog_width) / 2;
	dialog_y = window_y + (window_height - dialog_height) / 2;

	gtk_window_reposition(GTK_WINDOW(dialog), dialog_x, dialog_y);
	
	
}

void warning(char *message){
	GtkWidget *button;
	GtkWidget *label;
	GtkWidget *messageBox;

	warningDlg = gtk_dialog_new();
	button = gtk_button_new_with_label("OK");
	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (warningDlg)->action_area), button,
			    TRUE, TRUE, 0);
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
			    GTK_SIGNAL_FUNC (ok_warning), (gpointer)"OK");
	gtk_widget_show (button);
	//  gtk_container_border_width(GTK_CONTAINER (GTK_DIALOG (warningDlg)->vbox), 5;)
	
	messageBox = gtk_vbox_new(FALSE,0);
	gtk_container_border_width(GTK_CONTAINER (messageBox), 10);
	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (warningDlg)->vbox), messageBox, TRUE,TRUE, 0);
	gtk_widget_show(messageBox);
	
	label = gtk_label_new (message);
	gtk_box_pack_start (GTK_BOX (messageBox), label, TRUE,
			    TRUE, 0);
	gtk_widget_show (label); 
	
	gtk_widget_show (warningDlg); 

	center_dialog(window, warningDlg);
	gtk_grab_add(warningDlg);
}

static void ok_warning(GtkWidget *widget, gpointer *data){
	
	gtk_grab_remove(warningDlg);
	gtk_widget_destroy(warningDlg);
}

DialogButtons *g_b;

static void confirm_pushed(GtkWidget *widget, gpointer *data){
	DialogButtons *b;
	int num;
	
	b = (DialogButtons *)gtk_object_get_user_data (GTK_OBJECT(dialog));
	num = (int)data;
	b[num].callback();
	gtk_grab_remove(dialog);
	gtk_widget_destroy(dialog);
}


void confirm(char *message, DialogButtons *b, int count){
	GtkWidget *button;
	GtkWidget *label;
	int i;
	
	dialog = gtk_dialog_new();
	gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 10);
	
	for(i=0;i<count;i++){
		button = gtk_button_new_with_label(b[i].title);
		gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), button,
				    TRUE, TRUE, 0);
		gtk_signal_connect (GTK_OBJECT (button), "clicked",
				    GTK_SIGNAL_FUNC (confirm_pushed), (gpointer)i);
		gtk_widget_show (button);
	}  
	
	label = gtk_label_new (message);
	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, TRUE,TRUE, 0);
	gtk_widget_show (label); 
	
	gtk_widget_show (dialog); 
	center_dialog(window, dialog);
	gtk_grab_add(dialog);
	gtk_object_set_user_data(GTK_OBJECT(dialog), b);
}



syntax highlighted by Code2HTML, v. 0.9.1