2 #include <libchimara/chimara-glk.h>
3 #include <libchimara/chimara-if.h>
6 #define LOAD_WIDGET(name) GTK_WIDGET(gtk_builder_get_object(builder, name))
9 GtkWidget *window, *test_picker, *go, *stop, *interp;
13 on_window_delete_event()
20 on_go_clicked(GtkButton *go, Widgets *w)
24 gchar *filename = NULL;
26 GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(w->test_picker));
27 gtk_combo_box_get_active_iter(GTK_COMBO_BOX(w->test_picker), &iter);
28 gtk_tree_model_get(model, &iter, 1, &filename, -1);
29 g_object_unref(model);
31 if( !chimara_if_run_game(CHIMARA_IF(w->interp), filename, &error) )
33 error_dialog(GTK_WINDOW(w->window), error, "Error starting Glk library: ");
37 gtk_widget_set_sensitive(w->go, FALSE);
38 gtk_widget_set_sensitive(w->stop, TRUE);
39 gtk_widget_set_sensitive(w->test_picker, FALSE);
43 on_stop_clicked(GtkButton *stop, Widgets *w)
45 chimara_glk_stop( CHIMARA_GLK(w->interp) );
46 chimara_glk_wait( CHIMARA_GLK(w->interp) );
48 gtk_widget_set_sensitive(w->stop, FALSE);
49 gtk_widget_set_sensitive(w->go, TRUE);
50 gtk_widget_set_sensitive(w->test_picker, TRUE);
54 on_glulxe_toggled(GtkToggleButton *glulxe, Widgets *w)
56 if(gtk_toggle_button_get_active(glulxe))
57 chimara_if_set_preferred_interpreter(CHIMARA_IF(w->interp), CHIMARA_IF_FORMAT_GLULX, CHIMARA_IF_INTERPRETER_GLULXE);
61 on_git_toggled(GtkToggleButton *git, Widgets *w)
63 if(gtk_toggle_button_get_active(git))
64 chimara_if_set_preferred_interpreter(CHIMARA_IF(w->interp), CHIMARA_IF_FORMAT_GLULX, CHIMARA_IF_INTERPRETER_GIT);
68 main(int argc, char *argv[])
72 if( !g_thread_supported() )
75 gtk_init(&argc, &argv);
77 GtkBuilder *builder = gtk_builder_new();
78 if(!gtk_builder_add_from_file(builder, "glulxercise.ui", &error))
80 error_dialog(NULL, error, "Failed to build interface: ");
84 Widgets *w = g_slice_new0(Widgets);
85 w->window = LOAD_WIDGET("window");
86 GtkWidget *vbox = LOAD_WIDGET("vbox");
87 w->test_picker = LOAD_WIDGET("test_picker");
88 w->go = LOAD_WIDGET("go");
89 w->stop = LOAD_WIDGET("stop");
90 w->interp = chimara_if_new();
91 gtk_box_pack_end_defaults(GTK_BOX(vbox), w->interp);
92 gtk_builder_connect_signals(builder, w);
93 gtk_widget_show_all(w->window);
99 chimara_glk_stop( CHIMARA_GLK(w->interp) );
100 chimara_glk_wait( CHIMARA_GLK(w->interp) );
102 g_slice_free(Widgets, w);