Start of new branch involving major rewrite of lib/gtksheet/*
[pspp-builds.git] / src / ui / gui / psppire-data-store.c
index 4f548605f3dd008e6d56b903993df2a2cb502c58..18aaaebade59e82e7ae720831179362ba2f55b5d 100644 (file)
@@ -25,9 +25,9 @@
 #include <data/data-out.h>
 #include <data/variable.h>
 
-#include <gtksheet/gtksheet.h>
 #include <gtksheet/gsheetmodel.h>
 #include <gtksheet/gsheet-column-iface.h>
+#include <gtksheet/gsheet-row-iface.h>
 
 #include <pango/pango-context.h>
 
@@ -39,6 +39,7 @@
 #include <data/missing-values.h>
 #include <data/value-labels.h>
 #include <data/data-in.h>
+#include <data/format.h>
 
 
 static void psppire_data_store_init            (PsppireDataStore      *data_store);
@@ -55,7 +56,6 @@ static gboolean psppire_data_store_clear_datum (GSheetModel *model,
 
 
 #define MIN_COLUMNS 10
-
 #define TRAILING_ROWS 10
 
 static GObjectClass *parent_class = NULL;
@@ -67,7 +67,7 @@ enum  {FONT_CHANGED,
 static guint signals [n_SIGNALS];
 
 
-inline GType
+GType
 psppire_data_store_get_type (void)
 {
   static GType data_store_type = 0;
@@ -161,7 +161,7 @@ psppire_data_store_get_var_count (const GSheetModel *model)
   return psppire_dict_get_var_cnt (store->dict);
 }
 
-inline casenumber
+casenumber
 psppire_data_store_get_case_count (const PsppireDataStore *store)
 {
   return psppire_case_file_get_case_count (store->case_file);
@@ -173,7 +173,7 @@ psppire_data_store_get_value_count (const PsppireDataStore *store)
   return psppire_dict_get_value_cnt (store->dict);
 }
 
-inline casenumber
+casenumber
 psppire_data_store_get_case_count_wrapper (const GSheetModel *model)
 {
   const PsppireDataStore *store = PSPPIRE_DATA_STORE (model);
@@ -676,23 +676,17 @@ gboolean
 psppire_data_store_set_string (PsppireDataStore *store,
                               const gchar *text, glong row, glong col)
 {
+  glong n_cases;
   const struct variable *pv = psppire_dict_get_variable (store->dict, col);
   g_return_val_if_fail (pv, FALSE);
 
-#if 0
-  /* Allow the user to insert a lot of blank cases, simply by skipping rows */
-  for (r = psppire_case_file_get_case_count (store->case_file); r <= row ; ++r)
-    {
+  n_cases = psppire_data_store_get_case_count (store);
 
-      gint c;
+  if ( row > n_cases)
+    return FALSE;
 
-      psppire_case_array_insert_case (store->cases, r, 0, 0);
-
-
-      for (c = 0 ; c < psppire_dict_get_var_cnt (store->dict); ++c )
-       psppire_data_store_clear_datum (model, r, c);
-    }
-#endif
+  if (row == n_cases)
+    psppire_data_store_insert_new_case (store, row);
 
   psppire_case_file_data_in (store->case_file, row,
                              var_get_case_index (pv), ss_cstr (text),
@@ -805,9 +799,11 @@ geometry_set_width (GSheetColumn *geom, glong unit, gint width)
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE (geom);
 
-  struct variable *pv = psppire_dict_get_variable (ds->dict, unit);
+  struct variable *v = psppire_dict_get_variable (ds->dict, unit);
 
-  var_set_display_width (pv, width / ds->width_of_m );
+  g_return_if_fail (v);
+
+  var_set_display_width (v, width / ds->width_of_m );
 }
 
 
@@ -897,7 +893,7 @@ psppire_data_store_sheet_column_init (GSheetColumnIface *iface)
 /* Row related funcs */
 
 static glong
-geometry_get_row_count (const GSheetRow *geom, gpointer data)
+geometry_get_row_count (const GSheetRow *geom)
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE (geom);
 
@@ -907,31 +903,31 @@ geometry_get_row_count (const GSheetRow *geom, gpointer data)
 #define ROW_HEIGHT 25
 
 static gint
-geometry_get_height (const GSheetRow *geom, glong unit, gpointer data)
+geometry_get_height (const GSheetRow *geom, glong unit)
 {
   return ROW_HEIGHT;
 }
 
 static guint
-geometry_get_top_ypixel (const GSheetRow *geo, glong row, gpointer data)
+geometry_get_top_ypixel (const GSheetRow *geo, glong row)
 {
   return row * ROW_HEIGHT;
 }
 
 static glong
-geometry_pixel_to_row (const GSheetRow *geo, guint pixel, gpointer data)
+geometry_pixel_to_row (const GSheetRow *geo, guint pixel)
 {
   glong row  = pixel / ROW_HEIGHT;
 
-  if (row >= geometry_get_row_count (geo, data))
-    row = geometry_get_row_count (geo, data) - 1;
+  if (row >= geometry_get_row_count (geo))
+    row = geometry_get_row_count (geo) - 1;
 
   return row;
 }
 
 
 static gboolean
-geometry_get_row_sensitivity (const GSheetRow *geom, glong unit, gpointer data)
+geometry_get_row_sensitivity (const GSheetRow *geom, glong unit)
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE (geom);
 
@@ -939,9 +935,8 @@ geometry_get_row_sensitivity (const GSheetRow *geom, glong unit, gpointer data)
   return (unit < psppire_case_file_get_case_count (ds->case_file));
 }
 
-
 static gchar *
-geometry_get_row_button_label (const GSheetRow *geom, glong unit, gpointer data)
+geometry_get_row_button_label (const GSheetRow *geom, glong unit)
 {
   gchar *text;
   gchar *s;