Replace checkbox-treeview functions with a object PsppireCheckboxTreeview
[pspp] / src / ui / gui / psppire-dictview.c
index 1820d41179d51a45a38a5a9eb2eb53b3067bec64..23073a5f264821036208c0bc2d2057c471e21249 100644 (file)
@@ -355,9 +355,9 @@ get_var_measurement_stock_id (enum fmt_type type, enum measure measure)
     case FMT_CAT_STRING:
       switch (measure)
        {
-       case MEASURE_NOMINAL: return "variable-string-nominal";
-       case MEASURE_ORDINAL: return "variable-string-ordinal";
-       case MEASURE_SCALE:   return "variable-string-scale";
+       case MEASURE_NOMINAL: return "measure-string-nominal";
+       case MEASURE_ORDINAL: return "measure-string-ordinal";
+       case MEASURE_SCALE:   return "role-none";
         case n_MEASURES: break;
        }
       break;
@@ -366,9 +366,9 @@ get_var_measurement_stock_id (enum fmt_type type, enum measure measure)
     case FMT_CAT_TIME:
       switch (measure)
         {
-        case MEASURE_NOMINAL: return "variable-date-nominal";
-        case MEASURE_ORDINAL: return "variable-date-ordinal";
-        case MEASURE_SCALE:   return "variable-date-scale";
+        case MEASURE_NOMINAL: return "measure-date-nominal";
+        case MEASURE_ORDINAL: return "measure-date-ordinal";
+        case MEASURE_SCALE:   return "measure-date-scale";
         case n_MEASURES: break;
         }
       break;
@@ -376,9 +376,9 @@ get_var_measurement_stock_id (enum fmt_type type, enum measure measure)
     default:
       switch (measure)
         {
-        case MEASURE_NOMINAL: return "variable-nominal";
-        case MEASURE_ORDINAL: return "variable-ordinal";
-        case MEASURE_SCALE:   return "variable-scale";
+        case MEASURE_NOMINAL: return "measure-nominal";
+        case MEASURE_ORDINAL: return "measure-ordinal";
+        case MEASURE_SCALE:   return "measure-scale";
         case n_MEASURES: break;
        }
       break;
@@ -546,26 +546,18 @@ psppire_dict_view_new (void)
   return GTK_WIDGET (g_object_new (psppire_dict_view_get_type (), NULL));
 }
 
-
-
-struct variable *
-psppire_dict_view_get_selected_variable (PsppireDictView *treeview)
+static struct variable *
+psppire_dict_view_iter_to_var (PsppireDictView *dict_view,
+                               GtkTreeIter *top_iter)
 {
-  struct variable *var;
-  GtkTreeModel *top_model;
-  GtkTreeIter top_iter;
+  GtkTreeView *treeview = GTK_TREE_VIEW (dict_view);
+  GtkTreeModel *top_model = gtk_tree_view_get_model (treeview);
 
+  struct variable *var;
   GtkTreeModel *model;
   GtkTreeIter iter;
 
-  GtkTreeSelection *selection =
-    gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
-
-  if (! gtk_tree_selection_get_selected (selection,
-                                        &top_model, &top_iter))
-    return NULL;
-
-  dv_get_base_model (top_model, &top_iter, &model, &iter);
+  dv_get_base_model (top_model, top_iter, &model, &iter);
 
   g_assert (PSPPIRE_IS_DICT (model));
 
@@ -575,4 +567,56 @@ psppire_dict_view_get_selected_variable (PsppireDictView *treeview)
   return var;
 }
 
+struct get_vars_aux
+  {
+    PsppireDictView *dict_view;
+    struct variable **vars;
+    size_t idx;
+  };
+
+static void
+get_vars_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter,
+             gpointer data)
+{
+  struct get_vars_aux *aux = data;
+  struct variable *var = psppire_dict_view_iter_to_var (aux->dict_view, iter);
+
+  g_return_if_fail (var != NULL);
+  aux->vars[aux->idx++] = var;
+}
+
+void
+psppire_dict_view_get_selected_variables (PsppireDictView *dict_view,
+                                          struct variable ***vars,
+                                          size_t *n_varsp)
+{
+  GtkTreeView *tree_view = GTK_TREE_VIEW (dict_view);
+  GtkTreeSelection *selection = gtk_tree_view_get_selection (tree_view);
+  gint n_vars = gtk_tree_selection_count_selected_rows (selection);
+  struct get_vars_aux aux;
+
+  *vars = g_malloc_n (n_vars, sizeof **vars);
+
+  aux.dict_view = dict_view;
+  aux.vars = *vars;
+  aux.idx = 0;
+  gtk_tree_selection_selected_foreach (selection, get_vars_cb, &aux);
+
+  *n_varsp = aux.idx;
+  g_return_if_fail (aux.idx >= n_vars);
+}
+
+struct variable *
+psppire_dict_view_get_selected_variable (PsppireDictView *dict_view)
+{
+  GtkTreeView *tree_view = GTK_TREE_VIEW (dict_view);
+  GtkTreeSelection *selection = gtk_tree_view_get_selection (tree_view);
+  GtkTreeIter iter;
+
+  if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+    return psppire_dict_view_iter_to_var (dict_view, &iter);
+  else
+    return NULL;
+}
+