Warnings: function type cast for g_list_foreach
[pspp] / src / ui / gui / psppire-data-store.c
index 8ac492884c1c11b88709e809dfc56793443ff828..0310601501c903de5d1f09bd3fa6ee6a8d559df0 100644 (file)
@@ -46,9 +46,6 @@
 
 #include "value-variant.h"
 
-static void psppire_data_store_init            (PsppireDataStore      *data_store);
-static void psppire_data_store_class_init      (PsppireDataStoreClass *class);
-
 static void psppire_data_store_finalize        (GObject           *object);
 static void psppire_data_store_dispose        (GObject           *object);
 
@@ -155,9 +152,20 @@ psppire_data_store_string_to_value (GtkTreeModel *model, gint col, gint row,
 
   union value val;
   value_init (&val, width);
-  char *xx =
-    data_in (ss_cstr (in), psppire_dict_encoding (store->dict),
-            fmt->type, &val, width, "UTF-8");
+  const struct val_labs *value_labels = var_get_value_labels (variable);
+  const union value *vp = NULL;
+  if (value_labels)
+    {
+      vp = val_labs_find_value (value_labels, in);
+      if (vp)
+       value_copy (&val, vp, width);
+    }
+  char *xx = NULL;
+  if (vp == NULL)
+    {
+      xx = data_in (ss_cstr (in), psppire_dict_encoding (store->dict),
+                   fmt->type, &val, width, "UTF-8");
+    }
 
   GVariant *vrnt = value_variant_new (&val, width);
   value_destroy (&val, width);
@@ -176,7 +184,7 @@ unlabeled_value (PsppireDataStore *store, const struct variable *variable, const
     return g_strdup ("");
 
   const struct fmt_spec *fmt = var_get_print_format (variable);
-  return data_out (val, psppire_dict_encoding (store->dict),  fmt);
+  return value_to_text__ (*val, fmt, psppire_dict_encoding (store->dict));
 }
 
 gchar *
@@ -272,44 +280,9 @@ __tree_model_init (GtkTreeModelIface *iface)
   iface->iter_parent     = NULL;
 }
 
-
-GType
-psppire_data_store_get_type (void)
-{
-  static GType data_store_type = 0;
-
-  if (!data_store_type)
-    {
-      static const GTypeInfo data_store_info =
-      {
-       sizeof (PsppireDataStoreClass),
-       NULL,           /* base_init */
-       NULL,           /* base_finalize */
-        (GClassInitFunc) psppire_data_store_class_init,
-       NULL,           /* class_finalize */
-       NULL,           /* class_data */
-        sizeof (PsppireDataStore),
-       0,
-        (GInstanceInitFunc) psppire_data_store_init,
-      };
-
-      static const GInterfaceInfo tree_model_info = {
-       (GInterfaceInitFunc) __tree_model_init,
-       NULL,
-       NULL
-      };
-
-      data_store_type = g_type_register_static (G_TYPE_OBJECT,
-                                               "PsppireDataStore",
-                                               &data_store_info, 0);
-
-      g_type_add_interface_static (data_store_type, GTK_TYPE_TREE_MODEL,
-                                  &tree_model_info);
-    }
-
-  return data_store_type;
-}
-
+G_DEFINE_TYPE_WITH_CODE (PsppireDataStore, psppire_data_store, G_TYPE_OBJECT,
+                        G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+                                               __tree_model_init))
 
 static void
 psppire_data_store_class_init (PsppireDataStoreClass *class)