From 66153a44d861ccddf6a176ec5a94ffb959232ad6 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sat, 25 Jul 2009 10:53:05 +0200 Subject: [PATCH] Add "dictionary" property to PsppireVarStore and use it. Instead of abusing the encapsulation of PsppireVarStore, by accessing the internal dictionary member directly, add a "dictionary" property. This should also take care of the reference counting of the dict, which wasn't working properly. --- src/ui/gui/comments-dialog.c | 2 +- src/ui/gui/compute-dialog.c | 6 +- src/ui/gui/crosstabs-dialog.c | 10 +- src/ui/gui/descriptives-dialog.c | 12 +- src/ui/gui/examine-dialog.c | 8 +- src/ui/gui/find-dialog.c | 3 +- src/ui/gui/frequencies-dialog.c | 7 +- src/ui/gui/oneway-anova-dialog.c | 6 +- src/ui/gui/psppire-data-editor.c | 13 +- src/ui/gui/psppire-data-window.c | 19 +- src/ui/gui/psppire-var-sheet.c | 8 +- src/ui/gui/psppire-var-store.c | 166 ++++++++++++------ src/ui/gui/psppire-var-store.h | 5 +- src/ui/gui/rank-dialog.c | 8 +- src/ui/gui/recode-dialog.c | 8 +- src/ui/gui/regression-dialog.c | 10 +- src/ui/gui/reliability-dialog.c | 7 +- src/ui/gui/sort-cases-dialog.c | 6 +- src/ui/gui/split-file-dialog.c | 9 +- .../gui/t-test-independent-samples-dialog.c | 8 +- src/ui/gui/t-test-one-sample.c | 10 +- src/ui/gui/t-test-paired-samples.c | 9 +- src/ui/gui/transpose-dialog.c | 10 +- src/ui/gui/val-labs-dialog.c | 14 +- src/ui/gui/variable-info-dialog.c | 8 +- src/ui/gui/weight-cases-dialog.c | 6 +- 26 files changed, 226 insertions(+), 152 deletions(-) diff --git a/src/ui/gui/comments-dialog.c b/src/ui/gui/comments-dialog.c index 923953a1..02d6d96c 100644 --- a/src/ui/gui/comments-dialog.c +++ b/src/ui/gui/comments-dialog.c @@ -145,7 +145,7 @@ comments_dialog (GObject *o, gpointer data) } cd.xml = xml; - cd.dict = vs->dict; + g_object_get (vs, "dictionary", &cd.dict, NULL); g_signal_connect (buffer, "mark-set", G_CALLBACK (set_column_number), label); diff --git a/src/ui/gui/compute-dialog.c b/src/ui/gui/compute-dialog.c index e779fba6..c09c7571 100644 --- a/src/ui/gui/compute-dialog.c +++ b/src/ui/gui/compute-dialog.c @@ -389,7 +389,7 @@ compute_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - scd.dict = vs->dict; + g_object_get (vs, "dictionary", &scd.dict, NULL); scd.use_type = FALSE; g_signal_connect (expression, "toggled", @@ -397,8 +397,8 @@ compute_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (dict_view, - "dictionary", vs->dict, + + g_object_set (dict_view, "dictionary", scd.dict, "selection-mode", GTK_SELECTION_SINGLE, NULL); diff --git a/src/ui/gui/crosstabs-dialog.c b/src/ui/gui/crosstabs-dialog.c index f5593586..019d8c36 100644 --- a/src/ui/gui/crosstabs-dialog.c +++ b/src/ui/gui/crosstabs-dialog.c @@ -389,6 +389,7 @@ crosstabs_dialog (GObject *o, gpointer data) GtkBuilder *xml = builder_new ("crosstabs.ui"); PsppireVarStore *vs = NULL; + PsppireDict *dict = NULL; PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data); @@ -422,10 +423,11 @@ crosstabs_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &dict, NULL); + g_object_set (source, "dictionary", dict, NULL); - set_dest_model (GTK_TREE_VIEW (dest_rows), vs->dict); - set_dest_model (GTK_TREE_VIEW (dest_cols), vs->dict); + set_dest_model (GTK_TREE_VIEW (dest_rows), dict); + set_dest_model (GTK_TREE_VIEW (dest_cols), dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (row_selector), source, @@ -443,7 +445,7 @@ crosstabs_dialog (GObject *o, gpointer data) cd.row_vars = GTK_TREE_VIEW (dest_rows); cd.col_vars = GTK_TREE_VIEW (dest_cols); - cd.dict = vs->dict; + g_object_get (vs, "dictionary", &cd.dict, NULL); cd.format_dialog = get_widget_assert (xml, "format-dialog"); cd.table_button = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "print-tables")); cd.pivot_button = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "pivot")); diff --git a/src/ui/gui/descriptives-dialog.c b/src/ui/gui/descriptives-dialog.c index a867fe01..a1e65ea7 100644 --- a/src/ui/gui/descriptives-dialog.c +++ b/src/ui/gui/descriptives-dialog.c @@ -218,16 +218,18 @@ descriptives_dialog (GObject *o, gpointer data) GtkWidget *stats_treeview = get_widget_assert (xml, "statistics"); PsppireVarStore *vs = NULL; + PsppireDict *dict; g_object_get (de->data_editor, "var-store", &vs, NULL); + g_object_get (vs, "dictionary", &dict, NULL); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, - "predicate", var_is_numeric, NULL); - set_dest_model (GTK_TREE_VIEW (dest), vs->dict); + g_object_set (source, "dictionary", dict, + "predicate", var_is_numeric, NULL); + set_dest_model (GTK_TREE_VIEW (dest), dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), source, @@ -242,7 +244,9 @@ descriptives_dialog (GObject *o, gpointer data) scd.stat_vars = GTK_TREE_VIEW (dest); scd.stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview)); - scd.dict = vs->dict; + + g_object_get (vs, "dictionary", &scd.dict, NULL); + scd.include_user_missing = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "include_user_missing")); scd.exclude_missing_listwise = diff --git a/src/ui/gui/examine-dialog.c b/src/ui/gui/examine-dialog.c index 13ef847a..470c4dbb 100644 --- a/src/ui/gui/examine-dialog.c +++ b/src/ui/gui/examine-dialog.c @@ -279,10 +279,10 @@ examine_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (ex_d.stats_dialog), GTK_WINDOW (de)); gtk_window_set_transient_for (GTK_WINDOW (ex_d.opts_dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &ex_d.dict, NULL); + g_object_set (source, "dictionary", ex_d.dict, NULL); - set_dest_model (GTK_TREE_VIEW (ex_d.dep_list), vs->dict); - ex_d.dict = vs->dict; + set_dest_model (GTK_TREE_VIEW (ex_d.dep_list), ex_d.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (dep_selector), @@ -294,7 +294,7 @@ examine_dialog (GObject *o, gpointer data) psppire_selector_set_allow (PSPPIRE_SELECTOR (dep_selector), numeric_only); - set_dest_model (GTK_TREE_VIEW (ex_d.fct_list), vs->dict); + set_dest_model (GTK_TREE_VIEW (ex_d.fct_list), ex_d.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (fct_selector), diff --git a/src/ui/gui/find-dialog.c b/src/ui/gui/find-dialog.c index 37d8ebad..11ec0603 100644 --- a/src/ui/gui/find-dialog.c +++ b/src/ui/gui/find-dialog.c @@ -219,7 +219,8 @@ find_dialog (GObject *o, gpointer data) "data-store", &ds, NULL); - fd.dict = vs->dict; + g_object_get (vs, "dictionary", &fd.dict, NULL); + fd.data = ds->datasheet; fd.variable_entry = get_widget_assert (fd.xml, "find-variable-entry"); diff --git a/src/ui/gui/frequencies-dialog.c b/src/ui/gui/frequencies-dialog.c index 9d9814f1..8706f3a4 100644 --- a/src/ui/gui/frequencies-dialog.c +++ b/src/ui/gui/frequencies-dialog.c @@ -333,9 +333,11 @@ frequencies_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &fd.dict, NULL); + g_object_set (source, "dictionary", fd.dict, NULL); - set_dest_model (GTK_TREE_VIEW (dest), vs->dict); + + set_dest_model (GTK_TREE_VIEW (dest), fd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), @@ -347,7 +349,6 @@ frequencies_dialog (GObject *o, gpointer data) fd.stat_vars = GTK_TREE_VIEW (dest); - fd.dict = vs->dict; fd.table_button = get_widget_assert (xml, "checkbutton1"); fd.format_dialog = get_widget_assert (xml, "format-dialog"); fd.maximum_cats = get_widget_assert (xml, "hbox5"); diff --git a/src/ui/gui/oneway-anova-dialog.c b/src/ui/gui/oneway-anova-dialog.c index a17a9397..1814dd67 100644 --- a/src/ui/gui/oneway-anova-dialog.c +++ b/src/ui/gui/oneway-anova-dialog.c @@ -164,16 +164,16 @@ oneway_anova_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - ow.dict = vs->dict; + g_object_get (vs, "dictionary", &ow.dict, NULL); ow.dialog = GTK_WINDOW (get_widget_assert (builder, "oneway-anova-dialog")); gtk_window_set_transient_for (ow.dialog, GTK_WINDOW (de)); - g_object_set (dict_view, "dictionary", vs->dict, NULL); + g_object_set (dict_view, "dictionary", ow.dict, NULL); - set_dest_model (GTK_TREE_VIEW (ow.vars_treeview), vs->dict); + set_dest_model (GTK_TREE_VIEW (ow.vars_treeview), ow.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector1), diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index 38250f7e..aa511e93 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -1203,9 +1203,13 @@ popup_variable_row_menu (PsppireSheet *sheet, gint row, PsppireVarStore *var_store = PSPPIRE_VAR_STORE (psppire_sheet_get_model (sheet)); + + PsppireDict *dict; + const struct variable *v ; - const struct variable *v = - psppire_dict_get_variable (var_store->dict, row); + g_object_get (var_store, "dictionary", &dict, NULL); + + v = psppire_dict_get_variable (dict, row); if ( v && event->button == 3) { @@ -1357,6 +1361,7 @@ psppire_data_editor_delete_cases (PsppireDataEditor *de) void psppire_data_editor_delete_variables (PsppireDataEditor *de) { + PsppireDict *dict = NULL; gint first, n; switch (gtk_notebook_get_current_page (GTK_NOTEBOOK (de))) @@ -1374,7 +1379,9 @@ psppire_data_editor_delete_variables (PsppireDataEditor *de) break; } - psppire_dict_delete_variables (de->var_store->dict, first, n); + g_object_get (de->var_store, "dictionary", &dict, NULL); + + psppire_dict_delete_variables (dict, first, n); psppire_sheet_unselect_range (PSPPIRE_SHEET (de->data_sheet[0])); psppire_sheet_unselect_range (PSPPIRE_SHEET (de->var_sheet)); diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index 185648bc..ffa9482e 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -231,12 +231,14 @@ on_filter_change (GObject *o, gint filter_index, gpointer data) else { PsppireVarStore *vs = NULL; + PsppireDict *dict = NULL; struct variable *var ; gchar *text ; g_object_get (de->data_editor, "var-store", &vs, NULL); + g_object_get (vs, "dictionary", &dict, NULL); - var = psppire_dict_get_variable (vs->dict, filter_index); + var = psppire_dict_get_variable (dict, filter_index); text = g_strdup_printf (_("Filter by %s"), var_get_name (var)); @@ -302,11 +304,13 @@ on_weight_change (GObject *o, gint weight_index, gpointer data) { struct variable *var ; PsppireVarStore *vs = NULL; + PsppireDict *dict = NULL; gchar *text; g_object_get (de->data_editor, "var-store", &vs, NULL); - - var = psppire_dict_get_variable (vs->dict, weight_index); + g_object_get (vs, "dictionary", &dict, NULL); + + var = psppire_dict_get_variable (dict, weight_index); text = g_strdup_printf (_("Weight by %s"), var_get_name (var)); @@ -1090,6 +1094,7 @@ static void psppire_data_window_init (PsppireDataWindow *de) { PsppireVarStore *vs; + PsppireDict *dict = NULL; GtkWidget *menubar; GtkWidget *hb ; @@ -1145,15 +1150,17 @@ psppire_data_window_init (PsppireDataWindow *de) g_assert(vs); /* Traps a possible bug in w32 build */ - g_signal_connect (vs->dict, "weight-changed", + g_object_get (vs, "dictionary", &dict, NULL); + + g_signal_connect (dict, "weight-changed", G_CALLBACK (on_weight_change), de); - g_signal_connect (vs->dict, "filter-changed", + g_signal_connect (dict, "filter-changed", G_CALLBACK (on_filter_change), de); - g_signal_connect (vs->dict, "split-changed", + g_signal_connect (dict, "split-changed", G_CALLBACK (on_split_change), de); diff --git a/src/ui/gui/psppire-var-sheet.c b/src/ui/gui/psppire-var-sheet.c index dfd62bb6..a4f082cc 100644 --- a/src/ui/gui/psppire-var-sheet.c +++ b/src/ui/gui/psppire-var-sheet.c @@ -260,10 +260,10 @@ traverse_cell_callback (PsppireSheet *sheet, const gchar *name = gtk_entry_get_text (entry); - if (! psppire_dict_check_name (var_store->dict, name, TRUE)) + if (! psppire_dict_check_name (var_store->dictionary, name, TRUE)) return TRUE; - psppire_dict_insert_variable (var_store->dict, existing_cell->row, name); + psppire_dict_insert_variable (var_store->dictionary, existing_cell->row, name); return FALSE; } @@ -278,7 +278,7 @@ traverse_cell_callback (PsppireSheet *sheet, { gint i; for ( i = n_vars ; i <= new_cell->row; ++i ) - psppire_dict_insert_variable (var_store->dict, i, NULL); + psppire_dict_insert_variable (var_store->dictionary, i, NULL); } return FALSE; @@ -384,7 +384,7 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, vs->missing_val_dialog->pv = psppire_var_store_get_var (var_store, row); - vs->missing_val_dialog->dict = var_store->dict; + vs->missing_val_dialog->dict = var_store->dictionary; g_signal_connect_swapped (customEntry, "clicked", diff --git a/src/ui/gui/psppire-var-store.c b/src/ui/gui/psppire-var-store.c index 26c1ee4d..ece72812 100644 --- a/src/ui/gui/psppire-var-store.c +++ b/src/ui/gui/psppire-var-store.c @@ -41,16 +41,54 @@ #include "var-display.h" +static void +var_change_callback (GtkWidget *w, gint n, gpointer data) +{ + PsppireSheetModel *model = PSPPIRE_SHEET_MODEL (data); + + psppire_sheet_model_range_changed (model, + n, 0, n, PSPPIRE_VAR_STORE_n_COLS); +} + + +static void +var_delete_callback (GtkWidget *w, gint dict_idx, gint case_idx, gint val_cnt, gpointer data) +{ + PsppireSheetModel *model = PSPPIRE_SHEET_MODEL (data); + + psppire_sheet_model_rows_deleted (model, dict_idx, 1); +} + + + +static void +var_insert_callback (GtkWidget *w, glong row, gpointer data) +{ + PsppireSheetModel *model = PSPPIRE_SHEET_MODEL (data); + + psppire_sheet_model_rows_inserted (model, row, 1); +} + +static void +refresh (PsppireDict *d, gpointer data) +{ + PsppireVarStore *vs = data; + + psppire_sheet_model_range_changed (PSPPIRE_SHEET_MODEL (vs), -1, -1, -1, -1); +} + enum { PROP_0, - PSPPIRE_VAR_STORE_FORMAT_TYPE + PSPPIRE_VAR_STORE_FORMAT_TYPE, + PSPPIRE_VAR_STORE_DICT }; static void psppire_var_store_init (PsppireVarStore *var_store); static void psppire_var_store_class_init (PsppireVarStoreClass *class); static void psppire_var_store_sheet_model_init (PsppireSheetModelIface *iface); static void psppire_var_store_finalize (GObject *object); +static void psppire_var_store_dispose (GObject *object); static gchar *psppire_var_store_get_string (const PsppireSheetModel *sheet_model, glong row, glong column); @@ -145,6 +183,27 @@ psppire_var_store_set_property (GObject *object, self->format_type = g_value_get_enum (value); break; + case PSPPIRE_VAR_STORE_DICT: + if ( self->dictionary) + g_object_unref (self->dictionary); + self->dictionary = g_value_dup_object (value); + g_signal_connect (self->dictionary, "variable-changed", G_CALLBACK (var_change_callback), + self); + + g_signal_connect (self->dictionary, "variable-deleted", G_CALLBACK (var_delete_callback), + self); + + g_signal_connect (self->dictionary, "variable-inserted", + G_CALLBACK (var_insert_callback), self); + + g_signal_connect (self->dictionary, "backend-changed", G_CALLBACK (refresh), + self); + + /* The entire model has changed */ + psppire_sheet_model_range_changed (PSPPIRE_SHEET_MODEL (self), -1, -1, -1, -1); + + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; @@ -165,8 +224,12 @@ psppire_var_store_get_property (GObject *object, g_value_set_enum (value, self->format_type); break; + case PSPPIRE_VAR_STORE_DICT: + g_value_take_object (value, self->dictionary); + break; + default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } @@ -176,16 +239,18 @@ static void psppire_var_store_class_init (PsppireVarStoreClass *class) { GObjectClass *object_class; - GParamSpec *pspec; + GParamSpec *format_pspec; + GParamSpec *dict_pspec; parent_class = g_type_class_peek_parent (class); object_class = (GObjectClass*) class; object_class->finalize = psppire_var_store_finalize; + object_class->dispose = psppire_var_store_dispose; object_class->set_property = psppire_var_store_set_property; object_class->get_property = psppire_var_store_get_property; - pspec = g_param_spec_enum ("format-type", + format_pspec = g_param_spec_enum ("format-type", "Variable format type", ("Whether variables have input or output " "formats"), @@ -195,7 +260,17 @@ psppire_var_store_class_init (PsppireVarStoreClass *class) g_object_class_install_property (object_class, PSPPIRE_VAR_STORE_FORMAT_TYPE, - pspec); + format_pspec); + + dict_pspec = g_param_spec_object ("dictionary", + "Dictionary", + "The PsppireDict represented by this var store", + PSPPIRE_TYPE_DICT, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT); + + g_object_class_install_property (object_class, + PSPPIRE_VAR_STORE_DICT, + dict_pspec); } #define DISABLED_COLOR "gray" @@ -206,7 +281,7 @@ psppire_var_store_init (PsppireVarStore *var_store) if ( ! gdk_color_parse (DISABLED_COLOR, &var_store->disabled)) g_critical ("Could not parse color \"%s\"", DISABLED_COLOR); - var_store->dict = 0; + var_store->dictionary = NULL; var_store->format_type = PSPPIRE_VAR_STORE_OUTPUT_FORMATS; } @@ -254,7 +329,7 @@ psppire_var_store_item_editable (PsppireVarStore *var_store, glong row, glong co struct variable * psppire_var_store_get_var (PsppireVarStore *store, glong row) { - return psppire_dict_get_variable (store->dict, row); + return psppire_dict_get_variable (store->dictionary, row); } static gboolean @@ -315,49 +390,14 @@ psppire_var_store_new (PsppireDict *dict) { PsppireVarStore *retval; - retval = g_object_new (GTK_TYPE_VAR_STORE, NULL); + retval = g_object_new (GTK_TYPE_VAR_STORE, "dictionary", dict, NULL); - psppire_var_store_set_dictionary (retval, dict); + // psppire_var_store_set_dictionary (retval, dict); return retval; } -static void -var_change_callback (GtkWidget *w, gint n, gpointer data) -{ - PsppireSheetModel *model = PSPPIRE_SHEET_MODEL (data); - - psppire_sheet_model_range_changed (model, - n, 0, n, PSPPIRE_VAR_STORE_n_COLS); -} - - -static void -var_delete_callback (GtkWidget *w, gint dict_idx, gint case_idx, gint val_cnt, gpointer data) -{ - PsppireSheetModel *model = PSPPIRE_SHEET_MODEL (data); - - psppire_sheet_model_rows_deleted (model, dict_idx, 1); -} - - - -static void -var_insert_callback (GtkWidget *w, glong row, gpointer data) -{ - PsppireSheetModel *model = PSPPIRE_SHEET_MODEL (data); - - psppire_sheet_model_rows_inserted (model, row, 1); -} - -static void -refresh (PsppireDict *d, gpointer data) -{ - PsppireVarStore *vs = data; - - psppire_sheet_model_range_changed (PSPPIRE_SHEET_MODEL (vs), -1, -1, -1, -1); -} - +#if 0 /** * psppire_var_store_replace_set_dictionary: * @var_store: The variable store @@ -388,6 +428,7 @@ psppire_var_store_set_dictionary (PsppireVarStore *var_store, PsppireDict *dict) /* The entire model has changed */ psppire_sheet_model_range_changed (PSPPIRE_SHEET_MODEL (var_store), -1, -1, -1, -1); } +#endif static void psppire_var_store_finalize (GObject *object) @@ -396,6 +437,19 @@ psppire_var_store_finalize (GObject *object) (* parent_class->finalize) (object); } +static void +psppire_var_store_dispose (GObject *object) +{ + PsppireVarStore *self = PSPPIRE_VAR_STORE (object); + + if (self->dictionary) + g_object_unref (self->dictionary); + + /* must chain up */ + (* parent_class->finalize) (object); +} + + static gchar * psppire_var_store_get_string (const PsppireSheetModel *model, glong row, glong column) @@ -404,10 +458,10 @@ psppire_var_store_get_string (const PsppireSheetModel *model, struct variable *pv; - if ( row >= psppire_dict_get_var_cnt (store->dict)) + if ( row >= psppire_dict_get_var_cnt (store->dictionary)) return 0; - pv = psppire_dict_get_variable (store->dict, row); + pv = psppire_dict_get_variable (store->dictionary, row); return text_for_column (store, pv, column, 0); } @@ -424,7 +478,7 @@ psppire_var_store_clear (PsppireSheetModel *model, glong row, glong col) PsppireVarStore *var_store = PSPPIRE_VAR_STORE (model); - if ( row >= psppire_dict_get_var_cnt (var_store->dict)) + if ( row >= psppire_dict_get_var_cnt (var_store->dictionary)) return FALSE; pv = psppire_var_store_get_var (var_store, row); @@ -455,7 +509,7 @@ psppire_var_store_set_string (PsppireSheetModel *model, PsppireVarStore *var_store = PSPPIRE_VAR_STORE (model); - if ( row >= psppire_dict_get_var_cnt (var_store->dict)) + if ( row >= psppire_dict_get_var_cnt (var_store->dictionary)) return FALSE; pv = psppire_var_store_get_var (var_store, row); @@ -468,7 +522,7 @@ psppire_var_store_set_string (PsppireSheetModel *model, case PSPPIRE_VAR_STORE_COL_NAME: { gboolean ok; - ok = psppire_dict_rename_var (var_store->dict, pv, text); + ok = psppire_dict_rename_var (var_store->dictionary, pv, text); return ok; } case PSPPIRE_VAR_STORE_COL_COLUMNS: @@ -561,7 +615,7 @@ static gchar * text_for_column (PsppireVarStore *vs, const struct variable *pv, gint c, GError **err) { - PsppireDict *dict = vs->dict; + PsppireDict *dict = vs->dictionary; static const gchar *const type_label[] = { N_("Numeric"), @@ -726,7 +780,7 @@ text_for_column (PsppireVarStore *vs, gint psppire_var_store_get_var_cnt (PsppireVarStore *store) { - return psppire_dict_get_var_cnt (store->dict); + return psppire_dict_get_var_cnt (store->dictionary); } @@ -736,8 +790,8 @@ psppire_var_store_get_row_count (const PsppireSheetModel * model) gint rows = 0; PsppireVarStore *vs = PSPPIRE_VAR_STORE (model); - if (vs->dict) - rows = psppire_dict_get_var_cnt (vs->dict); + if (vs->dictionary) + rows = psppire_dict_get_var_cnt (vs->dictionary); return rows ; } @@ -758,10 +812,10 @@ get_row_sensitivity (const PsppireSheetModel *model, gint row) { PsppireVarStore *vs = PSPPIRE_VAR_STORE (model); - if ( ! vs->dict) + if ( ! vs->dictionary) return FALSE; - return row < psppire_dict_get_var_cnt (vs->dict); + return row < psppire_dict_get_var_cnt (vs->dictionary); } diff --git a/src/ui/gui/psppire-var-store.h b/src/ui/gui/psppire-var-store.h index 4cda0159..e4c2ecd8 100644 --- a/src/ui/gui/psppire-var-store.h +++ b/src/ui/gui/psppire-var-store.h @@ -63,7 +63,7 @@ struct _PsppireVarStore GObject parent; /*< private >*/ - PsppireDict *dict; + PsppireDict *dictionary; GdkColor disabled; PsppireVarStoreFormatType format_type; }; @@ -84,9 +84,6 @@ GType psppire_var_store_get_type (void) G_GNUC_CONST; PsppireVarStore *psppire_var_store_new (PsppireDict *dict); struct variable * psppire_var_store_get_var (PsppireVarStore *store, glong row); -void psppire_var_store_set_dictionary (PsppireVarStore *var_store, PsppireDict *dict); - - /* Return the number of variables */ gint psppire_var_store_get_var_cnt (PsppireVarStore *var_store); diff --git a/src/ui/gui/rank-dialog.c b/src/ui/gui/rank-dialog.c index db5cd4fb..b2894095 100644 --- a/src/ui/gui/rank-dialog.c +++ b/src/ui/gui/rank-dialog.c @@ -238,7 +238,7 @@ rank_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - rd.dict = vs->dict; + g_object_get (vs, "dictionary", &rd.dict, NULL); rd.rank_vars = get_widget_assert (builder, "variables-treeview"); rd.group_vars = get_widget_assert (builder, "group-vars-treeview"); rd.dialog = get_widget_assert (builder, "rank-dialog"); @@ -306,9 +306,9 @@ rank_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (rd.dialog), GTK_WINDOW (de)); - g_object_set (vars, "dictionary", vs->dict, NULL); + g_object_set (vars, "dictionary", rd.dict, NULL); - set_dest_model (GTK_TREE_VIEW (rd.rank_vars), vs->dict); + set_dest_model (GTK_TREE_VIEW (rd.rank_vars), rd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector1), vars, @@ -317,7 +317,7 @@ rank_dialog (GObject *o, gpointer data) NULL, NULL); - set_dest_model (GTK_TREE_VIEW (rd.group_vars), vs->dict); + set_dest_model (GTK_TREE_VIEW (rd.group_vars), rd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector2), vars, diff --git a/src/ui/gui/recode-dialog.c b/src/ui/gui/recode-dialog.c index 495aefb8..0bb82eb3 100644 --- a/src/ui/gui/recode-dialog.c +++ b/src/ui/gui/recode-dialog.c @@ -867,7 +867,7 @@ recode_dialog (PsppireDataWindow *de, gboolean diff) rd.new_name_entry = get_widget_assert (builder, "dest-name-entry"); rd.new_label_entry = get_widget_assert (builder, "dest-label-entry"); - rd.dict = vs->dict; + g_object_get (vs, "dictionary", &rd.dict, NULL); rd.value_map = gtk_list_store_new (2, old_value_get_type (), @@ -888,11 +888,11 @@ recode_dialog (PsppireDataWindow *de, gboolean diff) gtk_window_set_transient_for (GTK_WINDOW (rd.dialog), GTK_WINDOW (de)); - g_object_set (rd.dict_treeview, "dictionary", vs->dict, NULL); + g_object_set (rd.dict_treeview, "dictionary", rd.dict, NULL); if ( ! rd.different ) { - set_dest_model (GTK_TREE_VIEW (rd.variable_treeview), vs->dict); + set_dest_model (GTK_TREE_VIEW (rd.variable_treeview), rd.dict); } else { @@ -916,7 +916,7 @@ recode_dialog (PsppireDataWindow *de, gboolean diff) gtk_tree_view_column_set_cell_data_func (col, renderer, cell_var_name, - vs->dict, 0); + rd.dict, 0); gtk_tree_view_append_column (GTK_TREE_VIEW (rd.variable_treeview), col); diff --git a/src/ui/gui/regression-dialog.c b/src/ui/gui/regression-dialog.c index a702ffb7..eaca17e0 100644 --- a/src/ui/gui/regression-dialog.c +++ b/src/ui/gui/regression-dialog.c @@ -253,10 +253,11 @@ regression_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &rd.dict, NULL); + g_object_set (source, "dictionary", rd.dict, NULL); - set_dest_model (GTK_TREE_VIEW (dest_dep), vs->dict); - set_dest_model (GTK_TREE_VIEW (dest_indep), vs->dict); + set_dest_model (GTK_TREE_VIEW (dest_dep), rd.dict); + set_dest_model (GTK_TREE_VIEW (dest_indep), rd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (dep_selector), source, @@ -274,7 +275,8 @@ regression_dialog (GObject *o, gpointer data) rd.dep_vars = GTK_TREE_VIEW (dest_dep); rd.indep_vars = GTK_TREE_VIEW (dest_indep); - rd.dict = vs->dict; + + rd.save_dialog = get_widget_assert (xml, "save-dialog"); rd.pred_button = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "pred-button")); rd.resid_button = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "resid-button")); diff --git a/src/ui/gui/reliability-dialog.c b/src/ui/gui/reliability-dialog.c index 4db99d97..66c8bf5c 100644 --- a/src/ui/gui/reliability-dialog.c +++ b/src/ui/gui/reliability-dialog.c @@ -137,11 +137,10 @@ reliability_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &rd.dict, NULL); + g_object_set (source, "dictionary", rd.dict, NULL); - rd.dict = vs->dict; - - set_dest_model (GTK_TREE_VIEW (rd.variables), vs->dict); + set_dest_model (GTK_TREE_VIEW (rd.variables), rd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), source, diff --git a/src/ui/gui/sort-cases-dialog.c b/src/ui/gui/sort-cases-dialog.c index a1135610..4e7ac61f 100644 --- a/src/ui/gui/sort-cases-dialog.c +++ b/src/ui/gui/sort-cases-dialog.c @@ -111,9 +111,10 @@ sort_cases_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &scd.dict, NULL); + g_object_set (source, "dictionary", scd.dict, NULL); - set_dest_model (GTK_TREE_VIEW (dest), vs->dict); + set_dest_model (GTK_TREE_VIEW (dest), scd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), source, @@ -125,7 +126,6 @@ sort_cases_dialog (GObject *o, gpointer data) g_signal_connect (dialog, "refresh", G_CALLBACK (refresh), dest); scd.tv = GTK_TREE_VIEW (dest); - scd.dict = vs->dict; scd.ascending = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "sort-cases-radiobutton0")); diff --git a/src/ui/gui/split-file-dialog.c b/src/ui/gui/split-file-dialog.c index 458a3c53..613f8e91 100644 --- a/src/ui/gui/split-file-dialog.c +++ b/src/ui/gui/split-file-dialog.c @@ -186,19 +186,16 @@ split_file_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - sfd.dict = vs->dict; + g_object_get (vs, "dictionary", &sfd.dict, NULL); sfd.tv = GTK_TREE_VIEW (dest); sfd.selector = PSPPIRE_SELECTOR ( get_widget_assert (sfd.xml, "split-file-selector")); - g_object_set (source, "dictionary", - vs->dict, NULL); - + g_object_set (source, "dictionary", sfd.dict, NULL); g_signal_connect (on_off, "toggled", G_CALLBACK(on_off_toggled), sfd.xml); - - set_dest_model (GTK_TREE_VIEW (dest), vs->dict); + set_dest_model (GTK_TREE_VIEW (dest), sfd.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), source, diff --git a/src/ui/gui/t-test-independent-samples-dialog.c b/src/ui/gui/t-test-independent-samples-dialog.c index f5df9f36..5d77ce43 100644 --- a/src/ui/gui/t-test-independent-samples-dialog.c +++ b/src/ui/gui/t-test-independent-samples-dialog.c @@ -416,7 +416,7 @@ t_test_independent_samples_dialog (GObject *o, gpointer data) tt_d.dialog = get_widget_assert (xml, "t-test-independent-samples-dialog"); tt_d.xml = xml; - tt_d.dict = vs->dict; + g_object_get (vs, "dictionary", &tt_d.dict, NULL); tt_d.define_groups_button = get_widget_assert (xml, "define-groups-button"); tt_d.groups_entry = get_widget_assert (xml, "indep-samples-t-test-entry"); @@ -426,11 +426,9 @@ t_test_independent_samples_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (tt_d.dialog), GTK_WINDOW (de)); - g_object_set (dict_view, "dictionary", - vs->dict, - NULL); + g_object_set (dict_view, "dictionary", tt_d.dict, NULL); - set_dest_model (GTK_TREE_VIEW (test_variables_treeview), vs->dict); + set_dest_model (GTK_TREE_VIEW (test_variables_treeview), tt_d.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector1), diff --git a/src/ui/gui/t-test-one-sample.c b/src/ui/gui/t-test-one-sample.c index 18bdbb5d..8b2d8af7 100644 --- a/src/ui/gui/t-test-one-sample.c +++ b/src/ui/gui/t-test-one-sample.c @@ -141,7 +141,7 @@ t_test_one_sample_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - tt_d.dict = vs->dict; + g_object_get (vs, "dictionary", &tt_d.dict, NULL); tt_d.vars_treeview = get_widget_assert (xml, "one-sample-t-test-treeview1"); tt_d.test_value_entry = get_widget_assert (xml, "test-value-entry"); tt_d.opt = tt_options_dialog_create (xml, GTK_WINDOW (de)); @@ -149,11 +149,11 @@ t_test_one_sample_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); g_object_set (dict_view, "dictionary", - vs->dict, - "predicate", - var_is_numeric, NULL); + tt_d.dict, + "predicate", + var_is_numeric, NULL); - set_dest_model (GTK_TREE_VIEW (tt_d.vars_treeview), vs->dict); + set_dest_model (GTK_TREE_VIEW (tt_d.vars_treeview), tt_d.dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), diff --git a/src/ui/gui/t-test-paired-samples.c b/src/ui/gui/t-test-paired-samples.c index dcc24fad..15b99ad2 100644 --- a/src/ui/gui/t-test-paired-samples.c +++ b/src/ui/gui/t-test-paired-samples.c @@ -199,7 +199,7 @@ t_test_paired_samples_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - tt_d.dict = vs->dict; + g_object_get (vs, "dictionary", &tt_d.dict, NULL); tt_d.pairs_treeview = get_widget_assert (xml, "paired-samples-t-test-treeview2"); tt_d.opt = tt_options_dialog_create (xml, GTK_WINDOW (de)); @@ -207,10 +207,9 @@ t_test_paired_samples_dialog (GObject *o, gpointer data) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (dict_view, "dictionary", - vs->dict, - "predicate", - var_is_numeric, NULL); + g_object_set (dict_view, "dictionary", tt_d.dict, + "predicate", + var_is_numeric, NULL); { tt_d.list_store = diff --git a/src/ui/gui/transpose-dialog.c b/src/ui/gui/transpose-dialog.c index beed72d7..36640f6f 100644 --- a/src/ui/gui/transpose-dialog.c +++ b/src/ui/gui/transpose-dialog.c @@ -80,6 +80,7 @@ transpose_dialog (GObject *o, gpointer data) { gint response ; PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data); + PsppireDict *dict = NULL; GtkBuilder *xml = builder_new ("psppire.ui"); @@ -94,9 +95,10 @@ transpose_dialog (GObject *o, gpointer data) g_object_get (de->data_editor, "var-store", &vs, NULL); - g_object_set (source, "dictionary", vs->dict, NULL); + g_object_get (vs, "dictionary", &dict, NULL); + g_object_set (source, "dictionary", dict, NULL); - set_dest_model (GTK_TREE_VIEW (dest), vs->dict); + set_dest_model (GTK_TREE_VIEW (dest), dict); psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector1), source, dest, @@ -125,7 +127,7 @@ transpose_dialog (GObject *o, gpointer data) { case GTK_RESPONSE_OK: { - gchar *syntax = generate_syntax (vs->dict, xml); + gchar *syntax = generate_syntax (dict, xml); struct getl_interface *sss = create_syntax_string_source (syntax); execute_syntax (sss); @@ -135,7 +137,7 @@ transpose_dialog (GObject *o, gpointer data) break; case PSPPIRE_RESPONSE_PASTE: { - gchar *syntax = generate_syntax (vs->dict, xml); + gchar *syntax = generate_syntax (dict, xml); paste_syntax_in_new_window (syntax); g_free (syntax); diff --git a/src/ui/gui/val-labs-dialog.c b/src/ui/gui/val-labs-dialog.c index 5b226eb6..14eacabf 100644 --- a/src/ui/gui/val-labs-dialog.c +++ b/src/ui/gui/val-labs-dialog.c @@ -35,6 +35,7 @@ struct val_labs_dialog GtkWidget *window; PsppireVarStore *var_store; + PsppireDict *dict; /* The variable to be updated */ struct variable *pv; @@ -72,7 +73,7 @@ on_label_entry_change (GtkEntry *entry, gpointer data) text = gtk_entry_get_text (GTK_ENTRY (dialog->value_entry)); text_to_value (text, - dialog->var_store->dict, + dialog->dict, dialog->pv, &v); @@ -145,7 +146,7 @@ on_value_entry_change (GtkEntry *entry, gpointer data) union value v; text_to_value (text, - dialog->var_store->dict, + dialog->dict, dialog->pv, &v); @@ -273,7 +274,7 @@ on_change (GtkWidget *w, gpointer data) union value v; text_to_value (val_text, - dialog->var_store->dict, + dialog->dict, dialog->pv, &v); @@ -299,7 +300,7 @@ on_add (GtkWidget *w, gpointer data) const gchar *text = gtk_entry_get_text (GTK_ENTRY (dialog->value_entry)); text_to_value (text, - dialog->var_store->dict, + dialog->dict, dialog->pv, &v); @@ -351,7 +352,7 @@ on_select_row (GtkTreeView *treeview, gpointer data) gchar *text; get_selected_tuple (dialog, &value, &label); - text = value_to_text (value, dialog->var_store->dict, *var_get_write_format (dialog->pv)); + text = value_to_text (value, dialog->dict, *var_get_write_format (dialog->pv)); g_signal_handler_block (GTK_ENTRY (dialog->value_entry), dialog->value_handler_id); @@ -391,6 +392,7 @@ val_labs_dialog_create (GtkWindow *toplevel, PsppireVarStore *var_store) struct val_labs_dialog *dialog = g_malloc (sizeof (*dialog)); dialog->var_store = var_store; + g_object_get (var_store, "dictionary", &dialog->dict, NULL); dialog->window = get_widget_assert (xml,"val_labs_dialog"); dialog->value_entry = get_widget_assert (xml,"value_entry"); dialog->label_entry = get_widget_assert (xml,"label_entry"); @@ -503,7 +505,7 @@ repopulate_dialog (struct val_labs_dialog *dialog) const struct val_lab *vl = labels[i]; gchar *const vstr = - value_to_text (vl->value, dialog->var_store->dict, + value_to_text (vl->value, dialog->dict, *var_get_write_format (dialog->pv)); gchar *const text = g_strdup_printf ("%s = \"%s\"", diff --git a/src/ui/gui/variable-info-dialog.c b/src/ui/gui/variable-info-dialog.c index 178a834c..2fdf2df8 100644 --- a/src/ui/gui/variable-info-dialog.c +++ b/src/ui/gui/variable-info-dialog.c @@ -65,8 +65,7 @@ populate_text (PsppireDictView *treeview, gpointer data) if ( var == NULL) return; - g_object_get (treeview, - "dictionary", &dict, + g_object_get (treeview, "dictionary", &dict, NULL); gstring = g_string_sized_new (200); @@ -159,13 +158,14 @@ variable_info_dialog (GObject *o, gpointer data) GtkWidget *textview = get_widget_assert (xml, "textview1"); PsppireVarStore *vs = NULL; + PsppireDict *dict = NULL; g_object_get (de->data_editor, "var-store", &vs, NULL); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); - g_object_set (treeview, - "dictionary", vs->dict, + g_object_get (vs, "dictionary", &dict, NULL); + g_object_set (treeview, "dictionary", dict, "selection-mode", GTK_SELECTION_SINGLE, NULL); diff --git a/src/ui/gui/weight-cases-dialog.c b/src/ui/gui/weight-cases-dialog.c index 11b528ba..b3087159 100644 --- a/src/ui/gui/weight-cases-dialog.c +++ b/src/ui/gui/weight-cases-dialog.c @@ -120,6 +120,7 @@ weight_cases_dialog (GObject *o, gpointer data) PsppireVarStore *vs = NULL; g_object_get (de->data_editor, "var-store", &vs, NULL); + g_object_get (vs, "dictionary", &wcd.dict, NULL); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); @@ -130,7 +131,8 @@ weight_cases_dialog (GObject *o, gpointer data) g_signal_connect (selector, "de-selected", G_CALLBACK (on_deselect), radiobutton1); - g_object_set (source, "dictionary", vs->dict, + + g_object_set (source, "dictionary", wcd.dict, "selection-mode", GTK_SELECTION_SINGLE, "predicate", var_is_numeric, NULL); @@ -144,7 +146,7 @@ weight_cases_dialog (GObject *o, gpointer data) ); - wcd.dict = vs->dict; + wcd.entry = GTK_ENTRY (entry); wcd.status = GTK_LABEL (status); wcd.off = GTK_TOGGLE_BUTTON (radiobutton1); -- 2.30.2