Enable setting of variable type from var sheet
authorJohn Darrington <john@darrington.wattle.id.au>
Wed, 19 Apr 2017 11:45:32 +0000 (13:45 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Wed, 19 Apr 2017 11:45:32 +0000 (13:45 +0200)
src/ui/gui/psppire-data-editor.c
src/ui/gui/psppire-data-editor.h

index 56d362e778996585535e567105cb64023090cfd3..0caf5dbdaea30d32d9f1d32152ca335e31803b28 100644 (file)
@@ -30,6 +30,8 @@
 #include "ui/gui/helper.h"
 #include "ui/gui/var-display.h"
 #include "ui/gui/val-labs-dialog.h"
+#include "ui/gui/missing-val-dialog.h"
+#include "ui/gui/var-type-dialog.h"
 #include "ui/gui/psppire-dict.h"
 #include "ui/gui/psppire-data-store.h"
 #include "ui/gui/psppire-data-window.h"
@@ -128,6 +130,28 @@ var_sheet_data_to_string (GtkTreeModel *m, gint col, gint row, const GValue *in)
   return jmd_sheet_default_forward_conversion (m, col, row, in);
 }
 
+static void
+set_var_type (GtkCellRenderer *renderer,
+     GtkCellEditable *editable,
+     gchar           *path,
+     gpointer         user_data)
+{
+  PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (user_data);
+  gint row = -1, col = -1;
+  jmd_sheet_get_active_cell (JMD_SHEET (de->var_sheet), &col, &row);
+
+  struct variable *var =
+    psppire_dict_get_variable (PSPPIRE_DICT (de->dict), row);
+
+  const struct fmt_spec *format = var_get_write_format (var);
+  struct fmt_spec fmt = *format;
+  GtkWindow *win = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (de)));
+  if (GTK_RESPONSE_OK == psppire_var_type_dialog_run (win, &fmt))
+    {
+      var_set_width_and_formats (var, fmt_var_width (&fmt), &fmt, &fmt);
+    }
+}
+
 static void
 set_missing_values (GtkCellRenderer *renderer,
      GtkCellEditable *editable,
@@ -143,7 +167,7 @@ set_missing_values (GtkCellRenderer *renderer,
 
   struct missing_values mv;
   if (GTK_RESPONSE_OK ==
-      psppire_missing_val_dialog_run (gtk_widget_get_toplevel (GTK_WIDGET (de)),
+      psppire_missing_val_dialog_run (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (de))),
                                      var, &mv))
     {
       var_set_missing_values (var, &mv);
@@ -166,7 +190,7 @@ set_value_labels (GtkCellRenderer *renderer,
     psppire_dict_get_variable (PSPPIRE_DICT (de->dict), row);
 
   struct val_labs *vls =
-    psppire_val_labs_dialog_run (gtk_widget_get_toplevel (GTK_WIDGET (de)), var);
+    psppire_val_labs_dialog_run (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (de))), var);
 
   if (vls)
     {
@@ -203,6 +227,9 @@ select_renderer_func (gint col, gint row, GType type, PsppireDataEditor *de)
     case DICT_TVM_COL_COLUMNS:
       return spin_renderer;
 
+    case DICT_TVM_COL_TYPE:
+      return de->var_type_renderer;
+
     case DICT_TVM_COL_VALUE_LABELS:
       return de->value_label_renderer;
 
@@ -1111,6 +1138,11 @@ psppire_data_editor_init (PsppireDataEditor *de)
   g_signal_connect (de->missing_values_renderer,
                    "editing-started", G_CALLBACK (set_missing_values),
                    de);
+
+  de->var_type_renderer = gtk_cell_renderer_text_new ();
+  g_signal_connect (de->var_type_renderer,
+                   "editing-started", G_CALLBACK (set_var_type),
+                   de);
 }
 
 GtkWidget*
index dfea654085fd6e6861a1c43811eb92a01b86067d..9275da7723c5634ca8f6ed07b95a86347e417ba6 100644 (file)
@@ -85,6 +85,7 @@ struct _PsppireDataEditor
 
   GtkCellRenderer *value_label_renderer;
   GtkCellRenderer *missing_values_renderer;
+  GtkCellRenderer *var_type_renderer;
 };
 
 struct _PsppireDataEditorClass