+/* -*- 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,
/****************************************************************************/
/* 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 (gtk_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;
-
- object_class = (GObjectClass *) class;
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
- parent_class = gtk_type_class (gtk_hbox_get_type ());
+ 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;
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 *
gl_wdgt_print_merge_construct (glWdgtPrintMerge * merge,
glLabel * label)
{
- GtkWidget *whbox, *wvbox, *whbox1;
- GtkObject *adjust;
- GdkPixbuf *pixbuf;
- const glTemplate *template;
+ const glTemplateLabelType *label_type;
+ GtkWidget *whbox, *wvbox, *whbox1;
+ GtkObject *adjust;
+ GdkPixbuf *pixbuf;
whbox = GTK_WIDGET (merge);
- template = gl_label_get_template (label);
- merge->labels_per_sheet = gl_template_get_n_labels (template);
+ label_type = gl_template_get_first_label_type (label->template);
+
+ merge->labels_per_sheet = gl_template_get_n_labels (label_type);
/* mini_preview canvas */
merge->mini_preview = gl_wdgt_mini_preview_new (WDGT_MINI_PREVIEW_HEIGHT,
WDGT_MINI_PREVIEW_WIDTH);
- gl_wdgt_mini_preview_set_label( GL_WDGT_MINI_PREVIEW (merge->mini_preview),
- template->name->data );
- gtk_box_pack_start (GTK_BOX (whbox), merge->mini_preview,
- TRUE, TRUE, GNOME_PAD);
+ gl_wdgt_mini_preview_set_template( GL_WDGT_MINI_PREVIEW (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 = gtk_vbox_new (FALSE, GNOME_PAD);
- gtk_box_pack_start (GTK_BOX (whbox), wvbox, TRUE, TRUE, GNOME_PAD);
+ wvbox = gtk_vbox_new (FALSE, GL_HIG_PAD1);
+ gtk_box_pack_start (GTK_BOX(whbox), wvbox, FALSE, FALSE, 0);
/* First Label controls */
- whbox1 = gtk_hbox_new (FALSE, GNOME_PAD);
- gtk_box_pack_start (GTK_BOX (wvbox), whbox1, FALSE, FALSE, GNOME_PAD);
- gtk_box_pack_start (GTK_BOX (whbox1),
- gtk_label_new (_("Start on label")), FALSE, FALSE,
- 0);
+ 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);
- 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);
-
- /* Collate controls */
- whbox1 = gtk_hbox_new (FALSE, GNOME_PAD);
- gtk_box_pack_end (GTK_BOX (wvbox), whbox1, FALSE, FALSE, GNOME_PAD);
- pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
- merge->collate_image = gtk_image_new_from_pixbuf(pixbuf);
-
- gtk_box_pack_start (GTK_BOX (whbox1), merge->collate_image,
- FALSE, FALSE, 0);
- merge->collate_check = gtk_check_button_new_with_label (_("Collate"));
- gtk_box_pack_start (GTK_BOX (whbox1), merge->collate_check,
- FALSE, FALSE, 0);
-
- /* Copy controls */
- whbox1 = gtk_hbox_new (FALSE, GNOME_PAD);
- gtk_box_pack_end (GTK_BOX (wvbox), whbox1, FALSE, FALSE, GNOME_PAD);
- gtk_box_pack_start (GTK_BOX (whbox1), gtk_label_new (_("Copies:")),
- FALSE, FALSE, 0);
+ 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 */
+ gtk_box_pack_start (GTK_BOX(wvbox), gtk_label_new (""), FALSE, FALSE, 0);
+
+ /* Copy & collate controls*/
+ 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);
- gtk_box_pack_start (GTK_BOX (whbox1), merge->copies_spin,
- FALSE, FALSE, 0);
+ 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"));
+ 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);
+
+ 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",
last = first + (n_copies * merge->n_records) - 1;
gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(merge->mini_preview),
first, last );
+
+ gtk_widget_set_sensitive (merge->collate_check, (n_copies > 1));
+ gtk_widget_set_sensitive (merge->collate_image, (n_copies > 1));
}
/*--------------------------------------------------------------------------*/
/* 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
*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 );
}
/****************************************************************************/