]> git.sur5r.net Git - glabels/blobdiff - glabels2/src/wdgt-print-merge.c
2007-09-14 Jim Evins <evins@snaught.com>
[glabels] / glabels2 / src / wdgt-print-merge.c
index 51a0143250bacf421aa54c99f6af5fd618182556..f8b05909bf54eaa58949f4eea26ad536caf68edb 100644 (file)
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
 /*
  *  (GLABELS) Label and Business Card Creation program for GNOME
  *
 #include <config.h>
 
 #include "wdgt-print-merge.h"
+
+#include <math.h>
+#include <glib/gi18n.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkvbox.h>
+
+#include "hig.h"
 #include "wdgt-mini-preview.h"
 #include "marshal.h"
 
 /* Private globals                           */
 /*===========================================*/
 
-static GObjectClass *parent_class;
-
 /*===========================================*/
 /* Local function prototypes                 */
 /*===========================================*/
 
-static void gl_wdgt_print_merge_class_init    (glWdgtPrintMergeClass * class);
-static void gl_wdgt_print_merge_instance_init (glWdgtPrintMerge * merge);
 static void gl_wdgt_print_merge_finalize      (GObject * object);
 
 static void gl_wdgt_print_merge_construct     (glWdgtPrintMerge * merge,
@@ -64,47 +72,21 @@ static void spin_cb                           (GtkSpinButton * spinbutton,
 /****************************************************************************/
 /* Boilerplate Object stuff.                                                */
 /****************************************************************************/
-guint
-gl_wdgt_print_merge_get_type (void)
-{
-       static guint wdgt_print_merge_type = 0;
-
-       if (!wdgt_print_merge_type) {
-               GTypeInfo wdgt_print_merge_info = {
-                       sizeof (glWdgtPrintMergeClass),
-                       NULL,
-                       NULL,
-                       (GClassInitFunc) gl_wdgt_print_merge_class_init,
-                       NULL,
-                       NULL,
-                       sizeof (glWdgtPrintMerge),
-                       0,
-                       (GInstanceInitFunc) gl_wdgt_print_merge_instance_init,
-               };
-
-               wdgt_print_merge_type =
-                       g_type_register_static (gl_hig_hbox_get_type (),
-                                               "glWdgtPrintMerge",
-                                               &wdgt_print_merge_info, 0);
-       }
+G_DEFINE_TYPE (glWdgtPrintMerge, gl_wdgt_print_merge, GTK_TYPE_HBOX);
 
-       return wdgt_print_merge_type;
-}
 
 static void
 gl_wdgt_print_merge_class_init (glWdgtPrintMergeClass * class)
 {
-       GObjectClass *object_class;
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-       object_class = (GObjectClass *) class;
-
-       parent_class = g_type_class_peek_parent (class);
+       gl_wdgt_print_merge_parent_class = g_type_class_peek_parent (class);
 
        object_class->finalize = gl_wdgt_print_merge_finalize;
 }
 
 static void
-gl_wdgt_print_merge_instance_init (glWdgtPrintMerge * merge)
+gl_wdgt_print_merge_init (glWdgtPrintMerge * merge)
 {
        merge->mini_preview = NULL;
 
@@ -117,15 +99,10 @@ gl_wdgt_print_merge_instance_init (glWdgtPrintMerge * merge)
 static void
 gl_wdgt_print_merge_finalize (GObject * object)
 {
-       glWdgtPrintMerge *merge;
-       glWdgtPrintMergeClass *class;
-
        g_return_if_fail (object != NULL);
        g_return_if_fail (GL_IS_WDGT_PRINT_MERGE (object));
 
-       merge = GL_WDGT_PRINT_MERGE (object);
-
-       G_OBJECT_CLASS (parent_class)->finalize (object);
+       G_OBJECT_CLASS (gl_wdgt_print_merge_parent_class)->finalize (object);
 }
 
 GtkWidget *
@@ -147,7 +124,6 @@ static void
 gl_wdgt_print_merge_construct (glWdgtPrintMerge * merge,
                               glLabel * label)
 {
-       glTemplate                *template;
        const glTemplateLabelType *label_type;
        GtkWidget                 *whbox, *wvbox, *whbox1;
        GtkObject                 *adjust;
@@ -155,8 +131,7 @@ gl_wdgt_print_merge_construct (glWdgtPrintMerge * merge,
 
        whbox = GTK_WIDGET (merge);
 
-       template   = gl_label_get_template (label);
-       label_type = gl_template_get_first_label_type (template);
+       label_type = gl_template_get_first_label_type (label->template);
 
        merge->labels_per_sheet = gl_template_get_n_labels (label_type);
 
@@ -164,49 +139,49 @@ gl_wdgt_print_merge_construct (glWdgtPrintMerge * merge,
        merge->mini_preview = gl_wdgt_mini_preview_new (WDGT_MINI_PREVIEW_HEIGHT,
                                                        WDGT_MINI_PREVIEW_WIDTH);
        gl_wdgt_mini_preview_set_template( GL_WDGT_MINI_PREVIEW (merge->mini_preview),
-                                          template );
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox), merge->mini_preview);
+                                          label->template );
+       gtk_box_pack_start (GTK_BOX(whbox), merge->mini_preview, FALSE, FALSE, 0);
        gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(merge->mini_preview),
                                              1, 1);
 
-       wvbox = gl_hig_vbox_new (GL_HIG_VBOX_INNER);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox), wvbox);
+       wvbox = gtk_vbox_new (FALSE, GL_HIG_PAD1);
+       gtk_box_pack_start (GTK_BOX(whbox), wvbox, FALSE, FALSE, 0);
 
        /* First Label controls */
-       whbox1 = gl_hig_hbox_new ();
-       gl_hig_vbox_add_widget (GL_HIG_VBOX(wvbox), whbox1);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1),
-                               gtk_label_new (_("Start on label")));
+       whbox1 = gtk_hbox_new (FALSE, GL_HIG_PAD2);
+       gtk_box_pack_start (GTK_BOX(wvbox), whbox1, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1),
+                               gtk_label_new (_("Start on label")), FALSE, FALSE, 0);
        adjust =
            gtk_adjustment_new (1, 1.0, merge->labels_per_sheet, 1.0, 10.0,
                                10.0);
        merge->first_spin =
            gtk_spin_button_new (GTK_ADJUSTMENT (adjust), 1.0, 0);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1), merge->first_spin);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1),
-                               gtk_label_new (_("on 1st sheet")));
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->first_spin, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1),
+                               gtk_label_new (_("on 1st sheet")), FALSE, FALSE, 0);
 
        /* Blank line */
-       gl_hig_vbox_add_widget (GL_HIG_VBOX(wvbox), gtk_label_new (""));
+       gtk_box_pack_start (GTK_BOX(wvbox), gtk_label_new (""), FALSE, FALSE, 0);
 
        /* Copy & collate controls*/
-       whbox1 = gl_hig_hbox_new ();
-       gl_hig_vbox_add_widget (GL_HIG_VBOX(wvbox), whbox1);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1),
-                               gtk_label_new (_("Copies:")));
+       whbox1 = gtk_hbox_new (FALSE, GL_HIG_PAD2);
+       gtk_box_pack_start (GTK_BOX(wvbox), whbox1, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1),
+                               gtk_label_new (_("Copies:")), FALSE, FALSE, 0);
        adjust = gtk_adjustment_new (1, 1.0, 10.0, 1.0, 10.0, 10.0);
        merge->copies_spin = gtk_spin_button_new (GTK_ADJUSTMENT (adjust),
                                                   1.0, 0);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1), merge->copies_spin);
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1), gtk_label_new ("    "));
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->copies_spin, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), gtk_label_new ("    "), FALSE, FALSE, 0);
        merge->collate_check = gtk_check_button_new_with_label (_("Collate"));
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1), merge->collate_check);
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->collate_check, FALSE, FALSE, 0);
        pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
        merge->collate_image = gtk_image_new_from_pixbuf(pixbuf);
        gtk_widget_set_sensitive (merge->collate_check, FALSE);
        gtk_widget_set_sensitive (merge->collate_image, FALSE);
 
-       gl_hig_hbox_add_widget (GL_HIG_HBOX(whbox1), merge->collate_image);
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->collate_image, FALSE, FALSE, 0);
 
        /* Connect signals to controls */
        g_signal_connect (G_OBJECT (merge->mini_preview), "clicked",
@@ -217,8 +192,6 @@ gl_wdgt_print_merge_construct (glWdgtPrintMerge * merge,
                          G_CALLBACK (spin_cb), merge);
        g_signal_connect (G_OBJECT (merge->first_spin), "changed",
                          G_CALLBACK (spin_cb), merge);
-
-       gl_template_free (template);
 }
 
 /*--------------------------------------------------------------------------*/
@@ -298,10 +271,11 @@ preview_clicked (glWdgtMiniPreview *mini_preview,
 /* query selected range of labels within sheet or number of sheets.         */
 /****************************************************************************/
 void
-gl_wdgt_print_merge_get_copies (glWdgtPrintMerge * merge,
-                               gint * n_copies,
-                               gint * first_label,
-                               gboolean * collate_flag)
+gl_wdgt_print_merge_get_copies (glWdgtPrintMerge *merge,
+                               gint             *n_copies,
+                               gint             *first_label,
+                               gboolean         *collate_flag,
+                               gint             *n_sheets)
 {
        *n_copies =
            gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
@@ -312,6 +286,8 @@ gl_wdgt_print_merge_get_copies (glWdgtPrintMerge * merge,
        *collate_flag =
            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
                                          (merge->collate_check));
+
+       *n_sheets = ceil ( (double)(*first_label - 1 + (*n_copies * merge->n_records))/ (double)merge->labels_per_sheet );
 }
 
 /****************************************************************************/