+ if ( transformations_pending)
+ gtk_label_set_text (GTK_LABEL (status_label),
+ _("Transformations Pending"));
+ else
+ gtk_label_set_text (GTK_LABEL (status_label), "");
+}
+
+
+static void open_data_file (const gchar *, struct data_editor *);
+
+
+/* Puts FILE_NAME into the recent list.
+ If it's already in the list, it moves it to the top
+*/
+static void
+add_most_recent (const char *file_name)
+{
+#if RECENT_LISTS_AVAILABLE
+
+ GtkRecentManager *manager = gtk_recent_manager_get_default();
+ gchar *uri = g_filename_to_uri (file_name, NULL, NULL);
+
+ gtk_recent_manager_remove_item (manager, uri, NULL);
+
+ if ( ! gtk_recent_manager_add_item (manager, uri))
+ g_warning ("Could not add item %s to recent list\n",uri);
+
+ g_free (uri);
+#endif
+}
+
+
+
+#if RECENT_LISTS_AVAILABLE
+
+static void
+on_recent_data_select (GtkMenuShell *menushell, gpointer user_data)
+{
+ gchar *file;
+ struct data_editor *de = user_data;
+
+ gchar *uri =
+ gtk_recent_chooser_get_current_uri (GTK_RECENT_CHOOSER (menushell));
+
+ file = g_filename_from_uri (uri, NULL, NULL);
+
+ g_free (uri);
+
+ open_data_file (file, de);
+
+ g_free (file);
+}
+
+static void
+on_recent_files_select (GtkMenuShell *menushell, gpointer user_data)
+{
+ gchar *file;
+
+ struct syntax_editor *se ;
+
+ gchar *uri =
+ gtk_recent_chooser_get_current_uri (GTK_RECENT_CHOOSER (menushell));
+
+ file = g_filename_from_uri (uri, NULL, NULL);
+
+ g_free (uri);
+
+ se = (struct syntax_editor *)
+ window_create (WINDOW_SYNTAX, file);
+
+ load_editor_from_file (se, file, NULL);
+
+ g_free (file);
+}
+
+#endif
+
+static void
+datum_entry_activate (GtkEntry *entry, gpointer data)
+{
+ gint row, column;
+ GtkSheet *data_sheet = GTK_SHEET (data);
+ PsppireDataStore *store = PSPPIRE_DATA_STORE (gtk_sheet_get_model (data_sheet));
+
+ const char *text = gtk_entry_get_text (entry);
+
+ gtk_sheet_get_active_cell (data_sheet, &row, &column);
+
+ if ( row == -1 || column == -1)
+ return;
+
+ psppire_data_store_set_string (store, text, row, column);
+}
+
+
+/* Update the Edit->Paste menuitem
+ If PAGE is not -1 , then it should be set to the current page of
+ the data editors notebook widget.
+ If -1, then it'll be queried.
+*/
+static void
+update_paste_menuitem (struct data_editor *de, gint page)
+{
+ GtkWidget * edit_paste = get_widget_assert (de->xml, "edit_paste");
+ GtkWidget *notebook = get_widget_assert (de->xml, "notebook");
+ GtkSheet * data_sheet ;
+ gint row, column;
+
+ if ( page < 0 )
+ page = gtk_notebook_get_current_page (GTK_NOTEBOOK(notebook));
+
+
+ if ( PAGE_VAR_SHEET == page )
+ {
+ /* We don't yet support pasting to the var sheet */
+ gtk_widget_set_sensitive (edit_paste, FALSE);
+ return;
+ }
+
+ data_sheet = GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
+
+ gtk_sheet_get_active_cell (data_sheet, &row, &column);
+
+ if ( row < 0 || column < 0 )
+ gtk_widget_set_sensitive (edit_paste, FALSE);
+ else
+ gtk_widget_set_sensitive (edit_paste, TRUE);
+}
+
+/* Update the Edit->Cut and Edit->Copy menuitems
+ If PAGE is not -1 , then it should be set to the current page of
+ the data editors notebook widget.
+ If -1, then it'll be queried.
+*/
+static void
+update_cut_copy_menuitem (struct data_editor *de, gint page)
+{
+ GtkWidget * edit_copy = get_widget_assert (de->xml, "edit_copy");
+ GtkWidget * edit_cut = get_widget_assert (de->xml, "edit_cut");
+ GtkWidget *notebook = get_widget_assert (de->xml, "notebook");
+ GtkSheet * data_sheet ;
+ gint row, column;
+
+ if ( page < 0 )
+ page = gtk_notebook_get_current_page (GTK_NOTEBOOK(notebook));
+
+
+ if ( PAGE_VAR_SHEET == page )
+ {
+ /* We don't yet support copying from the var sheet */
+ gtk_widget_set_sensitive (edit_copy, FALSE);
+ gtk_widget_set_sensitive (edit_cut, FALSE);
+ return;
+ }
+
+ data_sheet = GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
+
+ gtk_sheet_get_active_cell (data_sheet, &row, &column);
+
+ if ( row < 0 || column < 0 )
+ {
+ gtk_widget_set_sensitive (edit_copy, FALSE);
+ gtk_widget_set_sensitive (edit_cut, FALSE);
+ return;
+ }
+
+ gtk_widget_set_sensitive (edit_copy, TRUE);
+ gtk_widget_set_sensitive (edit_cut, TRUE);