+on_clear_variables (PsppireDataWindow *dw)
+{
+ PsppireDataEditor *de = dw->data_editor;
+ int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (de));
+ if (p == PSPPIRE_DATA_EDITOR_DATA_VIEW)
+ {
+ psppire_data_editor_data_delete_variables (de);
+ }
+ else
+ {
+ psppire_data_editor_var_delete_variables (de);
+ }
+}
+
+static void
+insert_variable (PsppireDataWindow *dw)
+{
+ PsppireDataEditor *de = dw->data_editor;
+ int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (de));
+
+ if (p == PSPPIRE_DATA_EDITOR_DATA_VIEW)
+ {
+ SswRange *range = SSW_SHEET(de->data_sheet)->selection;
+ psppire_data_editor_insert_new_variable_at_posn (de, range->start_x);
+ }
+ else
+ {
+ SswRange *range = SSW_SHEET(de->var_sheet)->selection;
+ PsppireDict *dict = NULL;
+ g_object_get (de->var_sheet, "data-model", &dict, NULL);
+ psppire_dict_insert_variable (dict, range->start_y, NULL);
+ gtk_widget_queue_draw (GTK_WIDGET (de->var_sheet));
+ }
+}
+
+static void
+insert_case_at_row (PsppireDataWindow *dw)
+{
+ PsppireDataEditor *de = dw->data_editor;
+ SswRange *range = SSW_SHEET(de->data_sheet)->selection;
+ psppire_data_editor_insert_new_case_at_posn (de, range->start_y);
+}
+
+static void
+goto_case (PsppireDataWindow *dw)
+{
+ PsppireDataEditor *de = dw->data_editor;
+ int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (de));
+ if (p == PSPPIRE_DATA_EDITOR_DATA_VIEW)
+ {
+ goto_case_dialog (PSPPIRE_DATA_SHEET (de->data_sheet));
+ }
+}
+
+static GtkWidget *
+create_file_menu (PsppireDataWindow *dw)
+{
+ GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic (_("_File"));
+ GtkWidget *menu = gtk_menu_new ();
+
+ {
+ GtkWidget *new = gtk_menu_item_new_with_mnemonic (_("_New"));
+ gtk_menu_attach (GTK_MENU (menu), new, 0, 1, 0, 1);
+
+ GtkWidget *new_menu = gtk_menu_new ();
+
+ g_object_set (new, "submenu", new_menu, NULL);
+
+ GtkWidget *syntax = gtk_menu_item_new_with_mnemonic (_("_Syntax"));
+ connect_action_to_menuitem (G_ACTION_MAP (g_application_get_default ()), "new-syntax", syntax, 0);
+
+ GtkWidget *data = gtk_menu_item_new_with_mnemonic (_("_Data"));
+ connect_action_to_menuitem (G_ACTION_MAP (g_application_get_default ()), "new-data", data, 0);
+
+ gtk_menu_attach (GTK_MENU (new_menu), syntax, 0, 1, 0, 1);
+ gtk_menu_attach (GTK_MENU (new_menu), data, 0, 1, 1, 2);
+ }
+
+ GtkWidget *open = gtk_menu_item_new_with_mnemonic (_("_Open"));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "open", open, "<Primary>O");
+
+ GtkWidget *import = gtk_menu_item_new_with_mnemonic (_("_Import Data..."));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "file-import", import, 0);
+
+ gtk_menu_attach (GTK_MENU (menu), open, 0, 1, 1, 2);
+ gtk_menu_attach (GTK_MENU (menu), import, 0, 1, 2, 3);
+
+ gtk_menu_attach (GTK_MENU (menu), gtk_separator_menu_item_new (), 0, 1, 3, 4);
+
+ GtkWidget *save = gtk_menu_item_new_with_mnemonic (_("_Save..."));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "save", save, "<Primary>S");
+
+ GtkWidget *save_as = gtk_menu_item_new_with_mnemonic (_("Save _As..."));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "save-as", save_as, "<Shift><Primary>S");
+
+ GtkWidget *rename_dataset = gtk_menu_item_new_with_mnemonic (_("_Rename Dataset..."));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "rename-dataset", rename_dataset, 0);
+
+
+ gtk_menu_attach (GTK_MENU (menu), save, 0, 1, 4, 5);
+ gtk_menu_attach (GTK_MENU (menu), save_as, 0, 1, 5, 6);
+ gtk_menu_attach (GTK_MENU (menu), rename_dataset, 0, 1, 6, 7);
+
+ gtk_menu_attach (GTK_MENU (menu), gtk_separator_menu_item_new (), 0, 1, 7, 8);
+
+ {
+ GtkWidget *display_data = gtk_menu_item_new_with_mnemonic (_("_Display Data File Information"));
+ gtk_menu_attach (GTK_MENU (menu), display_data, 0, 1, 8, 9);
+
+ GtkWidget *dd_menu = gtk_menu_new ();
+
+ g_object_set (display_data, "submenu", dd_menu, NULL);
+
+ GtkWidget *working_file = gtk_menu_item_new_with_mnemonic (_("Working File"));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "info-working", working_file, 0);
+ GtkWidget *external_file = gtk_menu_item_new_with_mnemonic (_("_External File..."));
+ connect_action_to_menuitem (G_ACTION_MAP (dw), "info-external", external_file, 0);
+
+ gtk_menu_attach (GTK_MENU (dd_menu), working_file, 0, 1, 0, 1);
+ gtk_menu_attach (GTK_MENU (dd_menu), external_file, 0, 1, 1, 2);
+ }
+
+ gtk_menu_attach (GTK_MENU (menu), gtk_separator_menu_item_new (), 0, 1, 9, 10);
+
+ {
+ GtkWidget *mi_data = gtk_menu_item_new_with_mnemonic (_("_Recently Used Data"));
+ GtkWidget *mi_files = gtk_menu_item_new_with_mnemonic (_("Recently Used _Files"));
+
+ GtkWidget *menu_data = gtk_recent_chooser_menu_new_for_manager (
+ gtk_recent_manager_get_default ());
+
+ GtkWidget *menu_files = gtk_recent_chooser_menu_new_for_manager (
+ gtk_recent_manager_get_default ());
+
+ gtk_menu_attach (GTK_MENU (menu), mi_data, 0, 1, 10, 11);
+ gtk_menu_attach (GTK_MENU (menu), mi_files, 0, 1, 11, 12);
+
+ g_object_set (menu_data, "show-tips", TRUE, NULL);
+ g_object_set (menu_files, "show-tips", TRUE, NULL);
+
+ g_object_set (mi_data, "submenu", menu_data, NULL);
+ g_object_set (mi_files, "submenu", menu_files, NULL);
+
+ {
+ GtkRecentFilter *filter = gtk_recent_filter_new ();
+
+ gtk_recent_filter_add_mime_type (filter, "application/x-spss-sav");
+ gtk_recent_filter_add_mime_type (filter, "application/x-spss-por");
+
+ gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu_data), GTK_RECENT_SORT_MRU);
+
+ gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_data), filter);
+ }
+
+ g_signal_connect (menu_data, "selection-done", G_CALLBACK (on_recent_data_select), dw);
+
+ {
+ GtkRecentFilter *filter = gtk_recent_filter_new ();
+
+ gtk_recent_filter_add_pattern (filter, "*.sps");
+ gtk_recent_filter_add_pattern (filter, "*.SPS");
+
+ gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu_files), GTK_RECENT_SORT_MRU);
+
+ gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_files), filter);
+ }
+
+ g_signal_connect (menu_files, "selection-done", G_CALLBACK (on_recent_files_select), dw);
+ }
+
+ gtk_menu_attach (GTK_MENU (menu), gtk_separator_menu_item_new (), 0, 1, 12, 13);
+
+ {
+ GtkWidget *quit = gtk_menu_item_new_with_mnemonic (_("_Quit"));
+ gtk_menu_attach (GTK_MENU (menu), quit, 0, 1, 13, 14);
+
+ connect_action_to_menuitem (G_ACTION_MAP (g_application_get_default ()),
+ "quit", quit, "<Primary>Q");
+ }
+
+ g_object_set (menuitem, "submenu", menu, NULL);
+ gtk_widget_show_all (menuitem);
+
+ return menuitem;
+}
+
+
+static GtkWidget *
+create_edit_menu (PsppireDataWindow *dw)