+/**
+ * psppire_case_file_new_from_flexifile:
+ * @returns: a new #PsppireCaseFile object
+ *
+ * Creates a new #PsppireCaseFile from an existing flexifile
+ */
+PsppireCaseFile*
+psppire_case_file_new_from_flexifile (struct flexifile *ff)
+{
+ PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
+
+ cf->flexifile = (struct casefile *) ff;
+
+ return cf;
+}
+
+
+gboolean
+psppire_case_file_delete_cases (PsppireCaseFile *cf, gint n_cases, gint first)
+{
+ int result;
+
+ g_return_val_if_fail (cf, FALSE);
+ g_return_val_if_fail (cf->flexifile, FALSE);
+
+ result = flexifile_delete_cases (FLEXIFILE (cf->flexifile), n_cases, first);
+
+ g_signal_emit (cf, signal[CASES_DELETED], 0, n_cases, first);
+
+ return result;
+}
+
+/* Insert case CC into the case file before POSN */
+gboolean
+psppire_case_file_insert_case (PsppireCaseFile *cf,
+ struct ccase *cc,
+ gint posn)
+{
+ bool result ;
+
+ g_return_val_if_fail (cf, FALSE);
+ g_return_val_if_fail (cf->flexifile, FALSE);
+
+ result = flexifile_insert_case (FLEXIFILE (cf->flexifile), cc, posn);
+
+ if ( result )
+ g_signal_emit (cf, signal[CASE_INSERTED], 0, posn);
+ else
+ g_warning ("Cannot insert case at position %d\n", posn);
+
+ return result;
+}
+