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 /* Not ref:ed, backend owns printer. */
56 GtkPrintBackend *backend;
75 static guint signals[LAST_SIGNAL] = { 0 };
77 static void gtk_printer_set_property (GObject *object,
81 static void gtk_printer_get_property (GObject *object,
86 G_DEFINE_TYPE (GtkPrinter, gtk_printer, G_TYPE_OBJECT);
89 safe_strcmp (const char *a, const char *b)
101 gtk_printer_class_init (GtkPrinterClass *class)
103 GObjectClass *object_class;
104 object_class = (GObjectClass *) class;
106 object_class->finalize = gtk_printer_finalize;
108 object_class->set_property = gtk_printer_set_property;
109 object_class->get_property = gtk_printer_get_property;
111 g_type_class_add_private (class, sizeof (GtkPrinterPrivate));
113 g_object_class_install_property (G_OBJECT_CLASS (class),
115 g_param_spec_string ("name",
117 P_("Name of the printer"),
119 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
120 g_object_class_install_property (G_OBJECT_CLASS (class),
122 g_param_spec_object ("backend",
124 P_("Backend for the printer"),
125 GTK_TYPE_PRINT_BACKEND,
126 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
127 g_object_class_install_property (G_OBJECT_CLASS (class),
129 g_param_spec_boolean ("is-virtual",
131 P_("FALSE if this represents a real hardware printer"),
133 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
134 g_object_class_install_property (G_OBJECT_CLASS (class),
136 g_param_spec_string ("state-message",
138 P_("String giving the current state of the printer"),
140 GTK_PARAM_READABLE));
141 g_object_class_install_property (G_OBJECT_CLASS (class),
143 g_param_spec_string ("location",
145 P_("The location of the printer"),
147 GTK_PARAM_READABLE));
148 g_object_class_install_property (G_OBJECT_CLASS (class),
150 g_param_spec_string ("icon-name",
152 P_("The icon name to use for the printer"),
154 GTK_PARAM_READABLE));
155 g_object_class_install_property (G_OBJECT_CLASS (class),
157 g_param_spec_int ("job-count",
159 P_("Number of jobs queued in the printer"),
163 GTK_PARAM_READABLE));
166 * GtkPrinter::details-acquired:
167 * @printer: the #GtkPrinter on which the signal is emitted
168 * @success: %TRUE if the details were successfully acquired
170 * Gets emitted in response to a request for detailed information
171 * about a printer from the print backend. The @success parameter
172 * indicates if the information was actually obtained.
176 signals[DETAILS_ACQUIRED] =
177 g_signal_new ("details-acquired",
178 G_TYPE_FROM_CLASS (class),
180 G_STRUCT_OFFSET (GtkPrinterClass, details_acquired),
182 g_cclosure_marshal_VOID__BOOLEAN,
183 G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
187 gtk_printer_init (GtkPrinter *printer)
189 GtkPrinterPrivate *priv;
191 priv = printer->priv = GTK_PRINTER_GET_PRIVATE (printer);
194 priv->location = NULL;
195 priv->description = NULL;
196 priv->icon_name = NULL;
198 priv->is_active = TRUE;
200 priv->has_details = FALSE;
202 priv->state_message = NULL;
207 gtk_printer_finalize (GObject *object)
209 GtkPrinter *printer = GTK_PRINTER (object);
210 GtkPrinterPrivate *priv = printer->priv;
213 g_free (priv->location);
214 g_free (priv->description);
215 g_free (priv->state_message);
216 g_free (priv->icon_name);
218 G_OBJECT_CLASS (gtk_printer_parent_class)->finalize (object);
222 gtk_printer_set_property (GObject *object,
227 GtkPrinter *printer = GTK_PRINTER (object);
228 GtkPrinterPrivate *priv = printer->priv;
233 priv->name = g_value_dup_string (value);
237 priv->backend = GTK_PRINT_BACKEND (g_value_get_object (value));
240 case PROP_IS_VIRTUAL:
241 priv->is_virtual = g_value_get_boolean (value);
245 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
251 gtk_printer_get_property (GObject *object,
256 GtkPrinter *printer = GTK_PRINTER (object);
257 GtkPrinterPrivate *priv = printer->priv;
263 g_value_set_string (value, priv->name);
265 g_value_set_string (value, "");
268 g_value_set_object (value, priv->backend);
270 case PROP_STATE_MESSAGE:
271 if (priv->state_message)
272 g_value_set_string (value, priv->state_message);
274 g_value_set_string (value, "");
278 g_value_set_string (value, priv->location);
280 g_value_set_string (value, "");
284 g_value_set_string (value, priv->icon_name);
286 g_value_set_string (value, "");
289 g_value_set_int (value, 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 * @virtual: 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 printer->priv->backend = backend;
354 * gtk_printer_get_name:
355 * @printer: a #GtkPrinter
357 * Returns the name of the printer.
359 * Return value: the name of @printer
363 G_CONST_RETURN gchar *
364 gtk_printer_get_name (GtkPrinter *printer)
366 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
368 return printer->priv->name;
372 * gtk_printer_get_description:
373 * @printer: a #GtkPrinter
375 * Gets the description of the printer.
377 * Return value: the description of @printer
381 G_CONST_RETURN gchar *
382 gtk_printer_get_description (GtkPrinter *printer)
384 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
386 return printer->priv->description;
390 gtk_printer_set_description (GtkPrinter *printer,
391 const gchar *description)
393 GtkPrinterPrivate *priv;
395 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
397 priv = printer->priv;
399 if (safe_strcmp (priv->description, description) == 0)
402 g_free (priv->description);
403 priv->description = g_strdup (description);
409 * gtk_printer_get_state_message:
410 * @printer: a #GtkPrinter
412 * Returns the state message describing the current state
415 * Return value: the state message of @printer
419 G_CONST_RETURN gchar *
420 gtk_printer_get_state_message (GtkPrinter *printer)
422 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
424 return printer->priv->state_message;
428 gtk_printer_set_state_message (GtkPrinter *printer,
429 const gchar *message)
431 GtkPrinterPrivate *priv;
433 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
435 priv = printer->priv;
437 if (safe_strcmp (priv->state_message, message) == 0)
440 g_free (priv->state_message);
441 priv->state_message = g_strdup (message);
442 g_object_notify (G_OBJECT (printer), "state-message");
448 * gtk_printer_get_location:
449 * @printer: a #GtkPrinter
451 * Returns a description of the location of the printer.
453 * Return value: the location of @printer
457 G_CONST_RETURN gchar *
458 gtk_printer_get_location (GtkPrinter *printer)
460 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
462 return printer->priv->location;
466 gtk_printer_set_location (GtkPrinter *printer,
467 const gchar *location)
469 GtkPrinterPrivate *priv;
471 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
473 priv = printer->priv;
475 if (safe_strcmp (priv->location, location) == 0)
478 g_free (priv->location);
479 priv->location = g_strdup (location);
480 g_object_notify (G_OBJECT (printer), "location");
486 * gtk_printer_get_icon_name:
487 * @printer: a #GtkPrinter
489 * Gets the name of the icon to use for the printer.
491 * Return value: the icon name for @printer
495 G_CONST_RETURN gchar *
496 gtk_printer_get_icon_name (GtkPrinter *printer)
498 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
500 return printer->priv->icon_name;
504 gtk_printer_set_icon_name (GtkPrinter *printer,
507 GtkPrinterPrivate *priv;
509 g_return_if_fail (GTK_IS_PRINTER (printer));
511 priv = printer->priv;
513 g_free (priv->icon_name);
514 priv->icon_name = g_strdup (icon);
515 g_object_notify (G_OBJECT (printer), "icon-name");
519 * gtk_printer_get_job_count:
520 * @printer: a #GtkPrinter
522 * Gets the number of jobs currently queued on the printer.
524 * Return value: the number of jobs on @printer
529 gtk_printer_get_job_count (GtkPrinter *printer)
531 g_return_val_if_fail (GTK_IS_PRINTER (printer), 0);
533 return printer->priv->job_count;
537 gtk_printer_set_job_count (GtkPrinter *printer,
540 GtkPrinterPrivate *priv;
542 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
544 priv = printer->priv;
546 if (priv->job_count == count)
549 priv->job_count = count;
551 g_object_notify (G_OBJECT (printer), "job-count");
557 _gtk_printer_has_details (GtkPrinter *printer)
559 return printer->priv->has_details;
563 gtk_printer_set_has_details (GtkPrinter *printer,
566 printer->priv->has_details = val;
570 * gtk_printer_is_active:
571 * @printer: a #GtkPrinter
573 * Returns whether the printer is currently active (i.e.
576 * Return value: %TRUE if @printer is active
581 gtk_printer_is_active (GtkPrinter *printer)
583 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
585 return printer->priv->is_active;
589 gtk_printer_set_is_active (GtkPrinter *printer,
592 g_return_if_fail (GTK_IS_PRINTER (printer));
594 printer->priv->is_active = val;
599 * gtk_printer_is_virtual:
600 * @printer: a #GtkPrinter
602 * Returns whether the printer is virtual (i.e. does not
603 * represent actual printer hardware, but something like
606 * Return value: %TRUE if @printer is virtual
611 gtk_printer_is_virtual (GtkPrinter *printer)
613 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
615 return printer->priv->is_virtual;
619 gtk_printer_is_new (GtkPrinter *printer)
621 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
623 return printer->priv->is_new;
627 gtk_printer_set_is_new (GtkPrinter *printer,
630 g_return_if_fail (GTK_IS_PRINTER (printer));
632 printer->priv->is_new = val;
637 * gtk_printer_is_default:
638 * @printer: a #GtkPrinter
640 * Returns whether the printer is the default printer.
642 * Return value: %TRUE if @printer is the default
647 gtk_printer_is_default (GtkPrinter *printer)
649 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
651 return printer->priv->is_default;
655 gtk_printer_set_is_default (GtkPrinter *printer,
658 g_return_if_fail (GTK_IS_PRINTER (printer));
660 printer->priv->is_default = TRUE;
664 _gtk_printer_request_details (GtkPrinter *printer)
666 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
667 return backend_iface->printer_request_details (printer);
670 GtkPrinterOptionSet *
671 _gtk_printer_get_options (GtkPrinter *printer,
672 GtkPrintSettings *settings,
673 GtkPageSetup *page_setup)
675 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
676 return backend_iface->printer_get_options (printer, settings, page_setup);
680 _gtk_printer_mark_conflicts (GtkPrinter *printer,
681 GtkPrinterOptionSet *options)
683 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
684 return backend_iface->printer_mark_conflicts (printer, options);
688 _gtk_printer_get_settings_from_options (GtkPrinter *printer,
689 GtkPrinterOptionSet *options,
690 GtkPrintSettings *settings)
692 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
693 return backend_iface->printer_get_settings_from_options (printer, options, settings);
697 _gtk_printer_prepare_for_print (GtkPrinter *printer,
698 GtkPrintJob *print_job,
699 GtkPrintSettings *settings,
700 GtkPageSetup *page_setup)
702 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
703 return backend_iface->printer_prepare_for_print (printer, print_job, settings, page_setup);
707 _gtk_printer_create_cairo_surface (GtkPrinter *printer,
712 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
714 return backend_iface->printer_create_cairo_surface (printer, width, height, cache_fd);
718 _gtk_printer_list_papers (GtkPrinter *printer)
720 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
722 return backend_iface->printer_list_papers (printer);
726 _gtk_printer_get_hard_margins (GtkPrinter *printer,
732 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
734 backend_iface->printer_get_hard_margins (printer, top, bottom, left, right);
737 #define __GTK_PRINTER_C__
738 #include "gtkaliasdef.c"