Added dialog box for univariate anova.
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 25 Sep 2011 11:22:56 +0000 (13:22 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 25 Sep 2011 11:22:56 +0000 (13:22 +0200)
Added a dialog box to conduct a univariate anova using the GLM
command.  Currently only entry of the dependent variable and the
factors are possible.   Choosing the interactions must be done
through syntax, if the default is not what the user wants.

src/ui/gui/automake.mk
src/ui/gui/data-editor.ui
src/ui/gui/dict-display.c
src/ui/gui/dict-display.h
src/ui/gui/psppire-data-window.c
src/ui/gui/univariate-dialog.c [new file with mode: 0644]
src/ui/gui/univariate-dialog.h [new file with mode: 0644]
src/ui/gui/univariate.ui [new file with mode: 0644]

index 0ff301b89411811c195877f6feb85d7cb2a7b4b4..116e2be3f297dc4596cf1358a495ecf0c566cd44 100644 (file)
@@ -35,6 +35,7 @@ UI_FILES = \
        src/ui/gui/select-cases.ui \
        src/ui/gui/t-test.ui \
        src/ui/gui/text-data-import.ui \
+       src/ui/gui/univariate.ui \
        src/ui/gui/var-sheet-dialogs.ui \
        src/ui/gui/variable-info.ui \
        src/ui/gui/data-editor.ui \
@@ -270,6 +271,8 @@ src_ui_gui_psppire_SOURCES = \
        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/univariate-dialog.c \
+       src/ui/gui/univariate-dialog.h \
        src/ui/gui/val-labs-dialog.c \
        src/ui/gui/val-labs-dialog.h \
        src/ui/gui/var-display.c \
index 985d670829457f046cc8216488cae61ae2bd5821..07919483bf8043a7c1ba101a4e578fbc810c7c2a 100644 (file)
             <property name="label" translatable="yes">One Way _ANOVA...</property>
           </object>
         </child>
+        <child>
+          <object class="GtkAction" id="univariate">
+            <property name="name">univariate</property>
+            <property name="label" translatable="yes">_Univariate Analysis...</property>
+          </object>
+        </child>
         <child>
           <object class="GtkAction" id="correlation">
             <property name="name">correlation</property>
             <menuitem action="paired-t-test"/>
             <menuitem action="oneway-anova"/>
           </menu>
+          <menuitem action="univariate"/>
           <menuitem action="correlation"/>
           <menuitem action="k-means"/>
           <menuitem action="factor-analysis"/>
index ada7fb40fcbd5ab45ad55edca1c5508c5a4c8c07..77da88bd98826c9791151af09edccc4de1d9b186 100644 (file)
 #include "dict-display.h"
 
 #include "psppire-dict.h"
+#include "psppire-dictview.h"
+#include "psppire-var-ptr.h"
 #include "psppire-var-view.h"
+#include "psppire-select-dest.h"
 #include <libpspp/i18n.h>
 #include "helper.h"
 #include <data/variable.h>
@@ -152,3 +155,33 @@ is_currently_in_entry (GtkTreeModel *model, GtkTreeIter *iter,
   return result;
 }
 
+gboolean
+is_currently_in_varview (GtkTreeModel *model, GtkTreeIter *iter, PsppireSelector *sel)
+{
+  gboolean ret = false;
+
+  /* First, fetch the variable from the source */
+
+  PsppireDictView *dv = PSPPIRE_DICT_VIEW (sel->source);
+
+  GtkTreePath *path = gtk_tree_model_get_path (model, iter);
+
+  gint *idx = gtk_tree_path_get_indices (path);
+
+  const struct variable *var =  psppire_dict_get_variable (dv->dict, *idx);
+
+
+  /* Now test if that variable exists in the destination */
+
+  GValue value = {0};
+
+  g_value_init (&value, PSPPIRE_VAR_PTR_TYPE);
+  g_value_set_boxed (&value, var);
+
+  ret = psppire_select_dest_widget_contains_var (PSPPIRE_SELECT_DEST_WIDGET (sel->dest), &value);
+
+  g_value_unset (&value);
+
+  return ret ;
+}
+
index 5586cb10a7ecc19b3f40624ea12724a5ec921c26..b3b395bb81a0d33fadcb5d410b2232e1f9157a93 100644 (file)
@@ -47,4 +47,9 @@ void insert_source_row_into_entry (GtkTreeIter source_iter,
 gboolean is_currently_in_entry (GtkTreeModel *model, GtkTreeIter *iter,
                                PsppireSelector *selector);
 
+
+/* A FilterItemsFunc function for PsppireVarview widgets */
+gboolean is_currently_in_varview (GtkTreeModel *model, GtkTreeIter *iter,
+                                 PsppireSelector *sel);
+
 #endif
index 4a23cf1f401b766d8065ac5ae271dd5410022a41..64e044b0feb496f75aca7a0c12469f1f731ec391 100644 (file)
@@ -66,6 +66,7 @@
 #include "ui/gui/t-test-paired-samples.h"
 #include "ui/gui/text-data-import-dialog.h"
 #include "ui/gui/transpose-dialog.h"
+#include "ui/gui/univariate-dialog.h"
 #include "ui/gui/variable-info-dialog.h"
 #include "ui/gui/weight-cases-dialog.h"
 #include "ui/syntax-gen.h"
@@ -1116,6 +1117,10 @@ psppire_data_window_finish_init (PsppireDataWindow *de,
  
   connect_action (de, "roc-curve", G_CALLBACK (roc_dialog));
 
+  connect_action (de, "analyze_explore", G_CALLBACK (examine_dialog));
+
+  connect_action (de, "univariate", G_CALLBACK (univariate_dialog));
+
   connect_action (de, "correlation", G_CALLBACK (correlation_dialog));
  
   connect_action (de, "factor-analysis", G_CALLBACK (factor_dialog));
diff --git a/src/ui/gui/univariate-dialog.c b/src/ui/gui/univariate-dialog.c
new file mode 100644 (file)
index 0000000..2692e48
--- /dev/null
@@ -0,0 +1,161 @@
+/* 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 <ui/gui/helper.h>
+#include "psppire-dialog.h"
+#include "dict-display.h"
+
+#include "psppire-var-view.h"
+#include "psppire-selector.h"
+#include "psppire-dictview.h"
+#include <ui/gui/dialog-common.h>
+
+#include "executor.h"
+
+#include "univariate-dialog.h"
+
+struct uni_dialog
+{
+  struct dictionary *dict;
+
+  /* Entry box for the dependent variable */
+  GtkWidget *dep_entry;
+
+  GtkWidget *factor_list;
+};
+
+
+/* Dialog is valid iff at least one variable has been selected in both
+   the dependent variable box and the factor list. */
+static gboolean
+dialog_state_valid (gpointer data)
+{
+  struct uni_dialog *uv_d = data;
+  GtkTreeModel *vars;
+  GtkTreeIter notused;
+
+  if ( 0 == strcmp ("", gtk_entry_get_text (GTK_ENTRY (uv_d->dep_entry))))
+    return false;
+
+  vars =
+    gtk_tree_view_get_model (GTK_TREE_VIEW (uv_d->factor_list));
+
+  return gtk_tree_model_get_iter_first (vars, &notused);
+}
+
+/* Reset the dialog to its default state */
+static void
+refresh (PsppireDialog *dialog, struct uni_dialog *uv_d)
+{
+  GtkTreeModel *liststore ;
+
+  gtk_entry_set_text (GTK_ENTRY (uv_d->dep_entry), "");
+
+  liststore = gtk_tree_view_get_model (GTK_TREE_VIEW (uv_d->factor_list));
+
+  gtk_list_store_clear (GTK_LIST_STORE (liststore));
+}
+
+
+static char *
+generate_syntax (const struct uni_dialog *uvd)
+{
+  gchar *text = NULL;
+  GString *str = g_string_new ("GLM ");
+
+
+  g_string_append (str, gtk_entry_get_text (GTK_ENTRY (uvd->dep_entry)));
+  
+
+  g_string_append (str, " BY ");
+
+  psppire_var_view_append_names (PSPPIRE_VAR_VIEW (uvd->factor_list), 0, str);
+
+
+  g_string_append (str, ".");
+
+  text = str->str;
+
+  g_string_free (str, FALSE);
+
+  return text;
+}
+
+void 
+univariate_dialog (PsppireDataWindow * de)
+{
+  struct uni_dialog uv_d;
+
+  gint response;
+
+  GtkBuilder *xml = builder_new ("univariate.ui");
+
+  GtkWidget *dialog = get_widget_assert   (xml, "univariate-dialog");
+  GtkWidget *source = get_widget_assert   (xml, "dict-view");
+
+  GtkWidget *dep_selector = get_widget_assert (xml, "dep-selector");
+  GtkWidget *factor_selector = get_widget_assert (xml, "factor-selector");
+
+
+  PsppireVarStore *vs = NULL;
+
+  uv_d.dep_entry = get_widget_assert (xml, "dep-entry");
+  uv_d.factor_list = get_widget_assert (xml, "factors-view");
+
+  g_object_get (de->data_editor, "var-store", &vs, NULL);
+
+  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));
+  g_signal_connect (dialog, "refresh", G_CALLBACK (refresh),  &uv_d);
+
+  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
+                                     dialog_state_valid, &uv_d);
+
+
+  g_object_get (vs, "dictionary", &uv_d.dict, NULL);
+  g_object_set (source, "model", uv_d.dict, NULL);
+
+  psppire_selector_set_allow (PSPPIRE_SELECTOR (dep_selector),
+                             numeric_only);
+
+  psppire_selector_set_filter_func (PSPPIRE_SELECTOR (dep_selector),
+                                   is_currently_in_entry);
+
+
+  psppire_selector_set_filter_func (PSPPIRE_SELECTOR (factor_selector),
+                                   is_currently_in_varview);
+
+  response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));
+
+
+  switch (response)
+    {
+    case GTK_RESPONSE_OK:
+      g_free (execute_syntax_string (de, generate_syntax (&uv_d)));
+      break;
+    case PSPPIRE_RESPONSE_PASTE:
+      g_free (paste_syntax_to_window (generate_syntax (&uv_d)));
+      break;
+    default:
+      break;
+    }
+
+  g_object_unref (xml);
+}
+
+
diff --git a/src/ui/gui/univariate-dialog.h b/src/ui/gui/univariate-dialog.h
new file mode 100644 (file)
index 0000000..5fef0ba
--- /dev/null
@@ -0,0 +1,24 @@
+/* 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 __UNIVARIATE_DIALOG_H
+#define __UNIVARIATE_DIALOG_H
+
+#include "psppire-data-window.h"
+
+void univariate_dialog (PsppireDataWindow * data);
+
+#endif
diff --git a/src/ui/gui/univariate.ui b/src/ui/gui/univariate.ui
new file mode 100644 (file)
index 0000000..a4c8fa8
--- /dev/null
@@ -0,0 +1,342 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="psppire" version="2054.17080"/>
+  <!-- interface-requires gtk+ 2.12 -->
+  <!-- interface-naming-policy project-wide -->
+  <object class="PsppireDialog" id="univariate-dialog">
+    <property name="title" translatable="yes">Univariate</property>
+    <property name="modal">True</property>
+    <child internal-child="hbox">
+      <object class="GtkHBox" id="dialog-hbox1">
+        <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="spacing">2</property>
+        <child>
+          <object class="GtkAlignment" id="alignment1">
+            <property name="visible">True</property>
+            <property name="top_padding">5</property>
+            <property name="left_padding">5</property>
+            <child>
+              <object class="GtkTable" id="table1">
+                <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="n_rows">3</property>
+                <property name="n_columns">3</property>
+                <child>
+                  <object class="PsppireSelector" id="dep-selector">
+                    <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">dict-view</property>
+                    <property name="dest_widget">dep-entry</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="x_options"></property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="PsppireSelector" id="factor-selector">
+                    <property name="visible">True</property>
+                   <property name="primary">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">dict-view</property>
+                    <property name="dest_widget">factors-view</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                    <property name="x_options"></property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="variables">
+                    <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="dict-view">
+                        <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="bottom_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFrame" id="frame2">
+                    <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>
+                    <child>
+                      <object class="GtkAlignment" id="alignment2">
+                        <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>
+                        <child>
+                          <object class="GtkEntry" id="dep-entry">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label1">
+                        <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">_Dependent Variable</property>
+                        <property name="use_markup">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">dep-entry</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="right_attach">3</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFrame" id="frame3">
+                    <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>
+                    <child>
+                      <object class="GtkAlignment" id="alignment4">
+                        <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>
+                        <child>
+                          <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="hscrollbar_policy">never</property>
+                            <property name="vscrollbar_policy">automatic</property>
+                            <property name="shadow_type">etched-in</property>
+                            <child>
+                              <object class="PsppireVarView" id="factors-view">
+                                <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>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label3">
+                        <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">_Fixed Factors</property>
+                        <property name="use_markup">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">factors-view</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="PsppireVButtonBox" id="psppire-vbuttonbox1">
+            <property name="visible">True</property>
+            <property name="border_width">5</property>
+            <property name="orientation">vertical</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="PsppireDialog" id="save-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">Univariate: Save</property>
+    <property name="modal">True</property>
+    <child internal-child="hbox">
+      <object class="GtkHBox" id="dialog-hbox2">
+        <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="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox5">
+            <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="homogeneous">True</property>
+            <child>
+              <object class="GtkCheckButton" id="pred-button">
+                <property name="label" translatable="yes">_Predicted values</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="resid-button">
+                <property name="label" translatable="yes">_Residuals</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="PsppireVButtonBox" id="psppire-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="border_width">5</property>
+            <property name="buttons">PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="PsppireDialog" id="statistics-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">Univariate: Statistics</property>
+    <property name="modal">True</property>
+    <child internal-child="hbox">
+      <object class="GtkHBox" id="dialog-hbox3">
+        <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="spacing">2</property>
+        <child>
+          <object class="GtkFrame" id="frame1">
+            <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>
+            <child>
+              <object class="GtkAlignment" id="alignment3">
+                <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>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow4">
+                    <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="GtkTreeView" id="stat-view">
+                        <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>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child type="label">
+              <object class="GtkLabel" id="label2">
+                <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">S_tatistics</property>
+                <property name="use_markup">True</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">stat-view</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="PsppireVButtonBox" id="psppire-vbuttonbox3">
+            <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="border_width">5</property>
+            <property name="orientation">vertical</property>
+            <property name="buttons">PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>