Change "union value" to dynamically allocate long strings.
[pspp-builds.git] / src / ui / gui / psppire-dict.c
index 090ad90c5e8223a9efe4b19fb7b90bfbf40c2867..8ff92a48fc57c01f7d255ab27001dd4cdc5c5f15 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2004, 2006, 2007  Free Software Foundation
+   Copyright (C) 2004, 2006, 2007, 2009  Free Software Foundation
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <stdlib.h>
 
 #include <gtk/gtk.h>
-#include <gtksheet/psppire-marshal.h>
+#include <ui/gui/psppire-marshal.h>
 
 #include "psppire-dict.h"
 #include <data/dictionary.h>
 #include <data/missing-values.h>
 #include <data/value-labels.h>
 #include <data/variable.h>
+#include <libpspp/i18n.h>
 
 #include "helper.h"
 #include "message-dialog.h"
@@ -242,11 +243,10 @@ addcb (struct dictionary *d, int idx, void *pd)
 }
 
 static void
-delcb (struct dictionary *d, int dict_idx, int case_idx, int value_cnt,
-       void *pd)
+delcb (struct dictionary *d, int dict_idx, int case_idx, int width, void *pd)
 {
   g_signal_emit (pd, signals [VARIABLE_DELETED], 0,
-                dict_idx, case_idx, value_cnt );
+                 dict_idx, case_idx, width );
 }
 
 static void
@@ -256,9 +256,9 @@ mutcb (struct dictionary *d, int idx, void *pd)
 }
 
 static void
-resize_cb (struct dictionary *d, int idx, int delta, void *pd)
+resize_cb (struct dictionary *d, int idx, int old_width, void *pd)
 {
-  g_signal_emit (pd, signals [VARIABLE_RESIZED], 0, idx, delta);
+  g_signal_emit (pd, signals [VARIABLE_RESIZED], 0, idx, old_width);
 }
 
 static void
@@ -315,7 +315,7 @@ psppire_dict_init (PsppireDict *psppire_dict)
 PsppireDict*
 psppire_dict_new_from_dict (struct dictionary *d)
 {
-  PsppireDict *new_dict = g_object_new (G_TYPE_PSPPIRE_DICT, NULL);
+  PsppireDict *new_dict = g_object_new (PSPPIRE_TYPE_DICT, NULL);
   new_dict->dict = d;
 
   dict_set_callbacks (new_dict->dict, &gui_callbacks, new_dict);
@@ -472,6 +472,17 @@ psppire_dict_get_value_cnt (const PsppireDict *d)
 }
 
 
+/* Returns the prototype for the cases that match the dictionary */
+const struct caseproto *
+psppire_dict_get_proto (const PsppireDict *d)
+{
+  g_return_val_if_fail (d, NULL);
+  g_return_val_if_fail (d->dict, NULL);
+
+  return dict_get_proto (d->dict);
+}
+
+
 /* Return a variable by name.
    Return NULL if it doesn't exist
 */
@@ -530,17 +541,14 @@ void
 psppire_dict_resize_variable (PsppireDict *d, const struct variable *pv,
                              gint old_size, gint new_size)
 {
-  gint fv;
   g_return_if_fail (d);
   g_return_if_fail (d->dict);
 
   if ( old_size == new_size )
     return ;
 
-  fv = var_get_case_index (pv);
-
   g_signal_emit (d, signals [VARIABLE_RESIZED], 0,
-                fv + old_size,
+                var_get_dict_index (pv),
                 new_size - old_size );
 }
 
@@ -752,10 +760,11 @@ tree_model_get_value (GtkTreeModel *model, GtkTreeIter *iter,
     {
     case DICT_TVM_COL_NAME:
       {
-      gchar *name = pspp_locale_to_utf8(var_get_name (var), -1, NULL);
-      g_value_init (value, G_TYPE_STRING);
-      g_value_set_string (value, name);
-      g_free (name);
+       gchar *name = recode_string (UTF8, psppire_dict_encoding (dict),
+                                    var_get_name (var), -1);
+       g_value_init (value, G_TYPE_STRING);
+       g_value_set_string (value, name);
+       g_free (name);
       }
       break;
     case DICT_TVM_COL_VAR:
@@ -859,3 +868,12 @@ psppire_dict_dump (const PsppireDict *dict)
     }
 }
 #endif
+
+
+
+
+const gchar *
+psppire_dict_encoding (const PsppireDict *dict)
+{
+  return dict_get_encoding (dict->dict);
+}