Add "dictionary" property to PsppireVarStore and use it.
[pspp-builds.git] / src / ui / gui / psppire-data-window.c
index ef9e0b6eeaa034f528ad998828244e856e2cd20e..ffa9482eb0f4b766c391e32ac7c3ecac9dca3087 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <gtk/gtksignal.h>
 #include <gtk/gtkbox.h>
+#include "executor.h"
 #include "helper.h"
 
 #include "text-data-import-dialog.h"
@@ -54,6 +55,7 @@
 #include "frequencies-dialog.h"
 #include "examine-dialog.h"
 #include "regression-dialog.h"
+#include "reliability-dialog.h"
 #include "oneway-anova-dialog.h"
 #include "t-test-independent-samples-dialog.h"
 #include "t-test-one-sample.h"
@@ -229,12 +231,14 @@ on_filter_change (GObject *o, gint filter_index, gpointer data)
   else
     {
       PsppireVarStore *vs = NULL;
+      PsppireDict *dict = NULL;
       struct variable *var ;
       gchar *text ;
 
       g_object_get (de->data_editor, "var-store", &vs, NULL);
+      g_object_get (vs, "dictionary", &dict, NULL);
 
-      var = psppire_dict_get_variable (vs->dict, filter_index);
+      var = psppire_dict_get_variable (dict, filter_index);
 
       text = g_strdup_printf (_("Filter by %s"), var_get_name (var));
 
@@ -300,11 +304,13 @@ on_weight_change (GObject *o, gint weight_index, gpointer data)
     {
       struct variable *var ;
       PsppireVarStore *vs = NULL;
+      PsppireDict *dict = NULL;
       gchar *text;
 
       g_object_get (de->data_editor, "var-store", &vs, NULL);
-
-      var = psppire_dict_get_variable (vs->dict, weight_index);
+      g_object_get (vs, "dictionary", &dict, NULL);
+      
+      var = psppire_dict_get_variable (dict, weight_index);
 
       text = g_strdup_printf (_("Weight by %s"), var_get_name (var));
 
@@ -403,7 +409,17 @@ sysfile_chooser_dialog (PsppireWindow *toplevel)
     gchar *filename = NULL;
     g_object_get (toplevel, "filename", &filename, NULL);
 
-    dir_name = g_path_get_dirname (filename);
+    if ( ! g_path_is_absolute (filename))
+      {
+       gchar *path =
+         g_build_filename (g_get_current_dir (), filename, NULL);
+       dir_name = g_path_get_dirname (path);
+       g_free (path);
+      }
+    else
+      {
+       dir_name = g_path_get_dirname (filename);
+      }
     gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog),
                                         dir_name);
     free (dir_name);
@@ -509,7 +525,6 @@ static void
 insert_case (GtkAction *action, gpointer data)
 {
   PsppireDataWindow *dw = PSPPIRE_DATA_WINDOW (data);
-
   psppire_data_editor_insert_case (dw->data_editor);
 }
 
@@ -1079,6 +1094,7 @@ static void
 psppire_data_window_init (PsppireDataWindow *de)
 {
   PsppireVarStore *vs;
+  PsppireDict *dict = NULL;
 
   GtkWidget *menubar;
   GtkWidget *hb ;
@@ -1134,15 +1150,17 @@ psppire_data_window_init (PsppireDataWindow *de)
 
   g_assert(vs); /* Traps a possible bug in w32 build */
 
-  g_signal_connect (vs->dict, "weight-changed",
+  g_object_get (vs, "dictionary", &dict, NULL);
+
+  g_signal_connect (dict, "weight-changed",
                    G_CALLBACK (on_weight_change),
                    de);
 
-  g_signal_connect (vs->dict, "filter-changed",
+  g_signal_connect (dict, "filter-changed",
                    G_CALLBACK (on_filter_change),
                    de);
 
-  g_signal_connect (vs->dict, "split-changed",
+  g_signal_connect (dict, "split-changed",
                    G_CALLBACK (on_split_change),
                    de);
 
@@ -1661,7 +1679,22 @@ psppire_data_window_init (PsppireDataWindow *de)
                      G_CALLBACK (regression_dialog), de);
   }
 
-  { 
+  {
+    GtkAction *invoke_reliability_dialog =
+      resolve_action (de->builder, "reliability", NULL);
+
+    g_object_set (invoke_reliability_dialog,
+                 "tooltip", _("Reliability Analysis"),
+                 "stock-id", "pspp-reliability",
+                 NULL
+                 );
+
+    g_signal_connect (invoke_reliability_dialog, "activate",
+                     G_CALLBACK (reliability_dialog), de);
+  }
+
+
+  {
     GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER));
 
     GtkWidget *recent_data =
@@ -1823,28 +1856,29 @@ psppire_data_window_init (PsppireDataWindow *de)
                      de);
   }
 
-  de->data_sheet_variable_popup_menu =
-    GTK_MENU (create_data_sheet_variable_popup_menu (de));
-
-  de->var_sheet_variable_popup_menu =
-    GTK_MENU (create_var_sheet_variable_popup_menu (de));
+  {
+    GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER));
 
-  de->data_sheet_cases_popup_menu =
-    GTK_MENU (create_data_sheet_cases_popup_menu (de));
+    PSPPIRE_WINDOW (de)->menu =
+      GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows/windows_minimise_all")->parent);
+  }
 
   {
-  GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER));
+    GtkMenu *data_sheet_variable_popup_menu =
+      GTK_MENU (create_data_sheet_variable_popup_menu (de));
 
-  PSPPIRE_WINDOW (de)->menu =
-    GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows/windows_minimise_all")->parent);
-  }
+    GtkMenu *var_sheet_variable_popup_menu =
+      GTK_MENU (create_var_sheet_variable_popup_menu (de));
 
+    GtkMenu *data_sheet_cases_popup_menu =
+      GTK_MENU (create_data_sheet_cases_popup_menu (de));
 
-  g_object_set (de->data_editor,
-               "datasheet-column-menu", de->data_sheet_variable_popup_menu,
-               "datasheet-row-menu", de->data_sheet_cases_popup_menu,
-               "varsheet-row-menu", de->var_sheet_variable_popup_menu,
-               NULL);
+    g_object_set (de->data_editor,
+                 "datasheet-column-menu", data_sheet_variable_popup_menu,
+                 "datasheet-row-menu", data_sheet_cases_popup_menu,
+                 "varsheet-row-menu", var_sheet_variable_popup_menu,
+                 NULL);
+  }
 
   gtk_widget_show (GTK_WIDGET (de->data_editor));
   gtk_widget_show (box);