From 1fdf781696f879bb3321bfe37f7923be810c7a8f Mon Sep 17 00:00:00 2001 From: John Darrington Date: Thu, 30 Mar 2017 20:14:06 +0200 Subject: [PATCH] Add popup menu to insert a variable --- src/ui/gui/psppire-data-editor.c | 20 +++++++++++++++++++- src/ui/gui/psppire-data-store.c | 8 ++------ src/ui/gui/psppire-data-store.h | 2 ++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index 57f10e99ad..44cdebc345 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -559,6 +559,21 @@ insert_new_case (PsppireDataEditor *de) 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) { @@ -590,6 +605,7 @@ create_column_header_popup_menu (PsppireDataEditor *de) GtkWidget *item = gtk_menu_item_new_with_mnemonic (_("_Insert Variable")); + g_signal_connect_swapped (item, "activate", G_CALLBACK (insert_new_variable), de); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); item = gtk_separator_menu_item_new (); @@ -597,18 +613,20 @@ create_column_header_popup_menu (PsppireDataEditor *de) item = gtk_menu_item_new_with_mnemonic (_("Cl_ear Variables")); + gtk_widget_set_sensitive (item, FALSE); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); item = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - item = gtk_menu_item_new_with_mnemonic (_("Sort _Ascending")); + gtk_widget_set_sensitive (item, FALSE); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); item = gtk_menu_item_new_with_mnemonic (_("Sort _Descending")); + gtk_widget_set_sensitive (item, FALSE); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show_all (menu); diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index ad67844fba..630ee4379b 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -195,7 +195,7 @@ __get_value (GtkTreeModel *tree_model, struct ccase *cc = datasheet_get_row (store->datasheet, row); - const union value *val = case_data_idx (cc, column); + const union value *val = case_data_idx (cc, var_get_case_index (variable)); GVariant *vv = value_variant_new (val, var_get_width (variable)); @@ -300,10 +300,6 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) -static gboolean -psppire_data_store_insert_value (PsppireDataStore *ds, - gint width, gint where); - casenumber psppire_data_store_get_case_count (const PsppireDataStore *store) { @@ -820,7 +816,7 @@ psppire_data_store_data_in (PsppireDataStore *ds, casenumber casenum, gint idx, given WIDTH into every one of them at the position immediately preceding WHERE. */ -static gboolean +gboolean psppire_data_store_insert_value (PsppireDataStore *ds, gint width, gint where) { diff --git a/src/ui/gui/psppire-data-store.h b/src/ui/gui/psppire-data-store.h index c0783f4650..c9cfe4cfe0 100644 --- a/src/ui/gui/psppire-data-store.h +++ b/src/ui/gui/psppire-data-store.h @@ -97,6 +97,8 @@ void psppire_data_store_clear (PsppireDataStore *data_store); gboolean psppire_data_store_insert_new_case (PsppireDataStore *ds, casenumber posn); +gboolean psppire_data_store_insert_value (PsppireDataStore *ds, + gint width, gint where); gboolean psppire_data_store_delete_cases (PsppireDataStore *ds, casenumber first, casenumber count); -- 2.30.2