summaryrefslogtreecommitdiffhomepage
path: root/mixgtk/mixgtk_gen_handlers.c
diff options
context:
space:
mode:
Diffstat (limited to 'mixgtk/mixgtk_gen_handlers.c')
-rw-r--r--mixgtk/mixgtk_gen_handlers.c92
1 files changed, 75 insertions, 17 deletions
diff --git a/mixgtk/mixgtk_gen_handlers.c b/mixgtk/mixgtk_gen_handlers.c
index b687a6d..904bcb3 100644
--- a/mixgtk/mixgtk_gen_handlers.c
+++ b/mixgtk/mixgtk_gen_handlers.c
@@ -26,39 +26,35 @@
#include "mixgtk_cmd_dispatcher.h"
#include "mixgtk_config.h"
-void
-on_main_window_destroy (GtkWidget *w, gpointer data)
-{
- gtk_main_quit ();
-}
+typedef void (*file_callback_t)(const gchar *file);
+
+static file_callback_t callback_ = NULL;
static void
-on_file_open_ok_ (GtkWidget *w, gpointer fs)
+on_file_ok_ (GtkWidget *w, gpointer fs)
{
const gchar *file = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
- gchar *command = g_strdup_printf ("%s %s",
- mix_vm_command_to_string (MIX_CMD_LOAD),
- file);
gtk_widget_destroy (GTK_WIDGET (fs));
- mixgtk_cmd_dispatcher_dispatch (command);
- g_free (command);
+ if (callback_) callback_ (file);
}
static void
-on_file_open_destroy_ (GtkWidget *w, gpointer data)
+on_file_destroy_ (GtkWidget *w, gpointer data)
{
gtk_grab_remove (GTK_WIDGET (w));
}
-void
-on_file_open_activate (GtkWidget *w, gpointer data)
+static void show_dlg_ (const gchar *title, const gchar *pattern)
{
- GtkWidget *file = gtk_file_selection_new ("Open program");
+ GtkWidget *file = gtk_file_selection_new (title);
+ if (pattern)
+ gtk_file_selection_complete (GTK_FILE_SELECTION (file), pattern);
+
gtk_signal_connect (GTK_OBJECT (file), "destroy",
- (GtkSignalFunc) on_file_open_destroy_,
+ (GtkSignalFunc) on_file_destroy_,
GTK_OBJECT (file));
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file)->ok_button),
- "clicked", (GtkSignalFunc) on_file_open_ok_,
+ "clicked", (GtkSignalFunc) on_file_ok_,
GTK_OBJECT (file));
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION
(file)->cancel_button),
@@ -68,6 +64,68 @@ on_file_open_activate (GtkWidget *w, gpointer data)
gtk_grab_add (file);
}
+/* exec prompt command */
+static void exec_cmd_ (mix_vm_command_t cmd, const gchar *arg)
+{
+ gchar *command;
+ if (arg)
+ command = g_strdup_printf ("%s %s",
+ mix_vm_command_to_string (cmd),
+ arg);
+ else
+ command = g_strdup (mix_vm_command_to_string (cmd));
+ mixgtk_cmd_dispatcher_dispatch (command);
+ g_free (command);
+}
+
+/* load mix binary */
+static void open_cb_ (const gchar *file)
+{
+ if (file)
+ exec_cmd_ (MIX_CMD_LOAD, file);
+}
+
+void
+on_file_open_activate (GtkWidget *w, gpointer data)
+{
+ callback_ = open_cb_;
+ show_dlg_ ("Load MIX program...", "*.mix");
+}
+
+/* edit mixal source */
+static void edit_cb_ (const gchar *file)
+{
+ exec_cmd_ (MIX_CMD_EDIT, file);
+}
+
+void
+on_file_edit_activate (GtkWidget *w, gpointer data)
+{
+ callback_ = edit_cb_;
+ show_dlg_ ("Edit MIXAL source file...",
+ mixgtk_cmd_dispatcher_get_src_path ());
+}
+
+/* compile mixal source */
+static void compile_cb_ (const gchar *file)
+{
+ exec_cmd_ (MIX_CMD_COMPILE, file);
+}
+
+void
+on_file_compile_activate (GtkWidget *w, gpointer data)
+{
+ callback_ = compile_cb_;
+ show_dlg_ ("Compile MIXAL source file...",
+ mixgtk_cmd_dispatcher_get_src_path ());
+}
+
+void
+on_main_window_destroy (GtkWidget *w, gpointer data)
+{
+ gtk_main_quit ();
+}
+
void
on_debug_run_activate (GtkWidget *w, gpointer p)
{