diff options
Diffstat (limited to 'mixgtk/mixgtk_gen_handlers.c')
| -rw-r--r-- | mixgtk/mixgtk_gen_handlers.c | 92 | 
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)  { | 
