summaryrefslogtreecommitdiff
path: root/gtk/gtkprintsettings.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2006-04-21 15:09:32 +0000
committerAlexander Larsson <alexl@src.gnome.org>2006-04-21 15:09:32 +0000
commit27f746fbd0e56872a8d3b4bfff2588ad0b7cd7c4 (patch)
treedcf0769596bd36a76b7dcea7eed46b378a634f72 /gtk/gtkprintsettings.c
parentea32742b93348e1ce47cd92a26afe5317b37dd73 (diff)
downloadgtk+-27f746fbd0e56872a8d3b4bfff2588ad0b7cd7c4.tar.gz
Merge the gtk-printing branch. For more detailed ChangeLog entries, see
2006-04-21 Alexander Larsson <alexl@redhat.com> Merge the gtk-printing branch. For more detailed ChangeLog entries, see the branch. * .cvsignore: * Makefile.am: * configure.in: * docs/tools/widgets.c: * gtk+-unix-print-2.0.pc.in: * gtk/Makefile.am: * gtk/gen-paper-names.c: * gtk/gtk.h: * gtk/gtk.symbols: * gtk/gtkenums.h: * gtk/gtkiconfactory.c: * gtk/gtkmarshalers.list: * gtk/gtkpagesetup.[ch]: * gtk/gtkpagesetupunixdialog.[ch]: * gtk/gtkpapersize.[ch]: * gtk/gtkprint-win32.[ch]: * gtk/gtkprintbackend.[ch]: * gtk/gtkprintcontext.[ch]: * gtk/gtkprinter-private.h: * gtk/gtkprinter.[ch]: * gtk/gtkprinteroption.[ch]: * gtk/gtkprinteroptionset.[ch]: * gtk/gtkprinteroptionwidget.[ch]: * gtk/gtkprintjob.[ch]: * gtk/gtkprintoperation-private.h: * gtk/gtkprintoperation-unix.c: * gtk/gtkprintoperation-win32.c: * gtk/gtkprintoperation.[ch]: * gtk/gtkprintsettings.[ch]: * gtk/gtkprintunixdialog.[ch]: * gtk/paper_names.c: * gtk/paper_names_offsets.c: Platform independent printing API and implementations for unix and windows. * gtk/gtkstock.h: * gtk/stock-icons/24/gtk-orientation-landscape.png: * gtk/stock-icons/24/gtk-orientation-portrait.png: * gtk/stock-icons/24/gtk-orientation-reverse-landscape.png: Add stock icons for page orientation. * modules/Makefile.am: * modules/printbackends/Makefile.am: * modules/printbackends/cups/Makefile.am: * modules/printbackends/cups/gtkcupsutils.[ch]: * modules/printbackends/cups/gtkprintbackendcups.[ch]: * modules/printbackends/cups/gtkprintercups.[ch]: Cups printing backend for unix. * modules/printbackends/lpr/Makefile.am: * modules/printbackends/lpr/gtkprintbackendlpr.[ch]: lpr printing backend for unix. * modules/printbackends/pdf/Makefile.am: * modules/printbackends/pdf/gtkprintbackendpdf.[ch]: print-to-pdf printing backend for unix. * tests/.cvsignore: * tests/Makefile.am: * tests/print-editor.c: Test application for printing. * gdk/gdk.symbols: * gdk/win32/gdkevents-win32.c: * gdk/win32/gdkwin32.h: Add gdk_win32_set_modal_dialog_libgtk_only so that we can pump the mainloop while displaying a win32 common dialog. * gdk/directfb/Makefile.am: Whitespace cleanup.
Diffstat (limited to 'gtk/gtkprintsettings.c')
-rw-r--r--gtk/gtkprintsettings.c1230
1 files changed, 1230 insertions, 0 deletions
diff --git a/gtk/gtkprintsettings.c b/gtk/gtkprintsettings.c
new file mode 100644
index 0000000000..80c0c9913b
--- /dev/null
+++ b/gtk/gtkprintsettings.c
@@ -0,0 +1,1230 @@
+/* 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <glib/gprintf.h>
+#include "gtkprintsettings.h"
+#include "gtkalias.h"
+
+#define MM_PER_INCH 25.4
+#define POINTS_PER_INCH 72
+
+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;
+};
+
+G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
+
+static gdouble
+to_mm (gdouble len, GtkUnit unit)
+{
+ switch (unit)
+ {
+ case GTK_UNIT_MM:
+ return len;
+ case GTK_UNIT_INCH:
+ return len * MM_PER_INCH;
+ default:
+ case GTK_UNIT_PIXEL:
+ g_warning ("Unsupported unit");
+ /* Fall through */
+ case GTK_UNIT_POINTS:
+ return len * (MM_PER_INCH / POINTS_PER_INCH);
+ break;
+ }
+}
+
+static gdouble
+from_mm (gdouble len, GtkUnit unit)
+{
+ switch (unit)
+ {
+ case GTK_UNIT_MM:
+ return len;
+ case GTK_UNIT_INCH:
+ return len / MM_PER_INCH;
+ default:
+ case GTK_UNIT_PIXEL:
+ g_warning ("Unsupported unit");
+ /* Fall through */
+ case GTK_UNIT_POINTS:
+ return len / (MM_PER_INCH / POINTS_PER_INCH);
+ break;
+ }
+}
+
+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.
+ *
+ * Return value: a new #GtkPrintSettings object
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: a newly allocated copy of @other
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the string value for @key
+ *
+ * Since: 2.10
+ */
+G_CONST_RETURN 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: a string value, or %NULL
+ *
+ * Associates @value with @key.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: %TRUE, if @key has a value
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: %TRUE, if @key maps to a true value.
+ *
+ * Since: 2.10
+ **/
+gboolean
+gtk_print_settings_get_bool (GtkPrintSettings *settings,
+ const gchar *key)
+{
+ const gchar *val;
+
+ val = gtk_print_settings_get (settings, key);
+ if (val != NULL && strcmp (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.
+ *
+ * Return value: the boolean value associated with @key
+ *
+ * Since: 2.10
+ */
+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 (val != NULL && strcmp (val, "true") == 0)
+ return TRUE;
+
+ if (val != NULL && strcmp (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.
+ *
+ * Since: 2.10
+ */
+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().
+ *
+ * Return value: the floating point number associated with @key
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the double value of @key
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the length value of @key, converted to @unit
+ *
+ * Since: 2.10
+ */
+gdouble
+gtk_print_settings_get_length (GtkPrintSettings *settings,
+ const gchar *key,
+ GtkUnit unit)
+{
+ gdouble length = gtk_print_settings_get_double (settings, key);
+ return from_mm (length, unit);
+}
+
+/**
+ * gtk_print_settings_set_length:
+ * @settings: a #GtkPrintSettings
+ * @key: a key
+ * @length: a length
+ * @unit: the unit of @length
+ *
+ * Associates a length in units of @unit with @key.
+ *
+ * Since: 2.10
+ */
+void
+gtk_print_settings_set_length (GtkPrintSettings *settings,
+ const gchar *key,
+ gdouble length,
+ GtkUnit unit)
+{
+ gtk_print_settings_set_double (settings, key,
+ to_mm (length, 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.
+ *
+ * Return value: the integer value of @key
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the integer value of @key
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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: the function to call
+ * @user_data: user data for @func
+ *
+ * Calls @func for each key-value pair of @settings.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the printer name
+ *
+ * Since: 2.10
+ */
+G_CONST_RETURN 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.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the orientation
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the paper size
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the paper width, in units of @unit
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Return value: the paper height, in units of @unit
+ *
+ * Since: 2.10
+ */
+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.
+ *
+ * Since: 2.10
+ */
+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);
+}
+
+gboolean
+gtk_print_settings_get_use_color (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_bool_with_default (settings,
+ GTK_PRINT_SETTINGS_USE_COLOR,
+ TRUE);
+}
+
+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);
+}
+
+gboolean
+gtk_print_settings_get_collate (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_bool (settings,
+ 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);
+}
+
+gboolean
+gtk_print_settings_get_reverse (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_bool (settings,
+ 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);
+}
+
+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_HORIZONTAL;
+
+ return GTK_PRINT_DUPLEX_SIMPLEX;
+}
+
+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);
+}
+
+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;
+}
+
+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);
+}
+
+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;
+}
+
+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);
+}
+
+gint
+gtk_print_settings_get_num_copies (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUM_COPIES, 1);
+}
+
+void
+gtk_print_settings_set_num_copies (GtkPrintSettings *settings,
+ gint num_copies)
+{
+ gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_NUM_COPIES,
+ num_copies);
+}
+
+gint
+gtk_print_settings_get_number_up (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_int (settings, 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);
+}
+
+gint
+gtk_print_settings_get_resolution (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_int (settings, GTK_PRINT_SETTINGS_RESOLUTION);
+}
+
+void
+gtk_print_settings_set_resolution (GtkPrintSettings *settings,
+ gint resolution)
+{
+ gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
+ resolution);
+}
+
+gdouble
+gtk_print_settings_get_scale (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_double_with_default (settings,
+ GTK_PRINT_SETTINGS_SCALE,
+ 100.0);
+}
+
+void
+gtk_print_settings_set_scale (GtkPrintSettings *settings,
+ gdouble scale)
+{
+ gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_SCALE,
+ scale);
+}
+
+gboolean
+gtk_print_settings_get_print_to_file (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get_bool (settings,
+ GTK_PRINT_SETTINGS_PRINT_TO_FILE);
+}
+
+void
+gtk_print_settings_set_print_to_file (GtkPrintSettings *settings,
+ gboolean print_to_file)
+{
+ gtk_print_settings_set_bool (settings,
+ GTK_PRINT_SETTINGS_PRINT_TO_FILE,
+ print_to_file);
+}
+
+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, "current") == 0)
+ return GTK_PRINT_PAGES_CURRENT;
+
+ if (strcmp (val, "ranges") == 0)
+ return GTK_PRINT_PAGES_RANGES;
+
+ return GTK_PRINT_PAGES_ALL;
+}
+
+void
+gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
+ GtkPrintPages print_pages)
+{
+ const gchar *str;
+
+ switch (print_pages)
+ {
+ default:
+ case GTK_PRINT_PAGES_ALL:
+ str = "all";
+ break;
+ case GTK_PRINT_PAGES_CURRENT:
+ str = "current";
+ break;
+ case GTK_PRINT_PAGES_RANGES:
+ str = "ranges";
+ break;
+ }
+
+ gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINT_PAGES, str);
+}
+
+
+
+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);
+ if (end < start)
+ end = start;
+ }
+
+ ranges[i].start = start;
+ ranges[i].end = end;
+ }
+
+ *num_ranges = n;
+ return 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);
+}
+
+G_CONST_RETURN gchar *
+gtk_print_settings_get_default_source (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get (settings, 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);
+}
+
+G_CONST_RETURN gchar *
+gtk_print_settings_get_media_type (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get (settings, 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);
+}
+
+
+G_CONST_RETURN gchar *
+gtk_print_settings_get_dither (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get (settings, 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);
+}
+
+const gchar *
+gtk_print_settings_get_finishings (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get (settings, 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);
+}
+
+G_CONST_RETURN gchar *
+gtk_print_settings_get_output_bin (GtkPrintSettings *settings)
+{
+ return gtk_print_settings_get (settings, 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);
+}
+
+
+#define __GTK_PRINT_SETTINGS_C__
+#include "gtkaliasdef.c"