cairo: Implement xr_driver_destroy() and use it during printing.
[pspp-builds.git] / src / ui / gui / psppire-output-window.c
index b78ef8d3344290064af9c1ba267b1903904b6c8d..6d1cd46ca0085c82ad5f7f4715c7bc914b92990b 100644 (file)
@@ -32,7 +32,7 @@
 #include <output/tab.h>
 #include <stdlib.h>
 
-#include "about.h"
+#include "help-menu.h"
 
 #include "psppire-output-window.h"
 
@@ -570,16 +570,6 @@ psppire_output_window_init (PsppireOutputWindow *window)
                    G_CALLBACK (cancel_urgency),
                    NULL);
 
-  g_signal_connect (get_action_assert (xml,"help_about"),
-                   "activate",
-                   G_CALLBACK (about_new),
-                   window);
-
-  g_signal_connect (get_action_assert (xml,"help_reference"),
-                   "activate",
-                   G_CALLBACK (reference_manual),
-                   NULL);
-
   g_signal_connect (get_action_assert (xml,"windows_minimise-all"),
                    "activate",
                    G_CALLBACK (psppire_window_minimise_all),
@@ -587,9 +577,10 @@ psppire_output_window_init (PsppireOutputWindow *window)
 
   {
     GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER));
+    merge_help_menu (uim);
 
     PSPPIRE_WINDOW (window)->menu =
-      GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar1/windows_menuitem/windows_minimise-all")->parent);
+      GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows_menuitem/windows_minimise-all")->parent);
   }
 
   g_signal_connect_swapped (get_action_assert (xml, "file_export"), "activate",
@@ -621,8 +612,33 @@ static void
 create_xr_print_driver (GtkPrintContext *context, PsppireOutputWindow *window)
 {
   struct string_map options;
+  GtkPageSetup *page_setup;
+  double width, height;
+  double left_margin;
+  double right_margin;
+  double top_margin;
+  double bottom_margin;
+
+  page_setup = gtk_print_context_get_page_setup (context);
+  width = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_MM);
+  height = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_MM);
+  left_margin = gtk_page_setup_get_left_margin (page_setup, GTK_UNIT_MM);
+  right_margin = gtk_page_setup_get_right_margin (page_setup, GTK_UNIT_MM);
+  top_margin = gtk_page_setup_get_top_margin (page_setup, GTK_UNIT_MM);
+  bottom_margin = gtk_page_setup_get_bottom_margin (page_setup, GTK_UNIT_MM);
 
   string_map_init (&options);
+  string_map_insert_nocopy (&options, xstrdup ("paper-size"),
+                            xasprintf("%.2fx%.2fmm", width, height));
+  string_map_insert_nocopy (&options, xstrdup ("left-margin"),
+                            xasprintf ("%.2fmm", left_margin));
+  string_map_insert_nocopy (&options, xstrdup ("right-margin"),
+                            xasprintf ("%.2fmm", right_margin));
+  string_map_insert_nocopy (&options, xstrdup ("top-margin"),
+                            xasprintf ("%.2fmm", top_margin));
+  string_map_insert_nocopy (&options, xstrdup ("bottom-margin"),
+                            xasprintf ("%.2fmm", bottom_margin));
+
   window->print_xrd =
     xr_driver_create (gtk_print_context_get_cairo_context (context), &options);
 
@@ -634,16 +650,11 @@ paginate (GtkPrintOperation *operation,
          GtkPrintContext   *context,
          PsppireOutputWindow *window)
 {
-  g_print ("%s\n", __FUNCTION__);
-
   if ( window->print_item < window->n_items )
     {
-      g_print ("Passing item %d\n", window->print_item);
       xr_driver_output_item (window->print_xrd, window->items[window->print_item++]);
-      bool x = xr_driver_need_new_page (window->print_xrd);
-      if ( x )
+      if (xr_driver_need_new_page (window->print_xrd))
        {
-         g_print ("Need new page: %d\n", x);
          xr_driver_next_page (window->print_xrd, NULL);
          window->print_n_pages ++;
        }
@@ -651,12 +662,9 @@ paginate (GtkPrintOperation *operation,
     }
   else
     {
-      g_print ("Number of pages is %d\n", window->print_n_pages);
       gtk_print_operation_set_n_pages (operation, window->print_n_pages);
       window->print_item = 0;
-
       create_xr_print_driver (context, window);
-
       return TRUE;
     }
 }
@@ -666,8 +674,6 @@ begin_print (GtkPrintOperation *operation,
             GtkPrintContext   *context,
             PsppireOutputWindow *window)
 {
-  g_print ("%s\n", __FUNCTION__);
-
   create_xr_print_driver (context, window);
 
   window->print_item = 0;
@@ -679,16 +685,7 @@ end_print (GtkPrintOperation *operation,
           GtkPrintContext   *context,
           PsppireOutputWindow *window)
 {
-  g_print ("%s\n", __FUNCTION__);
-  //  xr_driver_destroy (window->print_xrd);
-}
-
-static void
-done (GtkPrintOperation *operation,
-      GtkPrintOperationResult   result,
-      gpointer           user_data)    
-{
-  g_print ("%s %d\n", __FUNCTION__, result);
+  xr_driver_destroy (window->print_xrd);
 }
 
 
@@ -698,8 +695,6 @@ draw_page (GtkPrintOperation *operation,
           gint               page_number,
           PsppireOutputWindow *window)
 {
-  g_print ("%s: %d\n", __FUNCTION__, page_number);
-
   xr_driver_next_page (window->print_xrd, gtk_print_context_get_cairo_context (context));
   while ( window->print_item < window->n_items)
     {
@@ -724,7 +719,6 @@ psppire_output_window_print (PsppireOutputWindow *window)
   g_signal_connect (print, "end_print", G_CALLBACK (end_print),     window);
   g_signal_connect (print, "paginate", G_CALLBACK (paginate),       window);
   g_signal_connect (print, "draw_page", G_CALLBACK (draw_page),     window);
-  g_signal_connect (print, "done", G_CALLBACK (done),               window);
 
   res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
                                  GTK_WINDOW (window), NULL);