2 * Copyright (C) 2006 John (J5) Palmieri <johnp@redhat.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
26 #include "gtkprivate.h"
28 #include "gtkprinter.h"
29 #include "gtkprinter-private.h"
30 #include "gtkprintbackend.h"
31 #include "gtkprintjob.h"
34 #define GTK_PRINTER_GET_PRIVATE(o) \
35 (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_PRINTER, GtkPrinterPrivate))
37 static void gtk_printer_finalize (GObject *object);
39 struct _GtkPrinterPrivate
55 GtkPrintBackend *backend;
74 static guint signals[LAST_SIGNAL] = { 0 };
76 static void gtk_printer_set_property (GObject *object,
80 static void gtk_printer_get_property (GObject *object,
85 G_DEFINE_TYPE (GtkPrinter, gtk_printer, G_TYPE_OBJECT);
88 safe_strcmp (const char *a, const char *b)
100 gtk_printer_class_init (GtkPrinterClass *class)
102 GObjectClass *object_class;
103 object_class = (GObjectClass *) class;
105 object_class->finalize = gtk_printer_finalize;
107 object_class->set_property = gtk_printer_set_property;
108 object_class->get_property = gtk_printer_get_property;
110 g_type_class_add_private (class, sizeof (GtkPrinterPrivate));
112 g_object_class_install_property (G_OBJECT_CLASS (class),
114 g_param_spec_string ("name",
116 P_("Name of the printer"),
118 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
119 g_object_class_install_property (G_OBJECT_CLASS (class),
121 g_param_spec_object ("backend",
123 P_("Backend for the printer"),
124 GTK_TYPE_PRINT_BACKEND,
125 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
126 g_object_class_install_property (G_OBJECT_CLASS (class),
128 g_param_spec_boolean ("is-virtual",
130 P_("FALSE if this represents a real hardware printer"),
132 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
133 g_object_class_install_property (G_OBJECT_CLASS (class),
135 g_param_spec_string ("state-message",
137 P_("String giving the current state of the printer"),
139 GTK_PARAM_READABLE));
140 g_object_class_install_property (G_OBJECT_CLASS (class),
142 g_param_spec_string ("location",
144 P_("The location of the printer"),
146 GTK_PARAM_READABLE));
147 g_object_class_install_property (G_OBJECT_CLASS (class),
149 g_param_spec_string ("icon-name",
151 P_("The icon name to use for the printer"),
153 GTK_PARAM_READABLE));
154 g_object_class_install_property (G_OBJECT_CLASS (class),
156 g_param_spec_int ("job-count",
158 P_("Number of jobs queued in the printer"),
162 GTK_PARAM_READABLE));
165 * GtkPrinter::details-acquired:
166 * @printer: the #GtkPrinter on which the signal is emitted
167 * @success: %TRUE if the details were successfully acquired
169 * Gets emitted in response to a request for detailed information
170 * about a printer from the print backend. The @success parameter
171 * indicates if the information was actually obtained.
175 signals[DETAILS_ACQUIRED] =
176 g_signal_new ("details-acquired",
177 G_TYPE_FROM_CLASS (class),
179 G_STRUCT_OFFSET (GtkPrinterClass, details_acquired),
181 g_cclosure_marshal_VOID__BOOLEAN,
182 G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
186 gtk_printer_init (GtkPrinter *printer)
188 printer->priv = GTK_PRINTER_GET_PRIVATE (printer);
190 printer->priv->name = NULL;
191 printer->priv->location = NULL;
192 printer->priv->description = NULL;
193 printer->priv->icon_name = NULL;
195 printer->priv->is_active = TRUE;
196 printer->priv->is_new = TRUE;
197 printer->priv->has_details = FALSE;
199 printer->priv->state_message = NULL;
200 printer->priv->job_count = 0;
204 gtk_printer_finalize (GObject *object)
206 g_return_if_fail (object != NULL);
208 GtkPrinter *printer = GTK_PRINTER (object);
210 g_free (printer->priv->name);
211 g_free (printer->priv->location);
212 g_free (printer->priv->description);
213 g_free (printer->priv->state_message);
214 g_free (printer->priv->icon_name);
216 if (printer->priv->backend)
217 g_object_unref (printer->priv->backend);
219 if (G_OBJECT_CLASS (gtk_printer_parent_class)->finalize)
220 G_OBJECT_CLASS (gtk_printer_parent_class)->finalize (object);
224 gtk_printer_set_property (GObject *object,
229 GtkPrinter *printer = GTK_PRINTER (object);
234 printer->priv->name = g_value_dup_string (value);
238 printer->priv->backend = GTK_PRINT_BACKEND (g_value_dup_object (value));
241 case PROP_IS_VIRTUAL:
242 printer->priv->is_virtual = g_value_get_boolean (value);
246 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
252 gtk_printer_get_property (GObject *object,
257 GtkPrinter *printer = GTK_PRINTER (object);
262 if (printer->priv->name)
263 g_value_set_string (value, printer->priv->name);
265 g_value_set_string (value, "");
268 g_value_set_object (value, printer->priv->backend);
270 case PROP_STATE_MESSAGE:
271 if (printer->priv->state_message)
272 g_value_set_string (value, printer->priv->state_message);
274 g_value_set_string (value, "");
277 if (printer->priv->location)
278 g_value_set_string (value, printer->priv->location);
280 g_value_set_string (value, "");
283 if (printer->priv->icon_name)
284 g_value_set_string (value, printer->priv->icon_name);
286 g_value_set_string (value, "");
289 g_value_set_int (value, printer->priv->job_count);
292 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
299 * @name: the name of the printer
300 * @backend: a #GtkPrintBackend
301 * @gboolean: whether the printer is virtual
303 * Creates a new #GtkPrinter.
305 * Return value: a new #GtkPrinter
310 gtk_printer_new (const gchar *name,
311 GtkPrintBackend *backend,
316 result = g_object_new (GTK_TYPE_PRINTER,
319 "is-virtual", virtual,
322 return (GtkPrinter *) result;
326 * gtk_printer_get_backend:
327 * @printer: a #GtkPrinter
329 * Returns the backend of the printer.
331 * Return value: the backend of @printer
336 gtk_printer_get_backend (GtkPrinter *printer)
338 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
340 return printer->priv->backend;
344 gtk_printer_set_backend (GtkPrinter *printer,
345 GtkPrintBackend *backend)
347 g_return_if_fail (GTK_IS_PRINTER (printer));
348 g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
350 if (printer->priv->backend)
351 g_object_unref (printer->priv->backend);
353 printer->priv->backend = g_object_ref (backend);
357 * gtk_printer_get_name:
358 * @printer: a #GtkPrinter
360 * Returns the name of the printer.
362 * Return value: the name of @printer
366 G_CONST_RETURN gchar *
367 gtk_printer_get_name (GtkPrinter *printer)
369 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
371 return printer->priv->name;
375 * gtk_printer_get_description:
376 * @printer: a #GtkPrinter
378 * Gets the description of the printer.
380 * Return value: the description of @printer
384 G_CONST_RETURN gchar *
385 gtk_printer_get_description (GtkPrinter *printer)
387 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
389 return printer->priv->description;
393 gtk_printer_set_description (GtkPrinter *printer,
394 const gchar *description)
396 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
398 if (safe_strcmp (printer->priv->description, description) == 0)
401 g_free (printer->priv->description);
402 printer->priv->description = g_strdup (description);
408 * gtk_printer_get_state_message:
409 * @printer: a #GtkPrinter
411 * Returns the state message describing the current state
414 * Return value: the state message of @printer
418 G_CONST_RETURN gchar *
419 gtk_printer_get_state_message (GtkPrinter *printer)
421 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
423 return printer->priv->state_message;
427 gtk_printer_set_state_message (GtkPrinter *printer,
428 const gchar *message)
430 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
432 if (safe_strcmp (printer->priv->state_message, message) == 0)
435 g_free (printer->priv->state_message);
436 printer->priv->state_message = g_strdup (message);
437 g_object_notify (G_OBJECT (printer), "state-message");
443 * gtk_printer_get_location:
444 * @printer: a #GtkPrinter
446 * Returns a description of the location of the printer.
448 * Return value: the location of @printer
452 G_CONST_RETURN gchar *
453 gtk_printer_get_location (GtkPrinter *printer)
455 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
457 return printer->priv->location;
461 gtk_printer_set_location (GtkPrinter *printer,
462 const gchar *location)
464 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
466 if (safe_strcmp (printer->priv->location, location) == 0)
469 g_free (printer->priv->location);
470 printer->priv->location = g_strdup (location);
471 g_object_notify (G_OBJECT (printer), "location");
477 * gtk_printer_get_icon_name:
478 * @printer: a #GtkPrinter
480 * Gets the name of the icon to use for the printer.
482 * Return value: the icon name for @printer
486 G_CONST_RETURN gchar *
487 gtk_printer_get_icon_name (GtkPrinter *printer)
489 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
491 return printer->priv->icon_name;
495 gtk_printer_set_icon_name (GtkPrinter *printer,
498 g_return_if_fail (GTK_IS_PRINTER (printer));
500 g_free (printer->priv->icon_name);
501 printer->priv->icon_name = g_strdup (icon);
502 g_object_notify (G_OBJECT (printer), "icon-name");
506 * gtk_printer_get_job_count:
507 * @printer: a #GtkPrinter
509 * Gets the number of jobs currently queued on the printer.
511 * Return value: the number of jobs on @printer
516 gtk_printer_get_job_count (GtkPrinter *printer)
518 g_return_val_if_fail (GTK_IS_PRINTER (printer), 0);
520 return printer->priv->job_count;
524 gtk_printer_set_job_count (GtkPrinter *printer,
527 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
529 if (printer->priv->job_count == count)
532 printer->priv->job_count = count;
534 g_object_notify (G_OBJECT (printer), "job-count");
540 _gtk_printer_has_details (GtkPrinter *printer)
542 return printer->priv->has_details;
546 gtk_printer_set_has_details (GtkPrinter *printer,
549 printer->priv->has_details = val;
553 * gtk_printer_is_active:
554 * @printer: a #GtkPrinter
556 * Returns whether the printer is currently active (i.e.
559 * Return value: %TRUE if @printer is active
564 gtk_printer_is_active (GtkPrinter *printer)
566 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
568 return printer->priv->is_active;
572 gtk_printer_set_is_active (GtkPrinter *printer,
575 g_return_if_fail (GTK_IS_PRINTER (printer));
577 printer->priv->is_active = val;
582 * gtk_printer_is_virtual:
583 * @printer: a #GtkPrinter
585 * Returns whether the printer is virtual (i.e. does not
586 * represent actual printer hardware, but something like
589 * Return value: %TRUE if @printer is virtual
594 gtk_printer_is_virtual (GtkPrinter *printer)
596 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
598 return printer->priv->is_virtual;
602 gtk_printer_is_new (GtkPrinter *printer)
604 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
606 return printer->priv->is_new;
610 gtk_printer_set_is_new (GtkPrinter *printer,
613 g_return_if_fail (GTK_IS_PRINTER (printer));
615 printer->priv->is_new = val;
620 * gtk_printer_is_default:
621 * @printer: a #GtkPrinter
623 * Returns whether the printer is the default printer.
625 * Return value: %TRUE if @printer is the default
630 gtk_printer_is_default (GtkPrinter *printer)
632 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
634 return printer->priv->is_default;
638 gtk_printer_set_is_default (GtkPrinter *printer,
641 g_return_if_fail (GTK_IS_PRINTER (printer));
643 printer->priv->is_default = TRUE;
647 _gtk_printer_request_details (GtkPrinter *printer)
649 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
650 return backend_iface->printer_request_details (printer);
653 GtkPrinterOptionSet *
654 _gtk_printer_get_options (GtkPrinter *printer,
655 GtkPrintSettings *settings,
656 GtkPageSetup *page_setup)
658 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
659 return backend_iface->printer_get_options (printer, settings, page_setup);
663 _gtk_printer_mark_conflicts (GtkPrinter *printer,
664 GtkPrinterOptionSet *options)
666 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
667 return backend_iface->printer_mark_conflicts (printer, options);
671 _gtk_printer_get_settings_from_options (GtkPrinter *printer,
672 GtkPrinterOptionSet *options,
673 GtkPrintSettings *settings)
675 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
676 return backend_iface->printer_get_settings_from_options (printer, options, settings);
680 _gtk_printer_prepare_for_print (GtkPrinter *printer,
681 GtkPrintJob *print_job,
682 GtkPrintSettings *settings,
683 GtkPageSetup *page_setup)
685 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
686 return backend_iface->printer_prepare_for_print (printer, print_job, settings, page_setup);
690 _gtk_printer_create_cairo_surface (GtkPrinter *printer,
695 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
697 return backend_iface->printer_create_cairo_surface (printer, width, height, cache_fd);
701 _gtk_printer_list_papers (GtkPrinter *printer)
703 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
705 return backend_iface->printer_list_papers (printer);
709 _gtk_printer_get_hard_margins (GtkPrinter *printer,
715 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
717 backend_iface->printer_get_hard_margins (printer, top, bottom, left, right);
720 #define __GTK_PRINTER_C__
721 #include "gtkaliasdef.c"