| /* GTK - The GIMP Toolkit |
| * gtkprintsettings.c: Print Settings |
| * Copyright (C) 2006, Red Hat, Inc. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| |
| #include "config.h" |
| |
| #include <string.h> |
| #include <stdlib.h> |
| |
| #include <glib/gprintf.h> |
| |
| #include "gtkprintsettings.h" |
| #include "gtkprintutils.h" |
| #include "gtktypebuiltins.h" |
| #include "gtkwidget.h" |
| |
| |
| /** |
| * SECTION:gtkprintsettings |
| * @Short_description: Stores print settings |
| * @Title: GtkPrintSettings |
| * |
| * A GtkPrintSettings object represents the settings of a print dialog in |
| * a system-independent way. The main use for this object is that once |
| * you’ve printed you can get a settings object that represents the settings |
| * the user chose, and the next time you print you can pass that object in so |
| * that the user doesn’t have to re-set all his settings. |
| * |
| * Its also possible to enumerate the settings so that you can easily save |
| * the settings for the next time your app runs, or even store them in a |
| * document. The predefined keys try to use shared values as much as possible |
| * so that moving such a document between systems still works. |
| * |
| * Printing support was added in GTK+ 2.10. |
| */ |
| |
| typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass; |
| |
| #define GTK_IS_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PRINT_SETTINGS)) |
| #define GTK_PRINT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass)) |
| #define GTK_PRINT_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PRINT_SETTINGS, GtkPrintSettingsClass)) |
| |
| struct _GtkPrintSettings |
| { |
| GObject parent_instance; |
| |
| GHashTable *hash; |
| }; |
| |
| struct _GtkPrintSettingsClass |
| { |
| GObjectClass parent_class; |
| }; |
| |
| #define KEYFILE_GROUP_NAME "Print Settings" |
| |
| G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT) |
| |
| static void |
| gtk_print_settings_finalize (GObject *object) |
| { |
| GtkPrintSettings *settings = GTK_PRINT_SETTINGS (object); |
| |
| g_hash_table_destroy (settings->hash); |
| |
| G_OBJECT_CLASS (gtk_print_settings_parent_class)->finalize (object); |
| } |
| |
| static void |
| gtk_print_settings_init (GtkPrintSettings *settings) |
| { |
| settings->hash = g_hash_table_new_full (g_str_hash, g_str_equal, |
| g_free, g_free); |
| } |
| |
| static void |
| gtk_print_settings_class_init (GtkPrintSettingsClass *class) |
| { |
| GObjectClass *gobject_class = (GObjectClass *)class; |
| |
| gobject_class->finalize = gtk_print_settings_finalize; |
| } |
| |
| /** |
| * gtk_print_settings_new: |
| * |
| * Creates a new #GtkPrintSettings object. |
| * |
| * Returns: a new #GtkPrintSettings object |
| */ |
| GtkPrintSettings * |
| gtk_print_settings_new (void) |
| { |
| return g_object_new (GTK_TYPE_PRINT_SETTINGS, NULL); |
| } |
| |
| static void |
| copy_hash_entry (gpointer key, |
| gpointer value, |
| gpointer user_data) |
| { |
| GtkPrintSettings *settings = user_data; |
| |
| g_hash_table_insert (settings->hash, |
| g_strdup (key), |
| g_strdup (value)); |
| } |
| |
| |
| |
| /** |
| * gtk_print_settings_copy: |
| * @other: a #GtkPrintSettings |
| * |
| * Copies a #GtkPrintSettings object. |
| * |
| * Returns: (transfer full): a newly allocated copy of @other |
| */ |
| GtkPrintSettings * |
| gtk_print_settings_copy (GtkPrintSettings *other) |
| { |
| GtkPrintSettings *settings; |
| |
| if (other == NULL) |
| return NULL; |
| |
| g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (other), NULL); |
| |
| settings = gtk_print_settings_new (); |
| |
| g_hash_table_foreach (other->hash, |
| copy_hash_entry, |
| settings); |
| |
| return settings; |
| } |
| |
| /** |
| * gtk_print_settings_get: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * |
| * Looks up the string value associated with @key. |
| * |
| * Returns: the string value for @key |
| */ |
| const gchar * |
| gtk_print_settings_get (GtkPrintSettings *settings, |
| const gchar *key) |
| { |
| return g_hash_table_lookup (settings->hash, key); |
| } |
| |
| /** |
| * gtk_print_settings_set: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @value: (allow-none): a string value, or %NULL |
| * |
| * Associates @value with @key. |
| */ |
| void |
| gtk_print_settings_set (GtkPrintSettings *settings, |
| const gchar *key, |
| const gchar *value) |
| { |
| if (value == NULL) |
| gtk_print_settings_unset (settings, key); |
| else |
| g_hash_table_insert (settings->hash, |
| g_strdup (key), |
| g_strdup (value)); |
| } |
| |
| /** |
| * gtk_print_settings_unset: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * |
| * Removes any value associated with @key. |
| * This has the same effect as setting the value to %NULL. |
| */ |
| void |
| gtk_print_settings_unset (GtkPrintSettings *settings, |
| const gchar *key) |
| { |
| g_hash_table_remove (settings->hash, key); |
| } |
| |
| /** |
| * gtk_print_settings_has_key: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * |
| * Returns %TRUE, if a value is associated with @key. |
| * |
| * Returns: %TRUE, if @key has a value |
| */ |
| gboolean |
| gtk_print_settings_has_key (GtkPrintSettings *settings, |
| const gchar *key) |
| { |
| return gtk_print_settings_get (settings, key) != NULL; |
| } |
| |
| |
| /** |
| * gtk_print_settings_get_bool: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * |
| * Returns the boolean represented by the value |
| * that is associated with @key. |
| * |
| * The string “true” represents %TRUE, any other |
| * string %FALSE. |
| * |
| * Returns: %TRUE, if @key maps to a true value. |
| **/ |
| gboolean |
| gtk_print_settings_get_bool (GtkPrintSettings *settings, |
| const gchar *key) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, key); |
| if (g_strcmp0 (val, "true") == 0) |
| return TRUE; |
| |
| return FALSE; |
| } |
| |
| /** |
| * gtk_print_settings_get_bool_with_default: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @default_val: the default value |
| * |
| * Returns the boolean represented by the value |
| * that is associated with @key, or @default_val |
| * if the value does not represent a boolean. |
| * |
| * The string “true” represents %TRUE, the string |
| * “false” represents %FALSE. |
| * |
| * Returns: the boolean value associated with @key |
| */ |
| static gboolean |
| gtk_print_settings_get_bool_with_default (GtkPrintSettings *settings, |
| const gchar *key, |
| gboolean default_val) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, key); |
| if (g_strcmp0 (val, "true") == 0) |
| return TRUE; |
| |
| if (g_strcmp0 (val, "false") == 0) |
| return FALSE; |
| |
| return default_val; |
| } |
| |
| /** |
| * gtk_print_settings_set_bool: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @value: a boolean |
| * |
| * Sets @key to a boolean value. |
| */ |
| void |
| gtk_print_settings_set_bool (GtkPrintSettings *settings, |
| const gchar *key, |
| gboolean value) |
| { |
| if (value) |
| gtk_print_settings_set (settings, key, "true"); |
| else |
| gtk_print_settings_set (settings, key, "false"); |
| } |
| |
| /** |
| * gtk_print_settings_get_double_with_default: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @def: the default value |
| * |
| * Returns the floating point number represented by |
| * the value that is associated with @key, or @default_val |
| * if the value does not represent a floating point number. |
| * |
| * Floating point numbers are parsed with g_ascii_strtod(). |
| * |
| * Returns: the floating point number associated with @key |
| */ |
| gdouble |
| gtk_print_settings_get_double_with_default (GtkPrintSettings *settings, |
| const gchar *key, |
| gdouble def) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, key); |
| if (val == NULL) |
| return def; |
| |
| return g_ascii_strtod (val, NULL); |
| } |
| |
| /** |
| * gtk_print_settings_get_double: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * |
| * Returns the double value associated with @key, or 0. |
| * |
| * Returns: the double value of @key |
| */ |
| gdouble |
| gtk_print_settings_get_double (GtkPrintSettings *settings, |
| const gchar *key) |
| { |
| return gtk_print_settings_get_double_with_default (settings, key, 0.0); |
| } |
| |
| /** |
| * gtk_print_settings_set_double: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @value: a double value |
| * |
| * Sets @key to a double value. |
| */ |
| void |
| gtk_print_settings_set_double (GtkPrintSettings *settings, |
| const gchar *key, |
| gdouble value) |
| { |
| gchar buf[G_ASCII_DTOSTR_BUF_SIZE]; |
| |
| g_ascii_dtostr (buf, G_ASCII_DTOSTR_BUF_SIZE, value); |
| gtk_print_settings_set (settings, key, buf); |
| } |
| |
| /** |
| * gtk_print_settings_get_length: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @unit: the unit of the return value |
| * |
| * Returns the value associated with @key, interpreted |
| * as a length. The returned value is converted to @units. |
| * |
| * Returns: the length value of @key, converted to @unit |
| */ |
| gdouble |
| gtk_print_settings_get_length (GtkPrintSettings *settings, |
| const gchar *key, |
| GtkUnit unit) |
| { |
| gdouble length = gtk_print_settings_get_double (settings, key); |
| return _gtk_print_convert_from_mm (length, unit); |
| } |
| |
| /** |
| * gtk_print_settings_set_length: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @value: a length |
| * @unit: the unit of @length |
| * |
| * Associates a length in units of @unit with @key. |
| */ |
| void |
| gtk_print_settings_set_length (GtkPrintSettings *settings, |
| const gchar *key, |
| gdouble value, |
| GtkUnit unit) |
| { |
| gtk_print_settings_set_double (settings, key, |
| _gtk_print_convert_to_mm (value, unit)); |
| } |
| |
| /** |
| * gtk_print_settings_get_int_with_default: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @def: the default value |
| * |
| * Returns the value of @key, interpreted as |
| * an integer, or the default value. |
| * |
| * Returns: the integer value of @key |
| */ |
| gint |
| gtk_print_settings_get_int_with_default (GtkPrintSettings *settings, |
| const gchar *key, |
| gint def) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, key); |
| if (val == NULL) |
| return def; |
| |
| return atoi (val); |
| } |
| |
| /** |
| * gtk_print_settings_get_int: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * |
| * Returns the integer value of @key, or 0. |
| * |
| * Returns: the integer value of @key |
| */ |
| gint |
| gtk_print_settings_get_int (GtkPrintSettings *settings, |
| const gchar *key) |
| { |
| return gtk_print_settings_get_int_with_default (settings, key, 0); |
| } |
| |
| /** |
| * gtk_print_settings_set_int: |
| * @settings: a #GtkPrintSettings |
| * @key: a key |
| * @value: an integer |
| * |
| * Sets @key to an integer value. |
| */ |
| void |
| gtk_print_settings_set_int (GtkPrintSettings *settings, |
| const gchar *key, |
| gint value) |
| { |
| gchar buf[128]; |
| g_sprintf (buf, "%d", value); |
| gtk_print_settings_set (settings, key, buf); |
| } |
| |
| /** |
| * gtk_print_settings_foreach: |
| * @settings: a #GtkPrintSettings |
| * @func: (scope call): the function to call |
| * @user_data: user data for @func |
| * |
| * Calls @func for each key-value pair of @settings. |
| */ |
| void |
| gtk_print_settings_foreach (GtkPrintSettings *settings, |
| GtkPrintSettingsFunc func, |
| gpointer user_data) |
| { |
| g_hash_table_foreach (settings->hash, (GHFunc)func, user_data); |
| } |
| |
| /** |
| * gtk_print_settings_get_printer: |
| * @settings: a #GtkPrintSettings |
| * |
| * Convenience function to obtain the value of |
| * %GTK_PRINT_SETTINGS_PRINTER. |
| * |
| * Returns: the printer name |
| */ |
| const gchar * |
| gtk_print_settings_get_printer (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINTER); |
| } |
| |
| |
| /** |
| * gtk_print_settings_set_printer: |
| * @settings: a #GtkPrintSettings |
| * @printer: the printer name |
| * |
| * Convenience function to set %GTK_PRINT_SETTINGS_PRINTER |
| * to @printer. |
| */ |
| void |
| gtk_print_settings_set_printer (GtkPrintSettings *settings, |
| const gchar *printer) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINTER, printer); |
| } |
| |
| /** |
| * gtk_print_settings_get_orientation: |
| * @settings: a #GtkPrintSettings |
| * |
| * Get the value of %GTK_PRINT_SETTINGS_ORIENTATION, |
| * converted to a #GtkPageOrientation. |
| * |
| * Returns: the orientation |
| */ |
| GtkPageOrientation |
| gtk_print_settings_get_orientation (GtkPrintSettings *settings) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_ORIENTATION); |
| |
| if (val == NULL || strcmp (val, "portrait") == 0) |
| return GTK_PAGE_ORIENTATION_PORTRAIT; |
| |
| if (strcmp (val, "landscape") == 0) |
| return GTK_PAGE_ORIENTATION_LANDSCAPE; |
| |
| if (strcmp (val, "reverse_portrait") == 0) |
| return GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT; |
| |
| if (strcmp (val, "reverse_landscape") == 0) |
| return GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE; |
| |
| return GTK_PAGE_ORIENTATION_PORTRAIT; |
| } |
| |
| /** |
| * gtk_print_settings_set_orientation: |
| * @settings: a #GtkPrintSettings |
| * @orientation: a page orientation |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_ORIENTATION. |
| */ |
| void |
| gtk_print_settings_set_orientation (GtkPrintSettings *settings, |
| GtkPageOrientation orientation) |
| { |
| const gchar *val; |
| |
| switch (orientation) |
| { |
| case GTK_PAGE_ORIENTATION_LANDSCAPE: |
| val = "landscape"; |
| break; |
| default: |
| case GTK_PAGE_ORIENTATION_PORTRAIT: |
| val = "portrait"; |
| break; |
| case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE: |
| val = "reverse_landscape"; |
| break; |
| case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT: |
| val = "reverse_portrait"; |
| break; |
| } |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_ORIENTATION, val); |
| } |
| |
| /** |
| * gtk_print_settings_get_paper_size: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT, |
| * converted to a #GtkPaperSize. |
| * |
| * Returns: the paper size |
| */ |
| GtkPaperSize * |
| gtk_print_settings_get_paper_size (GtkPrintSettings *settings) |
| { |
| const gchar *val; |
| const gchar *name; |
| gdouble w, h; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT); |
| if (val == NULL) |
| return NULL; |
| |
| if (g_str_has_prefix (val, "custom-")) |
| { |
| name = val + strlen ("custom-"); |
| w = gtk_print_settings_get_paper_width (settings, GTK_UNIT_MM); |
| h = gtk_print_settings_get_paper_height (settings, GTK_UNIT_MM); |
| return gtk_paper_size_new_custom (name, name, w, h, GTK_UNIT_MM); |
| } |
| |
| return gtk_paper_size_new (val); |
| } |
| |
| /** |
| * gtk_print_settings_set_paper_size: |
| * @settings: a #GtkPrintSettings |
| * @paper_size: a paper size |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PAPER_FORMAT, |
| * %GTK_PRINT_SETTINGS_PAPER_WIDTH and |
| * %GTK_PRINT_SETTINGS_PAPER_HEIGHT. |
| */ |
| void |
| gtk_print_settings_set_paper_size (GtkPrintSettings *settings, |
| GtkPaperSize *paper_size) |
| { |
| gchar *custom_name; |
| |
| if (paper_size == NULL) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, NULL); |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, NULL); |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_HEIGHT, NULL); |
| } |
| else if (gtk_paper_size_is_custom (paper_size)) |
| { |
| custom_name = g_strdup_printf ("custom-%s", |
| gtk_paper_size_get_name (paper_size)); |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, custom_name); |
| g_free (custom_name); |
| gtk_print_settings_set_paper_width (settings, |
| gtk_paper_size_get_width (paper_size, |
| GTK_UNIT_MM), |
| GTK_UNIT_MM); |
| gtk_print_settings_set_paper_height (settings, |
| gtk_paper_size_get_height (paper_size, |
| GTK_UNIT_MM), |
| GTK_UNIT_MM); |
| } |
| else |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAPER_FORMAT, |
| gtk_paper_size_get_name (paper_size)); |
| } |
| |
| /** |
| * gtk_print_settings_get_paper_width: |
| * @settings: a #GtkPrintSettings |
| * @unit: the unit for the return value |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH, |
| * converted to @unit. |
| * |
| * Returns: the paper width, in units of @unit |
| */ |
| gdouble |
| gtk_print_settings_get_paper_width (GtkPrintSettings *settings, |
| GtkUnit unit) |
| { |
| return gtk_print_settings_get_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, unit); |
| } |
| |
| /** |
| * gtk_print_settings_set_paper_width: |
| * @settings: a #GtkPrintSettings |
| * @width: the paper width |
| * @unit: the units of @width |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PAPER_WIDTH. |
| */ |
| void |
| gtk_print_settings_set_paper_width (GtkPrintSettings *settings, |
| gdouble width, |
| GtkUnit unit) |
| { |
| gtk_print_settings_set_length (settings, GTK_PRINT_SETTINGS_PAPER_WIDTH, width, unit); |
| } |
| |
| /** |
| * gtk_print_settings_get_paper_height: |
| * @settings: a #GtkPrintSettings |
| * @unit: the unit for the return value |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT, |
| * converted to @unit. |
| * |
| * Returns: the paper height, in units of @unit |
| */ |
| gdouble |
| gtk_print_settings_get_paper_height (GtkPrintSettings *settings, |
| GtkUnit unit) |
| { |
| return gtk_print_settings_get_length (settings, |
| GTK_PRINT_SETTINGS_PAPER_HEIGHT, |
| unit); |
| } |
| |
| /** |
| * gtk_print_settings_set_paper_height: |
| * @settings: a #GtkPrintSettings |
| * @height: the paper height |
| * @unit: the units of @height |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PAPER_HEIGHT. |
| */ |
| void |
| gtk_print_settings_set_paper_height (GtkPrintSettings *settings, |
| gdouble height, |
| GtkUnit unit) |
| { |
| gtk_print_settings_set_length (settings, |
| GTK_PRINT_SETTINGS_PAPER_HEIGHT, |
| height, unit); |
| } |
| |
| /** |
| * gtk_print_settings_get_use_color: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_USE_COLOR. |
| * |
| * Returns: whether to use color |
| */ |
| gboolean |
| gtk_print_settings_get_use_color (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_bool_with_default (settings, |
| GTK_PRINT_SETTINGS_USE_COLOR, |
| TRUE); |
| } |
| |
| /** |
| * gtk_print_settings_set_use_color: |
| * @settings: a #GtkPrintSettings |
| * @use_color: whether to use color |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_USE_COLOR. |
| */ |
| void |
| gtk_print_settings_set_use_color (GtkPrintSettings *settings, |
| gboolean use_color) |
| { |
| gtk_print_settings_set_bool (settings, |
| GTK_PRINT_SETTINGS_USE_COLOR, |
| use_color); |
| } |
| |
| /** |
| * gtk_print_settings_get_collate: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_COLLATE. |
| * |
| * Returns: whether to collate the printed pages |
| */ |
| gboolean |
| gtk_print_settings_get_collate (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_bool_with_default (settings, |
| GTK_PRINT_SETTINGS_COLLATE, |
| TRUE); |
| } |
| |
| /** |
| * gtk_print_settings_set_collate: |
| * @settings: a #GtkPrintSettings |
| * @collate: whether to collate the output |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_COLLATE. |
| */ |
| void |
| gtk_print_settings_set_collate (GtkPrintSettings *settings, |
| gboolean collate) |
| { |
| gtk_print_settings_set_bool (settings, |
| GTK_PRINT_SETTINGS_COLLATE, |
| collate); |
| } |
| |
| /** |
| * gtk_print_settings_get_reverse: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_REVERSE. |
| * |
| * Returns: whether to reverse the order of the printed pages |
| */ |
| gboolean |
| gtk_print_settings_get_reverse (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_bool (settings, |
| GTK_PRINT_SETTINGS_REVERSE); |
| } |
| |
| /** |
| * gtk_print_settings_set_reverse: |
| * @settings: a #GtkPrintSettings |
| * @reverse: whether to reverse the output |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_REVERSE. |
| */ |
| void |
| gtk_print_settings_set_reverse (GtkPrintSettings *settings, |
| gboolean reverse) |
| { |
| gtk_print_settings_set_bool (settings, |
| GTK_PRINT_SETTINGS_REVERSE, |
| reverse); |
| } |
| |
| /** |
| * gtk_print_settings_get_duplex: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_DUPLEX. |
| * |
| * Returns: whether to print the output in duplex. |
| */ |
| GtkPrintDuplex |
| gtk_print_settings_get_duplex (GtkPrintSettings *settings) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DUPLEX); |
| |
| if (val == NULL || (strcmp (val, "simplex") == 0)) |
| return GTK_PRINT_DUPLEX_SIMPLEX; |
| |
| if (strcmp (val, "horizontal") == 0) |
| return GTK_PRINT_DUPLEX_HORIZONTAL; |
| |
| if (strcmp (val, "vertical") == 0) |
| return GTK_PRINT_DUPLEX_VERTICAL; |
| |
| return GTK_PRINT_DUPLEX_SIMPLEX; |
| } |
| |
| /** |
| * gtk_print_settings_set_duplex: |
| * @settings: a #GtkPrintSettings |
| * @duplex: a #GtkPrintDuplex value |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_DUPLEX. |
| */ |
| void |
| gtk_print_settings_set_duplex (GtkPrintSettings *settings, |
| GtkPrintDuplex duplex) |
| { |
| const gchar *str; |
| |
| switch (duplex) |
| { |
| default: |
| case GTK_PRINT_DUPLEX_SIMPLEX: |
| str = "simplex"; |
| break; |
| case GTK_PRINT_DUPLEX_HORIZONTAL: |
| str = "horizontal"; |
| break; |
| case GTK_PRINT_DUPLEX_VERTICAL: |
| str = "vertical"; |
| break; |
| } |
| |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DUPLEX, str); |
| } |
| |
| /** |
| * gtk_print_settings_get_quality: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_QUALITY. |
| * |
| * Returns: the print quality |
| */ |
| GtkPrintQuality |
| gtk_print_settings_get_quality (GtkPrintSettings *settings) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_QUALITY); |
| |
| if (val == NULL || (strcmp (val, "normal") == 0)) |
| return GTK_PRINT_QUALITY_NORMAL; |
| |
| if (strcmp (val, "high") == 0) |
| return GTK_PRINT_QUALITY_HIGH; |
| |
| if (strcmp (val, "low") == 0) |
| return GTK_PRINT_QUALITY_LOW; |
| |
| if (strcmp (val, "draft") == 0) |
| return GTK_PRINT_QUALITY_DRAFT; |
| |
| return GTK_PRINT_QUALITY_NORMAL; |
| } |
| |
| /** |
| * gtk_print_settings_set_quality: |
| * @settings: a #GtkPrintSettings |
| * @quality: a #GtkPrintQuality value |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_QUALITY. |
| */ |
| void |
| gtk_print_settings_set_quality (GtkPrintSettings *settings, |
| GtkPrintQuality quality) |
| { |
| const gchar *str; |
| |
| switch (quality) |
| { |
| default: |
| case GTK_PRINT_QUALITY_NORMAL: |
| str = "normal"; |
| break; |
| case GTK_PRINT_QUALITY_HIGH: |
| str = "high"; |
| break; |
| case GTK_PRINT_QUALITY_LOW: |
| str = "low"; |
| break; |
| case GTK_PRINT_QUALITY_DRAFT: |
| str = "draft"; |
| break; |
| } |
| |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_QUALITY, str); |
| } |
| |
| /** |
| * gtk_print_settings_get_page_set: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PAGE_SET. |
| * |
| * Returns: the set of pages to print |
| */ |
| GtkPageSet |
| gtk_print_settings_get_page_set (GtkPrintSettings *settings) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_SET); |
| |
| if (val == NULL || (strcmp (val, "all") == 0)) |
| return GTK_PAGE_SET_ALL; |
| |
| if (strcmp (val, "even") == 0) |
| return GTK_PAGE_SET_EVEN; |
| |
| if (strcmp (val, "odd") == 0) |
| return GTK_PAGE_SET_ODD; |
| |
| return GTK_PAGE_SET_ALL; |
| } |
| |
| /** |
| * gtk_print_settings_set_page_set: |
| * @settings: a #GtkPrintSettings |
| * @page_set: a #GtkPageSet value |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PAGE_SET. |
| */ |
| void |
| gtk_print_settings_set_page_set (GtkPrintSettings *settings, |
| GtkPageSet page_set) |
| { |
| const gchar *str; |
| |
| switch (page_set) |
| { |
| default: |
| case GTK_PAGE_SET_ALL: |
| str = "all"; |
| break; |
| case GTK_PAGE_SET_EVEN: |
| str = "even"; |
| break; |
| case GTK_PAGE_SET_ODD: |
| str = "odd"; |
| break; |
| } |
| |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_SET, str); |
| } |
| |
| /** |
| * gtk_print_settings_get_number_up_layout: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT. |
| * |
| * Returns: layout of page in number-up mode |
| */ |
| GtkNumberUpLayout |
| gtk_print_settings_get_number_up_layout (GtkPrintSettings *settings) |
| { |
| GtkNumberUpLayout layout; |
| GtkTextDirection text_direction; |
| GEnumClass *enum_class; |
| GEnumValue *enum_value; |
| const gchar *val; |
| |
| g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM); |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT); |
| text_direction = gtk_widget_get_default_direction (); |
| |
| if (text_direction == GTK_TEXT_DIR_LTR) |
| layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM; |
| else |
| layout = GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM; |
| |
| if (val == NULL) |
| return layout; |
| |
| enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT); |
| enum_value = g_enum_get_value_by_nick (enum_class, val); |
| if (enum_value) |
| layout = enum_value->value; |
| g_type_class_unref (enum_class); |
| |
| return layout; |
| } |
| |
| /** |
| * gtk_print_settings_set_number_up_layout: |
| * @settings: a #GtkPrintSettings |
| * @number_up_layout: a #GtkNumberUpLayout value |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT. |
| */ |
| void |
| gtk_print_settings_set_number_up_layout (GtkPrintSettings *settings, |
| GtkNumberUpLayout number_up_layout) |
| { |
| GEnumClass *enum_class; |
| GEnumValue *enum_value; |
| |
| g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings)); |
| |
| enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT); |
| enum_value = g_enum_get_value (enum_class, number_up_layout); |
| g_return_if_fail (enum_value != NULL); |
| |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, enum_value->value_nick); |
| g_type_class_unref (enum_class); |
| } |
| |
| /** |
| * gtk_print_settings_get_n_copies: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_N_COPIES. |
| * |
| * Returns: the number of copies to print |
| */ |
| gint |
| gtk_print_settings_get_n_copies (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_N_COPIES, 1); |
| } |
| |
| /** |
| * gtk_print_settings_set_n_copies: |
| * @settings: a #GtkPrintSettings |
| * @num_copies: the number of copies |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_N_COPIES. |
| */ |
| void |
| gtk_print_settings_set_n_copies (GtkPrintSettings *settings, |
| gint num_copies) |
| { |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_N_COPIES, |
| num_copies); |
| } |
| |
| /** |
| * gtk_print_settings_get_number_up: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP. |
| * |
| * Returns: the number of pages per sheet |
| */ |
| gint |
| gtk_print_settings_get_number_up (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUMBER_UP, 1); |
| } |
| |
| /** |
| * gtk_print_settings_set_number_up: |
| * @settings: a #GtkPrintSettings |
| * @number_up: the number of pages per sheet |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP. |
| */ |
| void |
| gtk_print_settings_set_number_up (GtkPrintSettings *settings, |
| gint number_up) |
| { |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_NUMBER_UP, |
| number_up); |
| } |
| |
| /** |
| * gtk_print_settings_get_resolution: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION. |
| * |
| * Returns: the resolution in dpi |
| */ |
| gint |
| gtk_print_settings_get_resolution (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION, 300); |
| } |
| |
| /** |
| * gtk_print_settings_set_resolution: |
| * @settings: a #GtkPrintSettings |
| * @resolution: the resolution in dpi |
| * |
| * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION, |
| * %GTK_PRINT_SETTINGS_RESOLUTION_X and |
| * %GTK_PRINT_SETTINGS_RESOLUTION_Y. |
| */ |
| void |
| gtk_print_settings_set_resolution (GtkPrintSettings *settings, |
| gint resolution) |
| { |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION, |
| resolution); |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, |
| resolution); |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, |
| resolution); |
| } |
| |
| /** |
| * gtk_print_settings_get_resolution_x: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_X. |
| * |
| * Returns: the horizontal resolution in dpi |
| */ |
| gint |
| gtk_print_settings_get_resolution_x (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, 300); |
| } |
| |
| /** |
| * gtk_print_settings_get_resolution_y: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_Y. |
| * |
| * Returns: the vertical resolution in dpi |
| */ |
| gint |
| gtk_print_settings_get_resolution_y (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, 300); |
| } |
| |
| /** |
| * gtk_print_settings_set_resolution_xy: |
| * @settings: a #GtkPrintSettings |
| * @resolution_x: the horizontal resolution in dpi |
| * @resolution_y: the vertical resolution in dpi |
| * |
| * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION, |
| * %GTK_PRINT_SETTINGS_RESOLUTION_X and |
| * %GTK_PRINT_SETTINGS_RESOLUTION_Y. |
| */ |
| void |
| gtk_print_settings_set_resolution_xy (GtkPrintSettings *settings, |
| gint resolution_x, |
| gint resolution_y) |
| { |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, |
| resolution_x); |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, |
| resolution_y); |
| gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION, |
| resolution_x); |
| } |
| |
| /** |
| * gtk_print_settings_get_printer_lpi: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI. |
| * |
| * Returns: the resolution in lpi (lines per inch) |
| */ |
| gdouble |
| gtk_print_settings_get_printer_lpi (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_double_with_default (settings, GTK_PRINT_SETTINGS_PRINTER_LPI, 150.0); |
| } |
| |
| /** |
| * gtk_print_settings_set_printer_lpi: |
| * @settings: a #GtkPrintSettings |
| * @lpi: the resolution in lpi (lines per inch) |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI. |
| */ |
| void |
| gtk_print_settings_set_printer_lpi (GtkPrintSettings *settings, |
| gdouble lpi) |
| { |
| gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI, |
| lpi); |
| } |
| |
| /** |
| * gtk_print_settings_get_scale: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_SCALE. |
| * |
| * Returns: the scale in percent |
| */ |
| gdouble |
| gtk_print_settings_get_scale (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get_double_with_default (settings, |
| GTK_PRINT_SETTINGS_SCALE, |
| 100.0); |
| } |
| |
| /** |
| * gtk_print_settings_set_scale: |
| * @settings: a #GtkPrintSettings |
| * @scale: the scale in percent |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_SCALE. |
| */ |
| void |
| gtk_print_settings_set_scale (GtkPrintSettings *settings, |
| gdouble scale) |
| { |
| gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_SCALE, |
| scale); |
| } |
| |
| /** |
| * gtk_print_settings_get_print_pages: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES. |
| * |
| * Returns: which pages to print |
| */ |
| GtkPrintPages |
| gtk_print_settings_get_print_pages (GtkPrintSettings *settings) |
| { |
| const gchar *val; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINT_PAGES); |
| |
| if (val == NULL || (strcmp (val, "all") == 0)) |
| return GTK_PRINT_PAGES_ALL; |
| |
| if (strcmp (val, "selection") == 0) |
| return GTK_PRINT_PAGES_SELECTION; |
| |
| if (strcmp (val, "current") == 0) |
| return GTK_PRINT_PAGES_CURRENT; |
| |
| if (strcmp (val, "ranges") == 0) |
| return GTK_PRINT_PAGES_RANGES; |
| |
| return GTK_PRINT_PAGES_ALL; |
| } |
| |
| /** |
| * gtk_print_settings_set_print_pages: |
| * @settings: a #GtkPrintSettings |
| * @pages: a #GtkPrintPages value |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES. |
| */ |
| void |
| gtk_print_settings_set_print_pages (GtkPrintSettings *settings, |
| GtkPrintPages pages) |
| { |
| const gchar *str; |
| |
| switch (pages) |
| { |
| default: |
| case GTK_PRINT_PAGES_ALL: |
| str = "all"; |
| break; |
| case GTK_PRINT_PAGES_CURRENT: |
| str = "current"; |
| break; |
| case GTK_PRINT_PAGES_SELECTION: |
| str = "selection"; |
| break; |
| case GTK_PRINT_PAGES_RANGES: |
| str = "ranges"; |
| break; |
| } |
| |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINT_PAGES, str); |
| } |
| |
| /** |
| * gtk_print_settings_get_page_ranges: |
| * @settings: a #GtkPrintSettings |
| * @num_ranges: (out): return location for the length of the returned array |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES. |
| * |
| * Returns: (array length=num_ranges) (transfer full): an array |
| * of #GtkPageRanges. Use g_free() to free the array when |
| * it is no longer needed. |
| */ |
| GtkPageRange * |
| gtk_print_settings_get_page_ranges (GtkPrintSettings *settings, |
| gint *num_ranges) |
| { |
| const gchar *val; |
| gchar **range_strs; |
| GtkPageRange *ranges; |
| gint i, n; |
| |
| val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PAGE_RANGES); |
| |
| if (val == NULL) |
| { |
| *num_ranges = 0; |
| return NULL; |
| } |
| |
| range_strs = g_strsplit (val, ",", 0); |
| |
| for (i = 0; range_strs[i] != NULL; i++) |
| ; |
| |
| n = i; |
| |
| ranges = g_new0 (GtkPageRange, n); |
| |
| for (i = 0; i < n; i++) |
| { |
| gint start, end; |
| gchar *str; |
| |
| start = (gint)strtol (range_strs[i], &str, 10); |
| end = start; |
| |
| if (*str == '-') |
| { |
| str++; |
| end = (gint)strtol (str, NULL, 10); |
| } |
| |
| ranges[i].start = start; |
| ranges[i].end = end; |
| } |
| |
| g_strfreev (range_strs); |
| |
| *num_ranges = n; |
| return ranges; |
| } |
| |
| /** |
| * gtk_print_settings_set_page_ranges: |
| * @settings: a #GtkPrintSettings |
| * @page_ranges: (array length=num_ranges): an array of #GtkPageRanges |
| * @num_ranges: the length of @page_ranges |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES. |
| */ |
| void |
| gtk_print_settings_set_page_ranges (GtkPrintSettings *settings, |
| GtkPageRange *page_ranges, |
| gint num_ranges) |
| { |
| GString *s; |
| gint i; |
| |
| s = g_string_new (""); |
| |
| for (i = 0; i < num_ranges; i++) |
| { |
| if (page_ranges[i].start == page_ranges[i].end) |
| g_string_append_printf (s, "%d", page_ranges[i].start); |
| else |
| g_string_append_printf (s, "%d-%d", |
| page_ranges[i].start, |
| page_ranges[i].end); |
| if (i < num_ranges - 1) |
| g_string_append (s, ","); |
| } |
| |
| |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_RANGES, |
| s->str); |
| |
| g_string_free (s, TRUE); |
| } |
| |
| /** |
| * gtk_print_settings_get_default_source: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE. |
| * |
| * Returns: the default source |
| */ |
| const gchar * |
| gtk_print_settings_get_default_source (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE); |
| } |
| |
| /** |
| * gtk_print_settings_set_default_source: |
| * @settings: a #GtkPrintSettings |
| * @default_source: the default source |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE. |
| */ |
| void |
| gtk_print_settings_set_default_source (GtkPrintSettings *settings, |
| const gchar *default_source) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE, default_source); |
| } |
| |
| /** |
| * gtk_print_settings_get_media_type: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE. |
| * |
| * The set of media types is defined in PWG 5101.1-2002 PWG. |
| * |
| * Returns: the media type |
| */ |
| const gchar * |
| gtk_print_settings_get_media_type (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE); |
| } |
| |
| /** |
| * gtk_print_settings_set_media_type: |
| * @settings: a #GtkPrintSettings |
| * @media_type: the media type |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE. |
| * |
| * The set of media types is defined in PWG 5101.1-2002 PWG. |
| */ |
| void |
| gtk_print_settings_set_media_type (GtkPrintSettings *settings, |
| const gchar *media_type) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE, media_type); |
| } |
| |
| /** |
| * gtk_print_settings_get_dither: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_DITHER. |
| * |
| * Returns: the dithering that is used |
| */ |
| const gchar * |
| gtk_print_settings_get_dither (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DITHER); |
| } |
| |
| /** |
| * gtk_print_settings_set_dither: |
| * @settings: a #GtkPrintSettings |
| * @dither: the dithering that is used |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_DITHER. |
| */ |
| void |
| gtk_print_settings_set_dither (GtkPrintSettings *settings, |
| const gchar *dither) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DITHER, dither); |
| } |
| |
| /** |
| * gtk_print_settings_get_finishings: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_FINISHINGS. |
| * |
| * Returns: the finishings |
| */ |
| const gchar * |
| gtk_print_settings_get_finishings (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_FINISHINGS); |
| } |
| |
| /** |
| * gtk_print_settings_set_finishings: |
| * @settings: a #GtkPrintSettings |
| * @finishings: the finishings |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_FINISHINGS. |
| */ |
| void |
| gtk_print_settings_set_finishings (GtkPrintSettings *settings, |
| const gchar *finishings) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_FINISHINGS, finishings); |
| } |
| |
| /** |
| * gtk_print_settings_get_output_bin: |
| * @settings: a #GtkPrintSettings |
| * |
| * Gets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN. |
| * |
| * Returns: the output bin |
| */ |
| const gchar * |
| gtk_print_settings_get_output_bin (GtkPrintSettings *settings) |
| { |
| return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN); |
| } |
| |
| /** |
| * gtk_print_settings_set_output_bin: |
| * @settings: a #GtkPrintSettings |
| * @output_bin: the output bin |
| * |
| * Sets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN. |
| */ |
| void |
| gtk_print_settings_set_output_bin (GtkPrintSettings *settings, |
| const gchar *output_bin) |
| { |
| gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN, output_bin); |
| } |
| |
| /** |
| * gtk_print_settings_load_file: |
| * @settings: a #GtkPrintSettings |
| * @file_name: (type filename): the filename to read the settings from |
| * @error: (allow-none): return location for errors, or %NULL |
| * |
| * Reads the print settings from @file_name. If the file could not be loaded |
| * then error is set to either a #GFileError or #GKeyFileError. |
| * See gtk_print_settings_to_file(). |
| * |
| * Returns: %TRUE on success |
| */ |
| gboolean |
| gtk_print_settings_load_file (GtkPrintSettings *settings, |
| const gchar *file_name, |
| GError **error) |
| { |
| gboolean retval = FALSE; |
| GKeyFile *key_file; |
| |
| g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE); |
| g_return_val_if_fail (file_name != NULL, FALSE); |
| |
| key_file = g_key_file_new (); |
| |
| if (g_key_file_load_from_file (key_file, file_name, 0, error) && |
| gtk_print_settings_load_key_file (settings, key_file, NULL, error)) |
| retval = TRUE; |
| |
| g_key_file_free (key_file); |
| |
| return retval; |
| } |
| |
| /** |
| * gtk_print_settings_new_from_file: |
| * @file_name: (type filename): the filename to read the settings from |
| * @error: (allow-none): return location for errors, or %NULL |
| * |
| * Reads the print settings from @file_name. Returns a new #GtkPrintSettings |
| * object with the restored settings, or %NULL if an error occurred. If the |
| * file could not be loaded then error is set to either a #GFileError or |
| * #GKeyFileError. See gtk_print_settings_to_file(). |
| * |
| * Returns: the restored #GtkPrintSettings |
| */ |
| GtkPrintSettings * |
| gtk_print_settings_new_from_file (const gchar *file_name, |
| GError **error) |
| { |
| GtkPrintSettings *settings = gtk_print_settings_new (); |
| |
| if (!gtk_print_settings_load_file (settings, file_name, error)) |
| { |
| g_object_unref (settings); |
| settings = NULL; |
| } |
| |
| return settings; |
| } |
| |
| /** |
| * gtk_print_settings_load_key_file: |
| * @settings: a #GtkPrintSettings |
| * @key_file: the #GKeyFile to retrieve the settings from |
| * @group_name: (allow-none): the name of the group to use, or %NULL to use the default |
| * “Print Settings” |
| * @error: (allow-none): return location for errors, or %NULL |
| * |
| * Reads the print settings from the group @group_name in @key_file. If the |
| * file could not be loaded then error is set to either a #GFileError or |
| * #GKeyFileError. |
| * |
| * Returns: %TRUE on success |
| */ |
| gboolean |
| gtk_print_settings_load_key_file (GtkPrintSettings *settings, |
| GKeyFile *key_file, |
| const gchar *group_name, |
| GError **error) |
| { |
| gchar **keys; |
| gsize n_keys, i; |
| GError *err = NULL; |
| |
| g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE); |
| g_return_val_if_fail (key_file != NULL, FALSE); |
| |
| if (!group_name) |
| group_name = KEYFILE_GROUP_NAME; |
| |
| keys = g_key_file_get_keys (key_file, |
| group_name, |
| &n_keys, |
| &err); |
| if (err != NULL) |
| { |
| g_propagate_error (error, err); |
| return FALSE; |
| } |
| |
| for (i = 0 ; i < n_keys; ++i) |
| { |
| gchar *value; |
| |
| value = g_key_file_get_string (key_file, |
| group_name, |
| keys[i], |
| NULL); |
| if (!value) |
| continue; |
| |
| gtk_print_settings_set (settings, keys[i], value); |
| g_free (value); |
| } |
| |
| g_strfreev (keys); |
| |
| return TRUE; |
| } |
| |
| /** |
| * gtk_print_settings_new_from_key_file: |
| * @key_file: the #GKeyFile to retrieve the settings from |
| * @group_name: (allow-none): the name of the group to use, or %NULL to use |
| * the default “Print Settings” |
| * @error: (allow-none): return location for errors, or %NULL |
| * |
| * Reads the print settings from the group @group_name in @key_file. Returns a |
| * new #GtkPrintSettings object with the restored settings, or %NULL if an |
| * error occurred. If the file could not be loaded then error is set to either |
| * a #GFileError or #GKeyFileError. |
| * |
| * Returns: the restored #GtkPrintSettings |
| */ |
| GtkPrintSettings * |
| gtk_print_settings_new_from_key_file (GKeyFile *key_file, |
| const gchar *group_name, |
| GError **error) |
| { |
| GtkPrintSettings *settings = gtk_print_settings_new (); |
| |
| if (!gtk_print_settings_load_key_file (settings, key_file, |
| group_name, error)) |
| { |
| g_object_unref (settings); |
| settings = NULL; |
| } |
| |
| return settings; |
| } |
| |
| /** |
| * gtk_print_settings_to_file: |
| * @settings: a #GtkPrintSettings |
| * @file_name: (type filename): the file to save to |
| * @error: (allow-none): return location for errors, or %NULL |
| * |
| * This function saves the print settings from @settings to @file_name. If the |
| * file could not be loaded then error is set to either a #GFileError or |
| * #GKeyFileError. |
| * |
| * Returns: %TRUE on success |
| */ |
| gboolean |
| gtk_print_settings_to_file (GtkPrintSettings *settings, |
| const gchar *file_name, |
| GError **error) |
| { |
| GKeyFile *key_file; |
| gboolean retval = FALSE; |
| char *data = NULL; |
| gsize len; |
| GError *err = NULL; |
| |
| g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE); |
| g_return_val_if_fail (file_name != NULL, FALSE); |
| |
| key_file = g_key_file_new (); |
| gtk_print_settings_to_key_file (settings, key_file, NULL); |
| |
| data = g_key_file_to_data (key_file, &len, &err); |
| if (!data) |
| goto out; |
| |
| retval = g_file_set_contents (file_name, data, len, &err); |
| |
| out: |
| if (err != NULL) |
| g_propagate_error (error, err); |
| |
| g_key_file_free (key_file); |
| g_free (data); |
| |
| return retval; |
| } |
| |
| typedef struct { |
| GKeyFile *key_file; |
| const gchar *group_name; |
| } SettingsData; |
| |
| static void |
| add_value_to_key_file (const gchar *key, |
| const gchar *value, |
| SettingsData *data) |
| { |
| g_key_file_set_string (data->key_file, data->group_name, key, value); |
| } |
| |
| /** |
| * gtk_print_settings_to_key_file: |
| * @settings: a #GtkPrintSettings |
| * @key_file: the #GKeyFile to save the print settings to |
| * @group_name: (nullable): the group to add the settings to in @key_file, or |
| * %NULL to use the default “Print Settings” |
| * |
| * This function adds the print settings from @settings to @key_file. |
| */ |
| void |
| gtk_print_settings_to_key_file (GtkPrintSettings *settings, |
| GKeyFile *key_file, |
| const gchar *group_name) |
| { |
| SettingsData data; |
| |
| g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings)); |
| g_return_if_fail (key_file != NULL); |
| |
| if (!group_name) |
| group_name = KEYFILE_GROUP_NAME; |
| |
| data.key_file = key_file; |
| data.group_name = group_name; |
| |
| gtk_print_settings_foreach (settings, |
| (GtkPrintSettingsFunc) add_value_to_key_file, |
| &data); |
| } |
| |
| static void |
| add_to_variant (const gchar *key, |
| const gchar *value, |
| gpointer data) |
| { |
| GVariantBuilder *builder = data; |
| g_variant_builder_add (builder, "{sv}", key, g_variant_new_string (value)); |
| } |
| |
| /** |
| * gtk_print_settings_to_gvariant: |
| * @settings: a #GtkPrintSettings |
| * |
| * Serialize print settings to an a{sv} variant. |
| * |
| * Returns: (transfer none): a new, floating, #GVariant |
| */ |
| GVariant * |
| gtk_print_settings_to_gvariant (GtkPrintSettings *settings) |
| { |
| GVariantBuilder builder; |
| |
| g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT); |
| gtk_print_settings_foreach (settings, add_to_variant, &builder); |
| |
| return g_variant_builder_end (&builder); |
| } |
| |
| /** |
| * gtk_print_settings_new_from_gvariant: |
| * @variant: an a{sv} #GVariant |
| * |
| * Deserialize print settings from an a{sv} variant in |
| * the format produced by gtk_print_settings_to_gvariant(). |
| * |
| * Returns: (transfer full): a new #GtkPrintSettings object |
| */ |
| GtkPrintSettings * |
| gtk_print_settings_new_from_gvariant (GVariant *variant) |
| { |
| GtkPrintSettings *settings; |
| int i; |
| |
| g_return_val_if_fail (g_variant_is_of_type (variant, G_VARIANT_TYPE_VARDICT), NULL); |
| |
| settings = gtk_print_settings_new (); |
| |
| for (i = 0; i < g_variant_n_children (variant); i++) |
| { |
| const char *key; |
| GVariant *v; |
| |
| g_variant_get_child (variant, i, "{&sv}", &key, &v); |
| if (g_variant_is_of_type (v, G_VARIANT_TYPE_STRING)) |
| gtk_print_settings_set (settings, key, g_variant_get_string (v, NULL)); |
| g_variant_unref (v); |
| } |
| |
| return settings; |
| } |