From f40f9b8ac4eedc6b0ed6e5245a093d18710cf918 Mon Sep 17 00:00:00 2001 From: jaortega Date: Sat, 10 Mar 2001 02:34:32 +0000 Subject: gui update --- mixgtk/mixgtk_mixvm.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) (limited to 'mixgtk/mixgtk_mixvm.c') 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 #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); +} + -- cgit v1.2.3