psppire-output-view: New features for use separate from output window.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 30 Aug 2014 19:01:34 +0000 (12:01 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 30 Aug 2014 19:07:56 +0000 (12:07 -0700)
src/ui/gui/psppire-output-view.c
src/ui/gui/psppire-output-view.h

index f1397aa792f5d9b855b2c87ad6e76c4a635b6f51..b8202074639d524064185ad9dc4870bbdeb9f374 100644 (file)
@@ -699,6 +699,25 @@ psppire_output_view_destroy (struct psppire_output_view *view)
 
   free (view);
 }
+
+void
+psppire_output_view_clear (struct psppire_output_view *view)
+{
+  size_t i;
+
+  view->max_width = 0;
+  view->y = 0;
+
+  for (i = 0; i < view->n_items; i++)
+    {
+      gtk_container_remove (GTK_CONTAINER (view->output),
+                            view->items[i].drawing_area);
+      output_item_unref (view->items[i].item);
+    }
+  free (view->items);
+  view->items = NULL;
+  view->n_items = view->allocated_items = 0;
+}
 \f
 /* Export. */
 
@@ -874,3 +893,47 @@ psppire_output_view_print (struct psppire_output_view *view,
 
   g_object_unref (print);
 }
+\f
+struct psppire_output_view_driver
+  {
+    struct output_driver driver;
+    struct psppire_output_view *view;
+  };
+
+static struct psppire_output_view_driver *
+psppire_output_view_driver_cast (struct output_driver *driver)
+{
+  return UP_CAST (driver, struct psppire_output_view_driver, driver);
+}
+
+static void
+psppire_output_view_submit (struct output_driver *this,
+                            const struct output_item *item)
+{
+  struct psppire_output_view_driver *povd = psppire_output_view_driver_cast (this);
+
+  if (is_table_item (item))
+    psppire_output_view_put (povd->view, item);
+}
+
+static struct output_driver_class psppire_output_view_driver_class =
+  {
+    "PSPPIRE Output View",      /* name */
+    NULL,                       /* destroy */
+    psppire_output_view_submit, /* submit */
+    NULL,                       /* flush */
+  };
+
+void
+psppire_output_view_register_driver (struct psppire_output_view *view)
+{
+  struct psppire_output_view_driver *povd;
+  struct output_driver *d;
+
+  povd = xzalloc (sizeof *povd);
+  povd->view = view;
+  d = &povd->driver;
+  output_driver_init (d, &psppire_output_view_driver_class, "PSPPIRE Output View",
+                      SETTINGS_DEVICE_UNFILTERED);
+  output_driver_register (d);
+}
index 144ded0f4df5c7b98029e1cb8525839cdce5908e..d46c5e0706ddac59f0e6442c892128657b2daddb 100644 (file)
@@ -27,6 +27,7 @@ struct psppire_output_view *psppire_output_view_new (GtkLayout *output,
                                                      GtkTreeView *overview,
                                                      GtkAction *copy_action,
                                                      GtkAction *select_all_action);
+void psppire_output_view_clear (struct psppire_output_view *);
 void psppire_output_view_destroy (struct psppire_output_view *);
 
 void psppire_output_view_put (struct psppire_output_view *,
@@ -37,4 +38,6 @@ void psppire_output_view_export (struct psppire_output_view *,
 void psppire_output_view_print (struct psppire_output_view *,
                                 GtkWindow *parent_window);
 
+void psppire_output_view_register_driver (struct psppire_output_view *);
+
 #endif /* psppire-output-view.h */