-gchar *myconvfunc (GtkTreeModel *m, gint col, gint row, const GValue *v);
-void myreversefunc (GtkTreeModel *model, gint col, gint row, const gchar *in, GValue *out);
-
-
-enum sort_order
- {
- SORT_ASCEND,
- SORT_DESCEND
- };
-
-static void
-do_sort (PsppireDataEditor *de, enum sort_order order)
-{
- JmdRange *range = JMD_SHEET(de->data_sheet)->selection;
-
- int n_vars = 0;
- int i;
-
- PsppireDataWindow *pdw =
- psppire_data_window_for_dataset (de->data_store);
-
- GString *syntax = g_string_new ("SORT CASES BY");
- for (i = range->start_x ; i <= range->end_x; ++i)
- {
- const struct variable *var = psppire_dict_get_variable (de->dict, i);
- if (var != NULL)
- {
- g_string_append_printf (syntax, " %s", var_get_name (var));
- n_vars++;
- }
- }
- if (n_vars > 0)
- {
- if (order == SORT_DESCEND)
- g_string_append (syntax, " (DOWN)");
- g_string_append_c (syntax, '.');
- execute_const_syntax_string (pdw, syntax->str);
- }
- g_string_free (syntax, TRUE);
-}
-
-
-static void
-sort_ascending (PsppireDataEditor *de)
-{
- do_sort (de, SORT_ASCEND);
-
- gtk_widget_queue_draw (GTK_WIDGET (de));
-}
-
-static void
-sort_descending (PsppireDataEditor *de)
-{
- do_sort (de, SORT_DESCEND);
-
- gtk_widget_queue_draw (GTK_WIDGET (de));
-}
-
-static void
-delete_cases (PsppireDataEditor *de)
-{
- JmdRange *range = JMD_SHEET(de->data_sheet)->selection;
-
- psppire_data_store_delete_cases (de->data_store, range->start_y,
- range->end_y - range->start_y + 1);
-
- gtk_widget_queue_draw (GTK_WIDGET (de));
-}
-
-static void
-insert_new_case (PsppireDataEditor *de)
-{
- gint item = GPOINTER_TO_INT (g_object_get_data
- (G_OBJECT (de->data_sheet_cases_row_popup), "item"));
-
- psppire_data_store_insert_new_case (de->data_store, item);
-
- gtk_widget_queue_draw (GTK_WIDGET (de));
-}
-
-static void
-delete_variables (PsppireDataEditor *de)
-{
- JmdRange *range = JMD_SHEET(de->data_sheet)->selection;
-
- psppire_dict_delete_variables (de->dict, range->start_x,
- (range->end_x - range->start_x + 1));
-
- gtk_widget_queue_draw (GTK_WIDGET (de));
-}
-
-static void
-insert_new_variable (PsppireDataEditor *de)
-{
- gint item = GPOINTER_TO_INT (g_object_get_data
- (G_OBJECT (de->data_sheet_cases_column_popup),
- "item"));
-
- const struct variable *v = psppire_dict_insert_variable (de->dict, item, NULL);
- psppire_data_store_insert_value (de->data_store, var_get_width(v),
- var_get_case_index (v));
-
- gtk_widget_queue_draw (GTK_WIDGET (de));
-}
-
-
-static GtkWidget *
-create_row_header_popup_menu (PsppireDataEditor *de)
-{
- GtkWidget *menu = gtk_menu_new ();
-
- GtkWidget *item =
- gtk_menu_item_new_with_mnemonic (_("_Insert Case"));
-
- g_signal_connect_swapped (item, "activate", G_CALLBACK (insert_new_case), de);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- de->clear_cases_menu_item = gtk_menu_item_new_with_mnemonic (_("Cl_ear Cases"));
- gtk_widget_set_sensitive (de->clear_cases_menu_item, FALSE);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), de->clear_cases_menu_item);
- g_signal_connect_swapped (de->clear_cases_menu_item, "activate",
- G_CALLBACK (delete_cases), de);
-
- gtk_widget_show_all (menu);
- return menu;
-}