Patch #5672
[pspp-builds.git] / src / ui / gui / psppire-data-store.c
index d75348584211afe2e72b3dbe5da8f8975c6d7fc9..986f30e02d1cf109fedeb3d86db0248eeee592ae 100644 (file)
@@ -286,6 +286,25 @@ delete_variables_callback (GObject *obj, gint var_num, gint n_vars, gpointer dat
                                   var_num, -1);
 }
 
+
+static void
+variable_changed_callback (GObject *obj, gint var_num, gpointer data)
+{
+  PsppireDataStore *store;
+
+  g_return_if_fail (data);
+
+  store  = PSPPIRE_DATA_STORE (data);
+
+  g_sheet_column_columns_changed (G_SHEET_COLUMN (store),
+                                 var_num, 1);
+
+
+  g_sheet_model_range_changed (G_SHEET_MODEL (store),
+                              -1, var_num,
+                              -1, var_num);
+}
+
 static void
 insert_variable_callback (GObject *obj, gint var_num, gpointer data)
 {
@@ -298,8 +317,10 @@ insert_variable_callback (GObject *obj, gint var_num, gpointer data)
 
   if ( var_num > 0 )
     {
-      struct variable *variable;
-      variable = psppire_dict_get_variable (store->dict, var_num);
+      struct variable *variable =
+       psppire_dict_get_variable (store->dict, var_num);
+
+      g_assert (variable != NULL);
 
       posn = var_get_case_index (variable);
     }
@@ -348,7 +369,6 @@ psppire_data_store_new (PsppireDict *dict)
 
   psppire_data_store_set_dictionary (retval, dict);
 
-
   return retval;
 }
 
@@ -365,8 +385,6 @@ psppire_data_store_new (PsppireDict *dict)
 void
 psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict)
 {
-  gint var_cnt = psppire_dict_get_next_value_idx (dict);
-
   data_store->dict = dict;
 
   if ( data_store->case_file)
@@ -375,7 +393,9 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di
       data_store->case_file = 0;
     }
 
-  data_store->case_file = psppire_case_file_new (var_cnt);
+  data_store->case_file = psppire_case_file_new ();
+
+
 
   g_signal_connect (data_store->case_file, "cases-deleted",
                   G_CALLBACK (delete_cases_callback),
@@ -398,6 +418,11 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di
                   G_CALLBACK (delete_variables_callback),
                   data_store);
 
+  g_signal_connect (dict, "variable-changed",
+                  G_CALLBACK (variable_changed_callback),
+                  data_store);
+
+
   g_signal_connect (dict, "dict-size-changed",
                    G_CALLBACK (dict_size_change_callback),
                    data_store);
@@ -474,8 +499,12 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
 
   pv = psppire_dict_get_variable (store->dict, column);
 
+  g_assert (pv);
+
   idx = var_get_case_index (pv);
 
+  g_assert (idx >= 0);
+
   v = psppire_case_file_get_value (store->case_file, row, idx);
 
   g_return_val_if_fail (v, NULL);
@@ -821,3 +850,4 @@ psppire_data_store_sheet_row_init (GSheetRowIface *iface)
 
   iface->get_button_label = geometry_get_row_button_label;
 }
+