gimp r24960 - in trunk: . plug-ins/print



Author: neo
Date: Mon Feb 25 20:40:22 2008
New Revision: 24960
URL: http://svn.gnome.org/viewvc/gimp?rev=24960&view=rev

Log:
2008-02-25  Sven Neumann  <sven gimp org>

	* plug-ins/print/Makefile.am
	* plug-ins/print/print-utils.[ch]: added new files with utility
	functions.

	* plug-ins/print/print-settings.c: use the new utility
	functions for loading and saving GKeyFile.

	* plug-ins/print/print-page-setup.[ch]
	* plug-ins/print/print.c: also store the page setup in an image
	parasite. Fixes most of what remained to be done for bug 
#513291.



Added:
   trunk/plug-ins/print/print-utils.c
   trunk/plug-ins/print/print-utils.h
Modified:
   trunk/ChangeLog
   trunk/plug-ins/print/Makefile.am
   trunk/plug-ins/print/print-page-setup.c
   trunk/plug-ins/print/print-page-setup.h
   trunk/plug-ins/print/print-settings.c
   trunk/plug-ins/print/print.c

Modified: trunk/plug-ins/print/Makefile.am
==============================================================================
--- trunk/plug-ins/print/Makefile.am	(original)
+++ trunk/plug-ins/print/Makefile.am	Mon Feb 25 20:40:22 2008
@@ -49,4 +49,6 @@
 	print-preview.c		\
 	print-preview.h		\
 	print-settings.c	\
-	print-settings.h
+	print-settings.h	\
+	print-utils.c		\
+	print-utils.h

Modified: trunk/plug-ins/print/print-page-setup.c
==============================================================================
--- trunk/plug-ins/print/print-page-setup.c	(original)
+++ trunk/plug-ins/print/print-page-setup.c	Mon Feb 25 20:40:22 2008
@@ -22,6 +22,7 @@
 #include <libgimp/gimpui.h>
 
 #include "print-page-setup.h"
+#include "print-utils.h"
 
 
 void
@@ -41,49 +42,62 @@
   gtk_print_operation_set_default_page_setup (operation, setup);
 }
 
-gboolean
+void
 print_page_setup_load (GtkPrintOperation *operation,
                        gint32             image_ID)
 {
-  GtkPageSetup *setup;
-  gchar        *filename;
+  GKeyFile *key_file;
 
-  filename = g_build_filename (gimp_directory (), "print-page-setup", NULL);
+  g_return_if_fail (GTK_IS_PRINT_OPERATION (operation));
 
-  setup = gtk_page_setup_new_from_file (filename, NULL);
+  key_file = print_utils_key_file_load_from_parasite (image_ID,
+                                                      "print-page-setup");
 
-  g_free (filename);
+  if (! key_file)
+    key_file = print_utils_key_file_load_from_rcfile ("print-page-setup");
 
-  if (setup)
+  if (key_file)
     {
-      gtk_print_operation_set_default_page_setup (operation, setup);
-      g_object_unref (setup);
+      GtkPageSetup *setup;
+      GError       *error = NULL;
 
-      return TRUE;
-    }
+      setup = gtk_page_setup_new_from_key_file (key_file, NULL, &error);
 
-  return FALSE;
+      if (setup)
+        {
+          gtk_print_operation_set_default_page_setup (operation, setup);
+          g_object_unref (setup);
+        }
+      else
+        {
+          g_warning ("unable to read page setup from key file: %s",
+                     error->message);
+          g_error_free (error);
+        }
+
+      g_key_file_free (key_file);
+    }
 }
 
 void
-print_page_setup_save (GtkPrintOperation *operation)
+print_page_setup_save (GtkPrintOperation *operation,
+                       gint32             image_ID)
 {
   GtkPageSetup *setup;
-  gchar        *filename;
-  GError       *error = NULL;
+  GKeyFile     *key_file;
 
-  setup = gtk_print_operation_get_default_page_setup (operation);
+  g_return_if_fail (GTK_IS_PRINT_OPERATION (operation));
+
+  key_file = g_key_file_new ();
 
-  filename = g_build_filename (gimp_directory (), "print-page-setup", NULL);
+  setup = gtk_print_operation_get_default_page_setup (operation);
 
-  gtk_page_setup_to_file (setup, filename, &error);
+  gtk_page_setup_to_key_file (setup, key_file, NULL);
 
-  if (error)
-    {
-      g_message ("Error saving page setup as resource file: %s",
-                 error->message);
-      g_error_free (error);
-    }
+  print_utils_key_file_save_as_parasite (key_file,
+                                         image_ID, "print-page-setup");
+  print_utils_key_file_save_as_rcfile (key_file,
+                                       "print-page-setup");
 
-  g_free (filename);
+  g_key_file_free (key_file);
 }

Modified: trunk/plug-ins/print/print-page-setup.h
==============================================================================
--- trunk/plug-ins/print/print-page-setup.h	(original)
+++ trunk/plug-ins/print/print-page-setup.h	Mon Feb 25 20:40:22 2008
@@ -17,9 +17,10 @@
  */
 
 
-void      print_page_setup_dialog (GtkPrintOperation *operation);
-gboolean  print_page_setup_load   (GtkPrintOperation *operation,
-                                   gint32             image_ID);
-void      print_page_setup_save   (GtkPrintOperation *operation);
+void   print_page_setup_dialog (GtkPrintOperation *operation);
+void   print_page_setup_load   (GtkPrintOperation *operation,
+                                gint32             image_ID);
+void   print_page_setup_save   (GtkPrintOperation *operation,
+                                gint32             image_ID);
 
 

Modified: trunk/plug-ins/print/print-settings.c
==============================================================================
--- trunk/plug-ins/print/print-settings.c	(original)
+++ trunk/plug-ins/print/print-settings.c	Mon Feb 25 20:40:22 2008
@@ -23,6 +23,7 @@
 
 #include "print.h"
 #include "print-settings.h"
+#include "print-utils.h"
 
 
 #define PRINT_SETTINGS_MAJOR_VERSION 0
@@ -31,11 +32,6 @@
 
 static GKeyFile * print_settings_key_file_from_settings      (PrintData         *data);
 
-static void       print_settings_save_resource_file          (GKeyFile          *settings_key_file);
-
-static void       print_settings_save_as_parasite            (GKeyFile          *settings_key_file,
-                                                              gint32             image_ID);
-
 static void       print_settings_add_to_key_file             (const gchar       *key,
                                                               const gchar       *value,
                                                               gpointer           data);
@@ -81,7 +77,7 @@
 {
   GKeyFile *key_file = print_settings_key_file_from_settings (data);
 
-  print_settings_save_resource_file (key_file);
+  print_utils_key_file_save_as_rcfile (key_file, "print-settings");
 
   /* image setup */
   if (gimp_image_is_valid (data->image_id))
@@ -101,7 +97,8 @@
       g_key_file_set_boolean (key_file, "image-setup",
                               "use-full-page", data->use_full_page);
 
-      print_settings_save_as_parasite (key_file, data->image_id);
+      print_utils_key_file_save_as_parasite (key_file,
+                                             data->image_id, "print-settings");
     }
 
   g_key_file_free (key_file);
@@ -117,8 +114,6 @@
   GtkPrintSettings  *settings;
   GKeyFile          *key_file  = g_key_file_new ();
 
-  g_key_file_set_list_separator (key_file, '=');
-
   /* put version information into the file */
   g_key_file_set_integer (key_file, "meta", "major-version",
                           PRINT_SETTINGS_MAJOR_VERSION);
@@ -136,67 +131,6 @@
 }
 
 /*
- * create a resource file from a GKeyFile holding the settings
- */
-static void
-print_settings_save_resource_file (GKeyFile *settings_key_file)
-{
-  gchar  *filename;
-  gchar  *contents;
-  gsize   length;
-  GError *error = NULL;
-
-  contents = g_key_file_to_data (settings_key_file, &length, &error);
-
-  if (! contents)
-    {
-      g_warning ("Unable to get contents of settings key file: %s",
-                 error->message);
-      g_error_free (error);
-      return;
-    }
-
-  filename = g_build_filename (gimp_directory (), "print-settings", NULL);
-
-  if (! g_file_set_contents (filename, contents, length, &error))
-    {
-      g_warning ("Unable to write print settings to '%s': %s",
-                 gimp_filename_to_utf8 (filename), error->message);
-      g_error_free (error);
-    }
-
-  g_free (filename);
-  g_free (contents);
-}
-
-/*
- * create an image parasite called "print-settings" from a GKeyFile
- * holding the print settings
- */
-static void
-print_settings_save_as_parasite (GKeyFile *settings_key_file,
-                                 gint32    image_ID)
-{
-  gchar  *contents;
-  gsize   length;
-  GError *error = NULL;
-
-  contents = g_key_file_to_data (settings_key_file, &length, &error);
-
-  if (! contents)
-    {
-      g_warning ("Unable to get contents of settings key file: %s",
-                 error->message);
-      g_error_free (error);
-      return;
-    }
-
-  gimp_image_attach_new_parasite (image_ID, "print-settings",
-                                  0, length, contents);
-  g_free (contents);
-}
-
-/*
  * callback used in gtk_print_settings_foreach loop
  */
 static void
@@ -215,22 +149,9 @@
 static GKeyFile *
 print_settings_key_file_from_resource_file (void)
 {
-  GKeyFile *key_file = g_key_file_new ();
-  gchar    *filename;
-
-  g_key_file_set_list_separator (key_file, '=');
-
-  filename = g_build_filename (gimp_directory (), "print-settings", NULL);
-
-  if (! g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL))
-    {
-      g_key_file_free (key_file);
-      key_file = NULL;
-    }
-
-  g_free (filename);
+  GKeyFile *key_file = print_utils_key_file_load_from_rcfile ("print-settings");
 
-  if (! print_settings_check_version (key_file))
+  if (key_file && ! print_settings_check_version (key_file))
     {
       g_key_file_free (key_file);
       return NULL;
@@ -246,30 +167,12 @@
 static GKeyFile *
 print_settings_key_file_from_parasite (gint32 image_ID)
 {
-  GimpParasite *parasite;
-  GKeyFile     *key_file;
-
-  parasite = gimp_image_parasite_find (image_ID, "print-settings");
-
-  if (! parasite)
-    return NULL;
-
-  key_file = g_key_file_new ();
-
-  g_key_file_set_list_separator (key_file, '=');
-
-  if (! g_key_file_load_from_data (key_file,
-                                   gimp_parasite_data (parasite),
-                                   gimp_parasite_data_size (parasite),
-                                   G_KEY_FILE_NONE, NULL))
-    {
-      g_key_file_free (key_file);
-      key_file = NULL;;
-    }
+  GKeyFile *key_file;
 
-  gimp_parasite_free (parasite);
+  key_file = print_utils_key_file_load_from_parasite (image_ID,
+                                                      "print-settings");
 
-  if (! print_settings_check_version (key_file))
+  if (key_file && ! print_settings_check_version (key_file))
     {
       g_key_file_free (key_file);
       return FALSE;

Added: trunk/plug-ins/print/print-utils.c
==============================================================================
--- (empty file)
+++ trunk/plug-ins/print/print-utils.c	Mon Feb 25 20:40:22 2008
@@ -0,0 +1,142 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <libgimp/gimp.h>
+
+#include "print-utils.h"
+
+
+GKeyFile *
+print_utils_key_file_load_from_rcfile (const gchar *basename)
+{
+  GKeyFile *key_file;
+  gchar    *filename;
+
+  g_return_val_if_fail (basename != NULL, NULL);
+
+  filename = g_build_filename (gimp_directory (), "print-settings", NULL);
+
+  key_file = g_key_file_new ();
+
+  if (! g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL))
+    {
+      g_key_file_free (key_file);
+      key_file = NULL;
+    }
+
+  g_free (filename);
+
+  return key_file;
+}
+
+GKeyFile *
+print_utils_key_file_load_from_parasite (gint32       image_ID,
+                                         const gchar *parasite_name)
+{
+  GimpParasite *parasite;
+  GKeyFile     *key_file;
+  GError       *error = NULL;
+
+  g_return_val_if_fail (parasite_name != NULL, NULL);
+
+  parasite = gimp_image_parasite_find (image_ID, parasite_name);
+
+  if (! parasite)
+    return NULL;
+
+  key_file = g_key_file_new ();
+
+  if (! g_key_file_load_from_data (key_file,
+                                   gimp_parasite_data (parasite),
+                                   gimp_parasite_data_size (parasite),
+                                   G_KEY_FILE_NONE, &error))
+    {
+      g_key_file_free (key_file);
+      gimp_parasite_free (parasite);
+
+      g_warning ("Unable to create key file from image parasite '%s': %s",
+                 parasite_name, error->message);
+      g_error_free (error);
+      return NULL;
+    }
+
+  gimp_parasite_free (parasite);
+
+  return key_file;
+}
+
+void
+print_utils_key_file_save_as_rcfile (GKeyFile    *key_file,
+                                     const gchar *basename)
+{
+  gchar  *filename;
+  gchar  *contents;
+  gsize   length;
+  GError *error = NULL;
+
+  g_return_if_fail (basename != NULL);
+
+  contents = g_key_file_to_data (key_file, &length, &error);
+
+  if (! contents)
+    {
+      g_warning ("Unable to get contents of key file for '%s': %s",
+                 basename, error->message);
+      g_error_free (error);
+      return;
+    }
+
+  filename = g_build_filename (gimp_directory (), basename, NULL);
+
+  if (! g_file_set_contents (filename, contents, length, &error))
+    {
+      g_warning ("Unable to write settings to '%s': %s",
+                 gimp_filename_to_utf8 (filename), error->message);
+      g_error_free (error);
+    }
+
+  g_free (filename);
+  g_free (contents);
+}
+
+void
+print_utils_key_file_save_as_parasite (GKeyFile    *key_file,
+                                       gint32       image_ID,
+                                       const gchar *parasite_name)
+{
+  gchar  *contents;
+  gsize   length;
+  GError *error = NULL;
+
+  g_return_if_fail (parasite_name != NULL);
+
+  contents = g_key_file_to_data (key_file, &length, &error);
+
+  if (! contents)
+    {
+      g_warning ("Unable to get contents of key file for parasite '%s': %s",
+                 parasite_name, error->message);
+      g_error_free (error);
+      return;
+    }
+
+  gimp_image_attach_new_parasite (image_ID, parasite_name, 0, length, contents);
+  g_free (contents);
+}

Added: trunk/plug-ins/print/print-utils.h
==============================================================================
--- (empty file)
+++ trunk/plug-ins/print/print-utils.h	Mon Feb 25 20:40:22 2008
@@ -0,0 +1,27 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+GKeyFile * print_utils_key_file_load_from_rcfile   (const gchar *basename);
+GKeyFile * print_utils_key_file_load_from_parasite (gint32       image_ID,
+                                                    const gchar *parasite_name);
+
+void       print_utils_key_file_save_as_rcfile     (GKeyFile    *key_file,
+                                                    const gchar *basename);
+void       print_utils_key_file_save_as_parasite   (GKeyFile    *key_file,
+                                                    gint32       image_ID,
+                                                    const gchar *parasite_name);

Modified: trunk/plug-ins/print/print.c
==============================================================================
--- trunk/plug-ins/print/print.c	(original)
+++ trunk/plug-ins/print/print.c	Mon Feb 25 20:40:22 2008
@@ -301,7 +301,7 @@
 
   print_page_setup_load (operation, image_ID);
   print_page_setup_dialog (operation);
-  print_page_setup_save (operation);
+  print_page_setup_save (operation, image_ID);
 
   g_object_unref (operation);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]