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 GtkPrinterPrivate *priv;
190 priv = printer->priv = GTK_PRINTER_GET_PRIVATE (printer);
193 priv->location = NULL;
194 priv->description = NULL;
195 priv->icon_name = NULL;
197 priv->is_active = TRUE;
199 priv->has_details = FALSE;
201 priv->state_message = NULL;
206 gtk_printer_finalize (GObject *object)
208 GtkPrinter *printer = GTK_PRINTER (object);
209 GtkPrinterPrivate *priv = printer->priv;
212 g_free (priv->location);
213 g_free (priv->description);
214 g_free (priv->state_message);
215 g_free (priv->icon_name);
218 g_object_unref (priv->backend);
220 G_OBJECT_CLASS (gtk_printer_parent_class)->finalize (object);
224 gtk_printer_set_property (GObject *object,
229 GtkPrinter *printer = GTK_PRINTER (object);
230 GtkPrinterPrivate *priv = printer->priv;
235 priv->name = g_value_dup_string (value);
239 priv->backend = GTK_PRINT_BACKEND (g_value_dup_object (value));
242 case PROP_IS_VIRTUAL:
243 priv->is_virtual = g_value_get_boolean (value);
247 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
253 gtk_printer_get_property (GObject *object,
258 GtkPrinter *printer = GTK_PRINTER (object);
259 GtkPrinterPrivate *priv = printer->priv;
265 g_value_set_string (value, priv->name);
267 g_value_set_string (value, "");
270 g_value_set_object (value, priv->backend);
272 case PROP_STATE_MESSAGE:
273 if (priv->state_message)
274 g_value_set_string (value, priv->state_message);
276 g_value_set_string (value, "");
280 g_value_set_string (value, priv->location);
282 g_value_set_string (value, "");
286 g_value_set_string (value, priv->icon_name);
288 g_value_set_string (value, "");
291 g_value_set_int (value, priv->job_count);
294 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
301 * @name: the name of the printer
302 * @backend: a #GtkPrintBackend
303 * @virtual_: whether the printer is virtual
305 * Creates a new #GtkPrinter.
307 * Return value: a new #GtkPrinter
312 gtk_printer_new (const gchar *name,
313 GtkPrintBackend *backend,
318 result = g_object_new (GTK_TYPE_PRINTER,
321 "is-virtual", virtual_,
324 return (GtkPrinter *) result;
328 * gtk_printer_get_backend:
329 * @printer: a #GtkPrinter
331 * Returns the backend of the printer.
333 * Return value: the backend of @printer
338 gtk_printer_get_backend (GtkPrinter *printer)
340 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
342 return printer->priv->backend;
346 * gtk_printer_get_name:
347 * @printer: a #GtkPrinter
349 * Returns the name of the printer.
351 * Return value: the name of @printer
355 G_CONST_RETURN gchar *
356 gtk_printer_get_name (GtkPrinter *printer)
358 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
360 return printer->priv->name;
364 * gtk_printer_get_description:
365 * @printer: a #GtkPrinter
367 * Gets the description of the printer.
369 * Return value: the description of @printer
373 G_CONST_RETURN gchar *
374 gtk_printer_get_description (GtkPrinter *printer)
376 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
378 return printer->priv->description;
382 gtk_printer_set_description (GtkPrinter *printer,
383 const gchar *description)
385 GtkPrinterPrivate *priv;
387 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
389 priv = printer->priv;
391 if (safe_strcmp (priv->description, description) == 0)
394 g_free (priv->description);
395 priv->description = g_strdup (description);
401 * gtk_printer_get_state_message:
402 * @printer: a #GtkPrinter
404 * Returns the state message describing the current state
407 * Return value: the state message of @printer
411 G_CONST_RETURN gchar *
412 gtk_printer_get_state_message (GtkPrinter *printer)
414 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
416 return printer->priv->state_message;
420 gtk_printer_set_state_message (GtkPrinter *printer,
421 const gchar *message)
423 GtkPrinterPrivate *priv;
425 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
427 priv = printer->priv;
429 if (safe_strcmp (priv->state_message, message) == 0)
432 g_free (priv->state_message);
433 priv->state_message = g_strdup (message);
434 g_object_notify (G_OBJECT (printer), "state-message");
440 * gtk_printer_get_location:
441 * @printer: a #GtkPrinter
443 * Returns a description of the location of the printer.
445 * Return value: the location of @printer
449 G_CONST_RETURN gchar *
450 gtk_printer_get_location (GtkPrinter *printer)
452 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
454 return printer->priv->location;
458 gtk_printer_set_location (GtkPrinter *printer,
459 const gchar *location)
461 GtkPrinterPrivate *priv;
463 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
465 priv = printer->priv;
467 if (safe_strcmp (priv->location, location) == 0)
470 g_free (priv->location);
471 priv->location = g_strdup (location);
472 g_object_notify (G_OBJECT (printer), "location");
478 * gtk_printer_get_icon_name:
479 * @printer: a #GtkPrinter
481 * Gets the name of the icon to use for the printer.
483 * Return value: the icon name for @printer
487 G_CONST_RETURN gchar *
488 gtk_printer_get_icon_name (GtkPrinter *printer)
490 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
492 return printer->priv->icon_name;
496 gtk_printer_set_icon_name (GtkPrinter *printer,
499 GtkPrinterPrivate *priv;
501 g_return_if_fail (GTK_IS_PRINTER (printer));
503 priv = printer->priv;
505 g_free (priv->icon_name);
506 priv->icon_name = g_strdup (icon);
507 g_object_notify (G_OBJECT (printer), "icon-name");
511 * gtk_printer_get_job_count:
512 * @printer: a #GtkPrinter
514 * Gets the number of jobs currently queued on the printer.
516 * Return value: the number of jobs on @printer
521 gtk_printer_get_job_count (GtkPrinter *printer)
523 g_return_val_if_fail (GTK_IS_PRINTER (printer), 0);
525 return printer->priv->job_count;
529 gtk_printer_set_job_count (GtkPrinter *printer,
532 GtkPrinterPrivate *priv;
534 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
536 priv = printer->priv;
538 if (priv->job_count == count)
541 priv->job_count = count;
543 g_object_notify (G_OBJECT (printer), "job-count");
549 _gtk_printer_has_details (GtkPrinter *printer)
551 return printer->priv->has_details;
555 gtk_printer_set_has_details (GtkPrinter *printer,
558 printer->priv->has_details = val;
562 * gtk_printer_is_active:
563 * @printer: a #GtkPrinter
565 * Returns whether the printer is currently active (i.e.
568 * Return value: %TRUE if @printer is active
573 gtk_printer_is_active (GtkPrinter *printer)
575 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
577 return printer->priv->is_active;
581 gtk_printer_set_is_active (GtkPrinter *printer,
584 g_return_if_fail (GTK_IS_PRINTER (printer));
586 printer->priv->is_active = val;
591 * gtk_printer_is_virtual:
592 * @printer: a #GtkPrinter
594 * Returns whether the printer is virtual (i.e. does not
595 * represent actual printer hardware, but something like
598 * Return value: %TRUE if @printer is virtual
603 gtk_printer_is_virtual (GtkPrinter *printer)
605 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
607 return printer->priv->is_virtual;
611 gtk_printer_is_new (GtkPrinter *printer)
613 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
615 return printer->priv->is_new;
619 gtk_printer_set_is_new (GtkPrinter *printer,
622 g_return_if_fail (GTK_IS_PRINTER (printer));
624 printer->priv->is_new = val;
629 * gtk_printer_is_default:
630 * @printer: a #GtkPrinter
632 * Returns whether the printer is the default printer.
634 * Return value: %TRUE if @printer is the default
639 gtk_printer_is_default (GtkPrinter *printer)
641 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
643 return printer->priv->is_default;
647 gtk_printer_set_is_default (GtkPrinter *printer,
650 g_return_if_fail (GTK_IS_PRINTER (printer));
652 printer->priv->is_default = TRUE;
656 _gtk_printer_request_details (GtkPrinter *printer)
658 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
659 return backend_class->printer_request_details (printer);
662 GtkPrinterOptionSet *
663 _gtk_printer_get_options (GtkPrinter *printer,
664 GtkPrintSettings *settings,
665 GtkPageSetup *page_setup)
667 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
668 return backend_class->printer_get_options (printer, settings, page_setup);
672 _gtk_printer_mark_conflicts (GtkPrinter *printer,
673 GtkPrinterOptionSet *options)
675 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
676 return backend_class->printer_mark_conflicts (printer, options);
680 _gtk_printer_get_settings_from_options (GtkPrinter *printer,
681 GtkPrinterOptionSet *options,
682 GtkPrintSettings *settings)
684 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
685 return backend_class->printer_get_settings_from_options (printer, options, settings);
689 _gtk_printer_prepare_for_print (GtkPrinter *printer,
690 GtkPrintJob *print_job,
691 GtkPrintSettings *settings,
692 GtkPageSetup *page_setup)
694 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
695 return backend_class->printer_prepare_for_print (printer, print_job, settings, page_setup);
699 _gtk_printer_create_cairo_surface (GtkPrinter *printer,
704 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
706 return backend_class->printer_create_cairo_surface (printer, width, height, cache_fd);
710 _gtk_printer_list_papers (GtkPrinter *printer)
712 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
714 return backend_class->printer_list_papers (printer);
718 _gtk_printer_get_hard_margins (GtkPrinter *printer,
724 GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
726 backend_class->printer_get_hard_margins (printer, top, bottom, left, right);
730 gtk_printer_compare (GtkPrinter *a, GtkPrinter *b)
732 const char *name_a, *name_b;
734 g_assert (GTK_IS_PRINTER (a) && GTK_IS_PRINTER (b));
736 name_a = gtk_printer_get_name (a);
737 name_b = gtk_printer_get_name (b);
738 if (name_a == NULL && name_b == NULL)
740 else if (name_a == NULL)
742 else if (name_b == NULL)
745 return g_ascii_strcasecmp (name_a, name_b);
748 #define __GTK_PRINTER_C__
749 #include "gtkaliasdef.c"