X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkpagesetup.c;h=40c3bdeeb69b98f68b12c75704886e4b5647b7d6;hb=5e2c23214564f7dcc687fa8467020eeb6b9407a9;hp=b7a0aa3f9a2c268b14675b7fa5eaaf659237eab7;hpb=f4174cfb2a0afcbb8b6f013642986a490ee47ab6;p=~andy%2Fgtk diff --git a/gtk/gtkpagesetup.c b/gtk/gtkpagesetup.c index b7a0aa3f9..40c3bdeeb 100644 --- a/gtk/gtkpagesetup.c +++ b/gtk/gtkpagesetup.c @@ -13,9 +13,7 @@ * 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. + * License along with this library. If not, see . */ #include "config.h" @@ -25,7 +23,58 @@ #include "gtkprintoperation.h" /* for GtkPrintError */ #include "gtkintl.h" #include "gtktypebuiltins.h" -#include "gtkalias.h" + +/** + * SECTION:gtkpagesetup + * @Short_description: Stores page setup information + * @Title: GtkPageSetup + * + * A GtkPageSetup object stores the page size, orientation and margins. + * The idea is that you can get one of these from the page setup dialog + * and then pass it to the #GtkPrintOperation when printing. + * The benefit of splitting this out of the #GtkPrintSettings is that + * these affect the actual layout of the page, and thus need to be set + * long before user prints. + * + * + * The margins specified in this object are the "print margins", i.e. the + * parts of the page that the printer cannot print on. These are different + * from the layout margins that a word processor uses; they are typically + * used to determine the minimal size for the layout + * margins. + * + * + * To obtain a #GtkPageSetup use gtk_page_setup_new() to get the defaults, + * or use gtk_print_run_page_setup_dialog() to show the page setup dialog + * and receive the resulting page setup. + * + * + * A page setup dialog + * + * static GtkPrintSettings *settings = NULL; + * static GtkPageSetup *page_setup = NULL; + * + * static void + * do_page_setup (void) + * { + * GtkPageSetup *new_page_setup; + * + * if (settings == NULL) + * settings = gtk_print_settings_new (); + * + * new_page_setup = gtk_print_run_page_setup_dialog (GTK_WINDOW (main_window), + * page_setup, settings); + * + * if (page_setup) + * g_object_unref (page_setup); + * + * page_setup = new_page_setup; + * } + * + * + * + * Printing support was added in GTK+ 2.10. + */ #define KEYFILE_GROUP_NAME "Page Setup" @@ -99,10 +148,10 @@ gtk_page_setup_new (void) /** * gtk_page_setup_copy: * @other: the #GtkPageSetup to copy - * + * * Copies a #GtkPageSetup. - * - * Return value: a copy of @other + * + * Return value: (transfer full): a copy of @other * * Since: 2.10 */ @@ -113,6 +162,7 @@ gtk_page_setup_copy (GtkPageSetup *other) copy = gtk_page_setup_new (); copy->orientation = other->orientation; + gtk_paper_size_free (copy->paper_size); copy->paper_size = gtk_paper_size_copy (other->paper_size); copy->top_margin = other->top_margin; copy->bottom_margin = other->bottom_margin; @@ -471,11 +521,45 @@ gtk_page_setup_get_page_height (GtkPageSetup *setup, return _gtk_print_convert_from_mm (height, unit); } +/** + * gtk_page_setup_load_file: + * @setup: a #GtkPageSetup + * @file_name: (type filename): the filename to read the page setup from + * @error: (allow-none): return location for an error, or %NULL + * + * Reads the page setup from the file @file_name. + * See gtk_page_setup_to_file(). + * + * Return value: %TRUE on success + * + * Since: 2.14 + */ +gboolean +gtk_page_setup_load_file (GtkPageSetup *setup, + const gchar *file_name, + GError **error) +{ + gboolean retval = FALSE; + GKeyFile *key_file; + + g_return_val_if_fail (GTK_IS_PAGE_SETUP (setup), 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_page_setup_load_key_file (setup, key_file, NULL, error)) + retval = TRUE; + + g_key_file_free (key_file); + + return retval; +} /** * gtk_page_setup_new_from_file: - * @file_name: the filename to read the page setup from - * @error: return location for an error, or %NULL + * @file_name: (type filename): the filename to read the page setup from + * @error: (allow-none): return location for an error, or %NULL * * Reads the page setup from the file @file_name. Returns a * new #GtkPageSetup object with the restored page setup, @@ -489,24 +573,15 @@ GtkPageSetup * gtk_page_setup_new_from_file (const gchar *file_name, GError **error) { - GtkPageSetup *page_setup; - GKeyFile *key_file; - GError *err = NULL; + GtkPageSetup *setup = gtk_page_setup_new (); - g_return_val_if_fail (file_name != NULL, NULL); - - key_file = g_key_file_new (); - if (!g_key_file_load_from_file (key_file, file_name, 0, &err)) + if (!gtk_page_setup_load_file (setup, file_name, error)) { - g_key_file_free (key_file); - g_propagate_error (error, err); - return NULL; + g_object_unref (setup); + setup = NULL; } - page_setup = gtk_page_setup_new_from_key_file (key_file, NULL, error); - g_key_file_free (key_file); - - return page_setup; + return setup; } /* something like this should really be in gobject! */ @@ -531,44 +606,44 @@ string_to_enum (GType type, } /** - * gtk_page_setup_new_from_key_file: + * gtk_page_setup_load_key_file: + * @setup: a #GtkPageSetup * @key_file: the #GKeyFile to retrieve the page_setup from - * @group_name: the name of the group in the key_file to read, or %NULL + * @group_name: (allow-none): the name of the group in the key_file to read, or %NULL * to use the default name "Page Setup" - * @error: return location for an error, or %NULL + * @error: (allow-none): return location for an error, or %NULL * * Reads the page setup from the group @group_name in the key file - * @key_file. Returns a new #GtkPageSetup object with the restored - * page setup, or %NULL if an error occurred. - * - * Return value: the restored #GtkPageSetup + * @key_file. * - * Since: 2.12 + * Return value: %TRUE on success + * + * Since: 2.14 */ -GtkPageSetup * -gtk_page_setup_new_from_key_file (GKeyFile *key_file, - const gchar *group_name, - GError **error) +gboolean +gtk_page_setup_load_key_file (GtkPageSetup *setup, + GKeyFile *key_file, + const gchar *group_name, + GError **error) { - GtkPageSetup *page_setup = NULL; GtkPaperSize *paper_size; gdouble top, bottom, left, right; char *orientation = NULL, *freeme = NULL; - gboolean retval = TRUE; + gboolean retval = FALSE; GError *err = NULL; - g_return_val_if_fail (key_file != NULL, NULL); + g_return_val_if_fail (GTK_IS_PAGE_SETUP (setup), FALSE); + g_return_val_if_fail (key_file != NULL, FALSE); if (!group_name) group_name = KEYFILE_GROUP_NAME; if (!g_key_file_has_group (key_file, group_name)) { - g_set_error (error, - GTK_PRINT_ERROR, - GTK_PRINT_ERROR_INVALID_FILE, - _("Not a valid page setup file")); - retval = FALSE; + g_set_error_literal (error, + GTK_PRINT_ERROR, + GTK_PRINT_ERROR_INVALID_FILE, + _("Not a valid page setup file")); goto out; } @@ -577,7 +652,6 @@ gtk_page_setup_new_from_key_file (GKeyFile *key_file, if (err != NULL) \ { \ g_propagate_error (error, err);\ - retval = FALSE;\ goto out;\ } @@ -595,36 +669,67 @@ gtk_page_setup_new_from_key_file (GKeyFile *key_file, goto out; } - page_setup = gtk_page_setup_new (); - gtk_page_setup_set_paper_size (page_setup, paper_size); + gtk_page_setup_set_paper_size (setup, paper_size); gtk_paper_size_free (paper_size); - gtk_page_setup_set_top_margin (page_setup, top, GTK_UNIT_MM); - gtk_page_setup_set_bottom_margin (page_setup, bottom, GTK_UNIT_MM); - gtk_page_setup_set_left_margin (page_setup, left, GTK_UNIT_MM); - gtk_page_setup_set_right_margin (page_setup, right, GTK_UNIT_MM); + gtk_page_setup_set_top_margin (setup, top, GTK_UNIT_MM); + gtk_page_setup_set_bottom_margin (setup, bottom, GTK_UNIT_MM); + gtk_page_setup_set_left_margin (setup, left, GTK_UNIT_MM); + gtk_page_setup_set_right_margin (setup, right, GTK_UNIT_MM); orientation = g_key_file_get_string (key_file, group_name, "Orientation", NULL); if (orientation) { - gtk_page_setup_set_orientation (page_setup, + gtk_page_setup_set_orientation (setup, string_to_enum (GTK_TYPE_PAGE_ORIENTATION, orientation)); g_free (orientation); } + retval = TRUE; + out: g_free (freeme); + return retval; +} - return page_setup; +/** + * gtk_page_setup_new_from_key_file: + * @key_file: the #GKeyFile to retrieve the page_setup from + * @group_name: (allow-none): the name of the group in the key_file to read, or %NULL + * to use the default name "Page Setup" + * @error: (allow-none): return location for an error, or %NULL + * + * Reads the page setup from the group @group_name in the key file + * @key_file. Returns a new #GtkPageSetup object with the restored + * page setup, or %NULL if an error occurred. + * + * Return value: the restored #GtkPageSetup + * + * Since: 2.12 + */ +GtkPageSetup * +gtk_page_setup_new_from_key_file (GKeyFile *key_file, + const gchar *group_name, + GError **error) +{ + GtkPageSetup *setup = gtk_page_setup_new (); + + if (!gtk_page_setup_load_key_file (setup, key_file, group_name, error)) + { + g_object_unref (setup); + setup = NULL; + } + + return setup; } /** * gtk_page_setup_to_file: * @setup: a #GtkPageSetup - * @file_name: the file to save to - * @error: return location for errors, or %NULL + * @file_name: (type filename): the file to save to + * @error: (allow-none): return location for errors, or %NULL * * This function saves the information from @setup to @file_name. * @@ -726,6 +831,3 @@ gtk_page_setup_to_key_file (GtkPageSetup *setup, "Orientation", orientation); g_free (orientation); } - -#define __GTK_PAGE_SETUP_C__ -#include "gtkaliasdef.c"