diff options
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/misc/e-printable.c | 172 | ||||
-rw-r--r-- | widgets/misc/e-printable.h | 58 |
2 files changed, 230 insertions, 0 deletions
diff --git a/widgets/misc/e-printable.c b/widgets/misc/e-printable.c new file mode 100644 index 0000000000..27170fef84 --- /dev/null +++ b/widgets/misc/e-printable.c @@ -0,0 +1,172 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * e-printable.c: an object printer. + * + * Author: + * Christopher James Lahey <clahey@helixcode.com> + * + * (C) 2000 Helix Code, Inc. + */ +#include <config.h> +#include <gtk/gtksignal.h> +#include "e-util.h" +#include "e-printable.h" + +#define EP_CLASS(e) ((EPrintableClass *)((GtkObject *)e)->klass) + +#define PARENT_TYPE gtk_object_get_type () + + +static GtkObjectClass *e_printable_parent_class; + +enum { + PRINT_PAGE, + DATA_LEFT, + RESET, + HEIGHT, + LAST_SIGNAL +}; + +static guint e_printable_signals [LAST_SIGNAL] = { 0, }; + +static void +e_printable_class_init (GtkObjectClass *object_class) +{ + EPrintableClass *klass = E_PRINTABLE_CLASS(object_class); + e_printable_parent_class = gtk_type_class (PARENT_TYPE); + + e_printable_signals [PRINT_PAGE] = + gtk_signal_new ("print_page", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EPrintableClass, print_page), + e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL, + GTK_TYPE_NONE, 4, GTK_TYPE_OBJECT, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE, GTK_TYPE_BOOL); + + e_printable_signals [DATA_LEFT] = + gtk_signal_new ("data_left", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EPrintableClass, data_left), + gtk_marshal_BOOL__NONE, + GTK_TYPE_BOOL, 0, GTK_TYPE_NONE); + + e_printable_signals [RESET] = + gtk_signal_new ("reset", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EPrintableClass, reset), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0, GTK_TYPE_NONE); + + e_printable_signals [HEIGHT] = + gtk_signal_new ("height", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EPrintableClass, height), + e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE, + GTK_TYPE_DOUBLE, 3, GTK_TYPE_OBJECT, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE); + + gtk_object_class_add_signals (object_class, e_printable_signals, LAST_SIGNAL); + + klass->print_page = NULL; + klass->data_left = NULL; + klass->reset = NULL; + klass->height = NULL; +} + + +guint +e_printable_get_type (void) +{ + static guint type = 0; + + if (!type) + { + GtkTypeInfo info = + { + "EPrintable", + sizeof (EPrintable), + sizeof (EPrintableClass), + (GtkClassInitFunc) e_printable_class_init, + NULL, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + + type = gtk_type_unique (gtk_object_get_type (), &info); + } + + return type; +} + +EPrintable * +e_printable_new(void) +{ + return E_PRINTABLE(gtk_type_new(e_printable_get_type())); +} + +void +e_printable_print_page (EPrintable *e_printable, + GnomePrintContext *context, + gdouble width, + gdouble height, + gboolean quantized) +{ + g_return_if_fail (e_printable != NULL); + g_return_if_fail (E_IS_PRINTABLE (e_printable)); + + gtk_signal_emit (GTK_OBJECT (e_printable), + e_printable_signals [PRINT_PAGE], + context, + width, + height, + quantized); +} + +gboolean +e_printable_data_left (EPrintable *e_printable) +{ + gboolean ret_val; + + g_return_val_if_fail (e_printable != NULL, FALSE); + g_return_val_if_fail (E_IS_PRINTABLE (e_printable), FALSE); + + gtk_signal_emit (GTK_OBJECT (e_printable), + e_printable_signals [DATA_LEFT], + &ret_val); + + return ret_val; +} + +void +e_printable_reset (EPrintable *e_printable) +{ + g_return_if_fail (e_printable != NULL); + g_return_if_fail (E_IS_PRINTABLE (e_printable)); + + gtk_signal_emit (GTK_OBJECT (e_printable), + e_printable_signals [RESET]); +} + +gdouble +e_printable_height (EPrintable *e_printable, + GnomePrintContext *context, + gdouble width, + gdouble max_height) +{ + gdouble ret_val; + + g_return_val_if_fail (e_printable != NULL, -1); + g_return_val_if_fail (E_IS_PRINTABLE (e_printable), -1); + + gtk_signal_emit (GTK_OBJECT (e_printable), + e_printable_signals [HEIGHT], + context, + width, + max_height, + &ret_val); + + return ret_val; +} diff --git a/widgets/misc/e-printable.h b/widgets/misc/e-printable.h new file mode 100644 index 0000000000..2f8532e0ec --- /dev/null +++ b/widgets/misc/e-printable.h @@ -0,0 +1,58 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * e-printable.h: an object printer. + * + * Author: + * Christopher James Lahey <clahey@helixcode.com> + * + * (C) 2000 Helix Code, Inc. + */ +#ifndef _E_PRINTABLE_H_ +#define _E_PRINTABLE_H_ + +#include <gtk/gtkobject.h> +#include <libgnomeprint/gnome-print.h> + +#define E_PRINTABLE_TYPE (e_printable_get_type ()) +#define E_PRINTABLE(o) (GTK_CHECK_CAST ((o), E_PRINTABLE_TYPE, EPrintable)) +#define E_PRINTABLE_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_PRINTABLE_TYPE, EPrintableClass)) +#define E_IS_PRINTABLE(o) (GTK_CHECK_TYPE ((o), E_PRINTABLE_TYPE)) +#define E_IS_PRINTABLE_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_PRINTABLE_TYPE)) + +typedef struct { + GtkObject base; +} EPrintable; + +typedef struct { + GtkObjectClass parent_class; + + /* + * Signals + */ + + void (*print_page) (EPrintable *etm, GnomePrintContext *context, gdouble width, gdouble height, gboolean quantized); + gboolean (*data_left) (EPrintable *etm); + void (*reset) (EPrintable *etm); + gdouble (*height) (EPrintable *etm, GnomePrintContext *context, gdouble width, gdouble max_height); +} EPrintableClass; + +GtkType e_printable_get_type (void); + +EPrintable *e_printable_new (void); + +/* + * Routines for emitting signals on the e_table + */ +void e_printable_print_page (EPrintable *e_printable, + GnomePrintContext *context, + gdouble width, + gdouble height, + gboolean quantized); +gboolean e_printable_data_left (EPrintable *e_printable); +void e_printable_reset (EPrintable *e_printable); +gdouble e_printable_height (EPrintable *e_printable, + GnomePrintContext *context, + gdouble width, + gdouble max_height); + +#endif /* _E_PRINTABLE_H_ */ |