X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-crosstabs.c;h=3c2bd5957943a142efd149ded6942268efd2a08b;hb=797d4cf7f997bea8743e73ab0a54c00c715a1f94;hp=aa5c86cc85880f87dbcb1f90f146cfda995a91e5;hpb=89cbb0a7f4f31bc826621ffff9138fc4743f2b11;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-crosstabs.c b/src/ui/gui/psppire-dialog-action-crosstabs.c index aa5c86cc85..3c2bd59579 100644 --- a/src/ui/gui/psppire-dialog-action-crosstabs.c +++ b/src/ui/gui/psppire-dialog-action-crosstabs.c @@ -51,7 +51,7 @@ dialog_state_valid (gpointer data) GtkTreeIter notused; - return (gtk_tree_model_get_iter_first (row_vars, ¬used) + return (gtk_tree_model_get_iter_first (row_vars, ¬used) && gtk_tree_model_get_iter_first (col_vars, ¬used)); } @@ -62,42 +62,44 @@ refresh (PsppireDialogAction *rd_) GtkTreeModel *liststore = gtk_tree_view_get_model (GTK_TREE_VIEW (cd->dest_rows)); gtk_list_store_clear (GTK_LIST_STORE (liststore)); - + liststore = gtk_tree_view_get_model (GTK_TREE_VIEW (cd->dest_cols)); gtk_list_store_clear (GTK_LIST_STORE (liststore)); } -#define CROSSTABS_STATS \ - CS (CHISQ, N_("Chisq")) \ - CS (PHI, N_("Phi")) \ - CS (CC, N_("CC")) \ - CS (LAMBDA, N_("Lambda")) \ - CS (UC, N_("UC")) \ - CS (BTAU, N_("BTau")) \ - CS (CTAU, N_("CTau")) \ - CS (RISK, N_("Risk")) \ - CS (GAMMA, N_("Gamma")) \ - CS (D, N_("D")) \ - CS (KAPPA, N_("Kappa")) \ - CS (ETA, N_("Eta")) \ - CS (CORR, N_("Corr")) \ - CS (STATS_NONE, N_("None")) - - -#define CROSSTABS_CELLS \ - CS (COUNT, N_("Count")) \ - CS (ROW, N_("Row")) \ - CS (COLUMN, N_("Column")) \ - CS (TOTAL, N_("Total")) \ - CS (EXPECTED, N_("Expected")) \ - CS (RESIDUAL, N_("Residual")) \ - CS (SRESIDUAL, N_("Std. Residual")) \ - CS (ASRESIDUAL, N_("Adjusted Std. Residual")) \ - CS (CELLS_NONE, N_("None")) +#define CROSSTABS_STATS \ + CS (CHISQ, N_("Chisq"), N_("Pearson chi-square, " \ + "likelihood ratio, Fisher’s exact test, continuity correction, " \ + "linear-by-linear association.")) \ + CS (PHI, N_("Phi and Cramer's V"), NULL) \ + CS (CC, N_("CC"), N_("Contingency coefficient")) \ + CS (LAMBDA, N_("Lambda"), NULL) \ + CS (UC, N_("UC"), N_("Uncertainty coefficient")) \ + CS (BTAU, N_("BTau"), N_("Kendall's Tau-b")) \ + CS (CTAU, N_("CTau"), N_("Kendall's Tau-c")) \ + CS (RISK, N_("Risk"), N_("Relative Risk estimate")) \ + CS (GAMMA, N_("Gamma"), NULL) \ + CS (D, N_("D"), N_("Somer's d")) \ + CS (KAPPA, N_("Kappa"), N_("Cohen's Kappa")) \ + CS (ETA, N_("Eta"), NULL) \ + CS (CORR, N_("Corr"), N_("Spearman correlation, Pearson's r")) \ + CS (STATS_NONE, N_("None"), NULL) + + +#define CROSSTABS_CELLS \ + CS (COUNT, N_("Count"), N_("Frequency Count")) \ + CS (ROW, N_("Row"), N_("Row percent")) \ + CS (COLUMN, N_("Column"), N_("Column percent")) \ + CS (TOTAL, N_("Total"), N_("Total percent")) \ + CS (EXPECTED, N_("Expected"), N_("Expected value")) \ + CS (RESIDUAL, N_("Residual"), NULL) \ + CS (SRESIDUAL, N_("Std. Residual"), N_("Standardized Residual")) \ + CS (ASRESIDUAL, N_("Adjusted Std. Residual"), NULL) \ + CS (CELLS_NONE, N_("None"), NULL) enum { -#define CS(NAME, LABEL) CS_##NAME, +#define CS(NAME, LABEL, TOOLTIP) CS_##NAME, CROSSTABS_STATS #undef CS N_CROSSTABS_STATS @@ -105,7 +107,7 @@ enum enum { -#define CS(NAME, LABEL) CS_##NAME, +#define CS(NAME, LABEL, TOOLTIP) CS_##NAME, CROSSTABS_CELLS #undef CS N_CROSSTABS_CELLS @@ -113,7 +115,7 @@ enum enum { -#define CS(NAME, LABEL) B_CS_##NAME = 1u << CS_##NAME, +#define CS(NAME, LABEL, TOOLTIP) B_CS_##NAME = 1u << CS_##NAME, CROSSTABS_STATS CROSSTABS_CELLS #undef CS @@ -126,17 +128,17 @@ enum static const struct checkbox_entry_item stats[] = { -#define CS(NAME, LABEL) {#NAME, LABEL}, +#define CS(NAME, LABEL, TOOLTIP) {#NAME, LABEL, TOOLTIP}, CROSSTABS_STATS \ - CS(NONE, N_("None")) + CS(NONE, N_("None"), NULL) #undef CS }; static const struct checkbox_entry_item cells[] = { -#define CS(NAME, LABEL) {#NAME, LABEL}, +#define CS(NAME, LABEL, TOOLTIP) {#NAME, LABEL, TOOLTIP}, CROSSTABS_CELLS \ - CS(NONE, N_("None")) + CS(NONE, N_("None"), NULL) #undef CS }; @@ -151,7 +153,7 @@ on_format_clicked (PsppireDialogActionCrosstabs *cd) ret = psppire_dialog_run (PSPPIRE_DIALOG (cd->format_dialog)); - if ( ret == PSPPIRE_RESPONSE_CONTINUE ) + if (ret == PSPPIRE_RESPONSE_CONTINUE) { cd->format_options_avalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->avalue_button)); @@ -159,7 +161,7 @@ on_format_clicked (PsppireDialogActionCrosstabs *cd) cd->format_options_table = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->table_button)); - cd->format_options_pivot = + cd->format_options_pivot = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->pivot_button)); } } @@ -171,7 +173,7 @@ on_cell_clicked (PsppireDialogActionCrosstabs *cd) gint ret = psppire_dialog_run (PSPPIRE_DIALOG (cd->cell_dialog)); - if ( ret == PSPPIRE_RESPONSE_CONTINUE ) + if (ret == PSPPIRE_RESPONSE_CONTINUE) { g_object_unref (liststore); } @@ -190,7 +192,7 @@ on_statistics_clicked (PsppireDialogActionCrosstabs *cd) gint ret = psppire_dialog_run (PSPPIRE_DIALOG (cd->stat_dialog)); - if ( ret == PSPPIRE_RESPONSE_CONTINUE ) + if (ret == PSPPIRE_RESPONSE_CONTINUE) { g_object_unref (liststore); } @@ -202,79 +204,71 @@ on_statistics_clicked (PsppireDialogActionCrosstabs *cd) } -static void -psppire_dialog_action_crosstabs_activate (GtkAction *a) +static GtkBuilder * +psppire_dialog_action_crosstabs_activate (PsppireDialogAction *a, GVariant *param) { PsppireDialogActionCrosstabs *act = PSPPIRE_DIALOG_ACTION_CROSSTABS (a); PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a); - GHashTable *thing = psppire_dialog_action_get_pointer (pda); - GtkBuilder *xml = g_hash_table_lookup (thing, a); - if (!xml) - { - xml = builder_new ("crosstabs.ui"); - g_hash_table_insert (thing, a, xml); + GtkBuilder *xml = builder_new ("crosstabs.ui"); - pda->dialog = get_widget_assert (xml, "crosstabs-dialog"); - pda->source = get_widget_assert (xml, "dict-treeview"); + pda->dialog = get_widget_assert (xml, "crosstabs-dialog"); + pda->source = get_widget_assert (xml, "dict-treeview"); - act->dest_rows = get_widget_assert (xml, "rows"); - act->dest_cols = get_widget_assert (xml, "cols"); - act->format_button = get_widget_assert (xml, "format-button"); - act->stat_button = get_widget_assert (xml, "stats-button"); - act->cell_button = get_widget_assert (xml, "cell-button"); - act->stat_view = get_widget_assert (xml, "stats-view"); - act->cell_view = get_widget_assert (xml, "cell-view"); - act->cell_dialog = get_widget_assert (xml, "cell-dialog"); - act->stat_dialog = get_widget_assert (xml, "stat-dialog"); - act->format_dialog = get_widget_assert (xml, "format-dialog"); + act->dest_rows = get_widget_assert (xml, "rows"); + act->dest_cols = get_widget_assert (xml, "cols"); + act->format_button = get_widget_assert (xml, "format-button"); + act->stat_button = get_widget_assert (xml, "stats-button"); + act->cell_button = get_widget_assert (xml, "cell-button"); + act->stat_view = get_widget_assert (xml, "stats-view"); + act->cell_view = get_widget_assert (xml, "cell-view"); + act->cell_dialog = get_widget_assert (xml, "cell-dialog"); + act->stat_dialog = get_widget_assert (xml, "stat-dialog"); + act->format_dialog = get_widget_assert (xml, "format-dialog"); - act->avalue_button = get_widget_assert (xml, "ascending"); - act->table_button = get_widget_assert (xml, "print-tables"); - act->pivot_button = get_widget_assert (xml, "pivot"); + act->avalue_button = get_widget_assert (xml, "ascending"); + act->table_button = get_widget_assert (xml, "print-tables"); + act->pivot_button = get_widget_assert (xml, "pivot"); - act->format_options_avalue = TRUE; - act->format_options_table = TRUE; - act->format_options_pivot = TRUE; + act->format_options_avalue = TRUE; + act->format_options_table = TRUE; + act->format_options_pivot = TRUE; - psppire_checkbox_treeview_populate (PSPPIRE_CHECKBOX_TREEVIEW (act->cell_view), - B_CS_CELL_DEFAULT, - N_CROSSTABS_CELLS, - cells); + psppire_checkbox_treeview_populate (PSPPIRE_CHECKBOX_TREEVIEW (act->cell_view), + B_CS_CELL_DEFAULT, + N_CROSSTABS_CELLS, + cells); - act->cell = gtk_tree_view_get_model (GTK_TREE_VIEW (act->cell_view)); + act->cell = gtk_tree_view_get_model (GTK_TREE_VIEW (act->cell_view)); - psppire_checkbox_treeview_populate (PSPPIRE_CHECKBOX_TREEVIEW (act->stat_view), - B_CS_STATS_DEFAULT, - N_CROSSTABS_STATS, - stats); + psppire_checkbox_treeview_populate (PSPPIRE_CHECKBOX_TREEVIEW (act->stat_view), + B_CS_STATS_DEFAULT, + N_CROSSTABS_STATS, + stats); - act->stat = gtk_tree_view_get_model (GTK_TREE_VIEW (act->stat_view)); + act->stat = gtk_tree_view_get_model (GTK_TREE_VIEW (act->stat_view)); - psppire_dialog_action_set_refresh (pda, refresh); + psppire_dialog_action_set_refresh (pda, refresh); - psppire_dialog_action_set_valid_predicate (pda, - dialog_state_valid); + psppire_dialog_action_set_valid_predicate (pda, + dialog_state_valid); - g_signal_connect_swapped (act->cell_button, "clicked", - G_CALLBACK (on_cell_clicked), act); + g_signal_connect_swapped (act->cell_button, "clicked", + G_CALLBACK (on_cell_clicked), act); - g_signal_connect_swapped (act->stat_button, "clicked", - G_CALLBACK (on_statistics_clicked), act); + g_signal_connect_swapped (act->stat_button, "clicked", + G_CALLBACK (on_statistics_clicked), act); - g_signal_connect_swapped (act->format_button, "clicked", - G_CALLBACK (on_format_clicked), act); + g_signal_connect_swapped (act->format_button, "clicked", + G_CALLBACK (on_format_clicked), act); - } - - if (PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_crosstabs_parent_class)->activate) - PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_crosstabs_parent_class)->activate (pda); + return xml; } static char * -generate_syntax (PsppireDialogAction *a) +generate_syntax (const PsppireDialogAction *a) { PsppireDialogActionCrosstabs *cd = PSPPIRE_DIALOG_ACTION_CROSSTABS (a); gchar *text = NULL; @@ -294,7 +288,7 @@ generate_syntax (PsppireDialogAction *a) if (cd->format_options_avalue) g_string_append (string, "AVALUE"); - else + else g_string_append (string, "DVALUE"); g_string_append (string, " "); @@ -302,24 +296,17 @@ generate_syntax (PsppireDialogAction *a) g_string_append (string, "TABLES"); else g_string_append (string, "NOTABLES"); - g_string_append (string, " "); - - if (cd->format_options_pivot) - g_string_append (string, "PIVOT"); - else - g_string_append (string, "NOPIVOT"); - selected = 0; - for (i = 0, ok = gtk_tree_model_get_iter_first (cd->stat, &iter); ok; + for (i = 0, ok = gtk_tree_model_get_iter_first (cd->stat, &iter); ok; i++, ok = gtk_tree_model_iter_next (cd->stat, &iter)) { gboolean toggled; gtk_tree_model_get (cd->stat, &iter, - CHECKBOX_COLUMN_SELECTED, &toggled, -1); - if (toggled) - selected |= 1u << i; - else + CHECKBOX_COLUMN_SELECTED, &toggled, -1); + if (toggled) + selected |= 1u << i; + else selected &= ~(1u << i); } @@ -340,15 +327,15 @@ generate_syntax (PsppireDialogAction *a) } selected = 0; - for (i = 0, ok = gtk_tree_model_get_iter_first (cd->cell, &iter); ok; + for (i = 0, ok = gtk_tree_model_get_iter_first (cd->cell, &iter); ok; i++, ok = gtk_tree_model_iter_next (cd->cell, &iter)) { gboolean toggled; gtk_tree_model_get (cd->cell, &iter, - CHECKBOX_COLUMN_SELECTED, &toggled, -1); - if (toggled) - selected |= 1u << i; - else + CHECKBOX_COLUMN_SELECTED, &toggled, -1); + if (toggled) + selected |= 1u << i; + else selected &= ~(1u << i); } @@ -381,7 +368,7 @@ generate_syntax (PsppireDialogAction *a) static void psppire_dialog_action_crosstabs_class_init (PsppireDialogActionCrosstabsClass *class) { - psppire_dialog_action_set_activation (class, psppire_dialog_action_crosstabs_activate); + PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_crosstabs_activate; PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax; } @@ -390,4 +377,3 @@ static void psppire_dialog_action_crosstabs_init (PsppireDialogActionCrosstabs *act) { } -