(Re)enabled cell reference entry and datum entry widgets.
[pspp-builds.git] / src / ui / gui / psppire-data-store.c
index d0a346170bc49ecb215038c625e5684093456b31..af205ccde2c8613c6653ccfe61449b5b459435c2 100644 (file)
@@ -58,11 +58,6 @@ static void psppire_data_store_sheet_row_init (GSheetRowIface *iface);
 
 static void psppire_data_store_finalize        (GObject           *object);
 
-static gchar *psppire_data_store_get_string (const GSheetModel *sheet_model, gint row, gint column);
-
-static gboolean psppire_data_store_set_string (GSheetModel *model,
-                                         const gchar *text, gint row, gint column);
-
 static gboolean psppire_data_store_clear_datum (GSheetModel *model,
                                          gint row, gint column);
 
@@ -199,13 +194,32 @@ psppire_data_store_get_font_desc (const GSheetModel *model,
   return store->font_desc;
 }
 
+static inline gchar *
+psppire_data_store_get_string_wrapper (const GSheetModel *model, gint row,
+                                      gint column)
+{
+  return psppire_data_store_get_string (PSPPIRE_DATA_STORE (model), row, column);
+}
+
+
+static inline gboolean
+psppire_data_store_set_string_wrapper (GSheetModel *model,
+                                      const gchar *text,
+                                      gint row, gint column)
+{
+  return psppire_data_store_set_string (PSPPIRE_DATA_STORE (model), text,
+                                       row, column);
+}
+
+
+
 
 static void
 psppire_data_store_sheet_model_init (GSheetModelIface *iface)
 {
   iface->free_strings = TRUE;
-  iface->get_string = psppire_data_store_get_string;
-  iface->set_string = psppire_data_store_set_string;
+  iface->get_string = psppire_data_store_get_string_wrapper;
+  iface->set_string = psppire_data_store_set_string_wrapper;
   iface->clear_datum = psppire_data_store_clear_datum;
   iface->is_editable = NULL;
   iface->is_visible = NULL;
@@ -373,29 +387,16 @@ psppire_data_store_new (PsppireDict *dict)
 }
 
 
-
-/**
- * psppire_data_store_replace_set_dictionary:
- * @data_store: The variable store
- * @dict: The dictionary to set
- *
- * If a dictionary is already associated with the data-store, then it will be
- * destroyed.
- **/
 void
-psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict)
+psppire_data_store_set_case_file (PsppireDataStore *data_store,
+                                 PsppireCaseFile *cf)
 {
-  data_store->dict = dict;
-
   if ( data_store->case_file)
     {
       g_object_unref (data_store->case_file);
-      data_store->case_file = 0;
     }
 
-  data_store->case_file = psppire_case_file_new ();
-
-
+  data_store->case_file = cf;
 
   g_signal_connect (data_store->case_file, "cases-deleted",
                   G_CALLBACK (delete_cases_callback),
@@ -409,6 +410,22 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di
   g_signal_connect (data_store->case_file, "case-changed",
                   G_CALLBACK (changed_case_callback),
                   data_store);
+}
+
+
+
+/**
+ * psppire_data_store_replace_set_dictionary:
+ * @data_store: The variable store
+ * @dict: The dictionary to set
+ *
+ * If a dictionary is already associated with the data-store, then it will be
+ * destroyed.
+ **/
+void
+psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict)
+{
+  data_store->dict = dict;
 
   g_signal_connect (dict, "variable-inserted",
                   G_CALLBACK (insert_variable_callback),
@@ -477,8 +494,8 @@ psppire_data_store_insert_new_case (PsppireDataStore *ds, gint posn)
 }
 
 
-static gchar *
-psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
+gchar *
+psppire_data_store_get_string (PsppireDataStore *store, gint row, gint column)
 {
   gint idx;
   char *text;
@@ -486,7 +503,6 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
   const struct variable *pv ;
   union value *v ;
   GString *s;
-  PsppireDataStore *store = PSPPIRE_DATA_STORE (model);
 
   g_return_val_if_fail (store->dict, NULL);
   g_return_val_if_fail (store->case_file, NULL);
@@ -507,7 +523,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
 
   v = psppire_case_file_get_value (store->case_file, row, idx, NULL,
                                    var_get_width (pv));
-  
+
   g_return_val_if_fail (v, NULL);
 
   if ( store->show_labels)
@@ -572,12 +588,10 @@ psppire_data_store_clear_datum (GSheetModel *model,
    to ROW, COL with  the value TEXT.
    Returns true if anything was updated, false otherwise.
 */
-static gboolean
-psppire_data_store_set_string (GSheetModel *model,
-                         const gchar *text, gint row, gint col)
+gboolean
+psppire_data_store_set_string (PsppireDataStore *store,
+                              const gchar *text, gint row, gint col)
 {
-  PsppireDataStore *store = PSPPIRE_DATA_STORE (model);
-
   const struct variable *pv = psppire_dict_get_variable (store->dict, col);
   g_return_val_if_fail (pv, FALSE);
 
@@ -683,6 +697,18 @@ psppire_data_store_clear (PsppireDataStore *data_store)
 
 
 
+/* Return a casereader made from this datastore */
+struct casereader *
+psppire_data_store_get_reader (PsppireDataStore *ds)
+{
+  struct casereader *reader ;
+
+  reader = psppire_case_file_make_reader (ds->case_file);
+
+  return reader;
+}
+
+
 
 /* Column related funcs */
 
@@ -847,3 +873,5 @@ psppire_data_store_sheet_row_init (GSheetRowIface *iface)
   iface->get_button_label = geometry_get_row_button_label;
 }
 
+
+