2
* Copyright © 2006 Christian Persch
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2, or (at your option)
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
27
#include "ephy-debug.h"
28
#include "ephy-string.h"
30
#include "ephy-print-utils.h"
32
#define PRINT_SETTINGS_GROUP "Print Settings"
33
#define PAGE_SETUP_GROUP "Page Setup"
34
#define PAPER_SIZE_GROUP "Paper Size"
36
#define ERROR_QUARK (g_quark_from_static_string ("ephy-print-utils-error"))
39
* ephy_print_utils_page_setup_new_from_file:
40
* @file_name: the filename to read the page_setup from
43
* Reads the print page_setup from @filename. Returns a new #GtkPageSetup
44
* object with the restored page_setup, or %NULL if an error occurred.
46
* Return value: the restored #GtkPageSetup
51
ephy_print_utils_page_setup_new_from_file (const gchar *file_name,
54
GtkPageSetup *page_setup;
57
g_return_val_if_fail (file_name != NULL, NULL);
59
key_file = g_key_file_new ();
60
if (!g_key_file_load_from_file (key_file, file_name, 0, error))
62
g_key_file_free (key_file);
66
page_setup = ephy_print_utils_page_setup_new_from_key_file (key_file, error);
67
g_key_file_free (key_file);
73
* ephy_print_utils_page_setup_new_from_key_file:
74
* @key_file: the #GKeyFile to retrieve the page_setup from
77
* Reads the print page_setup from @key_file. Returns a new #GtkPageSetup
78
* object with the restored page_setup, or %NULL if an error occurred.
80
* Return value: the restored #GtkPageSetup
85
ephy_print_utils_page_setup_new_from_key_file (GKeyFile *key_file,
88
GtkPageSetup *page_setup = NULL;
89
GtkPaperSize *paper_size = NULL;
90
gdouble width, height, top, bottom, left, right;
91
char *name = NULL, *ppd_name = NULL, *display_name = NULL, *orientation = NULL;
94
g_return_val_if_fail (key_file != NULL, NULL);
96
if (!g_key_file_has_group (key_file, PAGE_SETUP_GROUP) ||
97
!g_key_file_has_group (key_file, PAPER_SIZE_GROUP)) {
98
g_set_error (error, ERROR_QUARK, 0, "Not a valid epiphany page setup file");
102
#define GET_DOUBLE(kf, group, name, v) \
103
v = g_key_file_get_double (kf, group, name, &err); \
105
g_propagate_error (error, err);\
109
GET_DOUBLE (key_file, PAPER_SIZE_GROUP, "Width", width);
110
GET_DOUBLE (key_file, PAPER_SIZE_GROUP, "Height", height);
111
GET_DOUBLE (key_file, PAGE_SETUP_GROUP, "MarginTop", top);
112
GET_DOUBLE (key_file, PAGE_SETUP_GROUP, "MarginBottom", bottom);
113
GET_DOUBLE (key_file, PAGE_SETUP_GROUP, "MarginLeft", left);
114
GET_DOUBLE (key_file, PAGE_SETUP_GROUP, "MarginRight", right);
118
name = g_key_file_get_string (key_file, PAPER_SIZE_GROUP,
120
ppd_name = g_key_file_get_string (key_file, PAPER_SIZE_GROUP,
122
display_name = g_key_file_get_string (key_file, PAPER_SIZE_GROUP,
123
"DisplayName", NULL);
124
orientation = g_key_file_get_string (key_file, PAGE_SETUP_GROUP,
125
"Orientation", NULL);
127
if ((ppd_name == NULL && name == NULL) || orientation == NULL)
129
g_set_error (error, ERROR_QUARK, 0, "Not a valid epiphany page setup file");
133
if (ppd_name != NULL) {
134
paper_size = gtk_paper_size_new_from_ppd (ppd_name, display_name,
137
paper_size = gtk_paper_size_new_custom (name, display_name,
138
width, height, GTK_UNIT_MM);
140
g_assert (paper_size != NULL);
142
page_setup = gtk_page_setup_new ();
143
gtk_page_setup_set_paper_size (page_setup, paper_size);
144
gtk_paper_size_free (paper_size);
146
gtk_page_setup_set_top_margin (page_setup, top, GTK_UNIT_MM);
147
gtk_page_setup_set_bottom_margin (page_setup, bottom, GTK_UNIT_MM);
148
gtk_page_setup_set_left_margin (page_setup, left, GTK_UNIT_MM);
149
gtk_page_setup_set_right_margin (page_setup, right, GTK_UNIT_MM);
151
gtk_page_setup_set_orientation (page_setup,
152
ephy_string_enum_from_string (GTK_TYPE_PAGE_ORIENTATION,
157
g_free (display_name);
158
g_free (orientation);
164
* ephy_print_utils_page_setup_to_file:
165
* @page_setup: a #GtkPageSetup
166
* @file_name: the file to save to
169
* This function saves the print page_setup from @page_setup to @file_name.
171
* Return value: %TRUE on success
176
ephy_print_utils_page_setup_to_file (GtkPageSetup *page_setup,
177
const char *file_name,
185
g_return_val_if_fail (GTK_IS_PAGE_SETUP (page_setup), FALSE);
186
g_return_val_if_fail (file_name != NULL, FALSE);
188
keyfile = g_key_file_new ();
189
retval = ephy_print_utils_page_setup_to_key_file (page_setup, keyfile, error);
190
if (!retval) goto out;
192
data = g_key_file_to_data (keyfile, &len, error);
195
retval = g_file_set_contents (file_name, data, len, error);
198
g_key_file_free (keyfile);
205
* ephy_print_utils_page_setup_to_key_file:
206
* @page_setup: a #GtkPageSetup
207
* @key_file: the #GKeyFile to save the print page_setup to
210
* This function adds the print page_setup from @page_setup to @key_file.
212
* Return value: %TRUE on success
217
ephy_print_utils_page_setup_to_key_file (GtkPageSetup *page_setup,
221
GtkPaperSize *paper_size;
222
const char *name, *ppd_name, *display_name;
225
g_return_val_if_fail (GTK_IS_PAGE_SETUP (page_setup), FALSE);
226
g_return_val_if_fail (key_file != NULL, FALSE);
228
paper_size = gtk_page_setup_get_paper_size (page_setup);
229
g_assert (paper_size != NULL);
231
name = gtk_paper_size_get_name (paper_size);
232
display_name = gtk_paper_size_get_display_name (paper_size);
233
ppd_name = gtk_paper_size_get_ppd_name (paper_size);
235
if (ppd_name != NULL) {
236
g_key_file_set_string (key_file, PAPER_SIZE_GROUP,
237
"PPDName", ppd_name);
239
g_key_file_set_string (key_file, PAPER_SIZE_GROUP,
244
g_key_file_set_string (key_file, PAPER_SIZE_GROUP,
245
"DisplayName", display_name);
248
g_key_file_set_double (key_file, PAPER_SIZE_GROUP,
249
"Width", gtk_paper_size_get_width (paper_size, GTK_UNIT_MM));
250
g_key_file_set_double (key_file, PAPER_SIZE_GROUP,
251
"Height", gtk_paper_size_get_height (paper_size, GTK_UNIT_MM));
253
g_key_file_set_double (key_file, PAGE_SETUP_GROUP,
254
"MarginTop", gtk_page_setup_get_top_margin (page_setup, GTK_UNIT_MM));
255
g_key_file_set_double (key_file, PAGE_SETUP_GROUP,
256
"MarginBottom", gtk_page_setup_get_bottom_margin (page_setup, GTK_UNIT_MM));
257
g_key_file_set_double (key_file, PAGE_SETUP_GROUP,
258
"MarginLeft", gtk_page_setup_get_left_margin (page_setup, GTK_UNIT_MM));
259
g_key_file_set_double (key_file, PAGE_SETUP_GROUP,
260
"MarginRight", gtk_page_setup_get_right_margin (page_setup, GTK_UNIT_MM));
262
orientation = ephy_string_enum_to_string (GTK_TYPE_PAGE_ORIENTATION,
263
gtk_page_setup_get_orientation (page_setup));
264
g_key_file_set_string (key_file, PAGE_SETUP_GROUP,
265
"Orientation", orientation);
266
g_free (orientation);