1 /* GTK - The GIMP Toolkit
2 * gtkprintsettings.c: Print Settings
3 * Copyright (C) 2006, Red Hat, Inc.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
26 #include <glib/gprintf.h>
28 #include "gtkprintsettings.h"
29 #include "gtkprintutils.h"
30 #include "gtktypebuiltins.h"
31 #include "gtkwidget.h"
34 typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass;
36 #define GTK_IS_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PRINT_SETTINGS))
37 #define GTK_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass))
38 #define GTK_PRINT_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass))
40 struct _GtkPrintSettings
42 GObject parent_instance;
47 struct _GtkPrintSettingsClass
49 GObjectClass parent_class;
52 #define KEYFILE_GROUP_NAME "Print Settings"
54 G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
57 gtk_print_settings_finalize (GObject *object)
59 GtkPrintSettings *settings = GTK_PRINT_SETTINGS (object);
61 g_hash_table_destroy (settings->hash);
63 G_OBJECT_CLASS (gtk_print_settings_parent_class)->finalize (object);
67 gtk_print_settings_init (GtkPrintSettings *settings)
69 settings->hash = g_hash_table_new_full (g_str_hash, g_str_equal,
74 gtk_print_settings_class_init (GtkPrintSettingsClass *class)
76 GObjectClass *gobject_class = (GObjectClass *)class;
78 gobject_class->finalize = gtk_print_settings_finalize;
82 * gtk_print_settings_new:
84 * Creates a new #GtkPrintSettings object.
86 * Return value: a new #GtkPrintSettings object
91 gtk_print_settings_new (void)
93 return g_object_new (GTK_TYPE_PRINT_SETTINGS, NULL);
97 copy_hash_entry (gpointer key,
101 GtkPrintSettings *settings = user_data;
103 g_hash_table_insert (settings->hash,
111 * gtk_print_settings_copy:
112 * @other: a #GtkPrintSettings
114 * Copies a #GtkPrintSettings object.
116 * Return value: (transfer full): a newly allocated copy of @other
121 gtk_print_settings_copy (GtkPrintSettings *other)
123 GtkPrintSettings *settings;
128 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (other), NULL);
130 settings = gtk_print_settings_new ();
132 g_hash_table_foreach (other->hash,
140 * gtk_print_settings_get:
141 * @settings: a #GtkPrintSettings
144 * Looks up the string value associated with @key.
146 * Return value: the string value for @key
150 G_CONST_RETURN gchar *
151 gtk_print_settings_get (GtkPrintSettings *settings,
154 return g_hash_table_lookup (settings->hash, key);
158 * gtk_print_settings_set:
159 * @settings: a #GtkPrintSettings
161 * @value: (allow-none): a string value, or %NULL
163 * Associates @value with @key.
168 gtk_print_settings_set (GtkPrintSettings *settings,
173 gtk_print_settings_unset (settings, key);
175 g_hash_table_insert (settings->hash,
181 * gtk_print_settings_unset:
182 * @settings: a #GtkPrintSettings
185 * Removes any value associated with @key.
186 * This has the same effect as setting the value to %NULL.
191 gtk_print_settings_unset (GtkPrintSettings *settings,
194 g_hash_table_remove (settings->hash, key);
198 * gtk_print_settings_has_key:
199 * @settings: a #GtkPrintSettings
202 * Returns %TRUE, if a value is associated with @key.
204 * Return value: %TRUE, if @key has a value
209 gtk_print_settings_has_key (GtkPrintSettings *settings,
212 return gtk_print_settings_get (settings, key) != NULL;
217 * gtk_print_settings_get_bool:
218 * @settings: a #GtkPrintSettings
221 * Returns the boolean represented by the value
222 * that is associated with @key.
224 * The string "true" represents %TRUE, any other
227 * Return value: %TRUE, if @key maps to a true value.
232 gtk_print_settings_get_bool (GtkPrintSettings *settings,
237 val = gtk_print_settings_get (settings, key);
238 if (g_strcmp0 (val, "true") == 0)
245 * gtk_print_settings_get_bool_with_default:
246 * @settings: a #GtkPrintSettings
248 * @default_val: the default value
250 * Returns the boolean represented by the value
251 * that is associated with @key, or @default_val
252 * if the value does not represent a boolean.
254 * The string "true" represents %TRUE, the string
255 * "false" represents %FALSE.
257 * Return value: the boolean value associated with @key
262 gtk_print_settings_get_bool_with_default (GtkPrintSettings *settings,
264 gboolean default_val)
268 val = gtk_print_settings_get (settings, key);
269 if (g_strcmp0 (val, "true") == 0)
272 if (g_strcmp0 (val, "false") == 0)
279 * gtk_print_settings_set_bool:
280 * @settings: a #GtkPrintSettings
284 * Sets @key to a boolean value.
289 gtk_print_settings_set_bool (GtkPrintSettings *settings,
294 gtk_print_settings_set (settings, key, "true");
296 gtk_print_settings_set (settings, key, "false");
300 * gtk_print_settings_get_double_with_default:
301 * @settings: a #GtkPrintSettings
303 * @def: the default value
305 * Returns the floating point number represented by
306 * the value that is associated with @key, or @default_val
307 * if the value does not represent a floating point number.
309 * Floating point numbers are parsed with g_ascii_strtod().
311 * Return value: the floating point number associated with @key
316 gtk_print_settings_get_double_with_default (GtkPrintSettings *settings,
322 val = gtk_print_settings_get (settings, key);
326 return g_ascii_strtod (val, NULL);
330 * gtk_print_settings_get_double:
331 * @settings: a #GtkPrintSettings
334 * Returns the double value associated with @key, or 0.
336 * Return value: the double value of @key
341 gtk_print_settings_get_double (GtkPrintSettings *settings,
344 return gtk_print_settings_get_double_with_default (settings, key, 0.0);
348 * gtk_print_settings_set_double:
349 * @settings: a #GtkPrintSettings
351 * @value: a double value
353 * Sets @key to a double value.
358 gtk_print_settings_set_double (GtkPrintSettings *settings,
362 gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
364 g_ascii_dtostr (buf, G_ASCII_DTOSTR_BUF_SIZE, value);
365 gtk_print_settings_set (settings, key, buf);
369 * gtk_print_settings_get_length:
370 * @settings: a #GtkPrintSettings
372 * @unit: the unit of the return value
374 * Returns the value associated with @key, interpreted
375 * as a length. The returned value is converted to @units.
377 * Return value: the length value of @key, converted to @unit
382 gtk_print_settings_get_length (GtkPrintSettings *settings,
386 gdouble length = gtk_print_settings_get_double (settings, key);
387 return _gtk_print_convert_from_mm (length, unit);
391 * gtk_print_settings_set_length:
392 * @settings: a #GtkPrintSettings
395 * @unit: the unit of @length
397 * Associates a length in units of @unit with @key.
402 gtk_print_settings_set_length (GtkPrintSettings *settings,
407 gtk_print_settings_set_double (settings, key,
408 _gtk_print_convert_to_mm (value, unit));
412 * gtk_print_settings_get_int_with_default:
413 * @settings: a #GtkPrintSettings
415 * @def: the default value
417 * Returns the value of @key, interpreted as
418 * an integer, or the default value.
420 * Return value: the integer value of @key
425 gtk_print_settings_get_int_with_default (GtkPrintSettings *settings,
431 val = gtk_print_settings_get (settings, key);
439 * gtk_print_settings_get_int:
440 * @settings: a #GtkPrintSettings
443 * Returns the integer value of @key, or 0.
445 * Return value: the integer value of @key
450 gtk_print_settings_get_int (GtkPrintSettings *settings,
453 return gtk_print_settings_get_int_with_default (settings, key, 0);
457 * gtk_print_settings_set_int:
458 * @settings: a #GtkPrintSettings
462 * Sets @key to an integer value.
467 gtk_print_settings_set_int (GtkPrintSettings *settings,
472 g_sprintf (buf, "%d", value);
473 gtk_print_settings_set (settings, key, buf);
477 * gtk_print_settings_foreach:
478 * @settings: a #GtkPrintSettings
479 * @func: (scope call): the function to call
480 * @user_data: user data for @func
482 * Calls @func for each key-value pair of @settings.
487 gtk_print_settings_foreach (GtkPrintSettings *settings,
488 GtkPrintSettingsFunc func,
491 g_hash_table_foreach (settings->hash, (GHFunc)func, user_data);
495 * gtk_print_settings_get_printer:
496 * @settings: a #GtkPrintSettings
498 * Convenience function to obtain the value of
499 * %GTK_PRINT_SETTINGS_PRINTER.
501 * Return value: the printer name
505 G_CONST_RETURN gchar *
506 gtk_print_settings_get_printer (GtkPrintSettings *settings)
508 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINTER);
513 * gtk_print_settings_set_printer:
514 * @settings: a #GtkPrintSettings
515 * @printer: the printer name
517 * Convenience function to set %GTK_PRINT_SETTINGS_PRINTER
523 gtk_print_settings_set_printer (GtkPrintSettings *settings,
524 const gchar *printer)
526 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINTER, printer);
530 * gtk_print_settings_get_orientation:
531 * @settings: a #GtkPrintSettings
533 * Get the value of %GTK_PRINT_SETTINGS_ORIENTATION,
534 * converted to a #GtkPageOrientation.
536 * Return value: the orientation
541 gtk_print_settings_get_orientation (GtkPrintSettings *settings)
545 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_ORIENTATION);
547 if (val == NULL || strcmp (val, "portrait") == 0)
548 return GTK_PAGE_ORIENTATION_PORTRAIT;
550 if (strcmp (val, "landscape") == 0)
551 return GTK_PAGE_ORIENTATION_LANDSCAPE;
553 if (strcmp (val, "reverse_portrait") == 0)
554 return GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT;
556 if (strcmp (val, "reverse_landscape") == 0)
557 return GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE;
559 return GTK_PAGE_ORIENTATION_PORTRAIT;
563 * gtk_print_settings_set_orientation:
564 * @settings: a #GtkPrintSettings
565 * @orientation: a page orientation
567 * Sets the value of %GTK_PRINT_SETTINGS_ORIENTATION.
572 gtk_print_settings_set_orientation (GtkPrintSettings *settings,
573 GtkPageOrientation orientation)
579 case GTK_PAGE_ORIENTATION_LANDSCAPE:
583 case GTK_PAGE_ORIENTATION_PORTRAIT:
586 case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE:
587 val = "reverse_landscape";
589 case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT:
590 val = "reverse_portrait";
593 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_ORIENTATION, val);
597 * gtk_print_settings_get_paper_size:
598 * @settings: a #GtkPrintSettings
600 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT,
601 * converted to a #GtkPaperSize.
603 * Return value: the paper size
608 gtk_print_settings_get_paper_size (GtkPrintSettings *settings)
614 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT);
618 if (g_str_has_prefix (val, "custom-"))
620 name = val + strlen ("custom-");
621 w = gtk_print_settings_get_paper_width (settings, GTK_UNIT_MM);
622 h = gtk_print_settings_get_paper_height (settings, GTK_UNIT_MM);
623 return gtk_paper_size_new_custom (name, name, w, h, GTK_UNIT_MM);
626 return gtk_paper_size_new (val);
630 * gtk_print_settings_set_paper_size:
631 * @settings: a #GtkPrintSettings
632 * @paper_size: a paper size
634 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT,
635 * %GTK_PRINT_SETTINGS_PAPER_WIDTH and
636 * %GTK_PRINT_SETTINGS_PAPER_HEIGHT.
641 gtk_print_settings_set_paper_size (GtkPrintSettings *settings,
642 GtkPaperSize *paper_size)
646 if (paper_size == NULL)
648 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, NULL);
649 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, NULL);
650 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_HEIGHT, NULL);
652 else if (gtk_paper_size_is_custom (paper_size))
654 custom_name = g_strdup_printf ("custom-%s",
655 gtk_paper_size_get_name (paper_size));
656 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, custom_name);
657 g_free (custom_name);
658 gtk_print_settings_set_paper_width (settings,
659 gtk_paper_size_get_width (paper_size,
662 gtk_print_settings_set_paper_height (settings,
663 gtk_paper_size_get_height (paper_size,
668 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT,
669 gtk_paper_size_get_name (paper_size));
673 * gtk_print_settings_get_paper_width:
674 * @settings: a #GtkPrintSettings
675 * @unit: the unit for the return value
677 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH,
678 * converted to @unit.
680 * Return value: the paper width, in units of @unit
685 gtk_print_settings_get_paper_width (GtkPrintSettings *settings,
688 return gtk_print_settings_get_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, unit);
692 * gtk_print_settings_set_paper_width:
693 * @settings: a #GtkPrintSettings
694 * @width: the paper width
695 * @unit: the units of @width
697 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH.
702 gtk_print_settings_set_paper_width (GtkPrintSettings *settings,
706 gtk_print_settings_set_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, width, unit);
710 * gtk_print_settings_get_paper_height:
711 * @settings: a #GtkPrintSettings
712 * @unit: the unit for the return value
714 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT,
715 * converted to @unit.
717 * Return value: the paper height, in units of @unit
722 gtk_print_settings_get_paper_height (GtkPrintSettings *settings,
725 return gtk_print_settings_get_length (settings,
726 GTK_PRINT_SETTINGS_PAPER_HEIGHT,
731 * gtk_print_settings_set_paper_height:
732 * @settings: a #GtkPrintSettings
733 * @height: the paper height
734 * @unit: the units of @height
736 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT.
741 gtk_print_settings_set_paper_height (GtkPrintSettings *settings,
745 gtk_print_settings_set_length (settings,
746 GTK_PRINT_SETTINGS_PAPER_HEIGHT,
751 * gtk_print_settings_get_use_color:
752 * @settings: a #GtkPrintSettings
754 * Gets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
756 * Return value: whether to use color
761 gtk_print_settings_get_use_color (GtkPrintSettings *settings)
763 return gtk_print_settings_get_bool_with_default (settings,
764 GTK_PRINT_SETTINGS_USE_COLOR,
769 * gtk_print_settings_set_use_color:
770 * @settings: a #GtkPrintSettings
771 * @use_color: whether to use color
773 * Sets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
778 gtk_print_settings_set_use_color (GtkPrintSettings *settings,
781 gtk_print_settings_set_bool (settings,
782 GTK_PRINT_SETTINGS_USE_COLOR,
787 * gtk_print_settings_get_collate:
788 * @settings: a #GtkPrintSettings
790 * Gets the value of %GTK_PRINT_SETTINGS_COLLATE.
792 * Return value: whether to collate the printed pages
797 gtk_print_settings_get_collate (GtkPrintSettings *settings)
799 return gtk_print_settings_get_bool (settings,
800 GTK_PRINT_SETTINGS_COLLATE);
804 * gtk_print_settings_set_collate:
805 * @settings: a #GtkPrintSettings
806 * @collate: whether to collate the output
808 * Sets the value of %GTK_PRINT_SETTINGS_COLLATE.
813 gtk_print_settings_set_collate (GtkPrintSettings *settings,
816 gtk_print_settings_set_bool (settings,
817 GTK_PRINT_SETTINGS_COLLATE,
822 * gtk_print_settings_get_reverse:
823 * @settings: a #GtkPrintSettings
825 * Gets the value of %GTK_PRINT_SETTINGS_REVERSE.
827 * Return value: whether to reverse the order of the printed pages
832 gtk_print_settings_get_reverse (GtkPrintSettings *settings)
834 return gtk_print_settings_get_bool (settings,
835 GTK_PRINT_SETTINGS_REVERSE);
839 * gtk_print_settings_set_reverse:
840 * @settings: a #GtkPrintSettings
841 * @reverse: whether to reverse the output
843 * Sets the value of %GTK_PRINT_SETTINGS_REVERSE.
848 gtk_print_settings_set_reverse (GtkPrintSettings *settings,
851 gtk_print_settings_set_bool (settings,
852 GTK_PRINT_SETTINGS_REVERSE,
857 * gtk_print_settings_get_duplex:
858 * @settings: a #GtkPrintSettings
860 * Gets the value of %GTK_PRINT_SETTINGS_DUPLEX.
862 * Return value: whether to print the output in duplex.
867 gtk_print_settings_get_duplex (GtkPrintSettings *settings)
871 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DUPLEX);
873 if (val == NULL || (strcmp (val, "simplex") == 0))
874 return GTK_PRINT_DUPLEX_SIMPLEX;
876 if (strcmp (val, "horizontal") == 0)
877 return GTK_PRINT_DUPLEX_HORIZONTAL;
879 if (strcmp (val, "vertical") == 0)
880 return GTK_PRINT_DUPLEX_VERTICAL;
882 return GTK_PRINT_DUPLEX_SIMPLEX;
886 * gtk_print_settings_set_duplex:
887 * @settings: a #GtkPrintSettings
888 * @duplex: a #GtkPrintDuplex value
890 * Sets the value of %GTK_PRINT_SETTINGS_DUPLEX.
895 gtk_print_settings_set_duplex (GtkPrintSettings *settings,
896 GtkPrintDuplex duplex)
903 case GTK_PRINT_DUPLEX_SIMPLEX:
906 case GTK_PRINT_DUPLEX_HORIZONTAL:
909 case GTK_PRINT_DUPLEX_VERTICAL:
914 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DUPLEX, str);
918 * gtk_print_settings_get_quality:
919 * @settings: a #GtkPrintSettings
921 * Gets the value of %GTK_PRINT_SETTINGS_QUALITY.
923 * Return value: the print quality
928 gtk_print_settings_get_quality (GtkPrintSettings *settings)
932 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_QUALITY);
934 if (val == NULL || (strcmp (val, "normal") == 0))
935 return GTK_PRINT_QUALITY_NORMAL;
937 if (strcmp (val, "high") == 0)
938 return GTK_PRINT_QUALITY_HIGH;
940 if (strcmp (val, "low") == 0)
941 return GTK_PRINT_QUALITY_LOW;
943 if (strcmp (val, "draft") == 0)
944 return GTK_PRINT_QUALITY_DRAFT;
946 return GTK_PRINT_QUALITY_NORMAL;
950 * gtk_print_settings_set_quality:
951 * @settings: a #GtkPrintSettings
952 * @quality: a #GtkPrintQuality value
954 * Sets the value of %GTK_PRINT_SETTINGS_QUALITY.
959 gtk_print_settings_set_quality (GtkPrintSettings *settings,
960 GtkPrintQuality quality)
967 case GTK_PRINT_QUALITY_NORMAL:
970 case GTK_PRINT_QUALITY_HIGH:
973 case GTK_PRINT_QUALITY_LOW:
976 case GTK_PRINT_QUALITY_DRAFT:
981 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_QUALITY, str);
985 * gtk_print_settings_get_page_set:
986 * @settings: a #GtkPrintSettings
988 * Gets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
990 * Return value: the set of pages to print
995 gtk_print_settings_get_page_set (GtkPrintSettings *settings)
999 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_SET);
1001 if (val == NULL || (strcmp (val, "all") == 0))
1002 return GTK_PAGE_SET_ALL;
1004 if (strcmp (val, "even") == 0)
1005 return GTK_PAGE_SET_EVEN;
1007 if (strcmp (val, "odd") == 0)
1008 return GTK_PAGE_SET_ODD;
1010 return GTK_PAGE_SET_ALL;
1014 * gtk_print_settings_set_page_set:
1015 * @settings: a #GtkPrintSettings
1016 * @page_set: a #GtkPageSet value
1018 * Sets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
1023 gtk_print_settings_set_page_set (GtkPrintSettings *settings,
1024 GtkPageSet page_set)
1031 case GTK_PAGE_SET_ALL:
1034 case GTK_PAGE_SET_EVEN:
1037 case GTK_PAGE_SET_ODD:
1042 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_SET, str);
1046 * gtk_print_settings_get_number_up_layout:
1047 * @settings: a #GtkPrintSettings
1049 * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
1051 * Return value: layout of page in number-up mode
1056 gtk_print_settings_get_number_up_layout (GtkPrintSettings *settings)
1058 GtkNumberUpLayout layout;
1059 GtkTextDirection text_direction;
1060 GEnumClass *enum_class;
1061 GEnumValue *enum_value;
1064 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM);
1066 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT);
1067 text_direction = gtk_widget_get_default_direction ();
1069 if (text_direction == GTK_TEXT_DIR_LTR)
1070 layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
1072 layout = GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM;
1077 enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
1078 enum_value = g_enum_get_value_by_nick (enum_class, val);
1080 layout = enum_value->value;
1081 g_type_class_unref (enum_class);
1087 * gtk_print_settings_set_number_up_layout:
1088 * @settings: a #GtkPrintSettings
1089 * @number_up_layout: a #GtkNumberUpLayout value
1091 * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
1096 gtk_print_settings_set_number_up_layout (GtkPrintSettings *settings,
1097 GtkNumberUpLayout number_up_layout)
1099 GEnumClass *enum_class;
1100 GEnumValue *enum_value;
1102 g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
1104 enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
1105 enum_value = g_enum_get_value (enum_class, number_up_layout);
1106 g_return_if_fail (enum_value != NULL);
1108 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, enum_value->value_nick);
1109 g_type_class_unref (enum_class);
1113 * gtk_print_settings_get_n_copies:
1114 * @settings: a #GtkPrintSettings
1116 * Gets the value of %GTK_PRINT_SETTINGS_N_COPIES.
1118 * Return value: the number of copies to print
1123 gtk_print_settings_get_n_copies (GtkPrintSettings *settings)
1125 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_N_COPIES, 1);
1129 * gtk_print_settings_set_n_copies:
1130 * @settings: a #GtkPrintSettings
1131 * @num_copies: the number of copies
1133 * Sets the value of %GTK_PRINT_SETTINGS_N_COPIES.
1138 gtk_print_settings_set_n_copies (GtkPrintSettings *settings,
1141 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_N_COPIES,
1146 * gtk_print_settings_get_number_up:
1147 * @settings: a #GtkPrintSettings
1149 * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
1151 * Return value: the number of pages per sheet
1156 gtk_print_settings_get_number_up (GtkPrintSettings *settings)
1158 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUMBER_UP, 1);
1162 * gtk_print_settings_set_number_up:
1163 * @settings: a #GtkPrintSettings
1164 * @number_up: the number of pages per sheet
1166 * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
1171 gtk_print_settings_set_number_up (GtkPrintSettings *settings,
1174 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_NUMBER_UP,
1179 * gtk_print_settings_get_resolution:
1180 * @settings: a #GtkPrintSettings
1182 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION.
1184 * Return value: the resolution in dpi
1189 gtk_print_settings_get_resolution (GtkPrintSettings *settings)
1191 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION, 300);
1195 * gtk_print_settings_set_resolution:
1196 * @settings: a #GtkPrintSettings
1197 * @resolution: the resolution in dpi
1199 * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
1200 * %GTK_PRINT_SETTINGS_RESOLUTION_X and
1201 * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1206 gtk_print_settings_set_resolution (GtkPrintSettings *settings,
1209 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
1211 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
1213 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
1218 * gtk_print_settings_get_resolution_x:
1219 * @settings: a #GtkPrintSettings
1221 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_X.
1223 * Return value: the horizontal resolution in dpi
1228 gtk_print_settings_get_resolution_x (GtkPrintSettings *settings)
1230 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, 300);
1234 * gtk_print_settings_get_resolution_y:
1235 * @settings: a #GtkPrintSettings
1237 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1239 * Return value: the vertical resolution in dpi
1244 gtk_print_settings_get_resolution_y (GtkPrintSettings *settings)
1246 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, 300);
1250 * gtk_print_settings_set_resolution_xy:
1251 * @settings: a #GtkPrintSettings
1252 * @resolution_x: the horizontal resolution in dpi
1253 * @resolution_y: the vertical resolution in dpi
1255 * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
1256 * %GTK_PRINT_SETTINGS_RESOLUTION_X and
1257 * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1262 gtk_print_settings_set_resolution_xy (GtkPrintSettings *settings,
1266 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
1268 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
1270 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
1275 * gtk_print_settings_get_printer_lpi:
1276 * @settings: a #GtkPrintSettings
1278 * Gets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
1280 * Return value: the resolution in lpi (lines per inch)
1285 gtk_print_settings_get_printer_lpi (GtkPrintSettings *settings)
1287 return gtk_print_settings_get_double_with_default (settings, GTK_PRINT_SETTINGS_PRINTER_LPI, 150.0);
1291 * gtk_print_settings_set_printer_lpi:
1292 * @settings: a #GtkPrintSettings
1293 * @lpi: the resolution in lpi (lines per inch)
1295 * Sets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
1300 gtk_print_settings_set_printer_lpi (GtkPrintSettings *settings,
1303 gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI,
1308 * gtk_print_settings_get_scale:
1309 * @settings: a #GtkPrintSettings
1311 * Gets the value of %GTK_PRINT_SETTINGS_SCALE.
1313 * Return value: the scale in percent
1318 gtk_print_settings_get_scale (GtkPrintSettings *settings)
1320 return gtk_print_settings_get_double_with_default (settings,
1321 GTK_PRINT_SETTINGS_SCALE,
1326 * gtk_print_settings_set_scale:
1327 * @settings: a #GtkPrintSettings
1328 * @scale: the scale in percent
1330 * Sets the value of %GTK_PRINT_SETTINGS_SCALE.
1335 gtk_print_settings_set_scale (GtkPrintSettings *settings,
1338 gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_SCALE,
1343 * gtk_print_settings_get_print_pages:
1344 * @settings: a #GtkPrintSettings
1346 * Gets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
1348 * Return value: which pages to print
1353 gtk_print_settings_get_print_pages (GtkPrintSettings *settings)
1357 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINT_PAGES);
1359 if (val == NULL || (strcmp (val, "all") == 0))
1360 return GTK_PRINT_PAGES_ALL;
1362 if (strcmp (val, "selection") == 0)
1363 return GTK_PRINT_PAGES_SELECTION;
1365 if (strcmp (val, "current") == 0)
1366 return GTK_PRINT_PAGES_CURRENT;
1368 if (strcmp (val, "ranges") == 0)
1369 return GTK_PRINT_PAGES_RANGES;
1371 return GTK_PRINT_PAGES_ALL;
1375 * gtk_print_settings_set_print_pages:
1376 * @settings: a #GtkPrintSettings
1377 * @pages: a #GtkPrintPages value
1379 * Sets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
1384 gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
1385 GtkPrintPages pages)
1392 case GTK_PRINT_PAGES_ALL:
1395 case GTK_PRINT_PAGES_CURRENT:
1398 case GTK_PRINT_PAGES_SELECTION:
1401 case GTK_PRINT_PAGES_RANGES:
1406 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINT_PAGES, str);
1410 * gtk_print_settings_get_page_ranges:
1411 * @settings: a #GtkPrintSettings
1412 * @num_ranges: (out): return location for the length of the returned array
1414 * Gets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
1416 * Return value: (array length=num_ranges) (transfer full): an array
1417 * of #GtkPageRange<!-- -->s. Use g_free() to free the array when
1418 * it is no longer needed.
1423 gtk_print_settings_get_page_ranges (GtkPrintSettings *settings,
1428 GtkPageRange *ranges;
1431 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_RANGES);
1439 range_strs = g_strsplit (val, ",", 0);
1441 for (i = 0; range_strs[i] != NULL; i++)
1446 ranges = g_new0 (GtkPageRange, n);
1448 for (i = 0; i < n; i++)
1453 start = (gint)strtol (range_strs[i], &str, 10);
1459 end = (gint)strtol (str, NULL, 10);
1462 ranges[i].start = start;
1463 ranges[i].end = end;
1466 g_strfreev (range_strs);
1473 * gtk_print_settings_set_page_ranges:
1474 * @settings: a #GtkPrintSettings
1475 * @page_ranges: (array length=num_ranges): an array of #GtkPageRange<!-- -->s
1476 * @num_ranges: the length of @page_ranges
1478 * Sets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
1483 gtk_print_settings_set_page_ranges (GtkPrintSettings *settings,
1484 GtkPageRange *page_ranges,
1490 s = g_string_new ("");
1492 for (i = 0; i < num_ranges; i++)
1494 if (page_ranges[i].start == page_ranges[i].end)
1495 g_string_append_printf (s, "%d", page_ranges[i].start);
1497 g_string_append_printf (s, "%d-%d",
1498 page_ranges[i].start,
1499 page_ranges[i].end);
1500 if (i < num_ranges - 1)
1501 g_string_append (s, ",");
1505 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_RANGES,
1508 g_string_free (s, TRUE);
1512 * gtk_print_settings_get_default_source:
1513 * @settings: a #GtkPrintSettings
1515 * Gets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
1517 * Return value: the default source
1521 G_CONST_RETURN gchar *
1522 gtk_print_settings_get_default_source (GtkPrintSettings *settings)
1524 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE);
1528 * gtk_print_settings_set_default_source:
1529 * @settings: a #GtkPrintSettings
1530 * @default_source: the default source
1532 * Sets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
1537 gtk_print_settings_set_default_source (GtkPrintSettings *settings,
1538 const gchar *default_source)
1540 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE, default_source);
1544 * gtk_print_settings_get_media_type:
1545 * @settings: a #GtkPrintSettings
1547 * Gets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
1549 * The set of media types is defined in PWG 5101.1-2002 PWG.
1550 * <!-- FIXME link here -->
1552 * Return value: the media type
1556 G_CONST_RETURN gchar *
1557 gtk_print_settings_get_media_type (GtkPrintSettings *settings)
1559 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE);
1563 * gtk_print_settings_set_media_type:
1564 * @settings: a #GtkPrintSettings
1565 * @media_type: the media type
1567 * Sets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
1569 * The set of media types is defined in PWG 5101.1-2002 PWG.
1570 * <!-- FIXME link here -->
1575 gtk_print_settings_set_media_type (GtkPrintSettings *settings,
1576 const gchar *media_type)
1578 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE, media_type);
1582 * gtk_print_settings_get_dither:
1583 * @settings: a #GtkPrintSettings
1585 * Gets the value of %GTK_PRINT_SETTINGS_DITHER.
1587 * Return value: the dithering that is used
1591 G_CONST_RETURN gchar *
1592 gtk_print_settings_get_dither (GtkPrintSettings *settings)
1594 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DITHER);
1598 * gtk_print_settings_set_dither:
1599 * @settings: a #GtkPrintSettings
1600 * @dither: the dithering that is used
1602 * Sets the value of %GTK_PRINT_SETTINGS_DITHER.
1607 gtk_print_settings_set_dither (GtkPrintSettings *settings,
1608 const gchar *dither)
1610 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DITHER, dither);
1614 * gtk_print_settings_get_finishings:
1615 * @settings: a #GtkPrintSettings
1617 * Gets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
1619 * Return value: the finishings
1624 gtk_print_settings_get_finishings (GtkPrintSettings *settings)
1626 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_FINISHINGS);
1630 * gtk_print_settings_set_finishings:
1631 * @settings: a #GtkPrintSettings
1632 * @finishings: the finishings
1634 * Sets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
1639 gtk_print_settings_set_finishings (GtkPrintSettings *settings,
1640 const gchar *finishings)
1642 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_FINISHINGS, finishings);
1646 * gtk_print_settings_get_output_bin:
1647 * @settings: a #GtkPrintSettings
1649 * Gets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
1651 * Return value: the output bin
1655 G_CONST_RETURN gchar *
1656 gtk_print_settings_get_output_bin (GtkPrintSettings *settings)
1658 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN);
1662 * gtk_print_settings_set_output_bin:
1663 * @settings: a #GtkPrintSettings
1664 * @output_bin: the output bin
1666 * Sets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
1671 gtk_print_settings_set_output_bin (GtkPrintSettings *settings,
1672 const gchar *output_bin)
1674 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN, output_bin);
1678 * gtk_print_settings_load_file:
1679 * @settings: a #GtkPrintSettings
1680 * @file_name: (type filename): the filename to read the settings from
1681 * @error: (allow-none): return location for errors, or %NULL
1683 * Reads the print settings from @file_name. If the file could not be loaded
1684 * then error is set to either a #GFileError or #GKeyFileError.
1685 * See gtk_print_settings_to_file().
1687 * Return value: %TRUE on success
1692 gtk_print_settings_load_file (GtkPrintSettings *settings,
1693 const gchar *file_name,
1696 gboolean retval = FALSE;
1699 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1700 g_return_val_if_fail (file_name != NULL, FALSE);
1702 key_file = g_key_file_new ();
1704 if (g_key_file_load_from_file (key_file, file_name, 0, error) &&
1705 gtk_print_settings_load_key_file (settings, key_file, NULL, error))
1708 g_key_file_free (key_file);
1714 * gtk_print_settings_new_from_file:
1715 * @file_name: (type filename): the filename to read the settings from
1716 * @error: (allow-none): return location for errors, or %NULL
1718 * Reads the print settings from @file_name. Returns a new #GtkPrintSettings
1719 * object with the restored settings, or %NULL if an error occurred. If the
1720 * file could not be loaded then error is set to either a #GFileError or
1721 * #GKeyFileError. See gtk_print_settings_to_file().
1723 * Return value: the restored #GtkPrintSettings
1728 gtk_print_settings_new_from_file (const gchar *file_name,
1731 GtkPrintSettings *settings = gtk_print_settings_new ();
1733 if (!gtk_print_settings_load_file (settings, file_name, error))
1735 g_object_unref (settings);
1743 * gtk_print_settings_load_key_file:
1744 * @settings: a #GtkPrintSettings
1745 * @key_file: the #GKeyFile to retrieve the settings from
1746 * @group_name: (allow-none): the name of the group to use, or %NULL to use the default
1748 * @error: (allow-none): return location for errors, or %NULL
1750 * Reads the print settings from the group @group_name in @key_file. If the
1751 * file could not be loaded then error is set to either a #GFileError or
1754 * Return value: %TRUE on success
1759 gtk_print_settings_load_key_file (GtkPrintSettings *settings,
1761 const gchar *group_name,
1768 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1769 g_return_val_if_fail (key_file != NULL, FALSE);
1772 group_name = KEYFILE_GROUP_NAME;
1774 keys = g_key_file_get_keys (key_file,
1780 g_propagate_error (error, err);
1784 for (i = 0 ; i < n_keys; ++i)
1788 value = g_key_file_get_string (key_file,
1795 gtk_print_settings_set (settings, keys[i], value);
1805 * gtk_print_settings_new_from_key_file:
1806 * @key_file: the #GKeyFile to retrieve the settings from
1807 * @group_name: (allow-none): the name of the group to use, or %NULL to use
1808 * the default "Print Settings"
1809 * @error: (allow-none): return location for errors, or %NULL
1811 * Reads the print settings from the group @group_name in @key_file. Returns a
1812 * new #GtkPrintSettings object with the restored settings, or %NULL if an
1813 * error occurred. If the file could not be loaded then error is set to either
1814 * a #GFileError or #GKeyFileError.
1816 * Return value: the restored #GtkPrintSettings
1821 gtk_print_settings_new_from_key_file (GKeyFile *key_file,
1822 const gchar *group_name,
1825 GtkPrintSettings *settings = gtk_print_settings_new ();
1827 if (!gtk_print_settings_load_key_file (settings, key_file,
1830 g_object_unref (settings);
1838 * gtk_print_settings_to_file:
1839 * @settings: a #GtkPrintSettings
1840 * @file_name: (type filename): the file to save to
1841 * @error: (allow-none): return location for errors, or %NULL
1843 * This function saves the print settings from @settings to @file_name. If the
1844 * file could not be loaded then error is set to either a #GFileError or
1847 * Return value: %TRUE on success
1852 gtk_print_settings_to_file (GtkPrintSettings *settings,
1853 const gchar *file_name,
1857 gboolean retval = FALSE;
1862 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1863 g_return_val_if_fail (file_name != NULL, FALSE);
1865 key_file = g_key_file_new ();
1866 gtk_print_settings_to_key_file (settings, key_file, NULL);
1868 data = g_key_file_to_data (key_file, &len, &err);
1872 retval = g_file_set_contents (file_name, data, len, &err);
1876 g_propagate_error (error, err);
1878 g_key_file_free (key_file);
1886 const gchar *group_name;
1890 add_value_to_key_file (const gchar *key,
1894 g_key_file_set_string (data->key_file, data->group_name, key, value);
1898 * gtk_print_settings_to_key_file:
1899 * @settings: a #GtkPrintSettings
1900 * @key_file: the #GKeyFile to save the print settings to
1901 * @group_name: the group to add the settings to in @key_file, or
1902 * %NULL to use the default "Print Settings"
1904 * This function adds the print settings from @settings to @key_file.
1909 gtk_print_settings_to_key_file (GtkPrintSettings *settings,
1911 const gchar *group_name)
1915 g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
1916 g_return_if_fail (key_file != NULL);
1919 group_name = KEYFILE_GROUP_NAME;
1921 data.key_file = key_file;
1922 data.group_name = group_name;
1924 gtk_print_settings_foreach (settings,
1925 (GtkPrintSettingsFunc) add_value_to_key_file,