summaryrefslogtreecommitdiffhomepage
path: root/mixgtk/mixgtk_mixvm.c
diff options
context:
space:
mode:
authorjaortega <jaortega>2001-03-10 02:34:32 +0000
committerjaortega <jaortega>2001-03-10 02:34:32 +0000
commitf40f9b8ac4eedc6b0ed6e5245a093d18710cf918 (patch)
tree6a147c075508fc8c833aba7e30916adaf1ab947d /mixgtk/mixgtk_mixvm.c
parent59cc212ebe00245200e5a2d9f2393fbd1ddb4e94 (diff)
downloadmdk-f40f9b8ac4eedc6b0ed6e5245a093d18710cf918.tar.gz
mdk-f40f9b8ac4eedc6b0ed6e5245a093d18710cf918.tar.bz2
gui update
Diffstat (limited to 'mixgtk/mixgtk_mixvm.c')
-rw-r--r--mixgtk/mixgtk_mixvm.c83
1 files changed, 80 insertions, 3 deletions
diff --git a/mixgtk/mixgtk_mixvm.c b/mixgtk/mixgtk_mixvm.c
index ba5023a..16fa410 100644
--- a/mixgtk/mixgtk_mixvm.c
+++ b/mixgtk/mixgtk_mixvm.c
@@ -1,7 +1,7 @@
/* -*-c-*- -------------- mixgtk_mixvm.c :
* Implementation of the functions declared in mixgtk_mixvm.h
* ------------------------------------------------------------------
- * Last change: Time-stamp: "01/03/08 23:22:49 jose"
+ * Last change: Time-stamp: "01/03/09 22:20:59 jose"
* ------------------------------------------------------------------
* Copyright (C) 2001 Free Software Foundation, Inc.
*
@@ -24,14 +24,19 @@
#include <mixlib/xmix_vm.h>
#include "mixgtk_widgets.h"
#include "mixgtk_mixvm.h"
+#include "mixgtk_cmd_dispatcher.h"
/* register widgets */
#define REGISTER_NO_ (MIXGTK_WIDGET_rI6 - MIXGTK_WIDGET_rA + 1)
static GtkEntry *reg_entries_[REGISTER_NO_];
+static GtkEntry *loc_entry_;
static GtkToggleButton *over_button_;
static GtkToggleButton *cmp_buttons_[3];
static GtkCList *memory_;
+static GtkLabel *laptime_;
+static GtkLabel *progtime_;
+static GtkLabel *uptime_;
static mix_vm_t *vm_;
@@ -93,6 +98,18 @@ mixgtk_mixvm_init (mix_vm_t *vm)
g_return_val_if_fail (reg_entries_[k] != NULL, FALSE);
}
+ loc_entry_ = GTK_ENTRY (mixgtk_widget_factory_get (MIXGTK_WIDGET_LOC));
+ g_return_val_if_fail (loc_entry_ != NULL, FALSE);
+
+ uptime_ = GTK_LABEL (mixgtk_widget_factory_get (MIXGTK_WIDGET_UPTIME));
+ g_return_val_if_fail (uptime_ != NULL, FALSE);
+
+ progtime_ = GTK_LABEL (mixgtk_widget_factory_get (MIXGTK_WIDGET_PROGTIME));
+ g_return_val_if_fail (progtime_ != NULL, FALSE);
+
+ laptime_ = GTK_LABEL (mixgtk_widget_factory_get (MIXGTK_WIDGET_LAPTIME));
+ g_return_val_if_fail (laptime_ != NULL, FALSE);
+
over_button_ =
GTK_TOGGLE_BUTTON (mixgtk_widget_factory_get (MIXGTK_WIDGET_OVER));
g_return_val_if_fail (over_button_ != NULL, FALSE);
@@ -118,7 +135,8 @@ mixgtk_mixvm_init (mix_vm_t *vm)
}
gtk_clist_thaw (memory_);
- scrol = mixgtk_widget_factory_get_by_name ("memory_scroll");
+ scrol = mixgtk_widget_factory_get (MIXGTK_WIDGET_CELLS_SCROLL);
+ g_return_val_if_fail (scrol != NULL, FALSE);
adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrol));
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (on_mem_adj_change_), NULL);
@@ -142,7 +160,7 @@ mixgtk_mixvm_update_registers (void)
void
mixgtk_mixvm_update_over_toggle (void)
{
- g_assert (over_button_ != NULL);
+ g_assert (over_button_);
gtk_toggle_button_set_active (over_button_,
mix_vm_get_overflow (vm_));
}
@@ -152,6 +170,9 @@ void
mixgtk_mixvm_update_cmp (void)
{
gint toggle;
+
+ g_assert (cmp_buttons_);
+
toggle = mix_vm_get_cmpflag (vm_);
gtk_toggle_button_set_active (cmp_buttons_[toggle], TRUE);
}
@@ -164,6 +185,8 @@ mixgtk_mixvm_update_cells (void)
static gchar BUFFER[20];
gint k = 0;
+ g_assert (memory_);
+
gtk_clist_freeze (memory_);
while (gtk_clist_row_is_visible (memory_, k) == GTK_VISIBILITY_NONE) ++k;
@@ -177,15 +200,62 @@ mixgtk_mixvm_update_cells (void)
gtk_clist_thaw (memory_);
}
+void
+mixgtk_mixvm_update_cells_to_address (gint address)
+{
+ g_assert (memory_);
+ g_return_if_fail (address < MIX_VM_CELL_NO);
+
+ gtk_clist_freeze (memory_);
+ gtk_clist_moveto (memory_, address, 0, 0, 0);
+ gtk_clist_thaw (memory_);
+ mixgtk_mixvm_update_cells ();
+}
+
+/* update the loc pointer */
+void
+mixgtk_mixvm_update_loc (void)
+{
+ enum {SIZE = 10 };
+ static gchar BUFFER[SIZE];
+ mix_short_t locval;
+
+ g_assert (loc_entry_);
+
+ locval = mix_vm_get_prog_count (vm_);
+ snprintf (BUFFER, SIZE, "%04d", mix_short_magnitude (locval));
+ gtk_entry_set_text (loc_entry_, BUFFER);
+}
+
+/* update times */
+void
+mixgtk_mixvm_update_times (void)
+{
+ enum {SIZE = 20 };
+ static gchar BUFFER[SIZE];
+ gint uptime, progtime, laptime;
+
+ g_assert (uptime_ && progtime_ && laptime_);
+ mixgtk_cmd_dispatcher_get_times (&uptime, &progtime, &laptime);
+ snprintf (BUFFER, SIZE, "%d", uptime);
+ gtk_label_set_text (uptime_, BUFFER);
+ snprintf (BUFFER, SIZE, "%d", progtime);
+ gtk_label_set_text (progtime_, BUFFER);
+ snprintf (BUFFER, SIZE, "%d", laptime);
+ gtk_label_set_text (laptime_, BUFFER);
+}
+
/* update all mixvm widgets */
void
mixgtk_mixvm_update_vm_widgets (void)
{
mixgtk_mixvm_update_registers ();
+ mixgtk_mixvm_update_loc ();
mixgtk_mixvm_update_over_toggle ();
mixgtk_mixvm_update_cmp ();
mixgtk_mixvm_update_cells ();
+ mixgtk_mixvm_update_times ();
}
@@ -218,3 +288,10 @@ on_overflow_toggled (GtkWidget *widget, gpointer data)
}
+void
+on_loc_arrow_clicked (GtkWidget *widget, gpointer data)
+{
+ gint address = mix_short_magnitude (mix_vm_get_prog_count (vm_));
+ mixgtk_mixvm_update_cells_to_address (address);
+}
+