Refactor code from psppire.c
[pspp] / src / ui / gui / psppire-data-window.c
index cdd00dca1d46c6efb6bd8892295f29ae8bcb0b9a..e2fa79692c112534e756b622601b02af6e2fa848 100644 (file)
@@ -319,8 +319,9 @@ add_most_recent (const char *file_name)
 #endif
 }
 
-static void
-open_data_file (const gchar *file_name, PsppireDataWindow *de)
+void
+psppire_data_window_load_file (PsppireDataWindow *de,
+                                   const gchar *file_name)
 {
   struct getl_interface *sss;
   struct string filename;
@@ -337,6 +338,8 @@ open_data_file (const gchar *file_name, PsppireDataWindow *de)
     psppire_window_set_filename (PSPPIRE_WINDOW (de), file_name);
     add_most_recent (file_name);
   }
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -387,7 +390,7 @@ open_data_dialog (GtkAction *action, PsppireDataWindow *de)
        de->file_name =
          gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
 
-       open_data_file (de->file_name, de);
+       psppire_data_window_load_file (de, de->file_name);
       }
       break;
     default:
@@ -454,6 +457,8 @@ save_file (PsppireDataWindow *de)
   ds_destroy (&file_name);
 
   execute_syntax (sss);
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -916,7 +921,7 @@ on_recent_data_select (GtkMenuShell *menushell,   gpointer user_data)
 
   g_free (uri);
 
-  open_data_file (file, de);
+  psppire_data_window_load_file (de, file);
 
   g_free (file);
 }
@@ -1000,7 +1005,11 @@ on_switch_sheet (GtkNotebook *notebook,
 }
 
 
-
+static void
+set_unsaved (gpointer w)
+{
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (w), TRUE);
+}
 
 static void
 psppire_data_window_init (PsppireDataWindow *de)
@@ -1021,6 +1030,17 @@ psppire_data_window_init (PsppireDataWindow *de)
   de->data_editor =
     PSPPIRE_DATA_EDITOR (psppire_data_editor_new (the_var_store, the_data_store));
 
+  g_signal_connect_swapped (the_data_store, "case-changed",
+                   G_CALLBACK (set_unsaved), de);
+
+  g_signal_connect_swapped (the_data_store, "case-inserted",
+                   G_CALLBACK (set_unsaved), de);
+
+  g_signal_connect_swapped (the_data_store, "cases-deleted",
+                   G_CALLBACK (set_unsaved), de);
+
+  dataset_set_callback (the_dataset, set_unsaved, de);
+
   connect_help (de->xml);
 
   g_object_ref (menubar);