/* GTK - The GIMP Toolkit
* gtkpapersize.c: Paper Size
* Copyright (C) 2006, Red Hat, Inc.
+ * Copyright © 2006, 2007 Christian Persch
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
#include "gtkprintutils.h"
#include "gtkprintoperation.h" /* for GtkPrintError */
#include "gtkintl.h"
-#include "gtkalias.h"
#include "paper_names_offsets.c"
gboolean is_custom;
};
-GType
-gtk_paper_size_get_type (void)
-{
- static GType our_type = 0;
-
- if (our_type == 0)
- our_type = g_boxed_type_register_static (I_("GtkPaperSize"),
- (GBoxedCopyFunc)gtk_paper_size_copy,
- (GBoxedFreeFunc)gtk_paper_size_free);
- return our_type;
-}
+G_DEFINE_BOXED_TYPE (GtkPaperSize, gtk_paper_size,
+ gtk_paper_size_copy,
+ gtk_paper_size_free)
static const PaperInfo *
lookup_paper_info (const gchar *name)
{
GtkPaperSize *size;
- size = g_new0 (GtkPaperSize, 1);
+ size = g_slice_new0 (GtkPaperSize);
size->info = info;
size->width = info->width;
size->height = info->height;
/**
* gtk_paper_size_new:
- * @name: a paper size name, or %NULL
- *
- * Creates a new #GtkPaperSize object by parsing a
- * PWG 5101.1-2002 PWG <!-- FIXME link here -->
- * paper name.
+ * @name: (allow-none): a paper size name, or %NULL
+ *
+ * Creates a new #GtkPaperSize object by parsing a
+ * <ulink url="ftp://ftp.pwg.org/pub/pwg/candidates/cs-pwgmsn10-20020226-5101.1.pdf">PWG 5101.1-2002</ulink>
+ * paper name.
*
* If @name is %NULL, the default paper size is returned,
* see gtk_paper_size_get_default().
if (parse_full_media_size_name (name, &short_name, &width, &height))
{
- size = g_new0 (GtkPaperSize, 1);
+ size = g_slice_new0 (GtkPaperSize);
size->width = width;
size->height = height;
size->name = short_name;
size->display_name = g_strdup (short_name);
+ if (strncmp (short_name, "custom", 6) == 0)
+ size->is_custom = TRUE;
}
else
{
else
{
g_warning ("Unknown paper size %s\n", name);
- size = g_new0 (GtkPaperSize, 1);
+ size = g_slice_new0 (GtkPaperSize);
size->name = g_strdup (name);
size->display_name = g_strdup (name);
/* Default to A4 size */
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (unit != GTK_UNIT_PIXEL, NULL);
- size = g_new0 (GtkPaperSize, 1);
+ size = g_slice_new0 (GtkPaperSize);
size->name = g_strdup (name);
size->display_name = g_strdup (display_name);
{
GtkPaperSize *size;
- size = g_new0 (GtkPaperSize, 1);
+ size = g_slice_new0 (GtkPaperSize);
size->info = other->info;
if (other->name)
g_free (size->name);
g_free (size->display_name);
g_free (size->ppd_name);
- g_free (size);
+
+ g_slice_free (GtkPaperSize, size);
}
/**
gtk_paper_size_get_name (size2)) == 0;
}
+GList * _gtk_load_custom_papers (void);
+
/**
- * gtk_paper_size_get_builtins:
+ * gtk_paper_size_get_paper_sizes:
+ * @include_custom: whether to include custom paper sizes
+ * as defined in the page setup dialog
*
- * Creates a list of builtin paper sizes.
- *
- * Return value: a newly allocated list of newly
+ * Creates a list of known paper sizes.
+ *
+ * Return value: (element-type GtkPaperSize) (transfer full): a newly allocated list of newly
* allocated #GtkPaperSize objects
*
* Since: 2.12
*/
GList *
-gtk_paper_size_get_builtins (void)
+gtk_paper_size_get_paper_sizes (gboolean include_custom)
{
GList *list = NULL;
guint i;
+#ifdef G_OS_UNIX /* _gtk_load_custom_papers() only on Unix so far */
+ if (include_custom)
+ {
+ GList *page_setups, *l;
+
+ page_setups = _gtk_load_custom_papers ();
+ for (l = page_setups; l != NULL; l = l->next)
+ {
+ GtkPageSetup *setup = (GtkPageSetup *) l->data;
+ GtkPaperSize *size;
+ size = gtk_page_setup_get_paper_size (setup);
+ list = g_list_prepend (list, gtk_paper_size_copy (size));
+ }
+
+ g_list_foreach (page_setups, (GFunc) g_object_unref, NULL);
+ g_list_free (page_setups);
+ }
+#endif
for (i = 0; i < G_N_ELEMENTS (standard_names_offsets); ++i)
{
GtkPaperSize *size;
list = g_list_prepend (list, size);
}
- return list;
+ return g_list_reverse (list);
}
+
/**
* gtk_paper_size_get_name:
* @size: a #GtkPaperSize object
g_assert (size->info != NULL);
display_name = paper_names + size->info->display_name;
- return g_strip_context (display_name, gettext (display_name));
+ return g_dpgettext2 (GETTEXT_PACKAGE, "paper size", display_name);
}
/**
if (!locale)
return GTK_PAPER_NAME_A4;
- if (g_str_has_prefix (locale, "en_CA") ||
- g_str_has_prefix (locale, "en_US") ||
- g_str_has_prefix (locale, "es_PR") ||
- g_str_has_prefix (locale, "es_US"))
+ /* CLDR 1.8.1
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/territory_language_information.html
+ */
+ if (g_regex_match_simple("[^_.@]{2,3}_(BZ|CA|CL|CO|CR|GT|MX|NI|PA|PH|PR|SV|US|VE)",
+ locale, G_REGEX_ANCHORED, G_REGEX_MATCH_ANCHORED))
paper_size = GTK_PAPER_NAME_LETTER;
else
paper_size = GTK_PAPER_NAME_A4;
* @key_file: the #GKeyFile to retrieve the papersize from
* @group_name: the name ofthe group in the key file to read,
* or %NULL to read the first group
- * @error: return location for an error, or %NULL
+ * @error: (allow-none): return location for an error, or %NULL
*
* Reads a paper size from the group @group_name in the key file
- * @key_file. Returns a new #GtkPaperSize object with the restored
- * paper size, or %NULL if an error occurred.
+ * @key_file.
+ *
+ * Returns: a new #GtkPaperSize object with the restored
+ * paper size, or %NULL if an error occurred.
*
* Since: 2.12
*/
group_name = freeme = g_key_file_get_start_group (key_file);
if (!group_name || !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"));
+ g_set_error_literal (error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_INVALID_FILE,
+ _("Not a valid page setup file"));
retval = FALSE;
goto out;
}
display_name = g_strdup (name);
if (ppd_name != NULL)
- paper_size = gtk_paper_size_new_from_ppd (ppd_name, display_name,
- width, height);
+ paper_size = gtk_paper_size_new_from_ppd (ppd_name,
+ display_name,
+ _gtk_print_convert_from_mm (width, GTK_UNIT_POINTS),
+ _gtk_print_convert_from_mm (height, GTK_UNIT_POINTS));
else if (name != NULL)
paper_size = gtk_paper_size_new_custom (name, display_name,
width, height, GTK_UNIT_MM);
else
{
- g_set_error (error,
- GTK_PRINT_ERROR,
- GTK_PRINT_ERROR_INVALID_FILE,
- _("Not a valid page setup file"));
+ g_set_error_literal (error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_INVALID_FILE,
+ _("Not a valid page setup file"));
retval = FALSE;
goto out;
}
/**
* gtk_paper_size_to_key_file:
- * @paper_size: a #GtkPaperSize
+ * @size: a #GtkPaperSize
* @key_file: the #GKeyFile to save the paper size to
* @group_name: the group to add the settings to in @key_file
*
- * This function adds the paper size from @paper_size to @key_file.
+ * This function adds the paper size from @size to @key_file.
*
* Since: 2.12
*/
void
-gtk_paper_size_to_key_file (GtkPaperSize *paper_size,
+gtk_paper_size_to_key_file (GtkPaperSize *size,
GKeyFile *key_file,
const gchar *group_name)
{
const char *name, *ppd_name, *display_name;
- g_return_if_fail (paper_size != NULL);
+ g_return_if_fail (size != NULL);
g_return_if_fail (key_file != NULL);
- name = gtk_paper_size_get_name (paper_size);
- display_name = gtk_paper_size_get_display_name (paper_size);
- ppd_name = gtk_paper_size_get_ppd_name (paper_size);
+ name = gtk_paper_size_get_name (size);
+ display_name = gtk_paper_size_get_display_name (size);
+ ppd_name = gtk_paper_size_get_ppd_name (size);
if (ppd_name != NULL)
g_key_file_set_string (key_file, group_name,
"DisplayName", display_name);
g_key_file_set_double (key_file, group_name,
- "Width", gtk_paper_size_get_width (paper_size, GTK_UNIT_MM));
+ "Width", gtk_paper_size_get_width (size, GTK_UNIT_MM));
g_key_file_set_double (key_file, group_name,
- "Height", gtk_paper_size_get_height (paper_size, GTK_UNIT_MM));
+ "Height", gtk_paper_size_get_height (size, GTK_UNIT_MM));
}
-
-
-#define __GTK_PAPER_SIZE_C__
-#include "gtkaliasdef.c"