output: Make groups contain their subitems, and get rid of spv_item.
[pspp] / src / ui / gui / psppire-output-window.c
index 9ebc51d19640473648c1750d621939b2a4927f63..99688e97e23f706bf50a5d030bc7fe7a8235640d 100644 (file)
 #include "libpspp/cast.h"
 #include "libpspp/message.h"
 #include "libpspp/string-map.h"
-#include "output/chart-item.h"
 #include "output/driver-provider.h"
-#include "output/message-item.h"
 #include "output/output-item.h"
-#include "output/tab.h"
-#include "output/table-item.h"
-#include "output/text-item.h"
 #include "ui/gui/help-menu.h"
 #include "ui/gui/builder-wrapper.h"
 #include "ui/gui/psppire-output-view.h"
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
-static void psppire_output_window_class_init    (PsppireOutputWindowClass *class);
-static void psppire_output_window_init          (PsppireOutputWindow      *window);
-
-GType
-psppire_output_window_get_type (void)
-{
-  static GType psppire_output_window_type = 0;
-
-  if (!psppire_output_window_type)
-    {
-      static const GTypeInfo psppire_output_window_info =
-      {
-       sizeof (PsppireOutputWindowClass),
-       (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-       (GClassInitFunc)psppire_output_window_class_init,
-       (GClassFinalizeFunc) NULL,
-       NULL,
-        sizeof (PsppireOutputWindow),
-       0,
-       (GInstanceInitFunc) psppire_output_window_init,
-      };
-
-      psppire_output_window_type =
-       g_type_register_static (PSPPIRE_TYPE_WINDOW, "PsppireOutputWindow",
-                               &psppire_output_window_info, 0);
-    }
-
-  return psppire_output_window_type;
-}
+G_DEFINE_TYPE (PsppireOutputWindow, psppire_output_window, PSPPIRE_TYPE_WINDOW)
 
 static GObjectClass *parent_class;
 
@@ -190,10 +156,10 @@ psppire_output_submit (struct output_driver *this,
 
 static struct output_driver_class psppire_output_class =
   {
-    "PSPPIRE",                  /* name */
-    NULL,                       /* destroy */
-    psppire_output_submit,      /* submit */
-    NULL,                       /* flush */
+    .name = "PSPPIRE",
+    .submit = psppire_output_submit,
+    .handles_groups = true,
+    .handles_show = true,
   };
 
 void
@@ -254,6 +220,7 @@ struct file_types
 enum
   {
     FT_AUTO = 0,
+    FT_SPV,
     FT_PDF,
     FT_HTML,
     FT_ODT,
@@ -266,8 +233,9 @@ enum
 
 #define N_EXTENSIONS (n_FT - 1)
 
-struct file_types ft[n_FT] = {
+static const struct file_types ft[n_FT] = {
   {N_("Infer file type from extension"),  NULL},
+  {N_("SPSS Viewer (*.spv)"),             ".spv"},
   {N_("PDF (*.pdf)"),                     ".pdf"},
   {N_("HTML (*.html)"),                   ".html"},
   {N_("OpenDocument (*.odt)"),            ".odt"},
@@ -297,12 +265,12 @@ on_combo_change (GtkFileChooser *chooser)
   else
     {
       gint i;
-      if ( x != 0 )
+      if (x != 0)
        sensitive = TRUE;
 
       for (i = 1 ; i < N_EXTENSIONS ; ++i)
        {
-         if ( g_str_has_suffix (fn, ft[i].ext))
+         if (g_str_has_suffix (fn, ft[i].ext))
            {
              sensitive = TRUE;
              break;
@@ -323,11 +291,11 @@ on_file_chooser_change (GObject *w, GParamSpec *pspec, gpointer data)
   GtkFileChooser *chooser = data;
   const gchar *name = g_param_spec_get_name (pspec);
 
-  if ( ! gtk_widget_get_realized (GTK_WIDGET (chooser)))
+  if (! gtk_widget_get_realized (GTK_WIDGET (chooser)))
     return;
 
   /* Ignore this one.  It causes recursion. */
-  if ( 0 == strcmp ("tooltip-text", name))
+  if (0 == strcmp ("tooltip-text", name))
     return;
 
   on_combo_change (chooser);
@@ -339,7 +307,7 @@ on_file_chooser_change (GObject *w, GParamSpec *pspec, gpointer data)
 static void
 iterate_widgets (GtkWidget *w, gpointer data)
 {
-  if ( GTK_IS_CONTAINER (w))
+  if (GTK_IS_CONTAINER (w))
     gtk_container_forall (GTK_CONTAINER (w), iterate_widgets, data);
   else
     g_signal_connect (w, "notify",  G_CALLBACK (on_file_chooser_change), data);
@@ -394,7 +362,7 @@ psppire_output_window_export (PsppireOutputWindow *window)
   {
     /* Create text cell renderer */
     GtkCellRenderer *cell = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, FALSE );
+    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, FALSE);
 
     gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo), cell,  "text", 0);
   }
@@ -414,7 +382,7 @@ psppire_output_window_export (PsppireOutputWindow *window)
 
   response = gtk_dialog_run (GTK_DIALOG (dialog));
 
-  if ( response == GTK_RESPONSE_ACCEPT )
+  if (response == GTK_RESPONSE_ACCEPT)
     {
       gint file_type = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
       gchar *filename = gtk_file_chooser_get_filename (chooser);
@@ -430,7 +398,7 @@ psppire_output_window_export (PsppireOutputWindow *window)
          gint i;
          for (i = 1 ; i < N_EXTENSIONS ; ++i)
            {
-             if ( g_str_has_suffix (filename, ft[i].ext))
+             if (g_str_has_suffix (filename, ft[i].ext))
                {
                  file_type = i;
                  break;
@@ -454,6 +422,9 @@ psppire_output_window_export (PsppireOutputWindow *window)
 
       switch (file_type)
        {
+        case FT_SPV:
+          export_output (window, &options, "spv");
+          break;
        case FT_PDF:
           export_output (window, &options, "pdf");
          break;
@@ -475,13 +446,7 @@ psppire_output_window_export (PsppireOutputWindow *window)
          /* Fall through */
 
        case FT_ASCII:
-          string_map_insert (&options, "headers", "false");
-          string_map_insert (&options, "paginate", "false");
-          string_map_insert (&options, "squeeze", "true");
-          string_map_insert (&options, "emphasis", "none");
           string_map_insert (&options, "charts", "none");
-          string_map_insert (&options, "top-margin", "0");
-          string_map_insert (&options, "bottom-margin", "0");
           export_output (window, &options, "txt");
          break;
        default:
@@ -512,9 +477,6 @@ psppire_output_window_init (PsppireOutputWindow *window)
     GTK_LAYOUT (get_widget_assert (xml, "output")),
     GTK_TREE_VIEW (get_widget_assert (xml, "overview")));
 
-
-  connect_help (xml);
-
   g_signal_connect (window,
                    "focus-in-event",
                    G_CALLBACK (cancel_urgency),
@@ -537,7 +499,7 @@ psppire_output_window_init (PsppireOutputWindow *window)
     g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (print));
 
 
-    const gchar *accels[2] = { "<Ctrl>P", NULL};
+    const gchar *accels[2] = { "<Primary>P", NULL};
     gtk_application_set_accels_for_action (app,
                                           "win.print",
                                           accels);
@@ -559,7 +521,7 @@ psppire_output_window_init (PsppireOutputWindow *window)
     GSimpleAction *copy = g_simple_action_new ("copy", NULL);
     g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (copy));
 
-    const gchar *accels[2] = { "<Ctrl>C", NULL};
+    const gchar *accels[2] = { "<Primary>C", NULL};
     gtk_application_set_accels_for_action (app,
                                           "win.copy",
                                           accels);