src/ui/gui/missing-val-dialog.h \
src/ui/gui/oneway-anova-dialog.c \
src/ui/gui/oneway-anova-dialog.h \
+ src/ui/gui/paired-dialog.c \
+ src/ui/gui/paired-dialog.h \
src/ui/gui/psppire.c \
src/ui/gui/psppire.h \
src/ui/gui/psppire-acr.h \
src/ui/gui/t-test-options.h \
src/ui/gui/t-test-paired-samples.c \
src/ui/gui/t-test-paired-samples.h \
+ src/ui/gui/npar-two-sample-related.c \
+ src/ui/gui/npar-two-sample-related.h \
src/ui/gui/val-labs-dialog.c \
src/ui/gui/val-labs-dialog.h \
src/ui/gui/var-display.c \
<property name="label" translatable="yes">_Binomial...</property>
</object>
</child>
+ <child>
+ <object class="GtkAction" id="two-related-samples">
+ <property name="name">"two-related-samples"></property>
+ <property name="label" translatable="yes">2 _Related Samples...</property>
+ </object>
+ </child>
<child>
<object class="GtkAction" id="k-related-samples">
<property name="name">"k-related-samples"></property>
<menu action="non-parametrics">
<menuitem action="chi-square"/>
<menuitem action="binomial"/>
+ <menuitem action="two-related-samples"/>
<menuitem action="k-related-samples"/>
</menu>
<menuitem action="roc-curve"/>
--- /dev/null
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <gtk/gtk.h>
+
+#include "psppire-data-window.h"
+#include "psppire-selector.h"
+#include "psppire-var-view.h"
+
+#include "psppire-dict.h"
+#include "psppire-var-store.h"
+
+#include "dialog-common.h"
+#include "psppire-dialog.h"
+
+#include "executor.h"
+
+#include "helper.h"
+
+#include "psppire-var-ptr.h"
+
+#include "paired-dialog.h"
+#include "npar-two-sample-related.h"
+
+#include <gettext.h>
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
+enum test
+ {
+ NT_WILCOXON,
+ NT_SIGN,
+ NT_MCNEMAR,
+ n_Tests
+ };
+
+struct ts_test
+{
+ GtkWidget *button;
+ char syntax[16];
+};
+
+
+static void
+refresh (void *aux)
+{
+ int i;
+ struct ts_test *tst = aux;
+
+ for (i = 0 ; i < n_Tests; ++i)
+ {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tst[i].button), FALSE);
+ }
+}
+
+
+static gboolean
+valid (void *aux)
+{
+ int i;
+ struct ts_test *tst = aux;
+
+ for (i = 0 ; i < n_Tests; ++i)
+ {
+ if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tst[i].button)))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+
+static gchar *
+generate_syntax (struct paired_samples_dialog *psd, const struct ts_test *test)
+{
+ int i;
+ gchar *text = NULL;
+ GString *str = g_string_new ("NPAR TEST");
+
+ for (i = 0 ; i < n_Tests; ++i)
+ {
+ if (! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (test[i].button)))
+ continue;
+
+ g_string_append (str, "\n\t");
+ g_string_append (str, test[i].syntax);
+
+ psppire_var_view_append_names (PSPPIRE_VAR_VIEW (psd->pairs_treeview), 0, str);
+
+ g_string_append (str, " WITH ");
+
+ psppire_var_view_append_names (PSPPIRE_VAR_VIEW (psd->pairs_treeview), 1, str);
+
+ g_string_append (str, " (PAIRED)");
+ }
+
+ g_string_append (str, ".\n");
+
+ text = str->str;
+ g_string_free (str, FALSE);
+
+ return text;
+}
+
+/* Pops up the dialog box */
+void
+two_related_dialog (PsppireDataWindow *de)
+{
+ gint response;
+ struct ts_test nts[n_Tests];
+ struct paired_samples_dialog *tt_d = two_sample_dialog_create (de);
+
+ GtkWidget *frame = gtk_frame_new (_("Test Type"));
+ GtkWidget *bb = gtk_vbutton_box_new ();
+
+ strcpy (nts[NT_WILCOXON].syntax, "/WILCOXON");
+ strcpy (nts[NT_SIGN].syntax, "/SIGN");
+ strcpy (nts[NT_MCNEMAR].syntax, "/MCNEMAR");
+
+ nts[NT_WILCOXON].button = gtk_check_button_new_with_mnemonic (_("_Wilcoxon"));
+ nts[NT_SIGN].button = gtk_check_button_new_with_mnemonic (_("_Sign"));
+ nts[NT_MCNEMAR].button = gtk_check_button_new_with_mnemonic (_("_McNemar"));
+
+ gtk_box_pack_start (GTK_BOX (bb), nts[NT_WILCOXON].button, FALSE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (bb), nts[NT_SIGN].button, FALSE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (bb), nts[NT_MCNEMAR].button, FALSE, FALSE, 5);
+
+ gtk_container_add (GTK_CONTAINER (frame), bb);
+
+ gtk_widget_show_all (frame);
+ two_sample_dialog_add_widget (tt_d, frame);
+
+ tt_d->refresh = refresh;
+ tt_d->valid = valid;
+ tt_d->aux = nts;
+
+ gtk_window_set_title (GTK_WINDOW (tt_d->dialog), _("Two-Related-Samples Tests"));
+
+ response = psppire_dialog_run (PSPPIRE_DIALOG (tt_d->dialog));
+
+ switch (response)
+ {
+ case GTK_RESPONSE_OK:
+ g_free (execute_syntax_string (de, generate_syntax (tt_d, nts)));
+ break;
+ case PSPPIRE_RESPONSE_PASTE:
+ g_free (paste_syntax_to_window (generate_syntax (tt_d, nts)));
+ break;
+ default:
+ break;
+ }
+
+ two_sample_dialog_destroy (tt_d);
+}
--- /dev/null
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef NPAR_PAIRED_H
+#define NPAR_PAIRED_H 1
+
+#include "psppire-data-window.h"
+
+/* Pops up the dialog box */
+void two_related_dialog (PsppireDataWindow *de);
+
+#endif
--- /dev/null
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <gtk/gtk.h>
+
+
+#include "paired-dialog.h"
+
+#include "psppire-data-window.h"
+#include "psppire-selector.h"
+#include "psppire-var-view.h"
+
+#include "psppire-dict.h"
+#include "psppire-var-store.h"
+
+#include "dialog-common.h"
+#include "psppire-dialog.h"
+
+#include "psppire-var-ptr.h"
+
+
+#include "helper.h"
+
+
+
+static void
+refresh (struct paired_samples_dialog *tt_d)
+{
+ gtk_list_store_clear (GTK_LIST_STORE (tt_d->list_store));
+
+ if (tt_d->refresh)
+ tt_d->refresh (tt_d->aux);
+}
+
+static gboolean
+dialog_state_valid (gpointer data)
+{
+ struct variable *v = NULL;
+ struct paired_samples_dialog *tt_d = data;
+ GtkTreeIter dest_iter;
+
+ gint n_rows = gtk_tree_model_iter_n_children (tt_d->list_store, NULL);
+
+ if ( n_rows == 0 )
+ return FALSE;
+
+ /* Get the last row */
+ gtk_tree_model_iter_nth_child (tt_d->list_store, &dest_iter,
+ NULL, n_rows - 1);
+
+ /* Get the last (2nd) column */
+ gtk_tree_model_get (tt_d->list_store, &dest_iter, 1, &v, -1);
+
+
+ if (v == NULL)
+ return FALSE;
+
+ if ( NULL == tt_d->valid)
+ return TRUE;
+
+ return tt_d->valid (tt_d->aux);
+}
+
+
+
+static void
+select_as_pair_member (GtkTreeIter source_iter,
+ GtkWidget *dest,
+ GtkTreeModel *source_model,
+ gpointer data)
+{
+ struct variable *v;
+ struct variable *v1;
+ gint n_rows;
+ GtkTreeIter dest_iter;
+ struct paired_samples_dialog *tt_d = data;
+
+
+ gtk_tree_model_get (source_model, &source_iter,
+ DICT_TVM_COL_VAR, &v, -1);
+
+ n_rows = gtk_tree_model_iter_n_children (tt_d->list_store, NULL);
+
+ if ( n_rows > 0 )
+ {
+
+ gtk_tree_model_iter_nth_child (tt_d->list_store,
+ &dest_iter, NULL, n_rows - 1);
+
+ gtk_tree_model_get (tt_d->list_store, &dest_iter, 1, &v1, -1);
+ }
+ else
+ v1 = NULL;
+
+ if ( n_rows == 0 || v1 != NULL)
+ {
+ gtk_list_store_append (GTK_LIST_STORE (tt_d->list_store), &dest_iter);
+
+ gtk_list_store_set (GTK_LIST_STORE (tt_d->list_store), &dest_iter,
+ 0, v,
+ 1, NULL,
+ -1);
+ }
+ else
+ {
+ gtk_list_store_set (GTK_LIST_STORE (tt_d->list_store), &dest_iter,
+ 1, v,
+ -1);
+
+ }
+}
+
+void
+two_sample_dialog_add_widget (struct paired_samples_dialog *psd, GtkWidget *w)
+{
+ GtkWidget *box = get_widget_assert (psd->xml, "vbox3");
+ gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 5);
+}
+
+void
+two_sample_dialog_destroy (struct paired_samples_dialog *psd)
+{
+ g_object_unref (psd->xml);
+ free (psd);
+}
+
+struct paired_samples_dialog *
+two_sample_dialog_create (PsppireDataWindow *de)
+{
+ struct paired_samples_dialog *tt_d = g_malloc (sizeof *tt_d);
+
+ PsppireVarStore *vs = NULL;
+
+ tt_d->xml = builder_new ("paired-samples.ui");
+
+ GtkWidget *dict_view =
+ get_widget_assert (tt_d->xml, "paired-samples-t-test-treeview1");
+
+ GtkWidget *options_button = get_widget_assert (tt_d->xml, "paired-samples-t-test-options-button");
+
+ GtkWidget *selector = get_widget_assert (tt_d->xml, "psppire-selector3");
+
+ tt_d->dialog = get_widget_assert (tt_d->xml, "t-test-paired-samples-dialog");
+
+ g_object_get (de->data_editor, "var-store", &vs, NULL);
+
+ g_object_get (vs, "dictionary", &tt_d->dict, NULL);
+ tt_d->pairs_treeview =
+ get_widget_assert (tt_d->xml, "paired-samples-t-test-treeview2");
+
+ gtk_window_set_transient_for (GTK_WINDOW (tt_d->dialog), GTK_WINDOW (de));
+
+
+ g_object_set (dict_view, "model", tt_d->dict,
+ "predicate",
+ var_is_numeric, NULL);
+
+
+ tt_d->list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (tt_d->pairs_treeview));
+
+ psppire_selector_set_select_func (PSPPIRE_SELECTOR (selector),
+ select_as_pair_member,
+ tt_d);
+
+ g_signal_connect_swapped (tt_d->dialog, "refresh",
+ G_CALLBACK (refresh), tt_d);
+
+ psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (tt_d->dialog),
+ dialog_state_valid, tt_d);
+
+ return tt_d;
+}
--- /dev/null
+#ifndef PAIRED_DIALOG_H
+#define PAIRED_DIALOG_H 1
+
+#include "psppire-data-window.h"
+#include "psppire-dict.h"
+
+#include <gtk/gtk.h>
+
+typedef void refresh_f (void *aux);
+typedef gboolean valid_f (void *aux);
+
+struct paired_samples_dialog
+{
+ PsppireDict *dict;
+ GtkWidget *pairs_treeview;
+ GtkTreeModel *list_store;
+ GtkWidget *dialog;
+ GtkBuilder *xml;
+
+ refresh_f *refresh;
+ valid_f *valid;
+ void *aux;
+};
+
+
+struct paired_samples_dialog *two_sample_dialog_create (PsppireDataWindow *de);
+void two_sample_dialog_destroy (struct paired_samples_dialog *psd);
+void two_sample_dialog_add_widget (struct paired_samples_dialog *psd, GtkWidget *w);
+
+
+#endif
<!-- interface-naming-policy project-wide -->
<object class="PsppireDialog" id="t-test-paired-samples-dialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="title" translatable="yes">Paired Samples T Test</property>
<property name="modal">True</property>
<child internal-child="hbox">
<object class="GtkHBox" id="dialog-hbox6">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
<child>
- <object class="GtkHBox" id="hbox3">
+ <object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="top_padding">5</property>
+ <property name="bottom_padding">5</property>
+ <property name="left_padding">5</property>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <object class="GtkHBox" id="hbox3">
<property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">etched-in</property>
<child>
- <object class="PsppireDictView" id="paired-samples-t-test-treeview1">
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="headers_visible">False</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">etched-in</property>
+ <child>
+ <object class="PsppireDictView" id="paired-samples-t-test-treeview1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">False</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
</child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment5">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="yalign">0.059999998658895493</property>
- <property name="yscale">0</property>
<child>
- <object class="PsppireSelector" id="psppire-selector3">
+ <object class="GtkAlignment" id="alignment5">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="no_show_all">True</property>
- <property name="border_width">5</property>
- <property name="source_widget">paired-samples-t-test-treeview1</property>
- <property name="dest_widget">paired-samples-t-test-treeview2</property>
+ <property name="yalign">0.059999998658895493</property>
+ <property name="yscale">0</property>
+ <child>
+ <object class="PsppireSelector" id="psppire-selector3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="no_show_all">True</property>
+ <property name="border_width">5</property>
+ <property name="source_widget">paired-samples-t-test-treeview1</property>
+ <property name="dest_widget">paired-samples-t-test-treeview2</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
</child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
<child>
- <object class="GtkFrame" id="frame4">
+ <object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
<child>
- <object class="GtkAlignment" id="alignment6">
+ <object class="GtkFrame" id="frame4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="left_padding">12</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <object class="GtkAlignment" id="alignment6">
<property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">etched-in</property>
+ <property name="left_padding">12</property>
<child>
- <object class="PsppireVarView" id="paired-samples-t-test-treeview2">
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="enable_search">False</property>
- <property name="n_cols">2</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">etched-in</property>
+ <child>
+ <object class="PsppireVarView" id="paired-samples-t-test-treeview2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="headers_clickable">False</property>
+ <property name="enable_search">False</property>
+ <property name="n_cols">2</property>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
+ <child type="label">
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Test _Pair(s):</property>
+ <property name="use_markup">True</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">paired-samples-t-test-treeview2</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
</child>
- <child type="label">
- <object class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">Test Variable(s):</property>
- <property name="use_markup">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVButtonBox" id="vbuttonbox2">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="orientation">vertical</property>
<child>
- <object class="GtkButton" id="paired-samples-t-test-options-button">
- <property name="label" translatable="yes">Options...</property>
+ <object class="GtkVButtonBox" id="vbuttonbox2">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkButton" id="paired-samples-t-test-options-button">
+ <property name="label" translatable="yes">Options...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">0</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
- <packing>
- <property name="position">2</property>
- </packing>
</child>
</object>
<packing>
#include "ui/gui/help-menu.h"
#include "ui/gui/helper.h"
#include "ui/gui/k-related-dialog.h"
+#include "ui/gui/npar-two-sample-related.h"
#include "ui/gui/oneway-anova-dialog.h"
#include "ui/gui/psppire-data-window.h"
#include "ui/gui/psppire-syntax-window.h"
connect_action (de, "binomial", G_CALLBACK (binomial_dialog));
connect_action (de, "k-related-samples", G_CALLBACK (k_related_dialog));
+ connect_action (de, "two-related-samples", G_CALLBACK (two_related_dialog));
{
psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
dialog_state_valid, &tt_d);
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Paired Samples T Test"));
+
response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));
switch (response)