Actually commit the icons
[pspp-builds.git] / src / ui / gui / psppire-case-array.c
index 159b3cc122fc42e0fb5c8348cffce97453f15440..871e9e154d78ade8e763e5a9a1a0ad24d0941af8 100644 (file)
 
 #include "psppire-object.h"
 #include "psppire-case-array.h"
-#include "gtkextra-marshal.h"
 
-#include "case.h"
+#include <gtksheet/gtkextra-marshal.h>
+
+#include <data/case.h>
 
 /* --- prototypes --- */
 static void psppire_case_array_class_init      (PsppireCaseArrayClass  *class);
@@ -175,24 +176,15 @@ psppire_case_array_resize(PsppireCaseArray *ca,  gint new_size)
   ca->width = new_size;
 }
 
-/* FIXME: add_case and insert_case need to be merged/refactored */
-gboolean
-psppire_case_array_add_case(PsppireCaseArray *ca, 
+
+/* Append a case to the case array.  If FILL_CASE_FUNC is not NULL, 
+ * then use it to populate the case */
+inline gboolean
+psppire_case_array_append_case(PsppireCaseArray *ca, 
                         psppire_case_array_fill_case_func fill_case_func,
                         gpointer aux)
 {
-  g_return_val_if_fail(ca->size < ca->capacity, FALSE);
-
-  case_create(&ca->cases[ca->size], ca->width);
-
-  if ( !fill_case_func(&ca->cases[ca->size], aux))
-    return FALSE;
-
-  ca->size++;
-
-  g_signal_emit(ca, signal[CASE_INSERTED], 0, ca->size - 1);  
-
-  return TRUE;
+  return psppire_case_array_insert_case(ca, ca->size, fill_case_func, aux);
 }
 
 
@@ -214,33 +206,44 @@ psppire_case_array_iterate_case(PsppireCaseArray *ca,
 }
 
 
-void
-psppire_case_array_insert_case(PsppireCaseArray *ca, gint posn)
+/* Insert a new case before case POSN.
+ * If FILL_CASE_FUNC is not NULL, then use it to populate the new case */
+gboolean
+psppire_case_array_insert_case(PsppireCaseArray *ca, gint posn,
+                              psppire_case_array_fill_case_func fill_case_func,
+                              gpointer aux)
+
 {
-  g_return_if_fail(posn >= 0);
-  g_return_if_fail(posn <= ca->size);
+  gint i;
 
-  g_assert(ca->size + 1 <= ca->capacity);
+  g_return_val_if_fail(posn >= 0, FALSE);
+  g_return_val_if_fail(posn <= ca->size, FALSE);
 
-  gint i;
+  g_return_val_if_fail(ca->size < ca->capacity, FALSE);
 
   for(i = ca->size; i > posn ; --i)
       case_move(&ca->cases[i], &ca->cases[i - 1]);
 
   case_create(&ca->cases[posn], ca->width);
 
+  if ( fill_case_func && !fill_case_func(&ca->cases[posn], aux))
+    return FALSE;
+
   ca->size++;
   g_signal_emit(ca, signal[CASE_INSERTED], 0, posn);
+
+  return TRUE;
 }
 
 void
 psppire_case_array_delete_cases(PsppireCaseArray *ca, gint first, gint n_cases)
 {
+  gint i;
+
   g_return_if_fail(n_cases > 0);
   g_return_if_fail(first >= 0);
   g_return_if_fail(first + n_cases < ca->size);
   
-  gint i;
 
   /* FIXME: Is this right ?? */
   for ( i = first; i < first + n_cases ; ++i ) 
@@ -289,13 +292,17 @@ psppire_case_array_set_value(PsppireCaseArray *ca, gint c, gint idx,
                          value_fill_func_t ff,
                          gpointer data)
 {
+  struct ccase *cc ;
+  union value *val ;
+  gboolean changed ;
+
   g_return_if_fail(c < ca->size);
 
-  struct ccase *cc = &ca->cases[c];
+  cc = &ca->cases[c];
 
-  union value *val = case_data_rw(cc, idx);
+  val = case_data_rw(cc, idx);
 
-  gboolean changed = ff(val, data);
+  changed = ff(val, data);
 
   case_unshare(cc);