diff options
| -rw-r--r-- | mixgtk/mixgtk.glade | 48 | ||||
| -rw-r--r-- | mixgtk/mixgtk_cmd_dispatcher.c | 7 | ||||
| -rw-r--r-- | mixgtk/mixgtk_cmd_dispatcher.h | 8 | ||||
| -rw-r--r-- | mixgtk/mixgtk_gen_handlers.c | 92 | ||||
| -rw-r--r-- | mixgtk/mixgtk_gen_handlers.h | 7 | 
5 files changed, 137 insertions, 25 deletions
| diff --git a/mixgtk/mixgtk.glade b/mixgtk/mixgtk.glade index 5a74485..e33233a 100644 --- a/mixgtk/mixgtk.glade +++ b/mixgtk/mixgtk.glade @@ -81,6 +81,48 @@  	  <widget>  	    <class>GtkMenuItem</class> +	    <name>edit</name> +	    <tooltip>Edit a MIXAL source file</tooltip> +	    <accelerator> +	      <modifiers>GDK_MOD1_MASK</modifiers> +	      <key>GDK_F4</key> +	      <signal>activate</signal> +	    </accelerator> +	    <signal> +	      <name>activate</name> +	      <handler>on_file_edit_activate</handler> +	      <last_modification_time>Fri, 08 Jun 2001 21:11:13 GMT</last_modification_time> +	    </signal> +	    <label>_Edit...</label> +	    <right_justify>False</right_justify> +	  </widget> + +	  <widget> +	    <class>GtkMenuItem</class> +	    <name>compile</name> +	    <tooltip>Compile a MIXAL source file</tooltip> +	    <accelerator> +	      <modifiers>GDK_MOD1_MASK</modifiers> +	      <key>GDK_F5</key> +	      <signal>activate</signal> +	    </accelerator> +	    <signal> +	      <name>activate</name> +	      <handler>on_file_compile_activate</handler> +	      <last_modification_time>Fri, 08 Jun 2001 21:11:33 GMT</last_modification_time> +	    </signal> +	    <label>_Compile...</label> +	    <right_justify>False</right_justify> +	  </widget> + +	  <widget> +	    <class>GtkMenuItem</class> +	    <name>separator2</name> +	    <right_justify>False</right_justify> +	  </widget> + +	  <widget> +	    <class>GtkMenuItem</class>  	    <name>file_exit</name>  	    <tooltip>Exit application</tooltip>  	    <accelerator> @@ -1701,16 +1743,16 @@        <x>0</x>        <y>7</y>        <width>16</width> -      <height>83</height> +      <height>81</height>      </widget>      <widget>        <class>GtkVSeparator</class>        <name>vseparator5</name> -      <x>352</x> +      <x>354</x>        <y>8</y>        <width>16</width> -      <height>83</height> +      <height>81</height>      </widget>    </widget>  </widget> diff --git a/mixgtk/mixgtk_cmd_dispatcher.c b/mixgtk/mixgtk_cmd_dispatcher.c index 5076727..240cf9e 100644 --- a/mixgtk/mixgtk_cmd_dispatcher.c +++ b/mixgtk/mixgtk_cmd_dispatcher.c @@ -374,6 +374,13 @@ mixgtk_cmd_dispatcher_get_vm (void)    return (mix_vm_t *) mix_vm_cmd_dispatcher_get_vm (dis_data_.dispatcher);  } +/* get the current source file */ +const gchar * +mixgtk_cmd_dispatcher_get_src_path (void) +{ +  return mix_vm_cmd_dispatcher_get_src_file_path (dis_data_.dispatcher); +} +  /* process commands */  void  complete_command_ (void) diff --git a/mixgtk/mixgtk_cmd_dispatcher.h b/mixgtk/mixgtk_cmd_dispatcher.h index 686ba4d..915f72b 100644 --- a/mixgtk/mixgtk_cmd_dispatcher.h +++ b/mixgtk/mixgtk_cmd_dispatcher.h @@ -44,11 +44,9 @@ mixgtk_cmd_dispatcher_get_times (gint *uptime, gint *progtime, gint *laptime);  extern mix_vm_t *  mixgtk_cmd_dispatcher_get_vm (void); -/* make gtk signal callbacks accessible to glade */ -/* new command handler */ -extern void -on_mixvm_cmd_entry_activate (GtkWidget *w, gpointer e); - +/* get the current source file */ +extern const gchar * +mixgtk_cmd_dispatcher_get_src_path (void);  #endif /* MIXGTK_CMD_DISPATCHER_H */ 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)  { diff --git a/mixgtk/mixgtk_gen_handlers.h b/mixgtk/mixgtk_gen_handlers.h index 0442d22..7b63b68 100644 --- a/mixgtk/mixgtk_gen_handlers.h +++ b/mixgtk/mixgtk_gen_handlers.h @@ -37,6 +37,13 @@ extern void  on_file_exit_activate (GtkWidget *w, gpointer data);  extern void +on_file_edit_activate (GtkWidget *w, gpointer data); + +extern void +on_file_compile_activate (GtkWidget *w, gpointer data); + + +extern void  on_clear_breakpoints_activate (GtkWidget *w, gpointer data);  extern void | 
