-
-static GtkCellRenderer *
-create_spin_renderer (GType type)
-{
- GtkCellRenderer *r = gtk_cell_renderer_spin_new ();
-
- GtkAdjustment *adj = gtk_adjustment_new (0,
- 0, G_MAXDOUBLE,
- 1, 1,
- 0);
- g_object_set (r,
- "adjustment", adj,
- NULL);
-
- return r;
-}
-
-static GtkCellRenderer *
-create_combo_renderer (GType type)
-{
- GtkListStore *list_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING);
-
- GEnumClass *ec = g_type_class_ref (type);
-
- const GEnumValue *ev ;
- for (ev = ec->values; ev->value_name; ++ev)
- {
- GtkTreeIter iter;
-
- gtk_list_store_append (list_store, &iter);
-
- gtk_list_store_set (list_store, &iter,
- 0, ev->value,
- 1, gettext (ev->value_nick),
- -1);
- }
-
- GtkCellRenderer *r = gtk_cell_renderer_combo_new ();
-
- g_object_set (r,
- "model", list_store,
- "text-column", 1,
- "has-entry", TRUE,
- NULL);
-
- return r;
-}
-
-static gchar *
-var_sheet_data_to_string (GtkTreeModel *m, gint col, gint row, const GValue *in)
-{
- if (col >= n_DICT_COLS - 1) /* -1 because psppire-dict has an extra column */
- return NULL;
-
- const struct variable *var = psppire_dict_get_variable (PSPPIRE_DICT (m), row);
- if (var == NULL)
- return NULL;
-
- if (col == DICT_TVM_COL_TYPE)
- {
- const struct fmt_spec *print = var_get_print_format (var);
- return strdup (fmt_gui_name (print->type));
- }
- else if (col == DICT_TVM_COL_MISSING_VALUES)
- return missing_values_to_string (var, NULL);
- else if (col == DICT_TVM_COL_VALUE_LABELS)
- {
- const struct val_labs *vls = var_get_value_labels (var);
- if (vls == NULL || val_labs_count (vls) == 0)
- return strdup (_("None"));
- const struct val_lab **labels = val_labs_sorted (vls);
- const struct val_lab *vl = labels[0];
- gchar *vstr = value_to_text (vl->value, var);
- char *text = xasprintf (_("{%s, %s}..."), vstr,
- val_lab_get_escaped_label (vl));
- free (vstr);
- free (labels);
- return text;
- }
-
- return jmd_sheet_default_forward_conversion (m, col, row, in);
-}
-
-static GtkCellRenderer *spin_renderer;
-static GtkCellRenderer *column_width_renderer;
-static GtkCellRenderer *measure_renderer;
-static GtkCellRenderer *alignment_renderer;
-
-static GtkCellRenderer *
-select_renderer_func (gint col, gint row, GType type)
-{
- if (!spin_renderer)
- spin_renderer = create_spin_renderer (type);
-
- if (col == DICT_TVM_COL_ROLE && !column_width_renderer)
- column_width_renderer = create_combo_renderer (type);
-
- if (col == DICT_TVM_COL_MEASURE && !measure_renderer)
- measure_renderer = create_combo_renderer (type);
-
- if (col == DICT_TVM_COL_ALIGNMENT && !alignment_renderer)
- alignment_renderer = create_combo_renderer (type);
-
- switch (col)
- {
- case DICT_TVM_COL_WIDTH:
- case DICT_TVM_COL_DECIMAL:
- case DICT_TVM_COL_COLUMNS:
- return spin_renderer;
-
- case DICT_TVM_COL_ALIGNMENT:
- return alignment_renderer;
-
- case DICT_TVM_COL_MEASURE:
- return measure_renderer;
-
- case DICT_TVM_COL_ROLE:
- return column_width_renderer;
- }
-
- return NULL;
-}
-
-