X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fdict-display.c;h=6c4e21158fba294a0d9355239d11e8651422c166;hb=86454c8ab63804d02cb4f08e8b5e45299b8eb810;hp=77da88bd98826c9791151af09edccc4de1d9b186;hpb=5cc0ad44c71734d01e88e95b402ab663ee406191;p=pspp diff --git a/src/ui/gui/dict-display.c b/src/ui/gui/dict-display.c index 77da88bd98..6c4e21158f 100644 --- a/src/ui/gui/dict-display.c +++ b/src/ui/gui/dict-display.c @@ -24,6 +24,7 @@ #include "psppire-dict.h" #include "psppire-dictview.h" +#include "psppire-means-layer.h" #include "psppire-var-ptr.h" #include "psppire-var-view.h" #include "psppire-select-dest.h" @@ -35,26 +36,45 @@ #define _(msgid) gettext (msgid) #define N_(msgid) msgid -static void + +void get_base_model (GtkTreeModel *top_model, GtkTreeIter *top_iter, - GtkTreeModel **model, GtkTreeIter *iter - ) + GtkTreeModel **model, GtkTreeIter *iter) { *model = top_model; - *iter = *top_iter; - while (GTK_IS_TREE_MODEL_FILTER (*model)) - { - GtkTreeIter parent_iter = *iter; - GtkTreeModelFilter *parent_model = GTK_TREE_MODEL_FILTER (*model); - *model = gtk_tree_model_filter_get_model (parent_model); + if ( iter) + *iter = *top_iter; - gtk_tree_model_filter_convert_iter_to_child_iter (parent_model, - iter, - &parent_iter); + while ( ! PSPPIRE_IS_DICT (*model)) + { + GtkTreeIter parent_iter; + if (iter) + parent_iter = *iter; + + if ( GTK_IS_TREE_MODEL_FILTER (*model)) + { + GtkTreeModelFilter *parent_model = GTK_TREE_MODEL_FILTER (*model); + + *model = gtk_tree_model_filter_get_model (parent_model); + + if (iter) + gtk_tree_model_filter_convert_iter_to_child_iter (parent_model, + iter, + &parent_iter); + } + else if (GTK_IS_TREE_MODEL_SORT (*model)) + { + GtkTreeModelSort *parent_model = GTK_TREE_MODEL_SORT (*model); + + *model = gtk_tree_model_sort_get_model (parent_model); + + if (iter) + gtk_tree_model_sort_convert_iter_to_child_iter (parent_model, + iter, + &parent_iter); + } } - - g_assert (PSPPIRE_IS_DICT (*model)); } @@ -87,23 +107,22 @@ insert_source_row_into_entry (GtkTreeIter iter, } -void -insert_source_row_into_tree_view (GtkTreeIter iter, - GtkWidget *dest, - GtkTreeModel *model, - gpointer data - ) + +static void +insert_source_row_into_tree_model (GtkTreeIter source_iter, + GtkTreeModel *dest_model, + GtkTreeModel *source_model, + gpointer data) { GtkTreePath *path; GtkTreeIter dest_iter; GtkTreeIter dict_iter; gint *row ; - GtkTreeModel *destmodel = gtk_tree_view_get_model (GTK_TREE_VIEW (dest)); const struct variable *var; GtkTreeModel *dict; - get_base_model (model, &iter, &dict, &dict_iter); + get_base_model (source_model, &source_iter, &dict, &dict_iter); path = gtk_tree_model_get_path (dict, &dict_iter); @@ -111,15 +130,43 @@ insert_source_row_into_tree_view (GtkTreeIter iter, var = psppire_dict_get_variable (PSPPIRE_DICT (dict), *row); - gtk_list_store_append (GTK_LIST_STORE (destmodel), &dest_iter); + gtk_list_store_append (GTK_LIST_STORE (dest_model), &dest_iter); - gtk_list_store_set (GTK_LIST_STORE (destmodel), &dest_iter, 0, var, -1); + gtk_list_store_set (GTK_LIST_STORE (dest_model), &dest_iter, 0, var, -1); gtk_tree_path_free (path); } +void +insert_source_row_into_tree_view (GtkTreeIter iter, + GtkWidget *dest, + GtkTreeModel *model, + gpointer data) +{ + GtkTreeModel *destmodel = gtk_tree_view_get_model (GTK_TREE_VIEW (dest)); + + insert_source_row_into_tree_model (iter, destmodel, model, data); +} + + +void +insert_source_row_into_layers (GtkTreeIter iter, + GtkWidget *dest, + GtkTreeModel *model, + gpointer data) +{ + GtkTreeModel *destmodel = psppire_means_layer_get_model (PSPPIRE_MEANS_LAYER (dest)); + + insert_source_row_into_tree_model (iter, destmodel, model, data); + + psppire_means_layer_update (PSPPIRE_MEANS_LAYER (dest)); +} + + + + gboolean is_currently_in_entry (GtkTreeModel *model, GtkTreeIter *iter, PsppireSelector *selector)