X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-var-view.c;h=2a9ebf2e33a7c7a9a65e4d54338e8afb98a1167a;hb=b4e361fed54bb9a1cb3259722038976dadd938f6;hp=da1cc8c109020d9f1886aeeb39d1510227e96767;hpb=7a8adbe2e7067f33767f934ec36c60549d50d2e2;p=pspp-builds.git diff --git a/src/ui/gui/psppire-var-view.c b/src/ui/gui/psppire-var-view.c index da1cc8c1..2a9ebf2e 100644 --- a/src/ui/gui/psppire-var-view.c +++ b/src/ui/gui/psppire-var-view.c @@ -201,7 +201,6 @@ psppire_var_view_class_init (PsppireVarViewClass *class) g_object_class_install_property (object_class, PROP_N_COLS, n_cols_spec); - } @@ -236,6 +235,36 @@ psppire_var_view_new (void) } +gboolean +psppire_var_view_get_iter_first (PsppireVarView *vv, GtkTreeIter *iter) +{ + return gtk_tree_model_get_iter_first (GTK_TREE_MODEL (vv->list), iter); +} + +gboolean +psppire_var_view_get_iter_next (PsppireVarView *vv, GtkTreeIter *iter) +{ + return gtk_tree_model_iter_next (GTK_TREE_MODEL (vv->list), iter); +} + +const struct variable * +psppire_var_view_get_variable (PsppireVarView *vv, gint column, GtkTreeIter *iter) +{ + const struct variable *var = NULL; + GValue value = {0}; + gtk_tree_model_get_value (GTK_TREE_MODEL (vv->list), iter, column, &value); + + if ( G_VALUE_TYPE (&value) == PSPPIRE_VAR_PTR_TYPE) + var = g_value_get_boxed (&value); + else + g_critical ("Unsupported type \"%s\", in variable name treeview.", + G_VALUE_TYPE_NAME (&value)); + + g_value_unset (&value); + + return var; +} + /* Append the names of selected variables to STRING. Returns the number of variables appended. @@ -246,35 +275,42 @@ psppire_var_view_append_names (PsppireVarView *vv, gint column, GString *string) gint n_vars = 0; GtkTreeIter iter; - if ( gtk_tree_model_get_iter_first (GTK_TREE_MODEL (vv->list), &iter) ) + if ( psppire_var_view_get_iter_first (vv, &iter) ) { do { - GValue value = {0}; - struct variable *var = NULL; - GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (vv->list), &iter); - - gtk_tree_model_get_value (GTK_TREE_MODEL (vv->list), &iter, column, &value); - - if ( G_VALUE_TYPE (&value) == PSPPIRE_VAR_PTR_TYPE) - var = g_value_get_boxed (&value); - else - g_critical ("Unsupported type \"%s\", in variable name treeview.", - G_VALUE_TYPE_NAME (&value)); - - g_value_unset (&value); - + const struct variable *var = psppire_var_view_get_variable (vv, column, &iter); g_string_append (string, " "); g_string_append (string, var_get_name (var)); - gtk_tree_path_free (path); n_vars++; } - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (vv->list), &iter)); + while (psppire_var_view_get_iter_next (vv, &iter)); } return n_vars; } +/* Returns TRUE iff VV contains the item V. + V must be an initialised value containing a + PSPPIRE_VAR_PTR_TYPE. +*/ +gboolean +psppire_var_view_contains_var (PsppireVarView *vv, const GValue *v) +{ + gboolean ok; + GtkTreeIter iter; + g_return_val_if_fail (G_VALUE_HOLDS (v, PSPPIRE_VAR_PTR_TYPE), FALSE); + + for (ok = psppire_var_view_get_iter_first (vv, &iter); + ok; + ok = psppire_var_view_get_iter_next (vv, &iter)) + { + const struct variable *var = psppire_var_view_get_variable (vv, 0, &iter); + if (var == g_value_get_boxed (v)) + return TRUE; + } + return FALSE; +}