]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkprintsettings.c
Doc fixes
[~andy/gtk] / gtk / gtkprintsettings.c
index bee1913a122a806f345fcf8191d2bd30f8d95c56..4328960f9ec5c52a22b9b6afe6adb85341bee095 100644 (file)
@@ -22,6 +22,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <glib/gprintf.h>
+#include <gtk/gtk.h>
 #include "gtkprintsettings.h"
 #include "gtkprintutils.h"
 #include "gtkalias.h"
@@ -45,6 +46,8 @@ struct _GtkPrintSettingsClass
   GObjectClass parent_class;
 };
 
+#define KEYFILE_GROUP_NAME "Print Settings"
+
 G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
 
 static void
@@ -871,7 +874,7 @@ gtk_print_settings_get_duplex (GtkPrintSettings *settings)
     return GTK_PRINT_DUPLEX_HORIZONTAL;
   
   if (strcmp (val, "vertical") == 0)
-    return GTK_PRINT_DUPLEX_HORIZONTAL;
+    return GTK_PRINT_DUPLEX_VERTICAL;
   
   return GTK_PRINT_DUPLEX_SIMPLEX;
 }
@@ -1036,6 +1039,73 @@ gtk_print_settings_set_page_set (GtkPrintSettings *settings,
   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.
+ * 
+ * Return value: layout of page in number-up mode
+ *
+ * Since: 2.14
+ */
+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.
+ * 
+ * Since: 2.14
+ */
+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
@@ -1123,7 +1193,9 @@ gtk_print_settings_get_resolution (GtkPrintSettings *settings)
  * @settings: a #GtkPrintSettings
  * @resolution: the resolution in dpi
  * 
- * Sets the value of %GTK_PRINT_SETTINGS_RESOLUTION.
+ * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
+ * %GTK_PRINT_SETTINGS_RESOLUTION_X and 
+ * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
  * 
  * Since: 2.10
  */
@@ -1133,6 +1205,100 @@ gtk_print_settings_set_resolution (GtkPrintSettings *settings,
 {
   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.
+ * 
+ * Return value: the horizontal resolution in dpi
+ *
+ * Since: 2.16
+ */
+gint
+gtk_print_settings_get_resolution_x (GtkPrintSettings *settings)
+{
+  return gtk_print_settings_get_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X);
+}
+
+/**
+ * gtk_print_settings_get_resolution_y:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_Y.
+ * 
+ * Return value: the vertical resolution in dpi
+ *
+ * Since: 2.16
+ */
+gint
+gtk_print_settings_get_resolution_y (GtkPrintSettings *settings)
+{
+  return gtk_print_settings_get_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y);
+}
+
+/**
+ * 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.
+ * 
+ * Since: 2.16
+ */
+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.
+ * 
+ * Return value: the resolution in lpi (lines per inch)
+ *
+ * Since: 2.16
+ */
+gdouble
+gtk_print_settings_get_printer_lpi (GtkPrintSettings *settings)
+{
+  return gtk_print_settings_get_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI);
+}
+
+/**
+ * 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.
+ * 
+ * Since: 2.16
+ */
+void
+gtk_print_settings_set_printer_lpi (GtkPrintSettings *settings,
+                                   gdouble           lpi)
+{
+  gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI,
+                                lpi);
 }
 
 /**
@@ -1281,8 +1447,6 @@ gtk_print_settings_get_page_ranges (GtkPrintSettings *settings,
        {
          str++;
          end = (gint)strtol (str, NULL, 10);
-         if (end < start)
-           end = start;
        }
 
       ranges[i].start = start;
@@ -1499,7 +1663,252 @@ gtk_print_settings_set_output_bin (GtkPrintSettings *settings,
 {
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN, output_bin);
 }
+
+/**
+ * gtk_print_settings_load_file:
+ * @settings: a #GtkPrintSettings
+ * @file_name: the filename to read the settings from
+ * @error: return location for errors, or %NULL
+ *
+ * Reads the print settings from @file_name.
+ * See gtk_print_settings_to_file().
+ *
+ * Return value: %TRUE on success
+ *
+ * Since: 2.14
+ */
+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: the filename to read the settings from
+ * @error: 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.
+ * See gtk_print_settings_to_file().
+ *
+ * Return value: the restored #GtkPrintSettings
+ * 
+ * Since: 2.12
+ */
+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: the name of the group to use, or %NULL to use the default
+ *     "Print Settings"
+ * @error: return location for errors, or %NULL
+ * 
+ * Reads the print settings from the group @group_name in @key_file. 
+ *
+ * Return value: %TRUE on success
+ * 
+ * Since: 2.14
+ */
+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,
+                                    KEYFILE_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: the name of the group to use, or %NULL to use
+ *     the default "Print Settings"
+ * @error: 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.
+ *
+ * Return value: the restored #GtkPrintSettings
+ *
+ * Since: 2.12
+ */
+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: the file to save to
+ * @error: return location for errors, or %NULL
+ * 
+ * This function saves the print settings from @settings to @file_name.
+ * 
+ * Return value: %TRUE on success
+ *
+ * Since: 2.12
+ */
+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: 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.
+ * 
+ * Since: 2.12
+ */
+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);
+}
+
 
 #define __GTK_PRINT_SETTINGS_C__
 #include "gtkaliasdef.c"