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 printer->priv = GTK_PRINTER_GET_PRIVATE (printer);
191 printer->priv->name = NULL;
192 printer->priv->location = NULL;
193 printer->priv->description = NULL;
194 printer->priv->icon_name = NULL;
196 printer->priv->is_active = TRUE;
197 printer->priv->is_new = TRUE;
198 printer->priv->has_details = FALSE;
200 printer->priv->state_message = NULL;
201 printer->priv->job_count = 0;
205 gtk_printer_finalize (GObject *object)
207 g_return_if_fail (object != NULL);
209 GtkPrinter *printer = GTK_PRINTER (object);
211 g_free (printer->priv->name);
212 g_free (printer->priv->location);
213 g_free (printer->priv->description);
214 g_free (printer->priv->state_message);
215 g_free (printer->priv->icon_name);
217 if (G_OBJECT_CLASS (gtk_printer_parent_class)->finalize)
218 G_OBJECT_CLASS (gtk_printer_parent_class)->finalize (object);
222 gtk_printer_set_property (GObject *object,
227 GtkPrinter *printer = GTK_PRINTER (object);
232 printer->priv->name = g_value_dup_string (value);
236 printer->priv->backend = GTK_PRINT_BACKEND (g_value_get_object (value));
239 case PROP_IS_VIRTUAL:
240 printer->priv->is_virtual = g_value_get_boolean (value);
244 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
250 gtk_printer_get_property (GObject *object,
255 GtkPrinter *printer = GTK_PRINTER (object);
260 if (printer->priv->name)
261 g_value_set_string (value, printer->priv->name);
263 g_value_set_string (value, "");
266 g_value_set_object (value, printer->priv->backend);
268 case PROP_STATE_MESSAGE:
269 if (printer->priv->state_message)
270 g_value_set_string (value, printer->priv->state_message);
272 g_value_set_string (value, "");
275 if (printer->priv->location)
276 g_value_set_string (value, printer->priv->location);
278 g_value_set_string (value, "");
281 if (printer->priv->icon_name)
282 g_value_set_string (value, printer->priv->icon_name);
284 g_value_set_string (value, "");
287 g_value_set_int (value, printer->priv->job_count);
290 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
297 * @name: the name of the printer
298 * @backend: a #GtkPrintBackend
299 * @virtual: whether the printer is virtual
301 * Creates a new #GtkPrinter.
303 * Return value: a new #GtkPrinter
308 gtk_printer_new (const gchar *name,
309 GtkPrintBackend *backend,
314 result = g_object_new (GTK_TYPE_PRINTER,
317 "is-virtual", virtual,
320 return (GtkPrinter *) result;
324 * gtk_printer_get_backend:
325 * @printer: a #GtkPrinter
327 * Returns the backend of the printer.
329 * Return value: the backend of @printer
334 gtk_printer_get_backend (GtkPrinter *printer)
336 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
338 return printer->priv->backend;
342 gtk_printer_set_backend (GtkPrinter *printer,
343 GtkPrintBackend *backend)
345 g_return_if_fail (GTK_IS_PRINTER (printer));
346 g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
348 printer->priv->backend = backend;
352 * gtk_printer_get_name:
353 * @printer: a #GtkPrinter
355 * Returns the name of the printer.
357 * Return value: the name of @printer
361 G_CONST_RETURN gchar *
362 gtk_printer_get_name (GtkPrinter *printer)
364 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
366 return printer->priv->name;
370 * gtk_printer_get_description:
371 * @printer: a #GtkPrinter
373 * Gets the description of the printer.
375 * Return value: the description of @printer
379 G_CONST_RETURN gchar *
380 gtk_printer_get_description (GtkPrinter *printer)
382 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
384 return printer->priv->description;
388 gtk_printer_set_description (GtkPrinter *printer,
389 const gchar *description)
391 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
393 if (safe_strcmp (printer->priv->description, description) == 0)
396 g_free (printer->priv->description);
397 printer->priv->description = g_strdup (description);
403 * gtk_printer_get_state_message:
404 * @printer: a #GtkPrinter
406 * Returns the state message describing the current state
409 * Return value: the state message of @printer
413 G_CONST_RETURN gchar *
414 gtk_printer_get_state_message (GtkPrinter *printer)
416 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
418 return printer->priv->state_message;
422 gtk_printer_set_state_message (GtkPrinter *printer,
423 const gchar *message)
425 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
427 if (safe_strcmp (printer->priv->state_message, message) == 0)
430 g_free (printer->priv->state_message);
431 printer->priv->state_message = g_strdup (message);
432 g_object_notify (G_OBJECT (printer), "state-message");
438 * gtk_printer_get_location:
439 * @printer: a #GtkPrinter
441 * Returns a description of the location of the printer.
443 * Return value: the location of @printer
447 G_CONST_RETURN gchar *
448 gtk_printer_get_location (GtkPrinter *printer)
450 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
452 return printer->priv->location;
456 gtk_printer_set_location (GtkPrinter *printer,
457 const gchar *location)
459 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
461 if (safe_strcmp (printer->priv->location, location) == 0)
464 g_free (printer->priv->location);
465 printer->priv->location = g_strdup (location);
466 g_object_notify (G_OBJECT (printer), "location");
472 * gtk_printer_get_icon_name:
473 * @printer: a #GtkPrinter
475 * Gets the name of the icon to use for the printer.
477 * Return value: the icon name for @printer
481 G_CONST_RETURN gchar *
482 gtk_printer_get_icon_name (GtkPrinter *printer)
484 g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
486 return printer->priv->icon_name;
490 gtk_printer_set_icon_name (GtkPrinter *printer,
493 g_return_if_fail (GTK_IS_PRINTER (printer));
495 g_free (printer->priv->icon_name);
496 printer->priv->icon_name = g_strdup (icon);
497 g_object_notify (G_OBJECT (printer), "icon-name");
501 * gtk_printer_get_job_count:
502 * @printer: a #GtkPrinter
504 * Gets the number of jobs currently queued on the printer.
506 * Return value: the number of jobs on @printer
511 gtk_printer_get_job_count (GtkPrinter *printer)
513 g_return_val_if_fail (GTK_IS_PRINTER (printer), 0);
515 return printer->priv->job_count;
519 gtk_printer_set_job_count (GtkPrinter *printer,
522 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
524 if (printer->priv->job_count == count)
527 printer->priv->job_count = count;
529 g_object_notify (G_OBJECT (printer), "job-count");
535 _gtk_printer_has_details (GtkPrinter *printer)
537 return printer->priv->has_details;
541 gtk_printer_set_has_details (GtkPrinter *printer,
544 printer->priv->has_details = val;
548 * gtk_printer_is_active:
549 * @printer: a #GtkPrinter
551 * Returns whether the printer is currently active (i.e.
554 * Return value: %TRUE if @printer is active
559 gtk_printer_is_active (GtkPrinter *printer)
561 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
563 return printer->priv->is_active;
567 gtk_printer_set_is_active (GtkPrinter *printer,
570 g_return_if_fail (GTK_IS_PRINTER (printer));
572 printer->priv->is_active = val;
577 * gtk_printer_is_virtual:
578 * @printer: a #GtkPrinter
580 * Returns whether the printer is virtual (i.e. does not
581 * represent actual printer hardware, but something like
584 * Return value: %TRUE if @printer is virtual
589 gtk_printer_is_virtual (GtkPrinter *printer)
591 g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE);
593 return printer->priv->is_virtual;
597 gtk_printer_is_new (GtkPrinter *printer)
599 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
601 return printer->priv->is_new;
605 gtk_printer_set_is_new (GtkPrinter *printer,
608 g_return_if_fail (GTK_IS_PRINTER (printer));
610 printer->priv->is_new = val;
615 * gtk_printer_is_default:
616 * @printer: a #GtkPrinter
618 * Returns whether the printer is the default printer.
620 * Return value: %TRUE if @printer is the default
625 gtk_printer_is_default (GtkPrinter *printer)
627 g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE);
629 return printer->priv->is_default;
633 gtk_printer_set_is_default (GtkPrinter *printer,
636 g_return_if_fail (GTK_IS_PRINTER (printer));
638 printer->priv->is_default = TRUE;
642 _gtk_printer_request_details (GtkPrinter *printer)
644 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
645 return backend_iface->printer_request_details (printer);
648 GtkPrinterOptionSet *
649 _gtk_printer_get_options (GtkPrinter *printer,
650 GtkPrintSettings *settings,
651 GtkPageSetup *page_setup)
653 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
654 return backend_iface->printer_get_options (printer, settings, page_setup);
658 _gtk_printer_mark_conflicts (GtkPrinter *printer,
659 GtkPrinterOptionSet *options)
661 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
662 return backend_iface->printer_mark_conflicts (printer, options);
666 _gtk_printer_get_settings_from_options (GtkPrinter *printer,
667 GtkPrinterOptionSet *options,
668 GtkPrintSettings *settings)
670 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
671 return backend_iface->printer_get_settings_from_options (printer, options, settings);
675 _gtk_printer_prepare_for_print (GtkPrinter *printer,
676 GtkPrintJob *print_job,
677 GtkPrintSettings *settings,
678 GtkPageSetup *page_setup)
680 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
681 return backend_iface->printer_prepare_for_print (printer, print_job, settings, page_setup);
685 _gtk_printer_create_cairo_surface (GtkPrinter *printer,
690 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
692 return backend_iface->printer_create_cairo_surface (printer, width, height, cache_fd);
696 _gtk_printer_list_papers (GtkPrinter *printer)
698 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
700 return backend_iface->printer_list_papers (printer);
704 _gtk_printer_get_hard_margins (GtkPrinter *printer,
710 GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
712 backend_iface->printer_get_hard_margins (printer, top, bottom, left, right);
715 #define __GTK_PRINTER_C__
716 #include "gtkaliasdef.c"