/* z80 - Z80 Emulation Copyright (C) 2006 Ian Cowburn (ianc@noddybox.demon.co.uk) 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 ------------------------------------------------------------------------- Simple dialogs $Id$ */ /* ---------------------------------------- INCLUDES */ #include #include #include #include "gtkutil.h" /* ---------------------------------------- CONSTS */ /* ---------------------------------------- GLOBALS */ static GtkWidget *parent; static GtkWidget *dialog; static int dial_done=FALSE; static int selected=FALSE; static char saved_path[PATH_MAX+1]; /* ---------------------------------------- CALLBACKS */ static void Callback(GtkWidget *w, gpointer data) { dial_done=TRUE; selected=(int)data; gtk_widget_destroy(dialog); } static gint DestroyCB(GtkWidget *w, GdkEvent *ev, gpointer data) { Callback(w,data); return TRUE; } static gint NoDestroyCB(GtkWidget *w, GdkEvent *ev, gpointer data) { dial_done=TRUE; selected=(int)data; return TRUE; } static void FselCallback(GtkWidget *w, gpointer data) { dial_done=TRUE; selected=(int)data; if (selected) strcpy(saved_path, gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog))); } /* ---------------------------------------- DialogParent() */ void DialogParent(GtkWidget *w) { parent=w; } /* ---------------------------------------- DialogOK() */ void DialogOK(const char *format, ...) { va_list va; char text[1024]; GtkWidget *button; GtkWidget *label; va_start(va,format); vsnprintf(text,sizeof text,format,va); va_end(va); dialog=gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), "GEMMA -- Alert"); button=gtk_button_new_with_label("OK"); label=gtk_label_new(text); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button,TRUE,TRUE,0); gtk_container_set_border_width(GTK_CONTAINER(dialog),10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label,TRUE,TRUE,0); gtk_signal_connect_object(GTK_OBJECT (button),"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (dialog)); gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parent)); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER_ON_PARENT); gtk_widget_show(button); gtk_widget_show(label); gtk_widget_show(dialog); } /* ---------------------------------------- DialogYesNo() */ int DialogYesNo(const char *format, ...) { va_list va; char text[1024]; GtkWidget *yes; GtkWidget *no; GtkWidget *label; va_start(va,format); vsnprintf(text,sizeof text,format,va); va_end(va); dialog=gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), "GEMMA -- Question"); yes=gtk_button_new_with_label("Yes"); no=gtk_button_new_with_label("No"); label=gtk_label_new(text); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), yes,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), no,TRUE,TRUE,0); gtk_container_set_border_width(GTK_CONTAINER(dialog),10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label,TRUE,TRUE,0); gtk_signal_connect(GTK_OBJECT (yes),"clicked", GTK_SIGNAL_FUNC (Callback), (gpointer)1); gtk_signal_connect(GTK_OBJECT (no),"clicked", GTK_SIGNAL_FUNC (Callback), (gpointer)0); gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", GTK_SIGNAL_FUNC(DestroyCB), (gpointer)0); gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parent)); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER_ON_PARENT); /* gtk_object_set(GTK_OBJECT(dialog),"type",GTK_WINDOW_POPUP,NULL); */ gtk_widget_show(yes); gtk_widget_show(no); gtk_widget_show(label); gtk_widget_show(dialog); dial_done=FALSE; while(!dial_done) gtk_main_iteration(); return selected; } /* ---------------------------------------- DialogFSelect() */ int DialogFSelect(const char *title, char path[]) { dialog=gtk_file_selection_new(title); if (path[0]) gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog),path); gtk_signal_connect(GTK_OBJECT (GTK_FILE_SELECTION(dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC (FselCallback), (gpointer)1); gtk_signal_connect(GTK_OBJECT (GTK_FILE_SELECTION(dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC (FselCallback), (gpointer)0); gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", GTK_SIGNAL_FUNC(NoDestroyCB), (gpointer)0); gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parent)); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER_ON_PARENT); gtk_widget_show(dialog); dial_done=FALSE; while(!dial_done) gtk_main_iteration(); if (selected) strcpy(path,saved_path); gtk_widget_destroy(dialog); return selected; } /* END OF FILE */