Implement missing values for long string variables.
[pspp-builds.git] / src / ui / gui / var-display.c
index 0ddf79452b5e7d5f4b4b277dc2ce72ee3ac00797..b615fe522b3f76286143daef43bca1b9b42cd49a 100644 (file)
@@ -2,35 +2,19 @@
 #include "var-display.h"
 
 #include <data/variable.h>
+#include <data/format.h>
 #include <stdlib.h>
+#include "psppire-dict.h"
 
 #include <gettext.h>
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
 #include "helper.h"
+#include <libpspp/i18n.h>
 
-const static gchar none[] = N_("None");
+static const gchar none[] = N_("None");
 
-gchar *
-name_to_string (const struct variable *var, GError **err)
-{
-  const char *name = var_get_name (var);
-  g_assert (name);
-
-  return pspp_locale_to_utf8 (name, -1, err);
-}
-
-
-gchar *
-label_to_string (const struct variable *var, GError **err)
-{
-  const char *label = var_get_label (var);
-
-  if ( ! label ) return g_strdup (none);
-
-  return pspp_locale_to_utf8 (label, -1, err);
-}
 
 gchar *
 measure_to_string (const struct variable *var, GError **err)
@@ -44,7 +28,7 @@ measure_to_string (const struct variable *var, GError **err)
 
 
 gchar *
-missing_values_to_string (const struct variable *pv, GError **err)
+missing_values_to_string (const PsppireDict *dict, const struct variable *pv, GError **err)
 {
   const struct fmt_spec *fmt =  var_get_print_format (pv);
   gchar *s;
@@ -61,15 +45,14 @@ missing_values_to_string (const struct variable *pv, GError **err)
          gint i;
          for (i = 0 ; i < n; ++i )
            {
-             union value v;
-             mv_get_value (miss, &v, i);
-             mv[i] = value_to_text (v, *fmt);
+             mv[i] = value_to_text (*mv_get_value (miss, i), *fmt);
              if ( i > 0 )
                g_string_append (gstr, ", ");
              g_string_append (gstr, mv[i]);
              g_free (mv[i]);
            }
-         s = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
+         s = recode_string (UTF8, psppire_dict_encoding (dict),
+                            gstr->str, gstr->len);
          g_string_free (gstr, TRUE);
        }
       else
@@ -89,16 +72,15 @@ missing_values_to_string (const struct variable *pv, GError **err)
          if ( mv_has_value (miss))
            {
              gchar *ss = 0;
-             union value v;
-             mv_get_value (miss, &v, 0);
 
-             ss = value_to_text (v, *fmt);
+             ss = value_to_text (*mv_get_value (miss, 0), *fmt);
 
              g_string_append (gstr, ", ");
              g_string_append (gstr, ss);
              free (ss);
            }
-         s = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
+         s = recode_string (UTF8, psppire_dict_encoding (dict),
+                            gstr->str, gstr->len);
          g_string_free (gstr, TRUE);
        }