Refactor code from psppire.c
[pspp-builds.git] / src / ui / gui / psppire-data-window.c
index 21226ea56edcbdba88a7032c218bfbb1079405b6..e2fa79692c112534e756b622601b02af6e2fa848 100644 (file)
@@ -100,19 +100,15 @@ psppire_data_window_get_type (void)
   return psppire_data_window_type;
 }
 
+static GObjectClass *parent_class ;
 
 static void
 psppire_data_window_finalize (GObject *object)
 {
   PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (object);
 
-  GObjectClass *class = G_OBJECT_GET_CLASS (object);
-
-  GObjectClass *parent_class = g_type_class_peek_parent (class);
-
   g_object_unref (de->xml);
 
-
   if (G_OBJECT_CLASS (parent_class)->finalize)
     (*G_OBJECT_CLASS (parent_class)->finalize) (object);
 }
@@ -121,6 +117,7 @@ psppire_data_window_finalize (GObject *object)
 static void
 psppire_data_window_class_init (PsppireDataWindowClass *class)
 {
+  parent_class = g_type_class_peek_parent (class);
 }
 
 
@@ -322,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;
@@ -340,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);
 }
 
 
@@ -390,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:
@@ -457,6 +457,8 @@ save_file (PsppireDataWindow *de)
   ds_destroy (&file_name);
 
   execute_syntax (sss);
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -581,7 +583,7 @@ new_file (GtkAction *action, PsppireDataWindow *de)
   g_free (de->file_name);
   de->file_name = NULL;
 
-  //  default_window_name (de);
+  psppire_window_set_filename (PSPPIRE_WINDOW (de), NULL);
 }
 
 
@@ -919,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);
 }
@@ -1003,16 +1005,12 @@ on_switch_sheet (GtkNotebook *notebook,
 }
 
 
-
-
-void
-create_data_window (void)
+static void
+set_unsaved (gpointer w)
 {
-  GtkWidget *w = psppire_data_window_new ();
-  gtk_widget_show (w);
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (w), TRUE);
 }
 
-
 static void
 psppire_data_window_init (PsppireDataWindow *de)
 {
@@ -1032,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);
@@ -1722,7 +1731,7 @@ GtkWidget*
 psppire_data_window_new (void)
 {
   return GTK_WIDGET (g_object_new (psppire_data_window_get_type (),
-                                  "usage", PSPPIRE_WINDOW_USAGE_DATA,
+                                  "description", _("Data Editor"),
                                   NULL));
 }