Unsaved indicator for data files.
[pspp-builds.git] / src / ui / gui / psppire-data-window.c
index 5facbbd257dfc9f0c3bd78aece4bff2a9f6055b7..40e41dccca4bc544dbc51d56d4e326d264170d19 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);
 }
 
 
@@ -337,9 +334,11 @@ open_data_file (const gchar *file_name, PsppireDataWindow *de)
 
   if (execute_syntax (sss) )
   {
-    //    window_set_name_from_filename ((struct editor_window *) de, file_name);
+    psppire_window_set_filename (PSPPIRE_WINDOW (de), file_name);
     add_most_recent (file_name);
   }
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -457,6 +456,8 @@ save_file (PsppireDataWindow *de)
   ds_destroy (&file_name);
 
   execute_syntax (sss);
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -544,7 +545,7 @@ data_save_as_dialog (GtkAction *action, PsppireDataWindow *de)
 
        save_file (de);
 
-       //      window_set_name_from_filename (e, de->file_name);
+       psppire_window_set_filename (PSPPIRE_WINDOW (de), de->file_name);
       }
       break;
     default:
@@ -581,7 +582,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);
 }
 
 
@@ -1003,16 +1004,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 +1029,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);
@@ -1705,6 +1713,7 @@ psppire_data_window_init (PsppireDataWindow *de)
   de->data_sheet_cases_popup_menu =
     GTK_MENU (create_data_sheet_cases_popup_menu (de));
 
+  PSPPIRE_WINDOW (de)->menu = GTK_MENU_SHELL (get_widget_assert (de->xml,"Windows_menu"));
 
   g_object_set (de->data_editor,
                "datasheet-column-menu", de->data_sheet_variable_popup_menu,
@@ -1712,7 +1721,7 @@ psppire_data_window_init (PsppireDataWindow *de)
                "varsheet-row-menu", de->var_sheet_variable_popup_menu,
                NULL);
 
-  gtk_widget_show (de->data_editor);
+  gtk_widget_show (GTK_WIDGET (de->data_editor));
   gtk_widget_show (box);
 }
 
@@ -1721,7 +1730,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));
 }