gui: Remove unused static variables.
[pspp] / src / ui / gui / psppire-data-store.c
index 047cca78113fddef9a70e1f53becabfc0cacb9fb..59099a153e9297961a659d3bfc1a59b6d70c0ff9 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012  Free Software Foundation
+   Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012, 2013, 2016  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
@@ -205,14 +205,51 @@ delete_variable_callback (GObject *obj, const struct variable *var UNUSED,
 {
   PsppireDataStore *store  = PSPPIRE_DATA_STORE (data);
 
+  g_return_if_fail (store->datasheet);
 
   datasheet_delete_columns (store->datasheet, case_index, 1);
   datasheet_insert_column (store->datasheet, NULL, -1, case_index);
 }
 
+struct resize_datum_aux
+  {
+    const struct dictionary *dict;
+    const struct variable *new_variable;
+    const struct variable *old_variable;
+  };
+
+static void
+resize_datum (const union value *old, union value *new, const void *aux_)
+{
+  const struct resize_datum_aux *aux = aux_;
+  int new_width = var_get_width (aux->new_variable);
+  const char *enc = dict_get_encoding (aux->dict);
+  const struct fmt_spec *newfmt = var_get_print_format (aux->new_variable);
+  char *s = data_out (old, enc, var_get_print_format (aux->old_variable));
+  enum fmt_type type = (fmt_usable_for_input (newfmt->type)
+                        ? newfmt->type
+                        : FMT_DOLLAR);
+  free (data_in (ss_cstr (s), enc, type, new, new_width, enc));
+  free (s);
+}
+
 static void
-variable_changed_callback (GObject *obj, gint var_num, gpointer data)
+variable_changed_callback (GObject *obj, gint var_num, guint what, const struct variable *oldvar,
+                          gpointer data)
 {
+  PsppireDataStore *store  = PSPPIRE_DATA_STORE (data);
+  struct variable *variable = psppire_dict_get_variable (store->dict, var_num);
+
+  if (what & VAR_TRAIT_WIDTH)
+    {
+      int posn = var_get_case_index (variable);
+      struct resize_datum_aux aux;
+      aux.old_variable = oldvar;
+      aux.new_variable = variable;
+      aux.dict = store->dict->dict;
+      datasheet_resize_column (store->datasheet, posn, var_get_width (variable),
+                               resize_datum, &aux);
+    }
 }
 
 static void
@@ -231,55 +268,6 @@ insert_variable_callback (GObject *obj, gint var_num, gpointer data)
   psppire_data_store_insert_value (store, var_get_width (variable), posn);
 }
 
-struct resize_datum_aux
-  {
-    int old_width;
-    int new_width;
-  };
-
-
-void
-resize_datum (const union value *old, union value *new, void *aux_)
-{
-  struct resize_datum_aux *aux = aux_;
-
-  if (aux->new_width == 0)
-    {
-      /* FIXME: try to parse string as number. */
-      new->f = SYSMIS;
-    }
-  else if (aux->old_width == 0)
-    {
-      /* FIXME: format number as string. */
-      value_set_missing (new, aux->new_width);
-    }
-  else
-    value_copy_rpad (new, aux->new_width, old, aux->old_width, ' ');
-}
-
-static void
-dict_size_change_callback (GObject *obj,
-                         gint var_num, gint old_width, gpointer data)
-{
-  PsppireDataStore *store  = PSPPIRE_DATA_STORE (data);
-  struct variable *variable;
-  int posn;
-
-  variable = psppire_dict_get_variable (store->dict, var_num);
-  posn = var_get_case_index (variable);
-
-  if (old_width != var_get_width (variable))
-    {
-      struct resize_datum_aux aux;
-      aux.old_width = old_width;
-      aux.new_width = var_get_width (variable);
-      datasheet_resize_column (store->datasheet, posn, aux.new_width,
-                               resize_datum, &aux);
-    }
-}
-
-
-
 /**
  * psppire_data_store_new:
  * @dict: The dictionary for this data_store.
@@ -364,11 +352,6 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di
        g_signal_connect (dict, "variable-changed",
                          G_CALLBACK (variable_changed_callback),
                          data_store);
-
-      data_store->dict_handler_id [SIZE_CHANGED] =
-       g_signal_connect (dict, "dict-size-changed",
-                         G_CALLBACK (dict_size_change_callback),
-                         data_store);
     }
 
 
@@ -410,6 +393,7 @@ psppire_data_store_dispose (GObject *object)
   if (ds->dispose_has_run)
     return;
 
+  psppire_data_store_set_dictionary (ds, NULL);
 
   /* must chain up */
   (* parent_class->dispose) (object);
@@ -452,6 +436,7 @@ psppire_data_store_get_string (PsppireDataStore *store,
   int width;
 
   g_return_val_if_fail (store != NULL, NULL);
+  g_return_val_if_fail (store->datasheet != NULL, NULL);
   g_return_val_if_fail (var != NULL, NULL);
 
   if (row < 0 || row >= datasheet_get_n_rows (store->datasheet))
@@ -557,17 +542,6 @@ psppire_data_store_get_reader (PsppireDataStore *ds)
   return reader;
 }
 
-
-
-/* Column related funcs */
-
-
-static const gchar null_var_name[]=N_("var");
-
-
-\f
-
-
 /* Returns the CASENUMth case, or a null pointer on failure.
  */
 struct ccase *