Add popup menu to insert a variable
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 30 Mar 2017 18:14:06 +0000 (20:14 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 30 Mar 2017 18:14:06 +0000 (20:14 +0200)
src/ui/gui/psppire-data-editor.c
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-data-store.h

index 57f10e99ad66cb7f54d61d9273613c8b20457b84..44cdebc3451d2e4edabba60c98fc00cb7fd739c0 100644 (file)
@@ -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);
index ad67844fba983389eddb4f61a94c65e94219f7e9..630ee4379b628a9bf5553821159cda3aac86335c 100644 (file)
@@ -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)
 {
index c0783f46509a039a6b4b1cd7693df55ee647aa84..c9cfe4cfe00014b8c27440ae6a76fe693bee26f2 100644 (file)
@@ -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);