From 25f47bf48c0aca4c3b75487ffa749637c792de92 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sat, 30 Oct 2010 14:06:51 +0200 Subject: [PATCH] Added a dialog box for the k-related-sample non-parametric tests. --- src/ui/gui/automake.mk | 3 + src/ui/gui/data-editor.ui | 7 ++ src/ui/gui/k-related-dialog.c | 186 +++++++++++++++++++++++++++++ src/ui/gui/k-related-dialog.h | 25 ++++ src/ui/gui/k-related.ui | 194 +++++++++++++++++++++++++++++++ src/ui/gui/psppire-data-window.c | 3 + 6 files changed, 418 insertions(+) create mode 100644 src/ui/gui/k-related-dialog.c create mode 100644 src/ui/gui/k-related-dialog.h create mode 100644 src/ui/gui/k-related.ui diff --git a/src/ui/gui/automake.mk b/src/ui/gui/automake.mk index 989677f8..1595fdd0 100644 --- a/src/ui/gui/automake.mk +++ b/src/ui/gui/automake.mk @@ -15,6 +15,7 @@ UI_FILES = \ src/ui/gui/factor.ui \ src/ui/gui/find.ui \ src/ui/gui/frequencies.ui \ + src/ui/gui/k-related.ui \ src/ui/gui/oneway.ui \ src/ui/gui/psppire.ui \ src/ui/gui/rank.ui \ @@ -158,6 +159,8 @@ src_ui_gui_psppire_SOURCES = \ src/ui/gui/help-menu.c \ src/ui/gui/help-menu.h \ src/ui/gui/helper.h \ + src/ui/gui/k-related-dialog.c \ + src/ui/gui/k-related-dialog.h \ src/ui/gui/main.c \ src/ui/gui/missing-val-dialog.c \ src/ui/gui/missing-val-dialog.h \ diff --git a/src/ui/gui/data-editor.ui b/src/ui/gui/data-editor.ui index 69f2b413..d87596cf 100644 --- a/src/ui/gui/data-editor.ui +++ b/src/ui/gui/data-editor.ui @@ -416,6 +416,12 @@ _Binomial + + + "k-related-samples"> + K Related _Samples + + roc-curve @@ -546,6 +552,7 @@ + diff --git a/src/ui/gui/k-related-dialog.c b/src/ui/gui/k-related-dialog.c new file mode 100644 index 00000000..fb0a785d --- /dev/null +++ b/src/ui/gui/k-related-dialog.c @@ -0,0 +1,186 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2010 Free Software Foundation + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "k-related-dialog.h" + +#include + +#include "psppire-dialog.h" +#include "psppire-var-view.h" +#include "psppire-acr.h" +#include "dialog-common.h" + +#include "helper.h" +#include "executor.h" + + +#include + +struct k_related_dialog +{ + PsppireDict *dict; + GtkWidget *var_view; + + GtkWidget *friedman; + GtkWidget *kendal; + GtkWidget *cochran; +}; + +static gboolean +dialog_state_valid (gpointer data) +{ + struct k_related_dialog *krd = data; + + GtkTreeModel *vars = + gtk_tree_view_get_model (GTK_TREE_VIEW (krd->var_view)); + + /* Tests using less than 3 variables are not useful */ + if (gtk_tree_model_iter_n_children (vars, NULL) < 3) + return FALSE; + + /* At least one checkbutton must be active */ + if ( + ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (krd->friedman)) + && + ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (krd->kendal)) + && + ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (krd->cochran)) + ) + return FALSE; + + return TRUE; +} + + +static void +refresh (struct k_related_dialog *krd) +{ + GtkTreeModel *liststore = + gtk_tree_view_get_model (GTK_TREE_VIEW (krd->var_view)); + + gtk_list_store_clear (GTK_LIST_STORE (liststore)); + + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (krd->friedman), TRUE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (krd->kendal), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (krd->cochran), FALSE); +} + + +static char * +generate_syntax (const struct k_related_dialog *krd) +{ + gchar *text; + GString *string; + + string = g_string_new ("NPAR TEST"); + + if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (krd->friedman))) + { + g_string_append (string, "\n\t/FRIEDMAN = "); + psppire_var_view_append_names (PSPPIRE_VAR_VIEW (krd->var_view), 0, string); + } + + if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (krd->kendal))) + { + g_string_append (string, "\n\t/KENDAL = "); + psppire_var_view_append_names (PSPPIRE_VAR_VIEW (krd->var_view), 0, string); + } + + if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (krd->cochran))) + { + g_string_append (string, "\n\t/COCHRAN = "); + psppire_var_view_append_names (PSPPIRE_VAR_VIEW (krd->var_view), 0, string); + } + + g_string_append (string, ".\n"); + + text = string->str; + + g_string_free (string, FALSE); + + return text; +} + + + +/* Pops up the K-Related dialog box */ +void +k_related_dialog (PsppireDataWindow *dw) +{ + gint response; + + struct k_related_dialog krd; + + GtkBuilder *xml = builder_new ("k-related.ui"); + PsppireVarStore *vs; + + GtkWidget *dialog = get_widget_assert (xml, "k-related-dialog"); + + GtkWidget *dict_view = get_widget_assert (xml, "dict-view"); + + g_object_get (dw->data_editor, "var-store", &vs, NULL); + + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (dw)); + + krd.var_view = get_widget_assert (xml, "variables-treeview"); + + krd.friedman = get_widget_assert (xml, "friedman-checkbutton"); + krd.kendal = get_widget_assert (xml, "kendal-checkbutton"); + krd.cochran = get_widget_assert (xml, "cochran-checkbutton"); + + g_object_get (vs, "dictionary", &krd.dict, NULL); + g_object_set (dict_view, + "model", krd.dict, + "predicate", var_is_numeric, + NULL); + + + g_signal_connect_swapped (dialog, "refresh", G_CALLBACK (refresh), &krd); + + psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog), + dialog_state_valid, &krd); + + response = psppire_dialog_run (PSPPIRE_DIALOG (dialog)); + + + switch (response) + { + case GTK_RESPONSE_OK: + { + gchar *syntax = generate_syntax (&krd); + + struct getl_interface *sss = create_syntax_string_source (syntax); + execute_syntax (sss); + + g_free (syntax); + } + break; + case PSPPIRE_RESPONSE_PASTE: + { + gchar *syntax = generate_syntax (&krd); + paste_syntax_to_window (syntax); + g_free (syntax); + } + break; + default: + break; + } + + g_object_unref (xml); +} diff --git a/src/ui/gui/k-related-dialog.h b/src/ui/gui/k-related-dialog.h new file mode 100644 index 00000000..73288b66 --- /dev/null +++ b/src/ui/gui/k-related-dialog.h @@ -0,0 +1,25 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2010 Free Software Foundation + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef K_RELATED_DIALOG +#define K_RELATED_DIALOG 1 + +#include "psppire-data-window.h" + +void k_related_dialog (PsppireDataWindow *dw); + + +#endif diff --git a/src/ui/gui/k-related.ui b/src/ui/gui/k-related.ui new file mode 100644 index 00000000..a499a1f9 --- /dev/null +++ b/src/ui/gui/k-related.ui @@ -0,0 +1,194 @@ + + + + + + + Tests for Several Related Samples + True + Vertical + + + True + vertical + 2 + + + True + + + True + True + automatic + never + in + + + True + True + 5 + False + False + + + + + 0 + + + + + True + 0 + 0 + none + + + True + True + True + 5 + dict-view + variables-treeview + + + + + False + False + 1 + + + + + True + 0 + none + + + True + 12 + + + True + True + automatic + automatic + in + + + True + True + 5 + False + False + + + + + + + + + True + _Test Variables: + True + True + + + + + 2 + + + + + 0 + + + + + True + 0 + + + True + 12 + + + True + + + _Friedman + True + True + False + True + + + False + False + 0 + + + + + _Kendall's W + True + True + False + True + + + False + False + 1 + + + + + _Cochran's Q + True + True + False + True + + + False + False + 2 + + + + + + + + + True + Test Type + True + + + + + False + 1 + + + + + True + 5 + + + False + False + end + 2 + + + + + + diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index 63ad9fe1..e024fb94 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -37,6 +37,7 @@ #include "ui/gui/factor-dialog.h" #include "ui/gui/find-dialog.h" #include "ui/gui/frequencies-dialog.h" +#include "ui/gui/k-related-dialog.h" #include "ui/gui/goto-case-dialog.h" #include "ui/gui/helper.h" #include "ui/gui/oneway-anova-dialog.h" @@ -1132,6 +1133,8 @@ psppire_data_window_init (PsppireDataWindow *de) connect_action (de, "chi-square", G_CALLBACK (chisquare_dialog)); connect_action (de, "binomial", G_CALLBACK (binomial_dialog)); + + connect_action (de, "k-related-samples", G_CALLBACK (k_related_dialog)); { -- 2.30.2