Improved the encapsulation of PsppireCaseFile
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 12 Jun 2007 01:59:00 +0000 (01:59 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 12 Jun 2007 01:59:00 +0000 (01:59 +0000)
src/ui/gui/psppire-case-file.c
src/ui/gui/psppire-case-file.h
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-data-store.h
src/ui/gui/psppire.c

index 9d3e3a14b4c07e5affe31f0834e4dabbfa8fde4c..ee31c013c33de76c16817fa679708ec1d4cf0ee1 100644 (file)
@@ -133,7 +133,8 @@ psppire_case_file_finalize (GObject *object)
 {
   PsppireCaseFile *cf = PSPPIRE_CASE_FILE (object);
 
-  datasheet_destroy (cf->datasheet);
+  if ( cf->accessible)
+    datasheet_destroy (cf->datasheet);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -142,6 +143,7 @@ static void
 psppire_case_file_init (PsppireCaseFile *cf)
 {
   cf->datasheet = NULL;
+  cf->accessible = FALSE;
 }
 
 
@@ -152,24 +154,17 @@ psppire_case_file_init (PsppireCaseFile *cf)
  * Creates a new #PsppireCaseFile.
  */
 PsppireCaseFile*
-psppire_case_file_new (void)
+psppire_case_file_new (struct casereader *reader)
 {
   PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
 
-  cf->datasheet = datasheet_create (NULL);
+  cf->datasheet = datasheet_create (reader);
+  cf->accessible = TRUE;
 
   return cf;
 }
 
 
-void
-psppire_case_file_replace_datasheet (PsppireCaseFile *cf, struct datasheet *ds)
-{
-  cf->datasheet = ds;
-}
-
-
-
 gboolean
 psppire_case_file_delete_cases (PsppireCaseFile *cf, gint n_cases, gint first)
 {
@@ -234,6 +229,7 @@ inline gint
 psppire_case_file_get_case_count (const PsppireCaseFile *cf)
 {
   g_return_val_if_fail (cf, FALSE);
+  g_return_val_if_fail (cf->accessible, FALSE);
 
   if ( ! cf->datasheet)
     return 0;
@@ -354,6 +350,7 @@ psppire_case_file_insert_values (PsppireCaseFile *cf,
 {
   union value *values;
   g_return_val_if_fail (cf, FALSE);
+  g_return_val_if_fail (cf->accessible, FALSE);
 
   if ( ! cf->datasheet )
     cf->datasheet = datasheet_create (NULL);
@@ -377,3 +374,14 @@ psppire_case_file_get_case (const PsppireCaseFile *cf, gint casenum,
 
   return datasheet_get_row (cf->datasheet, casenum, c);
 }
+
+
+
+struct casereader *
+psppire_case_file_make_reader (PsppireCaseFile *cf)
+{
+  struct casereader *r = datasheet_make_reader (cf->datasheet);
+  cf->accessible = FALSE;
+  return r;
+}
+
index b3fdfcdaa787c2ffea5afd0318fc5f73470cca04..f274624fa9c69731770cb6ec925ac77778cda043 100644 (file)
@@ -49,14 +49,15 @@ typedef struct _PsppireCaseFile        PsppireCaseFile;
 typedef struct _PsppireCaseFileClass PsppireCaseFileClass;
 
 struct ccase;
-struct flexifile;
-struct casefile;
+struct casereader;
 
 struct _PsppireCaseFile
 {
   GObject             parent;
 
+  /* <private> */
   struct datasheet *datasheet;
+  gboolean      accessible;
 };
 
 
@@ -69,7 +70,7 @@ struct _PsppireCaseFileClass
 /* -- PsppireCaseFile --- */
 GType          psppire_case_file_get_type (void);
 
-PsppireCaseFile *psppire_case_file_new (void);
+PsppireCaseFile *psppire_case_file_new (struct casereader *);
 
 gboolean psppire_case_file_insert_case (PsppireCaseFile *cf, struct ccase *c, gint row);
 
@@ -98,16 +99,12 @@ gboolean psppire_case_file_delete_cases (PsppireCaseFile *cf, gint n_rows,
 gboolean psppire_case_file_insert_values (PsppireCaseFile *cf, gint n_values, gint before);
 
 struct case_ordering;
+
 void psppire_case_file_sort (PsppireCaseFile *cf, struct case_ordering *);
 
 gboolean psppire_case_file_get_case (const PsppireCaseFile *cf, gint casenum,
                                    struct ccase *c);
 
-void psppire_case_file_replace_datasheet (PsppireCaseFile *,
-                                          struct datasheet *);
-
-
-
 G_END_DECLS
 
 #endif /* __PSPPIRE_CASE_FILE_H__ */
index d3843177bc116e5f74527bf58b42752990c04021..f711162f725624934d37b672c3e1c2d4424026d4 100644 (file)
@@ -373,29 +373,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 +396,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),
index 1974aed8ddb400e281ff76d7938bc9a9cf83d0ef..9b480c9823854b2b7232d60a696e2a230a354f74 100644 (file)
@@ -84,8 +84,11 @@ struct _PsppireDataStoreClass
 inline GType psppire_data_store_get_type (void) G_GNUC_CONST;
 PsppireDataStore *psppire_data_store_new     (PsppireDict *dict);
 
+void psppire_data_store_set_case_file (PsppireDataStore *data_store,
+                                      PsppireCaseFile *cf);
+
 void psppire_data_store_set_dictionary (PsppireDataStore *data_store,
-                                      PsppireDict *dict);
+                                       PsppireDict *dict);
 
 void psppire_data_store_set_font (PsppireDataStore *store,
                                 const PangoFontDescription *fd);
index d636ab4960781ddc911e0dc813917f9e85de58d4..06b1488762f9ba195e98210291b9041619996b51 100644 (file)
@@ -68,10 +68,9 @@ replace_dictionary (struct dictionary *d)
 static void
 replace_casereader (struct casereader *s)
 {
-  struct datasheet *datasheet = datasheet_create (s);
+  PsppireCaseFile *pcf = psppire_case_file_new (s);
 
-  psppire_case_file_replace_datasheet (the_data_store->case_file,
-                                       datasheet);
+  psppire_data_store_set_case_file (the_data_store, pcf);
 }
 
 void
@@ -100,11 +99,12 @@ initialize (void)
   the_dataset = create_dataset (replace_casereader,
                                replace_dictionary);
 
+
+
   message_dialog_init (the_source_stream);
 
-  dictionary = psppire_dict_new_from_dict (
-                                          dataset_dict (the_dataset)
-                                          );
+  dictionary = psppire_dict_new_from_dict (dataset_dict (the_dataset));
+
 
   bind_textdomain_codeset (PACKAGE, "UTF-8");
 
@@ -113,10 +113,7 @@ initialize (void)
   the_var_store = psppire_var_store_new (dictionary);
 
   the_data_store = psppire_data_store_new (dictionary);
-
-
-  proc_set_active_file_data (the_dataset,
-                            datasheet_make_reader (the_data_store->case_file->datasheet));
+  replace_casereader (NULL);
 
 
   create_icon_factory ();