Implemented data-store using a casefile instead of an array of cases.
[pspp] / src / ui / gui / psppire-dict.c
index 357ec031b5504aae5de48c72355b4dbf146642df..2cb6894ce957d508a739ca86070c35704689f092 100644 (file)
@@ -46,7 +46,6 @@ static GObjectClass     *parent_class = NULL;
 
 enum  {VARIABLE_CHANGED, 
        VARIABLE_INSERTED,
-       VARIABLE_DELETED, 
        VARIABLES_DELETED, 
        n_SIGNALS};
 
@@ -119,17 +118,6 @@ psppire_dict_class_init (PsppireDictClass *class)
                  1,
                  G_TYPE_INT);
 
-  signal[VARIABLE_DELETED] =
-    g_signal_new ("variable_deleted",
-                 G_TYPE_FROM_CLASS(class),
-                 G_SIGNAL_RUN_FIRST,
-                 0,
-                 NULL, NULL,
-                 g_cclosure_marshal_VOID__INT,
-                 G_TYPE_NONE, 
-                 1,
-                 G_TYPE_INT);
-
 
   signal[VARIABLES_DELETED] =
     g_signal_new ("variables_deleted",
@@ -151,8 +139,6 @@ psppire_dict_finalize (GObject *object)
   gint v;
   PsppireDict *d = PSPPIRE_DICT (object);
   
-
-
   for (v = 0 ; v < psppire_dict_get_var_cnt(d) ; ++v ) 
     g_free(d->variables[v]);
 
@@ -212,10 +198,10 @@ static gchar *
 auto_generate_var_name(PsppireDict *dict)
 {
   gint d = 0;
-  static gchar name[255];
+  static gchar name[10];
 
 
-  while (g_snprintf(name, 255, "VAR%05d",d++),
+  while (g_snprintf(name, 10, "VAR%05d",d++),
         psppire_dict_lookup_var(dict, name))
     ;
 
@@ -228,6 +214,7 @@ auto_generate_var_name(PsppireDict *dict)
 void
 psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name)
 {
+  struct variable *var ;
   gint i;
   g_return_if_fail(d);
   g_return_if_fail(G_IS_PSPPIRE_DICT(d));
@@ -257,12 +244,10 @@ psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name)
   if ( ! name ) 
     name = auto_generate_var_name(d);
   
-  struct variable *var = 
-    dict_create_var(d->dict, name, 0);
+  var = dict_create_var(d->dict, name, 0);
 
   dict_reorder_var(d->dict, var, idx);
 
-
   d->variables[idx] = g_malloc(sizeof (struct PsppireVariable));
   d->variables[idx]->v = var;
   d->variables[idx]->dict = d;
@@ -321,7 +306,6 @@ psppire_dict_set_name(PsppireDict* d, gint idx, const gchar *name)
     {
       /* new variable */
       dict_create_var(d->dict, name, 0);
-      g_print("Emitting variable-inserted signal\n");
       g_signal_emit(d, signal[VARIABLE_INSERTED], 0, idx);
     }
 }
@@ -332,14 +316,17 @@ psppire_dict_set_name(PsppireDict* d, gint idx, const gchar *name)
 struct PsppireVariable *
 psppire_dict_get_variable(PsppireDict *d, gint idx)
 {
+  struct PsppireVariable *var ;
   g_return_val_if_fail(d, NULL);
   g_return_val_if_fail(d->dict, NULL);
-  g_return_val_if_fail(d->variables, NULL);
+
+  if ( ! d->variables) 
+    return NULL;
   
   if (idx < 0 || idx >= psppire_dict_get_var_cnt(d))
     return NULL;
 
-  struct PsppireVariable *var = d->variables[idx] ; 
+  var = d->variables[idx] ; 
 
   if (! var ) 
     {
@@ -394,19 +381,21 @@ psppire_dict_clear(PsppireDict *d)
   g_return_if_fail(d);
   g_return_if_fail(d->dict);
 
-  const gint n_vars = dict_get_var_cnt(d->dict);
-  gint i;
+  {
+    const gint n_vars = dict_get_var_cnt(d->dict);
+    gint i;
   
-  dict_clear(d->dict);
+    dict_clear(d->dict);
 
-  /* Invalidate the entire cache */
-  for ( i = 0 ; i < d->cache_size ; ++i ) 
-    {
-      g_free(d->variables[i]);
-      d->variables[i] = 0;
-    }
+    /* Invalidate the entire cache */
+    for ( i = 0 ; i < d->cache_size ; ++i ) 
+      {
+       g_free(d->variables[i]);
+       d->variables[i] = 0;
+      }
 
-  g_signal_emit(d, signal[VARIABLES_DELETED], 0, 0, n_vars );  
+    g_signal_emit(d, signal[VARIABLES_DELETED], 0, 0, n_vars );  
+  }
 }
 
 
@@ -431,3 +420,10 @@ psppire_dict_check_name(const PsppireDict *dict,
 
   return TRUE;
 }
+
+
+inline gint 
+psppire_dict_get_next_value_idx (const PsppireDict *dict)
+{
+  return dict_get_next_value_idx(dict->dict);
+}