From ba03e6dae4d379b510b053c4df6d41277b456d3a Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sun, 13 Dec 2009 20:37:13 +0100 Subject: [PATCH] Added a dialog box for the CORRELATION command --- src/ui/gui/automake.mk | 3 + src/ui/gui/correlation-dialog.c | 177 +++++++++++++++++++++ src/ui/gui/correlation-dialog.h | 24 +++ src/ui/gui/correlation.ui | 265 +++++++++++++++++++++++++++++++ src/ui/gui/data-editor.glade | 7 + src/ui/gui/psppire-data-window.c | 15 ++ 6 files changed, 491 insertions(+) create mode 100644 src/ui/gui/correlation-dialog.c create mode 100644 src/ui/gui/correlation-dialog.h create mode 100644 src/ui/gui/correlation.ui diff --git a/src/ui/gui/automake.mk b/src/ui/gui/automake.mk index 22e2350b..f69cad5b 100644 --- a/src/ui/gui/automake.mk +++ b/src/ui/gui/automake.mk @@ -54,6 +54,7 @@ UNINSTALL_DATA_HOOKS += uninstall-icons UI_FILES = \ + src/ui/gui/correlation.ui \ src/ui/gui/crosstabs.ui \ src/ui/gui/descriptives.ui \ src/ui/gui/examine.ui \ @@ -114,6 +115,8 @@ src_ui_gui_psppire_SOURCES = \ src/ui/gui/comments-dialog.h \ src/ui/gui/compute-dialog.c \ src/ui/gui/compute-dialog.h \ + src/ui/gui/correlation-dialog.c \ + src/ui/gui/correlation-dialog.h \ src/ui/gui/crosstabs-dialog.c \ src/ui/gui/crosstabs-dialog.h \ src/ui/gui/customentry.c \ diff --git a/src/ui/gui/correlation-dialog.c b/src/ui/gui/correlation-dialog.c new file mode 100644 index 00000000..19bb7a70 --- /dev/null +++ b/src/ui/gui/correlation-dialog.c @@ -0,0 +1,177 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2009 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 "dialog-common.h" +#include +#include +#include + +#include "correlation-dialog.h" +#include "psppire-selector.h" +#include "psppire-dictview.h" +#include "psppire-dialog.h" + +#include "psppire-data-window.h" +#include "psppire-var-view.h" + +#include "executor.h" +#include "helper.h" + +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + + +struct correlation +{ + PsppireDict *dict; + + GtkWidget *variables ; + + GtkWidget *significant; + GtkWidget *two_tailed; +}; + + +static char * generate_syntax (const struct correlation *rd); + + +static void +refresh (struct correlation *rd) +{ + GtkTreeModel *liststore = + gtk_tree_view_get_model (GTK_TREE_VIEW (rd->variables)); + gtk_list_store_clear (GTK_LIST_STORE (liststore)); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rd->significant), FALSE); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rd->two_tailed), TRUE); +} + + +static gboolean +dialog_state_valid (gpointer data) +{ + struct correlation *corr = data; + + GtkTreeModel *liststore = + gtk_tree_view_get_model (GTK_TREE_VIEW (corr->variables)); + + if (gtk_tree_model_iter_n_children (liststore, NULL) >= 1) + return TRUE; + + return FALSE; +} + + +/* Pops up the Correlation dialog box */ +void +correlation_dialog (GObject *o, gpointer data) +{ + struct correlation rd; + gint response; + + GtkBuilder *xml = builder_new ("correlation.ui"); + PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data); + PsppireVarStore *vs; + + GtkWidget *dialog = get_widget_assert (xml, "correlation-dialog"); + GtkWidget *source = get_widget_assert (xml, "dict-view"); + + g_object_get (de->data_editor, "var-store", &vs, NULL); + + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de)); + + g_object_get (vs, "dictionary", &rd.dict, NULL); + g_object_set (source, "model", rd.dict, NULL); + + rd.variables = get_widget_assert (xml, "psppire-var-view1"); + rd.significant = get_widget_assert (xml, "button-flag-significants"); + rd.two_tailed = get_widget_assert (xml, "button-two-tailed"); + + g_signal_connect_swapped (dialog, "refresh", G_CALLBACK (refresh), &rd); + + psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog), + dialog_state_valid, &rd); + + response = psppire_dialog_run (PSPPIRE_DIALOG (dialog)); + + switch (response) + { + case GTK_RESPONSE_OK: + { + gchar *syntax = generate_syntax (&rd); + + struct getl_interface *sss = create_syntax_string_source (syntax); + execute_syntax (sss); + + g_free (syntax); + } + break; + case PSPPIRE_RESPONSE_PASTE: + { + gchar *syntax = generate_syntax (&rd); + paste_syntax_in_new_window (syntax); + + g_free (syntax); + } + break; + default: + break; + } + + g_object_unref (xml); +} + + + + +static char * +generate_syntax (const struct correlation *rd) +{ + gchar *text; + GString *string = g_string_new ("CORRELATION"); + g_string_append (string, "\n\t/VARIABLES = "); + + psppire_var_view_append_names (PSPPIRE_VAR_VIEW (rd->variables), 0, string); + + + g_string_append (string, "\n\t/PRINT ="); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rd->two_tailed))) + g_string_append (string, " TWOTAIL"); + else + g_string_append (string, " ONETAIL"); + + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rd->significant))) + g_string_append (string, " NOSIG"); + else + g_string_append (string, " SIG"); + + + g_string_append (string, ".\n"); + + text = string->str; + + g_string_free (string, FALSE); + + return text; +} diff --git a/src/ui/gui/correlation-dialog.h b/src/ui/gui/correlation-dialog.h new file mode 100644 index 00000000..532970f5 --- /dev/null +++ b/src/ui/gui/correlation-dialog.h @@ -0,0 +1,24 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2009 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 __CORRELATION_DIALOG_H +#define __CORRELATION_DIALOG_H + +#include + +void correlation_dialog (GObject *o, gpointer data); + +#endif diff --git a/src/ui/gui/correlation.ui b/src/ui/gui/correlation.ui new file mode 100644 index 00000000..1fad3440 --- /dev/null +++ b/src/ui/gui/correlation.ui @@ -0,0 +1,265 @@ + + + + + + + Bivariate Correlations + True + + + True + 2 + + + True + vertical + 5 + + + True + + + True + True + automatic + automatic + in + + + True + True + 5 + False + False + + + + + 0 + + + + + True + vertical + + + True + True + True + 5 + dict-view + psppire-var-view1 + + + False + False + 0 + + + + + False + False + 5 + 1 + + + + + True + True + automatic + automatic + in + + + True + True + 5 + False + False + + + + + 2 + + + + + 0 + + + + + 0 + + + True + 12 + + + True + start + + + Pearso_n + True + True + False + True + True + + + False + False + 0 + + + + + _Kendall's tau-b + True + True + False + True + True + + + False + False + 1 + + + + + _Spearman + True + True + False + True + True + + + False + False + 2 + + + + + + + + + True + Correlation Coefficients + True + + + + + False + 1 + + + + + True + 0 + + + True + 12 + + + True + start + + + _Two-tailed + True + True + False + True + True + True + + + False + False + 0 + + + + + One-tai_led + True + True + False + True + True + True + button-two-tailed + + + False + False + 1 + + + + + + + + + True + Test of Significance + True + + + + + False + 2 + + + + + _Flag significant correlations + True + True + False + True + True + + + False + 3 + + + + + 2 + 0 + + + + + True + 5 + + + False + False + end + 1 + + + + + + diff --git a/src/ui/gui/data-editor.glade b/src/ui/gui/data-editor.glade index ca7efc90..9431002b 100644 --- a/src/ui/gui/data-editor.glade +++ b/src/ui/gui/data-editor.glade @@ -544,6 +544,13 @@ + + + True + Bivariate _Correlation... + True + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index e42d2bd0..e9a89465 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -57,6 +57,7 @@ #include "regression-dialog.h" #include "reliability-dialog.h" #include "roc-dialog.h" +#include "correlation-dialog.h" #include "oneway-anova-dialog.h" #include "t-test-independent-samples-dialog.h" #include "t-test-one-sample.h" @@ -1707,6 +1708,20 @@ psppire_data_window_init (PsppireDataWindow *de) G_CALLBACK (roc_dialog), de); } + { + GtkAction *invoke_correlation_dialog = + resolve_action (de->builder, "correlation", NULL); + + g_object_set (invoke_correlation_dialog, + "tooltip", _("Bivariate Correlation"), + "stock-id", "pspp-correlation", + NULL + ); + + g_signal_connect (invoke_correlation_dialog, "activate", + G_CALLBACK (correlation_dialog), de); + } + { GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER)); -- 2.30.2