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"
35 * SECTION:gtkprintsettings
36 * @Short_description: Stores print settings
37 * @Title: GtkPrintSettings
39 * A GtkPrintSettings object represents the settings of a print dialog in
40 * a system-independent way. The main use for this object is that once
41 * you've printed you can get a settings object that represents the settings
42 * the user chose, and the next time you print you can pass that object in so
43 * that the user doesn't have to re-set all his settings.
45 * Its also possible to enumerate the settings so that you can easily save
46 * the settings for the next time your app runs, or even store them in a
47 * document. The predefined keys try to use shared values as much as possible
48 * so that moving such a document between systems still works.
50 * <!-- TODO example of getting, storing and setting settings -->
52 * Printing support was added in GTK+ 2.10.
56 typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass;
58 #define GTK_IS_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PRINT_SETTINGS))
59 #define GTK_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass))
60 #define GTK_PRINT_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass))
62 struct _GtkPrintSettings
64 GObject parent_instance;
69 struct _GtkPrintSettingsClass
71 GObjectClass parent_class;
74 #define KEYFILE_GROUP_NAME "Print Settings"
76 G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
79 gtk_print_settings_finalize (GObject *object)
81 GtkPrintSettings *settings = GTK_PRINT_SETTINGS (object);
83 g_hash_table_destroy (settings->hash);
85 G_OBJECT_CLASS (gtk_print_settings_parent_class)->finalize (object);
89 gtk_print_settings_init (GtkPrintSettings *settings)
91 settings->hash = g_hash_table_new_full (g_str_hash, g_str_equal,
96 gtk_print_settings_class_init (GtkPrintSettingsClass *class)
98 GObjectClass *gobject_class = (GObjectClass *)class;
100 gobject_class->finalize = gtk_print_settings_finalize;
104 * gtk_print_settings_new:
106 * Creates a new #GtkPrintSettings object.
108 * Return value: a new #GtkPrintSettings object
113 gtk_print_settings_new (void)
115 return g_object_new (GTK_TYPE_PRINT_SETTINGS, NULL);
119 copy_hash_entry (gpointer key,
123 GtkPrintSettings *settings = user_data;
125 g_hash_table_insert (settings->hash,
133 * gtk_print_settings_copy:
134 * @other: a #GtkPrintSettings
136 * Copies a #GtkPrintSettings object.
138 * Return value: (transfer full): a newly allocated copy of @other
143 gtk_print_settings_copy (GtkPrintSettings *other)
145 GtkPrintSettings *settings;
150 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (other), NULL);
152 settings = gtk_print_settings_new ();
154 g_hash_table_foreach (other->hash,
162 * gtk_print_settings_get:
163 * @settings: a #GtkPrintSettings
166 * Looks up the string value associated with @key.
168 * Return value: the string value for @key
172 G_CONST_RETURN gchar *
173 gtk_print_settings_get (GtkPrintSettings *settings,
176 return g_hash_table_lookup (settings->hash, key);
180 * gtk_print_settings_set:
181 * @settings: a #GtkPrintSettings
183 * @value: (allow-none): a string value, or %NULL
185 * Associates @value with @key.
190 gtk_print_settings_set (GtkPrintSettings *settings,
195 gtk_print_settings_unset (settings, key);
197 g_hash_table_insert (settings->hash,
203 * gtk_print_settings_unset:
204 * @settings: a #GtkPrintSettings
207 * Removes any value associated with @key.
208 * This has the same effect as setting the value to %NULL.
213 gtk_print_settings_unset (GtkPrintSettings *settings,
216 g_hash_table_remove (settings->hash, key);
220 * gtk_print_settings_has_key:
221 * @settings: a #GtkPrintSettings
224 * Returns %TRUE, if a value is associated with @key.
226 * Return value: %TRUE, if @key has a value
231 gtk_print_settings_has_key (GtkPrintSettings *settings,
234 return gtk_print_settings_get (settings, key) != NULL;
239 * gtk_print_settings_get_bool:
240 * @settings: a #GtkPrintSettings
243 * Returns the boolean represented by the value
244 * that is associated with @key.
246 * The string "true" represents %TRUE, any other
249 * Return value: %TRUE, if @key maps to a true value.
254 gtk_print_settings_get_bool (GtkPrintSettings *settings,
259 val = gtk_print_settings_get (settings, key);
260 if (g_strcmp0 (val, "true") == 0)
267 * gtk_print_settings_get_bool_with_default:
268 * @settings: a #GtkPrintSettings
270 * @default_val: the default value
272 * Returns the boolean represented by the value
273 * that is associated with @key, or @default_val
274 * if the value does not represent a boolean.
276 * The string "true" represents %TRUE, the string
277 * "false" represents %FALSE.
279 * Return value: the boolean value associated with @key
284 gtk_print_settings_get_bool_with_default (GtkPrintSettings *settings,
286 gboolean default_val)
290 val = gtk_print_settings_get (settings, key);
291 if (g_strcmp0 (val, "true") == 0)
294 if (g_strcmp0 (val, "false") == 0)
301 * gtk_print_settings_set_bool:
302 * @settings: a #GtkPrintSettings
306 * Sets @key to a boolean value.
311 gtk_print_settings_set_bool (GtkPrintSettings *settings,
316 gtk_print_settings_set (settings, key, "true");
318 gtk_print_settings_set (settings, key, "false");
322 * gtk_print_settings_get_double_with_default:
323 * @settings: a #GtkPrintSettings
325 * @def: the default value
327 * Returns the floating point number represented by
328 * the value that is associated with @key, or @default_val
329 * if the value does not represent a floating point number.
331 * Floating point numbers are parsed with g_ascii_strtod().
333 * Return value: the floating point number associated with @key
338 gtk_print_settings_get_double_with_default (GtkPrintSettings *settings,
344 val = gtk_print_settings_get (settings, key);
348 return g_ascii_strtod (val, NULL);
352 * gtk_print_settings_get_double:
353 * @settings: a #GtkPrintSettings
356 * Returns the double value associated with @key, or 0.
358 * Return value: the double value of @key
363 gtk_print_settings_get_double (GtkPrintSettings *settings,
366 return gtk_print_settings_get_double_with_default (settings, key, 0.0);
370 * gtk_print_settings_set_double:
371 * @settings: a #GtkPrintSettings
373 * @value: a double value
375 * Sets @key to a double value.
380 gtk_print_settings_set_double (GtkPrintSettings *settings,
384 gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
386 g_ascii_dtostr (buf, G_ASCII_DTOSTR_BUF_SIZE, value);
387 gtk_print_settings_set (settings, key, buf);
391 * gtk_print_settings_get_length:
392 * @settings: a #GtkPrintSettings
394 * @unit: the unit of the return value
396 * Returns the value associated with @key, interpreted
397 * as a length. The returned value is converted to @units.
399 * Return value: the length value of @key, converted to @unit
404 gtk_print_settings_get_length (GtkPrintSettings *settings,
408 gdouble length = gtk_print_settings_get_double (settings, key);
409 return _gtk_print_convert_from_mm (length, unit);
413 * gtk_print_settings_set_length:
414 * @settings: a #GtkPrintSettings
417 * @unit: the unit of @length
419 * Associates a length in units of @unit with @key.
424 gtk_print_settings_set_length (GtkPrintSettings *settings,
429 gtk_print_settings_set_double (settings, key,
430 _gtk_print_convert_to_mm (value, unit));
434 * gtk_print_settings_get_int_with_default:
435 * @settings: a #GtkPrintSettings
437 * @def: the default value
439 * Returns the value of @key, interpreted as
440 * an integer, or the default value.
442 * Return value: the integer value of @key
447 gtk_print_settings_get_int_with_default (GtkPrintSettings *settings,
453 val = gtk_print_settings_get (settings, key);
461 * gtk_print_settings_get_int:
462 * @settings: a #GtkPrintSettings
465 * Returns the integer value of @key, or 0.
467 * Return value: the integer value of @key
472 gtk_print_settings_get_int (GtkPrintSettings *settings,
475 return gtk_print_settings_get_int_with_default (settings, key, 0);
479 * gtk_print_settings_set_int:
480 * @settings: a #GtkPrintSettings
484 * Sets @key to an integer value.
489 gtk_print_settings_set_int (GtkPrintSettings *settings,
494 g_sprintf (buf, "%d", value);
495 gtk_print_settings_set (settings, key, buf);
499 * gtk_print_settings_foreach:
500 * @settings: a #GtkPrintSettings
501 * @func: (scope call): the function to call
502 * @user_data: user data for @func
504 * Calls @func for each key-value pair of @settings.
509 gtk_print_settings_foreach (GtkPrintSettings *settings,
510 GtkPrintSettingsFunc func,
513 g_hash_table_foreach (settings->hash, (GHFunc)func, user_data);
517 * gtk_print_settings_get_printer:
518 * @settings: a #GtkPrintSettings
520 * Convenience function to obtain the value of
521 * %GTK_PRINT_SETTINGS_PRINTER.
523 * Return value: the printer name
527 G_CONST_RETURN gchar *
528 gtk_print_settings_get_printer (GtkPrintSettings *settings)
530 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINTER);
535 * gtk_print_settings_set_printer:
536 * @settings: a #GtkPrintSettings
537 * @printer: the printer name
539 * Convenience function to set %GTK_PRINT_SETTINGS_PRINTER
545 gtk_print_settings_set_printer (GtkPrintSettings *settings,
546 const gchar *printer)
548 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINTER, printer);
552 * gtk_print_settings_get_orientation:
553 * @settings: a #GtkPrintSettings
555 * Get the value of %GTK_PRINT_SETTINGS_ORIENTATION,
556 * converted to a #GtkPageOrientation.
558 * Return value: the orientation
563 gtk_print_settings_get_orientation (GtkPrintSettings *settings)
567 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_ORIENTATION);
569 if (val == NULL || strcmp (val, "portrait") == 0)
570 return GTK_PAGE_ORIENTATION_PORTRAIT;
572 if (strcmp (val, "landscape") == 0)
573 return GTK_PAGE_ORIENTATION_LANDSCAPE;
575 if (strcmp (val, "reverse_portrait") == 0)
576 return GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT;
578 if (strcmp (val, "reverse_landscape") == 0)
579 return GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE;
581 return GTK_PAGE_ORIENTATION_PORTRAIT;
585 * gtk_print_settings_set_orientation:
586 * @settings: a #GtkPrintSettings
587 * @orientation: a page orientation
589 * Sets the value of %GTK_PRINT_SETTINGS_ORIENTATION.
594 gtk_print_settings_set_orientation (GtkPrintSettings *settings,
595 GtkPageOrientation orientation)
601 case GTK_PAGE_ORIENTATION_LANDSCAPE:
605 case GTK_PAGE_ORIENTATION_PORTRAIT:
608 case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE:
609 val = "reverse_landscape";
611 case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT:
612 val = "reverse_portrait";
615 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_ORIENTATION, val);
619 * gtk_print_settings_get_paper_size:
620 * @settings: a #GtkPrintSettings
622 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT,
623 * converted to a #GtkPaperSize.
625 * Return value: the paper size
630 gtk_print_settings_get_paper_size (GtkPrintSettings *settings)
636 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT);
640 if (g_str_has_prefix (val, "custom-"))
642 name = val + strlen ("custom-");
643 w = gtk_print_settings_get_paper_width (settings, GTK_UNIT_MM);
644 h = gtk_print_settings_get_paper_height (settings, GTK_UNIT_MM);
645 return gtk_paper_size_new_custom (name, name, w, h, GTK_UNIT_MM);
648 return gtk_paper_size_new (val);
652 * gtk_print_settings_set_paper_size:
653 * @settings: a #GtkPrintSettings
654 * @paper_size: a paper size
656 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT,
657 * %GTK_PRINT_SETTINGS_PAPER_WIDTH and
658 * %GTK_PRINT_SETTINGS_PAPER_HEIGHT.
663 gtk_print_settings_set_paper_size (GtkPrintSettings *settings,
664 GtkPaperSize *paper_size)
668 if (paper_size == NULL)
670 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, NULL);
671 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, NULL);
672 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_HEIGHT, NULL);
674 else if (gtk_paper_size_is_custom (paper_size))
676 custom_name = g_strdup_printf ("custom-%s",
677 gtk_paper_size_get_name (paper_size));
678 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, custom_name);
679 g_free (custom_name);
680 gtk_print_settings_set_paper_width (settings,
681 gtk_paper_size_get_width (paper_size,
684 gtk_print_settings_set_paper_height (settings,
685 gtk_paper_size_get_height (paper_size,
690 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT,
691 gtk_paper_size_get_name (paper_size));
695 * gtk_print_settings_get_paper_width:
696 * @settings: a #GtkPrintSettings
697 * @unit: the unit for the return value
699 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH,
700 * converted to @unit.
702 * Return value: the paper width, in units of @unit
707 gtk_print_settings_get_paper_width (GtkPrintSettings *settings,
710 return gtk_print_settings_get_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, unit);
714 * gtk_print_settings_set_paper_width:
715 * @settings: a #GtkPrintSettings
716 * @width: the paper width
717 * @unit: the units of @width
719 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH.
724 gtk_print_settings_set_paper_width (GtkPrintSettings *settings,
728 gtk_print_settings_set_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, width, unit);
732 * gtk_print_settings_get_paper_height:
733 * @settings: a #GtkPrintSettings
734 * @unit: the unit for the return value
736 * Gets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT,
737 * converted to @unit.
739 * Return value: the paper height, in units of @unit
744 gtk_print_settings_get_paper_height (GtkPrintSettings *settings,
747 return gtk_print_settings_get_length (settings,
748 GTK_PRINT_SETTINGS_PAPER_HEIGHT,
753 * gtk_print_settings_set_paper_height:
754 * @settings: a #GtkPrintSettings
755 * @height: the paper height
756 * @unit: the units of @height
758 * Sets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT.
763 gtk_print_settings_set_paper_height (GtkPrintSettings *settings,
767 gtk_print_settings_set_length (settings,
768 GTK_PRINT_SETTINGS_PAPER_HEIGHT,
773 * gtk_print_settings_get_use_color:
774 * @settings: a #GtkPrintSettings
776 * Gets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
778 * Return value: whether to use color
783 gtk_print_settings_get_use_color (GtkPrintSettings *settings)
785 return gtk_print_settings_get_bool_with_default (settings,
786 GTK_PRINT_SETTINGS_USE_COLOR,
791 * gtk_print_settings_set_use_color:
792 * @settings: a #GtkPrintSettings
793 * @use_color: whether to use color
795 * Sets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
800 gtk_print_settings_set_use_color (GtkPrintSettings *settings,
803 gtk_print_settings_set_bool (settings,
804 GTK_PRINT_SETTINGS_USE_COLOR,
809 * gtk_print_settings_get_collate:
810 * @settings: a #GtkPrintSettings
812 * Gets the value of %GTK_PRINT_SETTINGS_COLLATE.
814 * Return value: whether to collate the printed pages
819 gtk_print_settings_get_collate (GtkPrintSettings *settings)
821 return gtk_print_settings_get_bool (settings,
822 GTK_PRINT_SETTINGS_COLLATE);
826 * gtk_print_settings_set_collate:
827 * @settings: a #GtkPrintSettings
828 * @collate: whether to collate the output
830 * Sets the value of %GTK_PRINT_SETTINGS_COLLATE.
835 gtk_print_settings_set_collate (GtkPrintSettings *settings,
838 gtk_print_settings_set_bool (settings,
839 GTK_PRINT_SETTINGS_COLLATE,
844 * gtk_print_settings_get_reverse:
845 * @settings: a #GtkPrintSettings
847 * Gets the value of %GTK_PRINT_SETTINGS_REVERSE.
849 * Return value: whether to reverse the order of the printed pages
854 gtk_print_settings_get_reverse (GtkPrintSettings *settings)
856 return gtk_print_settings_get_bool (settings,
857 GTK_PRINT_SETTINGS_REVERSE);
861 * gtk_print_settings_set_reverse:
862 * @settings: a #GtkPrintSettings
863 * @reverse: whether to reverse the output
865 * Sets the value of %GTK_PRINT_SETTINGS_REVERSE.
870 gtk_print_settings_set_reverse (GtkPrintSettings *settings,
873 gtk_print_settings_set_bool (settings,
874 GTK_PRINT_SETTINGS_REVERSE,
879 * gtk_print_settings_get_duplex:
880 * @settings: a #GtkPrintSettings
882 * Gets the value of %GTK_PRINT_SETTINGS_DUPLEX.
884 * Return value: whether to print the output in duplex.
889 gtk_print_settings_get_duplex (GtkPrintSettings *settings)
893 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DUPLEX);
895 if (val == NULL || (strcmp (val, "simplex") == 0))
896 return GTK_PRINT_DUPLEX_SIMPLEX;
898 if (strcmp (val, "horizontal") == 0)
899 return GTK_PRINT_DUPLEX_HORIZONTAL;
901 if (strcmp (val, "vertical") == 0)
902 return GTK_PRINT_DUPLEX_VERTICAL;
904 return GTK_PRINT_DUPLEX_SIMPLEX;
908 * gtk_print_settings_set_duplex:
909 * @settings: a #GtkPrintSettings
910 * @duplex: a #GtkPrintDuplex value
912 * Sets the value of %GTK_PRINT_SETTINGS_DUPLEX.
917 gtk_print_settings_set_duplex (GtkPrintSettings *settings,
918 GtkPrintDuplex duplex)
925 case GTK_PRINT_DUPLEX_SIMPLEX:
928 case GTK_PRINT_DUPLEX_HORIZONTAL:
931 case GTK_PRINT_DUPLEX_VERTICAL:
936 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DUPLEX, str);
940 * gtk_print_settings_get_quality:
941 * @settings: a #GtkPrintSettings
943 * Gets the value of %GTK_PRINT_SETTINGS_QUALITY.
945 * Return value: the print quality
950 gtk_print_settings_get_quality (GtkPrintSettings *settings)
954 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_QUALITY);
956 if (val == NULL || (strcmp (val, "normal") == 0))
957 return GTK_PRINT_QUALITY_NORMAL;
959 if (strcmp (val, "high") == 0)
960 return GTK_PRINT_QUALITY_HIGH;
962 if (strcmp (val, "low") == 0)
963 return GTK_PRINT_QUALITY_LOW;
965 if (strcmp (val, "draft") == 0)
966 return GTK_PRINT_QUALITY_DRAFT;
968 return GTK_PRINT_QUALITY_NORMAL;
972 * gtk_print_settings_set_quality:
973 * @settings: a #GtkPrintSettings
974 * @quality: a #GtkPrintQuality value
976 * Sets the value of %GTK_PRINT_SETTINGS_QUALITY.
981 gtk_print_settings_set_quality (GtkPrintSettings *settings,
982 GtkPrintQuality quality)
989 case GTK_PRINT_QUALITY_NORMAL:
992 case GTK_PRINT_QUALITY_HIGH:
995 case GTK_PRINT_QUALITY_LOW:
998 case GTK_PRINT_QUALITY_DRAFT:
1003 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_QUALITY, str);
1007 * gtk_print_settings_get_page_set:
1008 * @settings: a #GtkPrintSettings
1010 * Gets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
1012 * Return value: the set of pages to print
1017 gtk_print_settings_get_page_set (GtkPrintSettings *settings)
1021 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_SET);
1023 if (val == NULL || (strcmp (val, "all") == 0))
1024 return GTK_PAGE_SET_ALL;
1026 if (strcmp (val, "even") == 0)
1027 return GTK_PAGE_SET_EVEN;
1029 if (strcmp (val, "odd") == 0)
1030 return GTK_PAGE_SET_ODD;
1032 return GTK_PAGE_SET_ALL;
1036 * gtk_print_settings_set_page_set:
1037 * @settings: a #GtkPrintSettings
1038 * @page_set: a #GtkPageSet value
1040 * Sets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
1045 gtk_print_settings_set_page_set (GtkPrintSettings *settings,
1046 GtkPageSet page_set)
1053 case GTK_PAGE_SET_ALL:
1056 case GTK_PAGE_SET_EVEN:
1059 case GTK_PAGE_SET_ODD:
1064 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_SET, str);
1068 * gtk_print_settings_get_number_up_layout:
1069 * @settings: a #GtkPrintSettings
1071 * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
1073 * Return value: layout of page in number-up mode
1078 gtk_print_settings_get_number_up_layout (GtkPrintSettings *settings)
1080 GtkNumberUpLayout layout;
1081 GtkTextDirection text_direction;
1082 GEnumClass *enum_class;
1083 GEnumValue *enum_value;
1086 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM);
1088 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT);
1089 text_direction = gtk_widget_get_default_direction ();
1091 if (text_direction == GTK_TEXT_DIR_LTR)
1092 layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
1094 layout = GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM;
1099 enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
1100 enum_value = g_enum_get_value_by_nick (enum_class, val);
1102 layout = enum_value->value;
1103 g_type_class_unref (enum_class);
1109 * gtk_print_settings_set_number_up_layout:
1110 * @settings: a #GtkPrintSettings
1111 * @number_up_layout: a #GtkNumberUpLayout value
1113 * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
1118 gtk_print_settings_set_number_up_layout (GtkPrintSettings *settings,
1119 GtkNumberUpLayout number_up_layout)
1121 GEnumClass *enum_class;
1122 GEnumValue *enum_value;
1124 g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
1126 enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
1127 enum_value = g_enum_get_value (enum_class, number_up_layout);
1128 g_return_if_fail (enum_value != NULL);
1130 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, enum_value->value_nick);
1131 g_type_class_unref (enum_class);
1135 * gtk_print_settings_get_n_copies:
1136 * @settings: a #GtkPrintSettings
1138 * Gets the value of %GTK_PRINT_SETTINGS_N_COPIES.
1140 * Return value: the number of copies to print
1145 gtk_print_settings_get_n_copies (GtkPrintSettings *settings)
1147 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_N_COPIES, 1);
1151 * gtk_print_settings_set_n_copies:
1152 * @settings: a #GtkPrintSettings
1153 * @num_copies: the number of copies
1155 * Sets the value of %GTK_PRINT_SETTINGS_N_COPIES.
1160 gtk_print_settings_set_n_copies (GtkPrintSettings *settings,
1163 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_N_COPIES,
1168 * gtk_print_settings_get_number_up:
1169 * @settings: a #GtkPrintSettings
1171 * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
1173 * Return value: the number of pages per sheet
1178 gtk_print_settings_get_number_up (GtkPrintSettings *settings)
1180 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUMBER_UP, 1);
1184 * gtk_print_settings_set_number_up:
1185 * @settings: a #GtkPrintSettings
1186 * @number_up: the number of pages per sheet
1188 * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
1193 gtk_print_settings_set_number_up (GtkPrintSettings *settings,
1196 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_NUMBER_UP,
1201 * gtk_print_settings_get_resolution:
1202 * @settings: a #GtkPrintSettings
1204 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION.
1206 * Return value: the resolution in dpi
1211 gtk_print_settings_get_resolution (GtkPrintSettings *settings)
1213 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION, 300);
1217 * gtk_print_settings_set_resolution:
1218 * @settings: a #GtkPrintSettings
1219 * @resolution: the resolution in dpi
1221 * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
1222 * %GTK_PRINT_SETTINGS_RESOLUTION_X and
1223 * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1228 gtk_print_settings_set_resolution (GtkPrintSettings *settings,
1231 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
1233 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
1235 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
1240 * gtk_print_settings_get_resolution_x:
1241 * @settings: a #GtkPrintSettings
1243 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_X.
1245 * Return value: the horizontal resolution in dpi
1250 gtk_print_settings_get_resolution_x (GtkPrintSettings *settings)
1252 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, 300);
1256 * gtk_print_settings_get_resolution_y:
1257 * @settings: a #GtkPrintSettings
1259 * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1261 * Return value: the vertical resolution in dpi
1266 gtk_print_settings_get_resolution_y (GtkPrintSettings *settings)
1268 return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, 300);
1272 * gtk_print_settings_set_resolution_xy:
1273 * @settings: a #GtkPrintSettings
1274 * @resolution_x: the horizontal resolution in dpi
1275 * @resolution_y: the vertical resolution in dpi
1277 * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
1278 * %GTK_PRINT_SETTINGS_RESOLUTION_X and
1279 * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
1284 gtk_print_settings_set_resolution_xy (GtkPrintSettings *settings,
1288 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
1290 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
1292 gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
1297 * gtk_print_settings_get_printer_lpi:
1298 * @settings: a #GtkPrintSettings
1300 * Gets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
1302 * Return value: the resolution in lpi (lines per inch)
1307 gtk_print_settings_get_printer_lpi (GtkPrintSettings *settings)
1309 return gtk_print_settings_get_double_with_default (settings, GTK_PRINT_SETTINGS_PRINTER_LPI, 150.0);
1313 * gtk_print_settings_set_printer_lpi:
1314 * @settings: a #GtkPrintSettings
1315 * @lpi: the resolution in lpi (lines per inch)
1317 * Sets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
1322 gtk_print_settings_set_printer_lpi (GtkPrintSettings *settings,
1325 gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI,
1330 * gtk_print_settings_get_scale:
1331 * @settings: a #GtkPrintSettings
1333 * Gets the value of %GTK_PRINT_SETTINGS_SCALE.
1335 * Return value: the scale in percent
1340 gtk_print_settings_get_scale (GtkPrintSettings *settings)
1342 return gtk_print_settings_get_double_with_default (settings,
1343 GTK_PRINT_SETTINGS_SCALE,
1348 * gtk_print_settings_set_scale:
1349 * @settings: a #GtkPrintSettings
1350 * @scale: the scale in percent
1352 * Sets the value of %GTK_PRINT_SETTINGS_SCALE.
1357 gtk_print_settings_set_scale (GtkPrintSettings *settings,
1360 gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_SCALE,
1365 * gtk_print_settings_get_print_pages:
1366 * @settings: a #GtkPrintSettings
1368 * Gets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
1370 * Return value: which pages to print
1375 gtk_print_settings_get_print_pages (GtkPrintSettings *settings)
1379 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINT_PAGES);
1381 if (val == NULL || (strcmp (val, "all") == 0))
1382 return GTK_PRINT_PAGES_ALL;
1384 if (strcmp (val, "selection") == 0)
1385 return GTK_PRINT_PAGES_SELECTION;
1387 if (strcmp (val, "current") == 0)
1388 return GTK_PRINT_PAGES_CURRENT;
1390 if (strcmp (val, "ranges") == 0)
1391 return GTK_PRINT_PAGES_RANGES;
1393 return GTK_PRINT_PAGES_ALL;
1397 * gtk_print_settings_set_print_pages:
1398 * @settings: a #GtkPrintSettings
1399 * @pages: a #GtkPrintPages value
1401 * Sets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
1406 gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
1407 GtkPrintPages pages)
1414 case GTK_PRINT_PAGES_ALL:
1417 case GTK_PRINT_PAGES_CURRENT:
1420 case GTK_PRINT_PAGES_SELECTION:
1423 case GTK_PRINT_PAGES_RANGES:
1428 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINT_PAGES, str);
1432 * gtk_print_settings_get_page_ranges:
1433 * @settings: a #GtkPrintSettings
1434 * @num_ranges: (out): return location for the length of the returned array
1436 * Gets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
1438 * Return value: (array length=num_ranges) (transfer full): an array
1439 * of #GtkPageRange<!-- -->s. Use g_free() to free the array when
1440 * it is no longer needed.
1445 gtk_print_settings_get_page_ranges (GtkPrintSettings *settings,
1450 GtkPageRange *ranges;
1453 val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_RANGES);
1461 range_strs = g_strsplit (val, ",", 0);
1463 for (i = 0; range_strs[i] != NULL; i++)
1468 ranges = g_new0 (GtkPageRange, n);
1470 for (i = 0; i < n; i++)
1475 start = (gint)strtol (range_strs[i], &str, 10);
1481 end = (gint)strtol (str, NULL, 10);
1484 ranges[i].start = start;
1485 ranges[i].end = end;
1488 g_strfreev (range_strs);
1495 * gtk_print_settings_set_page_ranges:
1496 * @settings: a #GtkPrintSettings
1497 * @page_ranges: (array length=num_ranges): an array of #GtkPageRange<!-- -->s
1498 * @num_ranges: the length of @page_ranges
1500 * Sets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
1505 gtk_print_settings_set_page_ranges (GtkPrintSettings *settings,
1506 GtkPageRange *page_ranges,
1512 s = g_string_new ("");
1514 for (i = 0; i < num_ranges; i++)
1516 if (page_ranges[i].start == page_ranges[i].end)
1517 g_string_append_printf (s, "%d", page_ranges[i].start);
1519 g_string_append_printf (s, "%d-%d",
1520 page_ranges[i].start,
1521 page_ranges[i].end);
1522 if (i < num_ranges - 1)
1523 g_string_append (s, ",");
1527 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_RANGES,
1530 g_string_free (s, TRUE);
1534 * gtk_print_settings_get_default_source:
1535 * @settings: a #GtkPrintSettings
1537 * Gets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
1539 * Return value: the default source
1543 G_CONST_RETURN gchar *
1544 gtk_print_settings_get_default_source (GtkPrintSettings *settings)
1546 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE);
1550 * gtk_print_settings_set_default_source:
1551 * @settings: a #GtkPrintSettings
1552 * @default_source: the default source
1554 * Sets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
1559 gtk_print_settings_set_default_source (GtkPrintSettings *settings,
1560 const gchar *default_source)
1562 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE, default_source);
1566 * gtk_print_settings_get_media_type:
1567 * @settings: a #GtkPrintSettings
1569 * Gets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
1571 * The set of media types is defined in PWG 5101.1-2002 PWG.
1572 * <!-- FIXME link here -->
1574 * Return value: the media type
1578 G_CONST_RETURN gchar *
1579 gtk_print_settings_get_media_type (GtkPrintSettings *settings)
1581 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE);
1585 * gtk_print_settings_set_media_type:
1586 * @settings: a #GtkPrintSettings
1587 * @media_type: the media type
1589 * Sets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
1591 * The set of media types is defined in PWG 5101.1-2002 PWG.
1592 * <!-- FIXME link here -->
1597 gtk_print_settings_set_media_type (GtkPrintSettings *settings,
1598 const gchar *media_type)
1600 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE, media_type);
1604 * gtk_print_settings_get_dither:
1605 * @settings: a #GtkPrintSettings
1607 * Gets the value of %GTK_PRINT_SETTINGS_DITHER.
1609 * Return value: the dithering that is used
1613 G_CONST_RETURN gchar *
1614 gtk_print_settings_get_dither (GtkPrintSettings *settings)
1616 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DITHER);
1620 * gtk_print_settings_set_dither:
1621 * @settings: a #GtkPrintSettings
1622 * @dither: the dithering that is used
1624 * Sets the value of %GTK_PRINT_SETTINGS_DITHER.
1629 gtk_print_settings_set_dither (GtkPrintSettings *settings,
1630 const gchar *dither)
1632 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DITHER, dither);
1636 * gtk_print_settings_get_finishings:
1637 * @settings: a #GtkPrintSettings
1639 * Gets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
1641 * Return value: the finishings
1646 gtk_print_settings_get_finishings (GtkPrintSettings *settings)
1648 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_FINISHINGS);
1652 * gtk_print_settings_set_finishings:
1653 * @settings: a #GtkPrintSettings
1654 * @finishings: the finishings
1656 * Sets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
1661 gtk_print_settings_set_finishings (GtkPrintSettings *settings,
1662 const gchar *finishings)
1664 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_FINISHINGS, finishings);
1668 * gtk_print_settings_get_output_bin:
1669 * @settings: a #GtkPrintSettings
1671 * Gets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
1673 * Return value: the output bin
1677 G_CONST_RETURN gchar *
1678 gtk_print_settings_get_output_bin (GtkPrintSettings *settings)
1680 return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN);
1684 * gtk_print_settings_set_output_bin:
1685 * @settings: a #GtkPrintSettings
1686 * @output_bin: the output bin
1688 * Sets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
1693 gtk_print_settings_set_output_bin (GtkPrintSettings *settings,
1694 const gchar *output_bin)
1696 gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN, output_bin);
1700 * gtk_print_settings_load_file:
1701 * @settings: a #GtkPrintSettings
1702 * @file_name: (type filename): the filename to read the settings from
1703 * @error: (allow-none): return location for errors, or %NULL
1705 * Reads the print settings from @file_name. If the file could not be loaded
1706 * then error is set to either a #GFileError or #GKeyFileError.
1707 * See gtk_print_settings_to_file().
1709 * Return value: %TRUE on success
1714 gtk_print_settings_load_file (GtkPrintSettings *settings,
1715 const gchar *file_name,
1718 gboolean retval = FALSE;
1721 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1722 g_return_val_if_fail (file_name != NULL, FALSE);
1724 key_file = g_key_file_new ();
1726 if (g_key_file_load_from_file (key_file, file_name, 0, error) &&
1727 gtk_print_settings_load_key_file (settings, key_file, NULL, error))
1730 g_key_file_free (key_file);
1736 * gtk_print_settings_new_from_file:
1737 * @file_name: (type filename): the filename to read the settings from
1738 * @error: (allow-none): return location for errors, or %NULL
1740 * Reads the print settings from @file_name. Returns a new #GtkPrintSettings
1741 * object with the restored settings, or %NULL if an error occurred. If the
1742 * file could not be loaded then error is set to either a #GFileError or
1743 * #GKeyFileError. See gtk_print_settings_to_file().
1745 * Return value: the restored #GtkPrintSettings
1750 gtk_print_settings_new_from_file (const gchar *file_name,
1753 GtkPrintSettings *settings = gtk_print_settings_new ();
1755 if (!gtk_print_settings_load_file (settings, file_name, error))
1757 g_object_unref (settings);
1765 * gtk_print_settings_load_key_file:
1766 * @settings: a #GtkPrintSettings
1767 * @key_file: the #GKeyFile to retrieve the settings from
1768 * @group_name: (allow-none): the name of the group to use, or %NULL to use the default
1770 * @error: (allow-none): return location for errors, or %NULL
1772 * Reads the print settings from the group @group_name in @key_file. If the
1773 * file could not be loaded then error is set to either a #GFileError or
1776 * Return value: %TRUE on success
1781 gtk_print_settings_load_key_file (GtkPrintSettings *settings,
1783 const gchar *group_name,
1790 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1791 g_return_val_if_fail (key_file != NULL, FALSE);
1794 group_name = KEYFILE_GROUP_NAME;
1796 keys = g_key_file_get_keys (key_file,
1802 g_propagate_error (error, err);
1806 for (i = 0 ; i < n_keys; ++i)
1810 value = g_key_file_get_string (key_file,
1817 gtk_print_settings_set (settings, keys[i], value);
1827 * gtk_print_settings_new_from_key_file:
1828 * @key_file: the #GKeyFile to retrieve the settings from
1829 * @group_name: (allow-none): the name of the group to use, or %NULL to use
1830 * the default "Print Settings"
1831 * @error: (allow-none): return location for errors, or %NULL
1833 * Reads the print settings from the group @group_name in @key_file. Returns a
1834 * new #GtkPrintSettings object with the restored settings, or %NULL if an
1835 * error occurred. If the file could not be loaded then error is set to either
1836 * a #GFileError or #GKeyFileError.
1838 * Return value: the restored #GtkPrintSettings
1843 gtk_print_settings_new_from_key_file (GKeyFile *key_file,
1844 const gchar *group_name,
1847 GtkPrintSettings *settings = gtk_print_settings_new ();
1849 if (!gtk_print_settings_load_key_file (settings, key_file,
1852 g_object_unref (settings);
1860 * gtk_print_settings_to_file:
1861 * @settings: a #GtkPrintSettings
1862 * @file_name: (type filename): the file to save to
1863 * @error: (allow-none): return location for errors, or %NULL
1865 * This function saves the print settings from @settings to @file_name. If the
1866 * file could not be loaded then error is set to either a #GFileError or
1869 * Return value: %TRUE on success
1874 gtk_print_settings_to_file (GtkPrintSettings *settings,
1875 const gchar *file_name,
1879 gboolean retval = FALSE;
1884 g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
1885 g_return_val_if_fail (file_name != NULL, FALSE);
1887 key_file = g_key_file_new ();
1888 gtk_print_settings_to_key_file (settings, key_file, NULL);
1890 data = g_key_file_to_data (key_file, &len, &err);
1894 retval = g_file_set_contents (file_name, data, len, &err);
1898 g_propagate_error (error, err);
1900 g_key_file_free (key_file);
1908 const gchar *group_name;
1912 add_value_to_key_file (const gchar *key,
1916 g_key_file_set_string (data->key_file, data->group_name, key, value);
1920 * gtk_print_settings_to_key_file:
1921 * @settings: a #GtkPrintSettings
1922 * @key_file: the #GKeyFile to save the print settings to
1923 * @group_name: the group to add the settings to in @key_file, or
1924 * %NULL to use the default "Print Settings"
1926 * This function adds the print settings from @settings to @key_file.
1931 gtk_print_settings_to_key_file (GtkPrintSettings *settings,
1933 const gchar *group_name)
1937 g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
1938 g_return_if_fail (key_file != NULL);
1941 group_name = KEYFILE_GROUP_NAME;
1943 data.key_file = key_file;
1944 data.group_name = group_name;
1946 gtk_print_settings_foreach (settings,
1947 (GtkPrintSettingsFunc) add_value_to_key_file,