Don't abort on GSL exceptions
[pspp-builds.git] / src / ui / gui / psppire.c
index 0c60fbd2412f90ba360c5d6d753507a304fedc68..2f209a08953539f25a38ac74a3aa0d07e491bcab 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <assert.h>
 #include <libintl.h>
+#include <gsl/gsl_errno.h>
 
 #include "relocatable.h"
 
@@ -36,6 +37,7 @@
 #include <language/lexer/lexer.h>
 #include <libpspp/version.h>
 #include <output/output.h>
+#include <output/journal.h>
 
 #include <gtk/gtk.h>
 #include <glade/glade.h>
@@ -81,17 +83,18 @@ initialize (void)
 
   glade_init ();
 
+  gsl_set_error_handler_off ();
   fmt_init ();
   fn_init ();
   outp_init ();
-  settings_init ();
+  settings_init (&viewer_width, &viewer_length);
   fh_init ();
   the_source_stream =
     create_source_stream (
                          fn_getenv_default ("STAT_INCLUDE_PATH", include_path)
                          );
 
-  the_dataset = create_dataset (NULL, NULL);
+  the_dataset = create_dataset ();
 
 
   message_dialog_init (the_source_stream);
@@ -110,12 +113,14 @@ initialize (void)
 
   outp_configure_driver_line (
     ss_cstr ("gui:ascii:screen:squeeze=on headers=off top-margin=0 "
-             "bottom-margin=0 paginate=off length=50 "
-            "width=" OUTPUT_LINE_WIDTH_str " emphasis=none "
+             "bottom-margin=0 paginate=off length=auto width=auto "
+            "emphasis=none "
              "output-file=\"" OUTPUT_FILE_NAME "\" append=yes"));
 
   unlink (OUTPUT_FILE_NAME);
 
+  journal_enable ();
+
   new_data_window (NULL, NULL);
 }
 
@@ -130,84 +135,54 @@ de_initialize (void)
 }
 
 
-#define PIXBUF_NEW_FROM_FILE(FILE) \
-  gdk_pixbuf_new_from_file (relocate (PKGDATADIR "/" FILE), 0)
-
+struct icon_info
+{
+  const char *file_name;
+  const gchar *id;
+};
+
+
+static const struct icon_info icons[] =
+  {
+    {PKGDATADIR "/value-labels.png",    "pspp-value-labels"},
+    {PKGDATADIR "/weight-cases.png",    "pspp-weight-cases"},
+    {PKGDATADIR "/goto-variable.png",   "pspp-goto-variable"},
+    {PKGDATADIR "/insert-variable.png", "pspp-insert-variable"},
+    {PKGDATADIR "/insert-case.png",     "pspp-insert-case"},
+    {PKGDATADIR "/split-file.png",      "pspp-split-file"},
+    {PKGDATADIR "/select-cases.png",    "pspp-select-cases"},
+    {PKGDATADIR "/recent-dialogs.png",  "pspp-recent-dialogs"},
+    {PKGDATADIR "/nominal.png",         "var-nominal"},
+    {PKGDATADIR "/ordinal.png",         "var-ordinal"},
+    {PKGDATADIR "/scale.png",           "var-scale"},
+    {PKGDATADIR "/string.png",          "var-string"},
+    {PKGDATADIR "/date-scale.png",      "var-date-scale"}
+  };
 
 static void
 create_icon_factory (void)
 {
+  gint i;
   GtkIconFactory *factory = gtk_icon_factory_new ();
 
-  GtkIconSet *icon_set;
-
-  GdkPixbuf *pixbuf;
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("value-labels.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-value-labels", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("weight-cases.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-weight-cases", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("goto-variable.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-goto-variable", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("insert-variable.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-insert-variable", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("insert-case.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-insert-case", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("split-file.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-split-file", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("select-cases.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-select-cases", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("recent-dialogs.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "pspp-recent-dialogs", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("nominal.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "var-nominal", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("ordinal.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "var-ordinal", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("scale.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "var-scale", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("string.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "var-string", icon_set);
-
-  pixbuf = PIXBUF_NEW_FROM_FILE ("date-scale.png");
-  icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-  g_object_unref (pixbuf);
-  gtk_icon_factory_add ( factory, "var-date-scale", icon_set);
-
+  for (i = 0 ; i < sizeof (icons) / sizeof(icons[0]); ++i)
+    {
+      GError *err = NULL;
+      GdkPixbuf *pixbuf =
+       gdk_pixbuf_new_from_file (relocate (icons[i].file_name), &err);
+
+      if ( pixbuf )
+       {
+         GtkIconSet *icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
+         g_object_unref (pixbuf);
+         gtk_icon_factory_add ( factory, icons[i].id, icon_set);
+       }
+      else
+       {
+         g_warning ("Cannot create icon: %s", err->message);
+         g_clear_error (&err);
+       }
+    }
 
   gtk_icon_factory_add_default (factory);
 }