+static void
+insert_case_at_row (PsppireDataWindow *dw)
+{
+#if SHEET_MERGE
+ PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
+
+ psppire_data_sheet_insert_case (ds);
+#endif
+}
+
+
+
+static void
+goto_case (PsppireDataWindow *dw)
+{
+ int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
+ if (p == 0)
+ {
+ goto_case_dialog (JMD_SHEET (dw->data_editor->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, "<Ctrl>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, "<Ctrl>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><Ctrl>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, "<Ctrl>Q");
+ }
+
+ g_object_set (menuitem, "submenu", menu, NULL);
+ gtk_widget_show_all (menuitem);
+
+ return menuitem;
+}
+
+
+static GtkWidget *
+create_edit_menu (PsppireDataWindow *dw)
+{
+ int i = 0;
+ GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic (_("_Edit"));
+
+ GtkWidget *menu = gtk_menu_new ();
+
+ dw->mi_insert_var = gtk_menu_item_new_with_mnemonic (_("_Insert Variable"));
+ dw->mi_insert_case = gtk_menu_item_new_with_mnemonic (_("_Insert Case"));
+ GtkWidget *go_to_variable = gtk_menu_item_new_with_mnemonic (_("_Go To Variable..."));
+ dw->mi_go_to_case = gtk_menu_item_new_with_mnemonic (_("_Go To Case..."));
+
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_insert_var, 0, 1, i, i + 1); ++i;
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_insert_case, 0, 1, i, i + 1); ++i;
+
+ g_signal_connect_swapped (dw->mi_insert_case, "activate", G_CALLBACK (insert_case_at_row), dw);
+ g_signal_connect_swapped (dw->mi_go_to_case, "activate", G_CALLBACK (goto_case), dw);
+ g_signal_connect_swapped (dw->mi_insert_var, "activate", G_CALLBACK (insert_variable), dw);
+
+ GAction *a = g_action_map_lookup_action (G_ACTION_MAP (dw), "PsppireDialogActionVarInfo");
+ g_assert (a);
+ g_signal_connect_swapped (go_to_variable, "activate", G_CALLBACK (psppire_dialog_action_activate_null), a);
+
+ gtk_menu_attach (GTK_MENU (menu), go_to_variable, 0, 1, i, i + 1); ++i;
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_go_to_case, 0, 1, i, i + 1); ++i;
+
+ {
+ GtkAccelGroup *ag = gtk_accel_group_new ();
+
+ dw->mi_edit_separator = gtk_separator_menu_item_new ();
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_edit_separator, 0, 1, i, i + 1); ++i;
+
+ dw->mi_cut = gtk_menu_item_new_with_mnemonic (_("Cu_t"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_cut, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_cut, "activate", G_CALLBACK (on_cut), dw);
+
+ gtk_window_add_accel_group (GTK_WINDOW (dw), ag);
+ gtk_widget_add_accelerator (dw->mi_cut, "activate", ag,
+ 'X', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+
+ dw->mi_copy = gtk_menu_item_new_with_mnemonic (_("_Copy"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_copy, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_copy, "activate", G_CALLBACK (on_copy), dw);
+ gtk_widget_add_accelerator (dw->mi_copy, "activate", ag,
+ 'C', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+
+ dw->mi_paste = gtk_menu_item_new_with_mnemonic (_("_Paste"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_paste, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_paste, "activate", G_CALLBACK (on_paste), dw);
+ gtk_widget_add_accelerator (dw->mi_paste, "activate", ag,
+ 'V', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+
+ dw->mi_clear_variables = gtk_menu_item_new_with_mnemonic (_("Clear _Variables"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_clear_variables, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_clear_variables, "activate", G_CALLBACK (on_clear_variables), dw);
+
+ dw->mi_clear_cases = gtk_menu_item_new_with_mnemonic (_("Cl_ear Cases"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_clear_cases, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_clear_cases, "activate", G_CALLBACK (on_clear_cases), dw);
+ }
+
+ {
+ dw->mi_find_separator = gtk_separator_menu_item_new ();
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_find_separator, 0, 1, i, i + 1); ++i;
+
+ dw->mi_find = gtk_menu_item_new_with_mnemonic (_("_Find..."));
+ g_signal_connect_swapped (dw->mi_find, "activate", G_CALLBACK (find_dialog), dw);
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_find, 0, 1, i, i + 1); ++i;
+ }
+
+ g_object_set (menuitem, "submenu", menu, NULL);
+
+ gtk_widget_show_all (menuitem);
+
+ return menuitem;