]> www.fi.muni.cz Git - evince.git/blob - ps/gsdefaults.c
Get rid of ggvutils
[evince.git] / ps / gsdefaults.c
1 /*
2  * gsdefaults.c: default settings for the GtkGS widget
3  *
4  * Copyright 2002 - 2005 the Free Software Foundation
5  *
6  * Author: Jaka Mocnik  <jaka@gnu.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */
22
23 #include <config.h>
24
25 #include <gnome.h>
26 #include <math.h>
27
28 #include "gtkgs.h"
29 #include "gsdefaults.h"
30
31 #include <gconf/gconf-client.h>
32
33 /**
34  * defaults for GtkGS widgets
35  **/
36
37 static GConfClient *gconf_client;
38
39 /* Default values to pass to gtk_gs_init */
40 typedef struct _GtkGSDefaults {
41   gboolean antialiased;
42   gboolean override_size;
43   gint default_size;
44   gboolean override_orientation;
45   gboolean respect_eof;
46   gboolean show_scroll_rect;
47   gint fallback_orientation;
48   gfloat zoom_factor;
49   gfloat scroll_step;
50   gchar *interpreter_cmd;
51   gchar *alpha_params;
52   gchar *dsc_cmd;
53   gchar *convert_pdf_cmd;
54   gchar *ungzip_cmd;
55   gchar *unbzip2_cmd;
56   GtkGSZoomMode zoom_mode;
57 } GtkGSDefaults;
58
59 static GtkGSDefaults gtk_gs_defaults = {
60   TRUE, FALSE, 8, FALSE, TRUE, TRUE,
61   0, 1.0, 0.25, NULL, NULL, NULL, NULL, NULL, NULL,
62   GTK_GS_ZOOM_ABSOLUTE
63 };
64
65 GtkGSPaperSize gtk_gs_paper_sizes[] = {
66   {N_("BBox"), 0, 0},
67   {N_("Letter"), 612, 792,},
68   {N_("Tabloid"), 792, 1224,},
69   {N_("Ledger"), 1224, 792,},
70   {N_("Legal"), 612, 1008,},
71   {N_("Statement"), 396, 612,},
72   {N_("Executive"), 540, 720,},
73   {N_("A0"), 2380, 3368,},
74   {N_("A1"), 1684, 2380,},
75   {N_("A2"), 1190, 1684,},
76   {N_("A3"), 842, 1190,},
77   {N_("A4"), 595, 842,},
78   {N_("A5"), 420, 595,},
79   {N_("B4"), 729, 1032,},
80   {N_("B5"), 516, 729,},
81   {N_("Folio"), 612, 936,},
82   {N_("Quarto"), 610, 780,},
83   {N_("10x14"), 720, 1008,},
84   {NULL, 0, 0}
85 };
86
87 void
88 gtk_gs_defaults_set_scroll_step(gfloat step)
89 {
90   if(fabs(gtk_gs_defaults.scroll_step - step) > 0.001) {
91     gtk_gs_defaults.scroll_step = step;
92     gconf_client_set_float(gconf_client,
93                            "/apps/ggv/gtkgs/scrollstep",
94                            gtk_gs_defaults_get_scroll_step(), NULL);
95   }
96 }
97
98 gfloat
99 gtk_gs_defaults_get_scroll_step()
100 {
101   return gtk_gs_defaults.scroll_step;
102 }
103
104 void
105 gtk_gs_defaults_set_size(gint iNewPageSize)
106 {
107   if(gtk_gs_defaults.default_size != iNewPageSize) {
108     gtk_gs_defaults.default_size = iNewPageSize;
109     gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/size",
110                          gtk_gs_defaults_get_size(), NULL);
111   }
112 }
113
114 gint
115 gtk_gs_defaults_get_size()
116 {
117   return gtk_gs_defaults.default_size;
118 }
119
120 void
121 gtk_gs_defaults_set_override_size(gboolean bOverrSize)
122 {
123   if(gtk_gs_defaults.override_size != bOverrSize) {
124     gtk_gs_defaults.override_size = bOverrSize;
125     gconf_client_set_bool(gconf_client,
126                           "/apps/ggv/gtkgs/override_size",
127                           gtk_gs_defaults_get_override_size(), NULL);
128   }
129 }
130
131 gboolean
132 gtk_gs_defaults_get_override_size()
133 {
134   return gtk_gs_defaults.override_size;
135 }
136
137 void
138 gtk_gs_defaults_set_override_orientation(gboolean bOverOrien)
139 {
140   if(gtk_gs_defaults.override_orientation != bOverOrien) {
141     gtk_gs_defaults.override_orientation = bOverOrien;
142     gconf_client_set_bool(gconf_client,
143                           "/apps/ggv/gtkgs/override_orientation",
144                           gtk_gs_defaults_get_override_orientation(), NULL);
145   }
146 }
147
148 gboolean
149 gtk_gs_defaults_get_override_orientation()
150 {
151   return gtk_gs_defaults.override_orientation;
152 }
153
154 void
155 gtk_gs_defaults_set_antialiased(gint iNewAntialiased)
156 {
157   if(gtk_gs_defaults.antialiased != iNewAntialiased) {
158     gtk_gs_defaults.antialiased = iNewAntialiased;
159     gconf_client_set_bool(gconf_client,
160                           "/apps/ggv/gtkgs/antialiasing",
161                           gtk_gs_defaults_get_antialiased(), NULL);
162   }
163 }
164
165 gboolean
166 gtk_gs_defaults_get_antialiased()
167 {
168   return gtk_gs_defaults.antialiased;
169 }
170
171 void
172 gtk_gs_defaults_set_zoom_factor(gfloat fZoom)
173 {
174   fZoom = MIN(fZoom, 30.0);
175   fZoom = MAX(0.05, fZoom);
176   if(fabs(gtk_gs_defaults.zoom_factor - fZoom) > 0.001) {
177     gtk_gs_defaults.zoom_factor = fZoom;
178     gconf_client_set_float(gconf_client, "/apps/ggv/gtkgs/zoom",
179                            gtk_gs_defaults_get_zoom_factor(), NULL);
180   }
181 }
182
183 gfloat
184 gtk_gs_defaults_get_zoom_factor()
185 {
186   return gtk_gs_defaults.zoom_factor;
187 }
188
189 void
190 gtk_gs_defaults_set_orientation(gint iNewOrientation)
191 {
192   g_assert((iNewOrientation == GTK_GS_ORIENTATION_PORTRAIT) ||
193            (iNewOrientation == GTK_GS_ORIENTATION_LANDSCAPE) ||
194            (iNewOrientation == GTK_GS_ORIENTATION_UPSIDEDOWN) ||
195            (iNewOrientation == GTK_GS_ORIENTATION_SEASCAPE));
196   if(gtk_gs_defaults.fallback_orientation != iNewOrientation) {
197     gtk_gs_defaults.fallback_orientation = iNewOrientation;
198     gconf_client_set_int(gconf_client,
199                          "/apps/ggv/gtkgs/orientation",
200                          gtk_gs_defaults_get_orientation(), NULL);
201   }
202 }
203
204 gint
205 gtk_gs_defaults_get_orientation()
206 {
207   return gtk_gs_defaults.fallback_orientation;
208 }
209
210 void
211 gtk_gs_defaults_set_respect_eof(gboolean resp)
212 {
213   if(gtk_gs_defaults.respect_eof != resp) {
214     gtk_gs_defaults.respect_eof = resp;
215     gconf_client_set_bool(gconf_client,
216                           "/apps/ggv/gtkgs/respect_eof",
217                           gtk_gs_defaults_get_respect_eof(), NULL);
218   }
219 }
220
221 gboolean
222 gtk_gs_defaults_get_respect_eof()
223 {
224   return gtk_gs_defaults.respect_eof;
225 }
226
227 GtkGSPaperSize *
228 gtk_gs_defaults_get_paper_sizes()
229 {
230   return gtk_gs_paper_sizes;
231 }
232
233 gboolean
234 gtk_gs_defaults_get_show_scroll_rect()
235 {
236   return gtk_gs_defaults.show_scroll_rect;
237 }
238
239 void
240 gtk_gs_defaults_set_show_scroll_rect(gboolean f)
241 {
242   if(gtk_gs_defaults.show_scroll_rect != f) {
243     gtk_gs_defaults.show_scroll_rect = f;
244     gconf_client_set_bool(gconf_client,
245                           "/apps/ggv/gtkgs/show_scroll_rect",
246                           gtk_gs_defaults_get_show_scroll_rect(), NULL);
247   }
248 }
249
250 const gchar *
251 gtk_gs_defaults_get_interpreter_cmd()
252 {
253   if(!gtk_gs_defaults.interpreter_cmd)
254     return GS_PATH;
255   return gtk_gs_defaults.interpreter_cmd;
256 }
257
258 const gchar *
259 gtk_gs_defaults_get_alpha_parameters()
260 {
261   if(!gtk_gs_defaults.alpha_params)
262     return ALPHA_PARAMS;
263   return gtk_gs_defaults.alpha_params;
264 }
265
266 const gchar *
267 gtk_gs_defaults_get_convert_pdf_cmd()
268 {
269   if(!gtk_gs_defaults.convert_pdf_cmd)
270     return GS_PATH
271       " -q -dNOPAUSE -dBATCH -dSAFER"
272       " -dQUIET -sDEVICE=pswrite" " -sOutputFile=%s -c save pop -f %s";
273   return gtk_gs_defaults.convert_pdf_cmd;
274 }
275
276 const gchar *
277 gtk_gs_defaults_get_dsc_cmd()
278 {
279   if(!gtk_gs_defaults.dsc_cmd)
280     return GS_PATH
281       " -q -dNODISPLAY -dSAFER -dDELAYSAFER"
282       " -sDSCname=%s -sPDFname=%s pdf2dsc.ps" " -c quit";
283   return gtk_gs_defaults.dsc_cmd;
284 }
285
286 const gchar *
287 gtk_gs_defaults_get_ungzip_cmd()
288 {
289   if(!gtk_gs_defaults.ungzip_cmd)
290     return "gzip -cd";
291   return gtk_gs_defaults.ungzip_cmd;
292 }
293
294 const gchar *
295 gtk_gs_defaults_get_unbzip2_cmd()
296 {
297   if(!gtk_gs_defaults.unbzip2_cmd)
298     return "bzip2 -cd";
299   return gtk_gs_defaults.unbzip2_cmd;
300 }
301
302 void
303 gtk_gs_defaults_set_interpreter_cmd(gchar * cmd)
304 {
305   if((NULL == gtk_gs_defaults.interpreter_cmd) ||
306      strcmp(gtk_gs_defaults.interpreter_cmd, cmd)) {
307     if(gtk_gs_defaults.interpreter_cmd)
308       g_free(gtk_gs_defaults.interpreter_cmd);
309     gtk_gs_defaults.interpreter_cmd = cmd;
310     gconf_client_set_string(gconf_client,
311                             "/apps/ggv/gtkgs/interpreter",
312                             gtk_gs_defaults_get_interpreter_cmd(), NULL);
313   }
314 }
315
316 void
317 gtk_gs_defaults_set_alpha_parameters(gchar * par)
318 {
319   if((NULL == gtk_gs_defaults.alpha_params) ||
320      strcmp(gtk_gs_defaults.alpha_params, par)) {
321     if(gtk_gs_defaults.alpha_params)
322       g_free(gtk_gs_defaults.alpha_params);
323     gtk_gs_defaults.alpha_params = par;
324     gconf_client_set_string(gconf_client,
325                             "/apps/ggv/gtkgs/alphaparams",
326                             gtk_gs_defaults_get_alpha_parameters(), NULL);
327   }
328 }
329
330 void
331 gtk_gs_defaults_set_convert_pdf_cmd(gchar * cmd)
332 {
333   if((NULL == gtk_gs_defaults.convert_pdf_cmd) ||
334      strcmp(gtk_gs_defaults.convert_pdf_cmd, cmd)) {
335     if(gtk_gs_defaults.convert_pdf_cmd)
336       g_free(gtk_gs_defaults.convert_pdf_cmd);
337     gtk_gs_defaults.convert_pdf_cmd = cmd;
338     gconf_client_set_string(gconf_client,
339                             "/apps/ggv/gtkgs/convertpdf",
340                             gtk_gs_defaults_get_convert_pdf_cmd(), NULL);
341   }
342 }
343
344 void
345 gtk_gs_defaults_set_dsc_cmd(gchar * cmd)
346 {
347   if((NULL == gtk_gs_defaults.dsc_cmd) || strcmp(gtk_gs_defaults.dsc_cmd, cmd)) {
348     if(gtk_gs_defaults.dsc_cmd)
349       g_free(gtk_gs_defaults.dsc_cmd);
350     gtk_gs_defaults.dsc_cmd = cmd;
351     gconf_client_set_string(gconf_client,
352                             "/apps/ggv/gtkgs/pdf2dsc",
353                             gtk_gs_defaults_get_dsc_cmd(), NULL);
354   }
355 }
356
357 void
358 gtk_gs_defaults_set_ungzip_cmd(gchar * cmd)
359 {
360   if((NULL == gtk_gs_defaults.ungzip_cmd) ||
361      strcmp(gtk_gs_defaults.ungzip_cmd, cmd)) {
362     if(gtk_gs_defaults.ungzip_cmd)
363       g_free(gtk_gs_defaults.ungzip_cmd);
364     gtk_gs_defaults.ungzip_cmd = cmd;
365     gconf_client_set_string(gconf_client,
366                             "/apps/ggv/gtkgs/ungzip",
367                             gtk_gs_defaults_get_ungzip_cmd(), NULL);
368   }
369 }
370
371 void
372 gtk_gs_defaults_set_unbzip2_cmd(gchar * cmd)
373 {
374   if((NULL == gtk_gs_defaults.unbzip2_cmd) ||
375      strcmp(gtk_gs_defaults.unbzip2_cmd, cmd)) {
376     if(gtk_gs_defaults.unbzip2_cmd)
377       g_free(gtk_gs_defaults.unbzip2_cmd);
378     gtk_gs_defaults.unbzip2_cmd = cmd;
379     gconf_client_set_string(gconf_client,
380                             "/apps/ggv/gtkgs/unbzip2",
381                             gtk_gs_defaults_get_unbzip2_cmd(), NULL);
382   }
383 }
384
385 GtkGSZoomMode
386 gtk_gs_defaults_get_zoom_mode()
387 {
388   return gtk_gs_defaults.zoom_mode;
389 }
390
391 void
392 gtk_gs_defaults_set_zoom_mode(GtkGSZoomMode zoom_mode)
393 {
394   if(gtk_gs_defaults.zoom_mode != zoom_mode) {
395     gtk_gs_defaults.zoom_mode = zoom_mode;
396     gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/zoommode",
397                          gtk_gs_defaults_get_zoom_mode(), NULL);
398   }
399 }
400
401 void
402 gtk_gs_defaults_load()
403 {
404   gtk_gs_defaults_gconf_client();
405
406   gtk_gs_defaults.respect_eof =
407     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/respect_eof", NULL));
408   gtk_gs_defaults.override_size =
409     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/override_size",
410                            NULL));
411   gtk_gs_defaults.override_orientation =
412     (gconf_client_get_bool
413      (gconf_client, "/apps/ggv/gtkgs/override_orientation", NULL));
414   gtk_gs_defaults.antialiased =
415     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/antialiasing", NULL));
416   gtk_gs_defaults.default_size =
417     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/size", NULL));
418   gtk_gs_defaults.zoom_factor =
419     (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/zoom", NULL));
420   gtk_gs_defaults.fallback_orientation =
421     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/orientation", NULL));
422   gtk_gs_defaults.interpreter_cmd =
423     (gconf_client_get_string
424      (gconf_client, "/apps/ggv/gtkgs/interpreter", NULL));
425   gtk_gs_defaults.alpha_params =
426     (gconf_client_get_string
427      (gconf_client, "/apps/ggv/gtkgs/alphaparams", NULL));
428   gtk_gs_defaults.convert_pdf_cmd =
429     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/convertpdf", NULL));
430   gtk_gs_defaults.dsc_cmd =
431     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
432   gtk_gs_defaults.ungzip_cmd =
433     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/ungzip", NULL));
434   gtk_gs_defaults.unbzip2_cmd =
435     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/unbzip2", NULL));
436   gtk_gs_defaults.show_scroll_rect =
437     (gconf_client_get_bool
438      (gconf_client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
439   gtk_gs_defaults.scroll_step =
440     (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/scrollstep", NULL));
441   gtk_gs_defaults.zoom_mode =
442     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/zoommode", NULL));
443 }
444
445 static void
446 gtk_gs_defaults_changed(GConfClient * client, guint cnxn_id,
447                         GConfEntry * entry, gpointer user_data)
448 {
449   if(!strcmp(entry->key, "/apps/ggv/gtkgs/respect_eof"))
450     gtk_gs_defaults_set_respect_eof
451       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/respect_eof", NULL));
452   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_orientation"))
453     gtk_gs_defaults_set_override_orientation
454       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_orientation",
455                              NULL));
456   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/orientation"))
457     gtk_gs_defaults_set_orientation
458       (gconf_client_get_int(client, "/apps/ggv/gtkgs/orientation", NULL));
459   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoom"))
460     gtk_gs_defaults_set_zoom_factor
461       (gconf_client_get_float(client, "/apps/ggv/gtkgs/zoom", NULL));
462   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/size"))
463     gtk_gs_defaults_set_size
464       (gconf_client_get_int(client, "/apps/ggv/gtkgs/size", NULL));
465   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/antialiasing"))
466     gtk_gs_defaults_set_antialiased
467       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/antialiasing", NULL));
468   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_size"))
469     gtk_gs_defaults_set_override_size
470       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_size", NULL));
471   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/show_scroll_rect"))
472     gtk_gs_defaults_set_show_scroll_rect
473       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
474   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/interpreter"))
475     gtk_gs_defaults_set_interpreter_cmd
476       (gconf_client_get_string(client, "/apps/ggv/gtkgs/interpreter", NULL));
477   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/alphaparams"))
478     gtk_gs_defaults_set_alpha_parameters
479       (gconf_client_get_string(client, "/apps/ggv/gtkgs/alphaparams", NULL));
480   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/convertpdf"))
481     gtk_gs_defaults_set_convert_pdf_cmd
482       (gconf_client_get_string(client, "/apps/ggv/gtkgs/convertpdf", NULL));
483   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/pdf2dsc"))
484     gtk_gs_defaults_set_dsc_cmd
485       (gconf_client_get_string(client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
486   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/ungzip"))
487     gtk_gs_defaults_set_ungzip_cmd
488       (gconf_client_get_string(client, "/apps/ggv/gtkgs/ungzip", NULL));
489   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/unbzip2"))
490     gtk_gs_defaults_set_unbzip2_cmd
491       (gconf_client_get_string(client, "/apps/ggv/gtkgs/unbzip2", NULL));
492   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoommode"))
493     gtk_gs_defaults_set_zoom_mode
494       (gconf_client_get_int(client, "/apps/ggv/gtkgs/zoommode", NULL));
495   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/scrollstep"))
496     gtk_gs_defaults_set_scroll_step
497       (gconf_client_get_float(client, "/apps/ggv/gtkgs/scrollstep", NULL));
498 }
499
500 GConfClient *
501 gtk_gs_defaults_gconf_client()
502 {
503   if(!gconf_client) {
504     g_assert(gconf_is_initialized());
505     gconf_client = gconf_client_get_default();
506     g_assert(gconf_client != NULL);
507     gconf_client_add_dir(gconf_client, "/apps/ggv/gtkgs",
508                          GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
509     gconf_client_notify_add(gconf_client,
510                             "/apps/ggv/gtkgs", (GConfClientNotifyFunc)
511                             gtk_gs_defaults_changed, NULL, NULL, NULL);
512   }
513
514   return gconf_client;
515 }