pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] psppire/src ChangeLog misc.h val_labs_dialog.c ...


From: John Darrington
Subject: [Pspp-cvs] psppire/src ChangeLog misc.h val_labs_dialog.c ...
Date: Mon, 12 Dec 2005 07:52:51 +0000

CVSROOT:        /sources/pspp
Module name:    psppire
Branch:         
Changes by:     John Darrington <address@hidden>        05/12/12 07:52:51

Modified files:
        src            : ChangeLog misc.h val_labs_dialog.c 
                         val_labs_dialog.h var_sheet.c 

Log message:
        Fixed problem with value labels on non numeric data.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/ChangeLog.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/misc.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/val_labs_dialog.c.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/val_labs_dialog.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/var_sheet.c.diff?tr1=1.27&tr2=1.28&r1=text&r2=text

Patches:
Index: psppire/src/ChangeLog
diff -u psppire/src/ChangeLog:1.8 psppire/src/ChangeLog:1.9
--- psppire/src/ChangeLog:1.8   Mon Nov 28 07:14:23 2005
+++ psppire/src/ChangeLog       Mon Dec 12 07:52:51 2005
@@ -1,3 +1,8 @@
+Mon Dec 12 15:50:47 WST 2005 John Darrington <address@hidden>
+
+       * val_labs_dialog.[ch]: Fixed problem with value labels on non numeric
+       data.
+
 Mon Nov 28 15:11:52 WST 2005 John Darrington <address@hidden>
 
        * data_sheet.c var_sheet.c: Implemented the input and display of
Index: psppire/src/misc.h
diff -u psppire/src/misc.h:1.2 psppire/src/misc.h:1.3
--- psppire/src/misc.h:1.2      Sun Dec 11 10:14:39 2005
+++ psppire/src/misc.h  Mon Dec 12 07:52:51 2005
@@ -28,7 +28,11 @@
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 
+/* Formats a value according to FORMAT 
+   The returned string must be freed when no longer required */
 gchar * value_to_text(union value v, struct fmt_spec format);
+
+
 gboolean text_to_value(const gchar *text, union value *v, 
                       struct fmt_spec format);
 
Index: psppire/src/val_labs_dialog.c
diff -u psppire/src/val_labs_dialog.c:1.3 psppire/src/val_labs_dialog.c:1.4
--- psppire/src/val_labs_dialog.c:1.3   Sun Dec 11 10:14:39 2005
+++ psppire/src/val_labs_dialog.c       Mon Dec 12 07:52:51 2005
@@ -23,10 +23,6 @@
     used for input of the value labels in the variable sheet */
 
 
-/* FIXME: 
-   Much of this code assumes that values are Numeric values.
-   Behaviour needs to be tested (and fixed) for Currency, Shortstring
-   and Date values */ 
 
 #include "val_labs_dialog.h"
 #include "value-labels.h"
@@ -38,15 +34,23 @@
 on_label_entry_change(GtkEntry *entry, gpointer data)
 {
   struct val_labs_dialog *dialog = data;
+  g_assert(dialog->labs);
 
   union value v;
   const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
-  v.f = strtod(text, 0);
+
+  text_to_value(text, &v, dialog->var->write);
 
   if ( val_labs_find (dialog->labs, v) ) 
-    gtk_widget_set_sensitive(dialog->change_button, TRUE);      
+    {
+      gtk_widget_set_sensitive(dialog->change_button, TRUE);      
+      gtk_widget_set_sensitive(dialog->add_button, FALSE);      
+    }
   else
-    gtk_widget_set_sensitive(dialog->change_button, FALSE);      
+    {
+      gtk_widget_set_sensitive(dialog->change_button, FALSE);     
+      gtk_widget_set_sensitive(dialog->add_button, TRUE);       
+    }
 
 }
 
@@ -60,7 +64,7 @@
   const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
   union value v;
-  v.f = strtod(text, 0);
+  text_to_value(text, &v, dialog->var->write);
 
   g_signal_handler_block(GTK_ENTRY(dialog->label_entry), 
                         dialog->change_handler_id);
@@ -93,8 +97,8 @@
 {
   struct val_labs_dialog *dialog = data;
 
-  val_labs_destroy(*dialog->target);
-  *dialog->target = val_labs_copy(dialog->labs);
+  val_labs_destroy(dialog->var->val_labs);
+  dialog->var->val_labs = val_labs_copy(dialog->labs);
   val_labs_destroy (dialog->labs);
   dialog->labs = 0;
 
@@ -170,7 +174,9 @@
 
   union value v;
 
-  v.f = strtod(gtk_entry_get_text(GTK_ENTRY(dialog->value_entry)),0);
+  const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
+
+  text_to_value(text, &v, dialog->var->write);
 
   if ( ! val_labs_add (dialog->labs, v,
                       gtk_entry_get_text(GTK_ENTRY(dialog->label_entry)) ) )
@@ -214,10 +220,8 @@
 
   struct val_lab * vl  = get_selected_tuple(dialog);
 
-  /* FIXME: properly deal with 
-     a) short string variables; 
-     b) format width */
-  gchar * text = g_strdup_printf("%g", vl->value.f);
+  gchar *const text = value_to_text(vl->value, dialog->var->write);
+
   g_signal_handler_block(GTK_ENTRY(dialog->value_entry), 
                         dialog->value_handler_id);
 
@@ -351,7 +355,11 @@
       vl;
       vl = val_labs_next(dialog->labs, &vli))
     {
-      gchar *text = g_strdup_printf("%g = \"%s\"",vl->value.f, vl->label);
+      gchar *const vstr  = value_to_text(vl->value, dialog->var->write);
+                                          
+      
+      gchar *const text = g_strdup_printf("%s = \"%s\"",
+                                         vstr, vl->label);
  
       gtk_list_store_append (list_store, &iter);
       gtk_list_store_set (list_store, &iter,
@@ -360,6 +368,7 @@
                          -1);
 
       g_free(text); 
+      g_free(vstr);
     }
 
   gtk_tree_view_set_model(GTK_TREE_VIEW(dialog->treeview), 
@@ -374,7 +383,7 @@
 val_labs_dialog_show(struct val_labs_dialog *dialog)
 {
   g_assert(!dialog->labs);
-  dialog->labs = val_labs_copy(*dialog->target);
+  dialog->labs = val_labs_copy(dialog->var->val_labs);
 
   gtk_widget_set_sensitive(dialog->remove_button, FALSE);
   gtk_widget_set_sensitive(dialog->change_button, FALSE);
Index: psppire/src/val_labs_dialog.h
diff -u psppire/src/val_labs_dialog.h:1.1 psppire/src/val_labs_dialog.h:1.2
--- psppire/src/val_labs_dialog.h:1.1   Sun Nov 27 08:21:33 2005
+++ psppire/src/val_labs_dialog.h       Mon Dec 12 07:52:51 2005
@@ -38,9 +38,8 @@
 {
   GtkWidget *window;
 
-
-  /* Pointer to the value labels that will (potentially) be updated */
-  struct val_labs **target ;
+  /* The variable to be updated */
+  struct variable *var;
 
   /* Local copy of labels */
   struct val_labs *labs;
Index: psppire/src/var_sheet.c
diff -u psppire/src/var_sheet.c:1.27 psppire/src/var_sheet.c:1.28
--- psppire/src/var_sheet.c:1.27        Sun Dec 11 10:14:39 2005
+++ psppire/src/var_sheet.c     Mon Dec 12 07:52:51 2005
@@ -287,7 +287,7 @@
        if (!val_labs_dialog ) 
            val_labs_dialog = val_labs_dialog_create(xml);
 
-       val_labs_dialog->target = &var->val_labs ;
+       val_labs_dialog->var = var;
 
        g_signal_connect_swapped(GTK_OBJECT(customEntry),
                                 "clicked",
@@ -695,12 +695,14 @@
 
              g_assert(vl);
 
+             const gchar *vstr = value_to_text(vl->value, var->write);
              gchar *const text = 
-               g_strdup_printf("{%g,\"%s\"}_", vl->value.f, vl->label);
+               g_strdup_printf("{%s,\"%s\"}_", vstr, vl->label);
 
              gtk_sheet_set_cell_text(sheet, row, c, text);
              
              g_free(text);
+             g_free(vstr);
 
              val_labs_done(&ip);
            }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]