model-ghdl/gui.c

102 lines
2.5 KiB
C

#include "gui.h"
#define true 1
#define false 0
int gui_init(int *argc, char ***argv) {
gtk_init (argc, argv);
return 0;
}
int showMessage(int message_type, char *text, char *defaultText, char **reply) {
GtkWidget *window;
GtkWidget *entry;
GtkWidget *buttonOkay;
GtkWidget *buttonCancel;
GtkWidget *buttonBox;
GtkWidget *mainBox;
GtkWidget *label;
gboolean ret;
char *entryText;
ret = true;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "model-ghdl");
label = gtk_label_new(text);
gtk_widget_show(label);
entry = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(entry), (char*) defaultText);
g_signal_connect (entry, "activate",
G_CALLBACK(okay), entry);
buttonOkay = gtk_button_new_with_label("Okay!");
gtk_widget_show(buttonOkay);
if (MESSAGE_IS_INPUT(message_type)) {
buttonCancel = gtk_button_new_with_label("Cancel");
g_signal_connect (buttonCancel, "clicked",
G_CALLBACK(cancel), entry);
gtk_widget_show(buttonCancel);
gtk_widget_show(entry);
}
buttonBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
if (MESSAGE_IS_INPUT(message_type)) {
gtk_box_pack_start(GTK_BOX(buttonBox), buttonCancel, true, true, 0);
}
gtk_box_pack_start(GTK_BOX(buttonBox), buttonOkay, true, true, 0);
g_signal_connect (buttonOkay, "clicked",
G_CALLBACK(okay), entry);
gtk_widget_show(buttonBox);
mainBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
gtk_box_pack_start(GTK_BOX(mainBox), label, true, true, 10);
if (MESSAGE_IS_INPUT(message_type)) {
gtk_box_pack_start(GTK_BOX(mainBox), entry, true, true, 0);
}
gtk_box_pack_start(GTK_BOX(mainBox), buttonBox, false, false, 0);
gtk_widget_show(mainBox);
g_signal_connect (window, "destroy",
G_CALLBACK (cancel), NULL);
gtk_container_add(GTK_CONTAINER(window), mainBox);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 320, 10);
gtk_window_present(GTK_WINDOW(window));
gtk_main();
if (MESSAGE_IS_INPUT(message_type)) {
entryText = (char*) gtk_entry_get_text(GTK_ENTRY(entry));
if (entryText[0] == 0) {
ret = false;
}
else {
*reply = realloc(*reply, sizeof(char)*strlen(entryText));
if (*reply != NULL)
strcpy(*reply, entryText);
ret = true;
}
}
gtk_widget_destroy(window);
return ret;
}
static void okay(GtkWidget *widget, gpointer data)
{
//g_print ("TEXT = %s\n", gtk_entry_get_text(GTK_ENTRY(data)));
gtk_main_quit();
}
static void cancel(GtkWidget *widget, gpointer data)
{
gtk_entry_set_text(GTK_ENTRY(data), "");
gtk_main_quit();
}