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, see <http://www.gnu.org/licenses/>.
24 #include <glib/gprintf.h>
26 #include "gtkprintsettings.h"
27 #include "gtkprintutils.h"
28 #include "gtktypebuiltins.h"
29 #include "gtkwidget.h"
33 * SECTION:gtkprintsettings
34 * @Short_description: Stores print settings
35 * @Title: GtkPrintSettings
37 * A GtkPrintSettings object represents the settings of a print dialog in
38 * a system-independent way. The main use for this object is that once
39 * you've printed you can get a settings object that represents the settings
40 * the user chose, and the next time you print you can pass that object in so
41 * that the user doesn't have to re-set all his settings.
43 * Its also possible to enumerate the settings so that you can easily save
44 * the settings for the next time your app runs, or even store them in a
45 * document. The predefined keys try to use shared values as much as possible
46 * so that moving such a document between systems still works.
48 * <!-- TODO example of getting, storing and setting settings -->
50 * Printing support was added in GTK+ 2.10.
54 typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass;
56 #define GTK_IS_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PRINT_SETTINGS))
57 #define GTK_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass))
58 #define GTK_PRINT_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass))
60 struct _GtkPrintSettings
62 GObject parent_instance;
67 struct _GtkPrintSettingsClass
69 GObjectClass parent_class;
72 #define KEYFILE_GROUP_NAME "Print Settings"
74 G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
77 gtk_print_settings_finalize (GObject *object)
79 GtkPrintSettings *settings = GTK_PRINT_SETTINGS (object);
81 g_hash_table_destroy (settings->hash);
83 G_OBJECT_CLASS (gtk_print_settings_parent_class)->finalize (object);
87 gtk_print_settings_init (GtkPrintSettings *settings)
89 settings->hash = g_hash_table_new_full (g_str_hash, g_str_equal,
94 gtk_print_settings_class_init (GtkPrintSettingsClass *class)
96 GObjectClass *gobject_class = (GObjectClass *)class;
98 gobject_class->finalize = gtk_print_settings_finalize;
102 * gtk_print_settings_new:
104 * Creates a new #GtkPrintSettings object.
106 * Return value: a new #GtkPrintSettings object
111 gtk_print_settings_new (void)
113 return g_object_new (GTK_TYPE_PRINT_SETTINGS, NULL);
117 copy_hash_entry (gpointer key,
121 GtkPrintSettings *settings = user_data;
123 g_hash_table_insert (settings->hash,
131 * gtk_print_settings_copy:
132 * @other: a #GtkPrintSettings
134 * Copies a #GtkPrintSettings object.
136 * Return value: (transfer full): a newly allocated copy of @other
141 gtk_print_settings_copy (GtkPrintSettings *other)
143 GtkPrintSettings *settings;
148 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (other), NULL);
150 settings = gtk_print_settings_new ();
152 g_hash_table_foreach (other->hash,
160 * gtk_print_settings_get:
161 * @settings: a #GtkPrintSettings
164 * Looks up the string value associated with @key.
166 * Return value: the string value for @key
171 gtk_print_settings_get (GtkPrintSettings *settings,
174 return g_hash_table_lookup (settings->hash, key);
178 * gtk_print_settings_set:
179 * @settings: a #GtkPrintSettings
181 * @value: (allow-none): a string value, or %NULL
183 * Associates @value with @key.
188 gtk_print_settings_set (GtkPrintSettings *settings,
193 gtk_print_settings_unset (settings, key);
195 g_hash_table_insert (settings->hash,
201 * gtk_print_settings_unset:
202 * @settings: a #GtkPrintSettings
205 * Removes any value associated with @key.
206 * This has the same effect as setting the value to %NULL.
211 gtk_print_settings_unset (GtkPrintSettings *settings,
214 g_hash_table_remove (settings->hash, key);
218 * gtk_print_settings_has_key:
219 * @settings: a #GtkPrintSettings
222 * Returns %TRUE, if a value is associated with @key.
224 * Return value: %TRUE, if @key has a value
229 gtk_print_settings_has_key (GtkPrintSettings *settings,
232 return gtk_print_settings_get (settings, key) != NULL;
237 * gtk_print_settings_get_bool:
238 * @settings: a #GtkPrintSettings
241 * Returns the boolean represented by the value
242 * that is associated with @key.
244 * The string "true" represents %TRUE, any other
247 * Return value: %TRUE, if @key maps to a true value.
252 gtk_print_settings_get_bool (GtkPrintSettings *settings,
257 val = gtk_print_settings_get (settings, key);
258 if (g_strcmp0 (val, "true") == 0)
265 * gtk_print_settings_get_bool_with_default:
266 * @settings: a #GtkPrintSettings
268 * @default_val: the default value
270 * Returns the boolean represented by the value
271 * that is associated with @key, or @default_val
272 * if the value does not represent a boolean.
274 * The string "true" represents %TRUE, the string
275 * "false" represents %FALSE.
277 * Return value: the boolean value associated with @key
282 gtk_print_settings_get_bool_with_default (GtkPrintSettings *settings,
284 gboolean default_val)
288 val = gtk_print_settings_get (settings, key);
289 if (g_strcmp0 (val, "true") == 0)
292 if (g_strcmp0 (val, "false") == 0)
299 * gtk_print_settings_set_bool:
300 * @settings: a #GtkPrintSettings
304 * Sets @key to a boolean value.
309 gtk_print_settings_set_bool (GtkPrintSettings *settings,
314 gtk_print_settings_set (settings, key, "true");
316 gtk_print_settings_set (settings, key, "false");
320 * gtk_print_settings_get_double_with_default:
321 * @settings: a #GtkPrintSettings
323 * @def: the default value
325 * Returns the floating point number represented by
326 * the value that is associated with @key, or @default_val
327 * if the value does not represent a floating point number.
329 * Floating point numbers are parsed with g_ascii_strtod().
331 * Return value: the floating point number associated with @key
336 gtk_print_settings_get_double_with_default (GtkPrintSettings *settings,
342 val = gtk_print_settings_get (settings, key);
346 return g_ascii_strtod (val, NULL);
350 * gtk_print_settings_get_double:
351 * @settings: a #GtkPrintSettings
354 * Returns the double value associated with @key, or 0.
356 * Return value: the double value of @key
361 gtk_print_settings_get_double (GtkPrintSettings *settings,
364 return gtk_print_settings_get_double_with_default (settings, key, 0.0);
368 * gtk_print_settings_set_double:
369 * @settings: a #GtkPrintSettings
371 * @value: a double value
373 * Sets @key to a double value.
378 gtk_print_settings_set_double (GtkPrintSettings *settings,
382 gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
384 g_ascii_dtostr (buf, G_ASCII_DTOSTR_BUF_SIZE, value);
385 gtk_print_settings_set (settings, key, buf);
389 * gtk_print_settings_get_length:
390 * @settings: a #GtkPrintSettings
392 * @unit: the unit of the return value
394 * Returns the value associated with @key, interpreted
395 * as a length. The returned value is converted to @units.
397 * Return value: the length value of @key, converted to @unit
402 gtk_print_settings_get_length (GtkPrintSettings *settings,
406 gdouble length = gtk_print_settings_get_double (settings, key);
407 return _gtk_print_convert_from_mm (length, unit);
411 * gtk_print_settings_set_length:
412 * @settings: a #GtkPrintSettings
415 * @unit: the unit of @length
417 * Associates a length in units of @unit with @key.
422 gtk_print_settings_set_length (GtkPrintSettings *settings,
427 gtk_print_settings_set_double (settings, key,
428 _gtk_print_convert_to_mm (value, unit));
432 * gtk_print_settings_get_int_with_default:
433 * @settings: a #GtkPrintSettings
435 * @def: the default value
437 * Returns the value of @key, interpreted as
438 * an integer, or the default value.
440 * Return value: the integer value of @key
445 gtk_print_settings_get_int_with_default (GtkPrintSettings *settings,
451 val = gtk_print_settings_get (settings, key);
459 * gtk_print_settings_get_int:
460 * @settings: a #GtkPrintSettings
463 * Returns the integer value of @key, or 0.
465 * Return value: the integer value of @key
470 gtk_print_settings_get_int (GtkPrintSettings *settings,
473 return gtk_print_settings_get_int_with_default (settings, key, 0);
477 * gtk_print_settings_set_int:
478 * @settings: a #GtkPrintSettings
482 * Sets @key to an integer value.
487 gtk_print_settings_set_int (GtkPrintSettings *settings,
492 g_sprintf (buf, "%d", value);
493 gtk_print_settings_set (settings, key, buf);
497 * gtk_print_settings_foreach:
498 * @settings: a #GtkPrintSettings
499 * @func: (scope call): the function to call
500 * @user_data: user data for @func
502 * Calls @func for each key-value pair of @settings.
507 gtk_print_settings_foreach (GtkPrintSettings *settings,
508 GtkPrintSettingsFunc func,
511 g_hash_table_foreach (settings->hash, (GHFunc)func, user_data);
515 * gtk_print_settings_get_printer:
516 * @settings: a #GtkPrintSettings
518 * Convenience function to obtain the value of
519 * %GTK_PRINT_SETTINGS_PRINTER.
521 * Return value: the printer name
526 gtk_print_settings_get_printer (GtkPrintSettings *settings)
528 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINTER);
533 * gtk_print_settings_set_printer:
534 * @settings: a #GtkPrintSettings
535 * @printer: the printer name
537 * Convenience function to set %GTK_PRINT_SETTINGS_PRINTER
543 gtk_print_settings_set_printer (GtkPrintSettings *settings,
544 const gchar *printer)
546 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINTER, printer);
550 * gtk_print_settings_get_orientation:
551 * @settings: a #GtkPrintSettings
553 * Get the value of %GTK_PRINT_SETTINGS_ORIENTATION,
554 * converted to a #GtkPageOrientation.
556 * Return value: the orientation
561 gtk_print_settings_get_orientation (GtkPrintSettings *settings)
565 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_ORIENTATION);
567 if (val == NULL || strcmp (val, "portrait") == 0)
568 return GTK_PAGE_ORIENTATION_PORTRAIT;
570 if (strcmp (val, "landscape") == 0)
571 return GTK_PAGE_ORIENTATION_LANDSCAPE;
573 if (strcmp (val, "reverse_portrait") == 0)
574 return GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT;
576 if (strcmp (val, "reverse_landscape") == 0)
577 return GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE;
579 return GTK_PAGE_ORIENTATION_PORTRAIT;
583 * gtk_print_settings_set_orientation:
584 * @settings: a #GtkPrintSettings
585 * @orientation: a page orientation
587 * Sets the value of %GTK_PRINT_SETTINGS_ORIENTATION.
592 gtk_print_settings_set_orientation (GtkPrintSettings *settings,
593 GtkPageOrientation orientation)
599 case GTK_PAGE_ORIENTATION_LANDSCAPE:
603 case GTK_PAGE_ORIENTATION_PORTRAIT:
606 case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE:
607 val = "reverse_landscape";
609 case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT:
610 val = "reverse_portrait";
613 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_ORIENTATION, val);
617 * gtk_print_settings_get_paper_size:
618 * @settings: a #GtkPrintSettings
620 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT,
621 * converted to a #GtkPaperSize.
623 * Return value: the paper size
628 gtk_print_settings_get_paper_size (GtkPrintSettings *settings)
634 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT);
638 if (g_str_has_prefix (val, "custom-"))
640 name = val + strlen ("custom-");
641 w = gtk_print_settings_get_paper_width (settings, GTK_UNIT_MM);
642 h = gtk_print_settings_get_paper_height (settings, GTK_UNIT_MM);
643 return gtk_paper_size_new_custom (name, name, w, h, GTK_UNIT_MM);
646 return gtk_paper_size_new (val);
650 * gtk_print_settings_set_paper_size:
651 * @settings: a #GtkPrintSettings
652 * @paper_size: a paper size
654 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT,
655 * %GTK_PRINT_SETTINGS_PAPER_WIDTH and
656 * %GTK_PRINT_SETTINGS_PAPER_HEIGHT.
661 gtk_print_settings_set_paper_size (GtkPrintSettings *settings,
662 GtkPaperSize *paper_size)
666 if (paper_size == NULL)
668 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, NULL);
669 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, NULL);
670 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_HEIGHT, NULL);
672 else if (gtk_paper_size_is_custom (paper_size))
674 custom_name = g_strdup_printf ("custom-%s",
675 gtk_paper_size_get_name (paper_size));
676 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, custom_name);
677 g_free (custom_name);
678 gtk_print_settings_set_paper_width (settings,
679 gtk_paper_size_get_width (paper_size,
682 gtk_print_settings_set_paper_height (settings,
683 gtk_paper_size_get_height (paper_size,
688 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT,
689 gtk_paper_size_get_name (paper_size));
693 * gtk_print_settings_get_paper_width:
694 * @settings: a #GtkPrintSettings
695 * @unit: the unit for the return value
697 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH,
698 * converted to @unit.
700 * Return value: the paper width, in units of @unit
705 gtk_print_settings_get_paper_width (GtkPrintSettings *settings,
708 return gtk_print_settings_get_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, unit);
712 * gtk_print_settings_set_paper_width:
713 * @settings: a #GtkPrintSettings
714 * @width: the paper width
715 * @unit: the units of @width
717 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH.
722 gtk_print_settings_set_paper_width (GtkPrintSettings *settings,
726 gtk_print_settings_set_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, width, unit);
730 * gtk_print_settings_get_paper_height:
731 * @settings: a #GtkPrintSettings
732 * @unit: the unit for the return value
734 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT,
735 * converted to @unit.
737 * Return value: the paper height, in units of @unit
742 gtk_print_settings_get_paper_height (GtkPrintSettings *settings,
745 return gtk_print_settings_get_length (settings,
746 GTK_PRINT_SETTINGS_PAPER_HEIGHT,
751 * gtk_print_settings_set_paper_height:
752 * @settings: a #GtkPrintSettings
753 * @height: the paper height
754 * @unit: the units of @height
756 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT.
761 gtk_print_settings_set_paper_height (GtkPrintSettings *settings,
765 gtk_print_settings_set_length (settings,
766 GTK_PRINT_SETTINGS_PAPER_HEIGHT,
771 * gtk_print_settings_get_use_color:
772 * @settings: a #GtkPrintSettings
774 * Gets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
776 * Return value: whether to use color
781 gtk_print_settings_get_use_color (GtkPrintSettings *settings)
783 return gtk_print_settings_get_bool_with_default (settings,
784 GTK_PRINT_SETTINGS_USE_COLOR,
789 * gtk_print_settings_set_use_color:
790 * @settings: a #GtkPrintSettings
791 * @use_color: whether to use color
793 * Sets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
798 gtk_print_settings_set_use_color (GtkPrintSettings *settings,
801 gtk_print_settings_set_bool (settings,
802 GTK_PRINT_SETTINGS_USE_COLOR,
807 * gtk_print_settings_get_collate:
808 * @settings: a #GtkPrintSettings
810 * Gets the value of %GTK_PRINT_SETTINGS_COLLATE.
812 * Return value: whether to collate the printed pages
817 gtk_print_settings_get_collate (GtkPrintSettings *settings)
819 return gtk_print_settings_get_bool_with_default (settings,
820 GTK_PRINT_SETTINGS_COLLATE,
825 * gtk_print_settings_set_collate:
826 * @settings: a #GtkPrintSettings
827 * @collate: whether to collate the output
829 * Sets the value of %GTK_PRINT_SETTINGS_COLLATE.
834 gtk_print_settings_set_collate (GtkPrintSettings *settings,
837 gtk_print_settings_set_bool (settings,
838 GTK_PRINT_SETTINGS_COLLATE,
843 * gtk_print_settings_get_reverse:
844 * @settings: a #GtkPrintSettings
846 * Gets the value of %GTK_PRINT_SETTINGS_REVERSE.
848 * Return value: whether to reverse the order of the printed pages
853 gtk_print_settings_get_reverse (GtkPrintSettings *settings)
855 return gtk_print_settings_get_bool (settings,
856 GTK_PRINT_SETTINGS_REVERSE);
860 * gtk_print_settings_set_reverse:
861 * @settings: a #GtkPrintSettings
862 * @reverse: whether to reverse the output
864 * Sets the value of %GTK_PRINT_SETTINGS_REVERSE.
869 gtk_print_settings_set_reverse (GtkPrintSettings *settings,
872 gtk_print_settings_set_bool (settings,
873 GTK_PRINT_SETTINGS_REVERSE,
878 * gtk_print_settings_get_duplex:
879 * @settings: a #GtkPrintSettings
881 * Gets the value of %GTK_PRINT_SETTINGS_DUPLEX.
883 * Return value: whether to print the output in duplex.
888 gtk_print_settings_get_duplex (GtkPrintSettings *settings)
892 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DUPLEX);
894 if (val == NULL || (strcmp (val, "simplex") == 0))
895 return GTK_PRINT_DUPLEX_SIMPLEX;
897 if (strcmp (val, "horizontal") == 0)
898 return GTK_PRINT_DUPLEX_HORIZONTAL;
900 if (strcmp (val, "vertical") == 0)
901 return GTK_PRINT_DUPLEX_VERTICAL;
903 return GTK_PRINT_DUPLEX_SIMPLEX;
907 * gtk_print_settings_set_duplex:
908 * @settings: a #GtkPrintSettings
909 * @duplex: a #GtkPrintDuplex value
911 * Sets the value of %GTK_PRINT_SETTINGS_DUPLEX.
916 gtk_print_settings_set_duplex (GtkPrintSettings *settings,
917 GtkPrintDuplex duplex)
924 case GTK_PRINT_DUPLEX_SIMPLEX:
927 case GTK_PRINT_DUPLEX_HORIZONTAL:
930 case GTK_PRINT_DUPLEX_VERTICAL:
935 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DUPLEX, str);
939 * gtk_print_settings_get_quality:
940 * @settings: a #GtkPrintSettings
942 * Gets the value of %GTK_PRINT_SETTINGS_QUALITY.
944 * Return value: the print quality
949 gtk_print_settings_get_quality (GtkPrintSettings *settings)
953 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_QUALITY);
955 if (val == NULL || (strcmp (val, "normal") == 0))
956 return GTK_PRINT_QUALITY_NORMAL;
958 if (strcmp (val, "high") == 0)
959 return GTK_PRINT_QUALITY_HIGH;
961 if (strcmp (val, "low") == 0)
962 return GTK_PRINT_QUALITY_LOW;
964 if (strcmp (val, "draft") == 0)
965 return GTK_PRINT_QUALITY_DRAFT;
967 return GTK_PRINT_QUALITY_NORMAL;
971 * gtk_print_settings_set_quality:
972 * @settings: a #GtkPrintSettings
973 * @quality: a #GtkPrintQuality value
975 * Sets the value of %GTK_PRINT_SETTINGS_QUALITY.
980 gtk_print_settings_set_quality (GtkPrintSettings *settings,
981 GtkPrintQuality quality)
988 case GTK_PRINT_QUALITY_NORMAL:
991 case GTK_PRINT_QUALITY_HIGH:
994 case GTK_PRINT_QUALITY_LOW:
997 case GTK_PRINT_QUALITY_DRAFT:
1002 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_QUALITY, str);
1006 * gtk_print_settings_get_page_set:
1007 * @settings: a #GtkPrintSettings
1009 * Gets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
1011 * Return value: the set of pages to print
1016 gtk_print_settings_get_page_set (GtkPrintSettings *settings)
1020 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_SET);
1022 if (val == NULL || (strcmp (val, "all") == 0))
1023 return GTK_PAGE_SET_ALL;
1025 if (strcmp (val, "even") == 0)
1026 return GTK_PAGE_SET_EVEN;
1028 if (strcmp (val, "odd") == 0)
1029 return GTK_PAGE_SET_ODD;
1031 return GTK_PAGE_SET_ALL;
1035 * gtk_print_settings_set_page_set:
1036 * @settings: a #GtkPrintSettings
1037 * @page_set: a #GtkPageSet value
1039 * Sets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
1044 gtk_print_settings_set_page_set (GtkPrintSettings *settings,
1045 GtkPageSet page_set)
1052 case GTK_PAGE_SET_ALL:
1055 case GTK_PAGE_SET_EVEN:
1058 case GTK_PAGE_SET_ODD:
1063 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_SET, str);
1067 * gtk_print_settings_get_number_up_layout:
1068 * @settings: a #GtkPrintSettings
1070 * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
1072 * Return value: layout of page in number-up mode
1077 gtk_print_settings_get_number_up_layout (GtkPrintSettings *settings)
1079 GtkNumberUpLayout layout;
1080 GtkTextDirection text_direction;
1081 GEnumClass *enum_class;
1082 GEnumValue *enum_value;
1085 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM);
1087 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT);
1088 text_direction = gtk_widget_get_default_direction ();
1090 if (text_direction == GTK_TEXT_DIR_LTR)
1091 layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
1093 layout = GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM;
1098 enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
1099 enum_value = g_enum_get_value_by_nick (enum_class, val);
1101 layout = enum_value->value;
1102 g_type_class_unref (enum_class);
1108 * gtk_print_settings_set_number_up_layout:
1109 * @settings: a #GtkPrintSettings
1110 * @number_up_layout: a #GtkNumberUpLayout value
1112 * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
1117 gtk_print_settings_set_number_up_layout (GtkPrintSettings *settings,
1118 GtkNumberUpLayout number_up_layout)
1120 GEnumClass *enum_class;
1121 GEnumValue *enum_value;
1123 g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
1125 enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
1126 enum_value = g_enum_get_value (enum_class, number_up_layout);
1127 g_return_if_fail (enum_value != NULL);
1129 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, enum_value->value_nick);
1130 g_type_class_unref (enum_class);
1134 * gtk_print_settings_get_n_copies:
1135 * @settings: a #GtkPrintSettings
1137 * Gets the value of %GTK_PRINT_SETTINGS_N_COPIES.
1139 * Return value: the number of copies to print
1144 gtk_print_settings_get_n_copies (GtkPrintSettings *settings)
1146 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_N_COPIES, 1);
1150 * gtk_print_settings_set_n_copies:
1151 * @settings: a #GtkPrintSettings
1152 * @num_copies: the number of copies
1154 * Sets the value of %GTK_PRINT_SETTINGS_N_COPIES.
1159 gtk_print_settings_set_n_copies (GtkPrintSettings *settings,
1162 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_N_COPIES,
1167 * gtk_print_settings_get_number_up:
1168 * @settings: a #GtkPrintSettings
1170 * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
1172 * Return value: the number of pages per sheet
1177 gtk_print_settings_get_number_up (GtkPrintSettings *settings)
1179 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUMBER_UP, 1);
1183 * gtk_print_settings_set_number_up:
1184 * @settings: a #GtkPrintSettings
1185 * @number_up: the number of pages per sheet
1187 * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
1192 gtk_print_settings_set_number_up (GtkPrintSettings *settings,
1195 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_NUMBER_UP,
1200 * gtk_print_settings_get_resolution:
1201 * @settings: a #GtkPrintSettings
1203 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION.
1205 * Return value: the resolution in dpi
1210 gtk_print_settings_get_resolution (GtkPrintSettings *settings)
1212 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION, 300);
1216 * gtk_print_settings_set_resolution:
1217 * @settings: a #GtkPrintSettings
1218 * @resolution: the resolution in dpi
1220 * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
1221 * %GTK_PRINT_SETTINGS_RESOLUTION_X and
1222 * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1227 gtk_print_settings_set_resolution (GtkPrintSettings *settings,
1230 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
1232 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
1234 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
1239 * gtk_print_settings_get_resolution_x:
1240 * @settings: a #GtkPrintSettings
1242 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_X.
1244 * Return value: the horizontal resolution in dpi
1249 gtk_print_settings_get_resolution_x (GtkPrintSettings *settings)
1251 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, 300);
1255 * gtk_print_settings_get_resolution_y:
1256 * @settings: a #GtkPrintSettings
1258 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1260 * Return value: the vertical resolution in dpi
1265 gtk_print_settings_get_resolution_y (GtkPrintSettings *settings)
1267 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, 300);
1271 * gtk_print_settings_set_resolution_xy:
1272 * @settings: a #GtkPrintSettings
1273 * @resolution_x: the horizontal resolution in dpi
1274 * @resolution_y: the vertical resolution in dpi
1276 * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
1277 * %GTK_PRINT_SETTINGS_RESOLUTION_X and
1278 * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1283 gtk_print_settings_set_resolution_xy (GtkPrintSettings *settings,
1287 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
1289 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
1291 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
1296 * gtk_print_settings_get_printer_lpi:
1297 * @settings: a #GtkPrintSettings
1299 * Gets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
1301 * Return value: the resolution in lpi (lines per inch)
1306 gtk_print_settings_get_printer_lpi (GtkPrintSettings *settings)
1308 return gtk_print_settings_get_double_with_default (settings, GTK_PRINT_SETTINGS_PRINTER_LPI, 150.0);
1312 * gtk_print_settings_set_printer_lpi:
1313 * @settings: a #GtkPrintSettings
1314 * @lpi: the resolution in lpi (lines per inch)
1316 * Sets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
1321 gtk_print_settings_set_printer_lpi (GtkPrintSettings *settings,
1324 gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI,
1329 * gtk_print_settings_get_scale:
1330 * @settings: a #GtkPrintSettings
1332 * Gets the value of %GTK_PRINT_SETTINGS_SCALE.
1334 * Return value: the scale in percent
1339 gtk_print_settings_get_scale (GtkPrintSettings *settings)
1341 return gtk_print_settings_get_double_with_default (settings,
1342 GTK_PRINT_SETTINGS_SCALE,
1347 * gtk_print_settings_set_scale:
1348 * @settings: a #GtkPrintSettings
1349 * @scale: the scale in percent
1351 * Sets the value of %GTK_PRINT_SETTINGS_SCALE.
1356 gtk_print_settings_set_scale (GtkPrintSettings *settings,
1359 gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_SCALE,
1364 * gtk_print_settings_get_print_pages:
1365 * @settings: a #GtkPrintSettings
1367 * Gets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
1369 * Return value: which pages to print
1374 gtk_print_settings_get_print_pages (GtkPrintSettings *settings)
1378 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINT_PAGES);
1380 if (val == NULL || (strcmp (val, "all") == 0))
1381 return GTK_PRINT_PAGES_ALL;
1383 if (strcmp (val, "selection") == 0)
1384 return GTK_PRINT_PAGES_SELECTION;
1386 if (strcmp (val, "current") == 0)
1387 return GTK_PRINT_PAGES_CURRENT;
1389 if (strcmp (val, "ranges") == 0)
1390 return GTK_PRINT_PAGES_RANGES;
1392 return GTK_PRINT_PAGES_ALL;
1396 * gtk_print_settings_set_print_pages:
1397 * @settings: a #GtkPrintSettings
1398 * @pages: a #GtkPrintPages value
1400 * Sets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
1405 gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
1406 GtkPrintPages pages)
1413 case GTK_PRINT_PAGES_ALL:
1416 case GTK_PRINT_PAGES_CURRENT:
1419 case GTK_PRINT_PAGES_SELECTION:
1422 case GTK_PRINT_PAGES_RANGES:
1427 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINT_PAGES, str);
1431 * gtk_print_settings_get_page_ranges:
1432 * @settings: a #GtkPrintSettings
1433 * @num_ranges: (out): return location for the length of the returned array
1435 * Gets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
1437 * Return value: (array length=num_ranges) (transfer full): an array
1438 * of #GtkPageRange<!-- -->s. Use g_free() to free the array when
1439 * it is no longer needed.
1444 gtk_print_settings_get_page_ranges (GtkPrintSettings *settings,
1449 GtkPageRange *ranges;
1452 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_RANGES);
1460 range_strs = g_strsplit (val, ",", 0);
1462 for (i = 0; range_strs[i] != NULL; i++)
1467 ranges = g_new0 (GtkPageRange, n);
1469 for (i = 0; i < n; i++)
1474 start = (gint)strtol (range_strs[i], &str, 10);
1480 end = (gint)strtol (str, NULL, 10);
1483 ranges[i].start = start;
1484 ranges[i].end = end;
1487 g_strfreev (range_strs);
1494 * gtk_print_settings_set_page_ranges:
1495 * @settings: a #GtkPrintSettings
1496 * @page_ranges: (array length=num_ranges): an array of #GtkPageRange<!-- -->s
1497 * @num_ranges: the length of @page_ranges
1499 * Sets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
1504 gtk_print_settings_set_page_ranges (GtkPrintSettings *settings,
1505 GtkPageRange *page_ranges,
1511 s = g_string_new ("");
1513 for (i = 0; i < num_ranges; i++)
1515 if (page_ranges[i].start == page_ranges[i].end)
1516 g_string_append_printf (s, "%d", page_ranges[i].start);
1518 g_string_append_printf (s, "%d-%d",
1519 page_ranges[i].start,
1520 page_ranges[i].end);
1521 if (i < num_ranges - 1)
1522 g_string_append (s, ",");
1526 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_RANGES,
1529 g_string_free (s, TRUE);
1533 * gtk_print_settings_get_default_source:
1534 * @settings: a #GtkPrintSettings
1536 * Gets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
1538 * Return value: the default source
1543 gtk_print_settings_get_default_source (GtkPrintSettings *settings)
1545 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE);
1549 * gtk_print_settings_set_default_source:
1550 * @settings: a #GtkPrintSettings
1551 * @default_source: the default source
1553 * Sets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
1558 gtk_print_settings_set_default_source (GtkPrintSettings *settings,
1559 const gchar *default_source)
1561 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE, default_source);
1565 * gtk_print_settings_get_media_type:
1566 * @settings: a #GtkPrintSettings
1568 * Gets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
1570 * The set of media types is defined in PWG 5101.1-2002 PWG.
1571 * <!-- FIXME link here -->
1573 * Return value: the media type
1578 gtk_print_settings_get_media_type (GtkPrintSettings *settings)
1580 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE);
1584 * gtk_print_settings_set_media_type:
1585 * @settings: a #GtkPrintSettings
1586 * @media_type: the media type
1588 * Sets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
1590 * The set of media types is defined in PWG 5101.1-2002 PWG.
1591 * <!-- FIXME link here -->
1596 gtk_print_settings_set_media_type (GtkPrintSettings *settings,
1597 const gchar *media_type)
1599 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE, media_type);
1603 * gtk_print_settings_get_dither:
1604 * @settings: a #GtkPrintSettings
1606 * Gets the value of %GTK_PRINT_SETTINGS_DITHER.
1608 * Return value: the dithering that is used
1613 gtk_print_settings_get_dither (GtkPrintSettings *settings)
1615 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DITHER);
1619 * gtk_print_settings_set_dither:
1620 * @settings: a #GtkPrintSettings
1621 * @dither: the dithering that is used
1623 * Sets the value of %GTK_PRINT_SETTINGS_DITHER.
1628 gtk_print_settings_set_dither (GtkPrintSettings *settings,
1629 const gchar *dither)
1631 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DITHER, dither);
1635 * gtk_print_settings_get_finishings:
1636 * @settings: a #GtkPrintSettings
1638 * Gets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
1640 * Return value: the finishings
1645 gtk_print_settings_get_finishings (GtkPrintSettings *settings)
1647 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_FINISHINGS);
1651 * gtk_print_settings_set_finishings:
1652 * @settings: a #GtkPrintSettings
1653 * @finishings: the finishings
1655 * Sets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
1660 gtk_print_settings_set_finishings (GtkPrintSettings *settings,
1661 const gchar *finishings)
1663 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_FINISHINGS, finishings);
1667 * gtk_print_settings_get_output_bin:
1668 * @settings: a #GtkPrintSettings
1670 * Gets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
1672 * Return value: the output bin
1677 gtk_print_settings_get_output_bin (GtkPrintSettings *settings)
1679 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN);
1683 * gtk_print_settings_set_output_bin:
1684 * @settings: a #GtkPrintSettings
1685 * @output_bin: the output bin
1687 * Sets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
1692 gtk_print_settings_set_output_bin (GtkPrintSettings *settings,
1693 const gchar *output_bin)
1695 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN, output_bin);
1699 * gtk_print_settings_load_file:
1700 * @settings: a #GtkPrintSettings
1701 * @file_name: (type filename): the filename to read the settings from
1702 * @error: (allow-none): return location for errors, or %NULL
1704 * Reads the print settings from @file_name. If the file could not be loaded
1705 * then error is set to either a #GFileError or #GKeyFileError.
1706 * See gtk_print_settings_to_file().
1708 * Return value: %TRUE on success
1713 gtk_print_settings_load_file (GtkPrintSettings *settings,
1714 const gchar *file_name,
1717 gboolean retval = FALSE;
1720 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1721 g_return_val_if_fail (file_name != NULL, FALSE);
1723 key_file = g_key_file_new ();
1725 if (g_key_file_load_from_file (key_file, file_name, 0, error) &&
1726 gtk_print_settings_load_key_file (settings, key_file, NULL, error))
1729 g_key_file_free (key_file);
1735 * gtk_print_settings_new_from_file:
1736 * @file_name: (type filename): the filename to read the settings from
1737 * @error: (allow-none): return location for errors, or %NULL
1739 * Reads the print settings from @file_name. Returns a new #GtkPrintSettings
1740 * object with the restored settings, or %NULL if an error occurred. If the
1741 * file could not be loaded then error is set to either a #GFileError or
1742 * #GKeyFileError. See gtk_print_settings_to_file().
1744 * Return value: the restored #GtkPrintSettings
1749 gtk_print_settings_new_from_file (const gchar *file_name,
1752 GtkPrintSettings *settings = gtk_print_settings_new ();
1754 if (!gtk_print_settings_load_file (settings, file_name, error))
1756 g_object_unref (settings);
1764 * gtk_print_settings_load_key_file:
1765 * @settings: a #GtkPrintSettings
1766 * @key_file: the #GKeyFile to retrieve the settings from
1767 * @group_name: (allow-none): the name of the group to use, or %NULL to use the default
1769 * @error: (allow-none): return location for errors, or %NULL
1771 * Reads the print settings from the group @group_name in @key_file. If the
1772 * file could not be loaded then error is set to either a #GFileError or
1775 * Return value: %TRUE on success
1780 gtk_print_settings_load_key_file (GtkPrintSettings *settings,
1782 const gchar *group_name,
1789 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1790 g_return_val_if_fail (key_file != NULL, FALSE);
1793 group_name = KEYFILE_GROUP_NAME;
1795 keys = g_key_file_get_keys (key_file,
1801 g_propagate_error (error, err);
1805 for (i = 0 ; i < n_keys; ++i)
1809 value = g_key_file_get_string (key_file,
1816 gtk_print_settings_set (settings, keys[i], value);
1826 * gtk_print_settings_new_from_key_file:
1827 * @key_file: the #GKeyFile to retrieve the settings from
1828 * @group_name: (allow-none): the name of the group to use, or %NULL to use
1829 * the default "Print Settings"
1830 * @error: (allow-none): return location for errors, or %NULL
1832 * Reads the print settings from the group @group_name in @key_file. Returns a
1833 * new #GtkPrintSettings object with the restored settings, or %NULL if an
1834 * error occurred. If the file could not be loaded then error is set to either
1835 * a #GFileError or #GKeyFileError.
1837 * Return value: the restored #GtkPrintSettings
1842 gtk_print_settings_new_from_key_file (GKeyFile *key_file,
1843 const gchar *group_name,
1846 GtkPrintSettings *settings = gtk_print_settings_new ();
1848 if (!gtk_print_settings_load_key_file (settings, key_file,
1851 g_object_unref (settings);
1859 * gtk_print_settings_to_file:
1860 * @settings: a #GtkPrintSettings
1861 * @file_name: (type filename): the file to save to
1862 * @error: (allow-none): return location for errors, or %NULL
1864 * This function saves the print settings from @settings to @file_name. If the
1865 * file could not be loaded then error is set to either a #GFileError or
1868 * Return value: %TRUE on success
1873 gtk_print_settings_to_file (GtkPrintSettings *settings,
1874 const gchar *file_name,
1878 gboolean retval = FALSE;
1883 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1884 g_return_val_if_fail (file_name != NULL, FALSE);
1886 key_file = g_key_file_new ();
1887 gtk_print_settings_to_key_file (settings, key_file, NULL);
1889 data = g_key_file_to_data (key_file, &len, &err);
1893 retval = g_file_set_contents (file_name, data, len, &err);
1897 g_propagate_error (error, err);
1899 g_key_file_free (key_file);
1907 const gchar *group_name;
1911 add_value_to_key_file (const gchar *key,
1915 g_key_file_set_string (data->key_file, data->group_name, key, value);
1919 * gtk_print_settings_to_key_file:
1920 * @settings: a #GtkPrintSettings
1921 * @key_file: the #GKeyFile to save the print settings to
1922 * @group_name: the group to add the settings to in @key_file, or
1923 * %NULL to use the default "Print Settings"
1925 * This function adds the print settings from @settings to @key_file.
1930 gtk_print_settings_to_key_file (GtkPrintSettings *settings,
1932 const gchar *group_name)
1936 g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
1937 g_return_if_fail (key_file != NULL);
1940 group_name = KEYFILE_GROUP_NAME;
1942 data.key_file = key_file;
1943 data.group_name = group_name;
1945 gtk_print_settings_foreach (settings,
1946 (GtkPrintSettingsFunc) add_value_to_key_file,