]> www.fi.muni.cz Git - evince.git/blob - ps/gsdefaults.c
display an error if the document doesn't support find (better ideas?)
[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 #include "ggvutils.h"
31
32 #include <gconf/gconf-client.h>
33
34 /**
35  * defaults for GtkGS widgets
36  **/
37
38 static GConfClient *gconf_client;
39
40 /* Default values to pass to gtk_gs_init */
41 typedef struct _GtkGSDefaults {
42   gboolean antialiased;
43   gboolean override_size;
44   gint default_size;
45   gboolean override_orientation;
46   gboolean respect_eof;
47   gboolean show_scroll_rect;
48   gint fallback_orientation;
49   gfloat zoom_factor;
50   gfloat scroll_step;
51   gchar *interpreter_cmd;
52   gchar *alpha_params;
53   gchar *dsc_cmd;
54   gchar *convert_pdf_cmd;
55   gchar *ungzip_cmd;
56   gchar *unbzip2_cmd;
57   GtkGSZoomMode zoom_mode;
58 } GtkGSDefaults;
59
60 static GtkGSDefaults gtk_gs_defaults = {
61   TRUE, FALSE, 8, FALSE, TRUE, TRUE,
62   0, 1.0, 0.25, NULL, NULL, NULL, NULL, NULL, NULL,
63   GTK_GS_ZOOM_ABSOLUTE
64 };
65
66 void
67 gtk_gs_defaults_set_scroll_step(gfloat step)
68 {
69   if(fabs(gtk_gs_defaults.scroll_step - step) > 0.001) {
70     gtk_gs_defaults.scroll_step = step;
71     gconf_client_set_float(gconf_client,
72                            "/apps/ggv/gtkgs/scrollstep",
73                            gtk_gs_defaults_get_scroll_step(), NULL);
74   }
75 }
76
77 gfloat
78 gtk_gs_defaults_get_scroll_step()
79 {
80   return gtk_gs_defaults.scroll_step;
81 }
82
83 void
84 gtk_gs_defaults_set_size(gint iNewPageSize)
85 {
86   if(gtk_gs_defaults.default_size != iNewPageSize) {
87     gtk_gs_defaults.default_size = iNewPageSize;
88     gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/size",
89                          gtk_gs_defaults_get_size(), NULL);
90   }
91 }
92
93 gint
94 gtk_gs_defaults_get_size()
95 {
96   return gtk_gs_defaults.default_size;
97 }
98
99 void
100 gtk_gs_defaults_set_override_size(gboolean bOverrSize)
101 {
102   if(gtk_gs_defaults.override_size != bOverrSize) {
103     gtk_gs_defaults.override_size = bOverrSize;
104     gconf_client_set_bool(gconf_client,
105                           "/apps/ggv/gtkgs/override_size",
106                           gtk_gs_defaults_get_override_size(), NULL);
107   }
108 }
109
110 gboolean
111 gtk_gs_defaults_get_override_size()
112 {
113   return gtk_gs_defaults.override_size;
114 }
115
116 void
117 gtk_gs_defaults_set_override_orientation(gboolean bOverOrien)
118 {
119   if(gtk_gs_defaults.override_orientation != bOverOrien) {
120     gtk_gs_defaults.override_orientation = bOverOrien;
121     gconf_client_set_bool(gconf_client,
122                           "/apps/ggv/gtkgs/override_orientation",
123                           gtk_gs_defaults_get_override_orientation(), NULL);
124   }
125 }
126
127 gboolean
128 gtk_gs_defaults_get_override_orientation()
129 {
130   return gtk_gs_defaults.override_orientation;
131 }
132
133 void
134 gtk_gs_defaults_set_antialiased(gint iNewAntialiased)
135 {
136   if(gtk_gs_defaults.antialiased != iNewAntialiased) {
137     gtk_gs_defaults.antialiased = iNewAntialiased;
138     gconf_client_set_bool(gconf_client,
139                           "/apps/ggv/gtkgs/antialiasing",
140                           gtk_gs_defaults_get_antialiased(), NULL);
141   }
142 }
143
144 gboolean
145 gtk_gs_defaults_get_antialiased()
146 {
147   return gtk_gs_defaults.antialiased;
148 }
149
150 void
151 gtk_gs_defaults_set_zoom_factor(gfloat fZoom)
152 {
153   fZoom = MIN(fZoom, 30.0);
154   fZoom = MAX(0.05, fZoom);
155   if(fabs(gtk_gs_defaults.zoom_factor - fZoom) > 0.001) {
156     gtk_gs_defaults.zoom_factor = fZoom;
157     gconf_client_set_float(gconf_client, "/apps/ggv/gtkgs/zoom",
158                            gtk_gs_defaults_get_zoom_factor(), NULL);
159   }
160 }
161
162 gfloat
163 gtk_gs_defaults_get_zoom_factor()
164 {
165   return gtk_gs_defaults.zoom_factor;
166 }
167
168 void
169 gtk_gs_defaults_set_orientation(gint iNewOrientation)
170 {
171   g_assert((iNewOrientation == GTK_GS_ORIENTATION_PORTRAIT) ||
172            (iNewOrientation == GTK_GS_ORIENTATION_LANDSCAPE) ||
173            (iNewOrientation == GTK_GS_ORIENTATION_UPSIDEDOWN) ||
174            (iNewOrientation == GTK_GS_ORIENTATION_SEASCAPE));
175   if(gtk_gs_defaults.fallback_orientation != iNewOrientation) {
176     gtk_gs_defaults.fallback_orientation = iNewOrientation;
177     gconf_client_set_int(gconf_client,
178                          "/apps/ggv/gtkgs/orientation",
179                          gtk_gs_defaults_get_orientation(), NULL);
180   }
181 }
182
183 gint
184 gtk_gs_defaults_get_orientation()
185 {
186   return gtk_gs_defaults.fallback_orientation;
187 }
188
189 void
190 gtk_gs_defaults_set_respect_eof(gboolean resp)
191 {
192   if(gtk_gs_defaults.respect_eof != resp) {
193     gtk_gs_defaults.respect_eof = resp;
194     gconf_client_set_bool(gconf_client,
195                           "/apps/ggv/gtkgs/respect_eof",
196                           gtk_gs_defaults_get_respect_eof(), NULL);
197   }
198 }
199
200 gboolean
201 gtk_gs_defaults_get_respect_eof()
202 {
203   return gtk_gs_defaults.respect_eof;
204 }
205
206 GtkGSPaperSize *
207 gtk_gs_defaults_get_paper_sizes()
208 {
209   return ggv_paper_sizes;
210 }
211
212 gint
213 gtk_gs_defaults_get_paper_count()
214 {
215   gint n = 0;
216
217   while(ggv_paper_sizes[n].name != NULL)
218     n++;
219
220   return n;
221 }
222
223 gboolean
224 gtk_gs_defaults_get_show_scroll_rect()
225 {
226   return gtk_gs_defaults.show_scroll_rect;
227 }
228
229 void
230 gtk_gs_defaults_set_show_scroll_rect(gboolean f)
231 {
232   if(gtk_gs_defaults.show_scroll_rect != f) {
233     gtk_gs_defaults.show_scroll_rect = f;
234     gconf_client_set_bool(gconf_client,
235                           "/apps/ggv/gtkgs/show_scroll_rect",
236                           gtk_gs_defaults_get_show_scroll_rect(), NULL);
237   }
238 }
239
240 const gchar *
241 gtk_gs_defaults_get_interpreter_cmd()
242 {
243   if(!gtk_gs_defaults.interpreter_cmd)
244     return GS_PATH;
245   return gtk_gs_defaults.interpreter_cmd;
246 }
247
248 const gchar *
249 gtk_gs_defaults_get_alpha_parameters()
250 {
251   if(!gtk_gs_defaults.alpha_params)
252     return ALPHA_PARAMS;
253   return gtk_gs_defaults.alpha_params;
254 }
255
256 const gchar *
257 gtk_gs_defaults_get_convert_pdf_cmd()
258 {
259   if(!gtk_gs_defaults.convert_pdf_cmd)
260     return GS_PATH
261       " -q -dNOPAUSE -dBATCH -dSAFER"
262       " -dQUIET -sDEVICE=pswrite" " -sOutputFile=%s -c save pop -f %s";
263   return gtk_gs_defaults.convert_pdf_cmd;
264 }
265
266 const gchar *
267 gtk_gs_defaults_get_dsc_cmd()
268 {
269   if(!gtk_gs_defaults.dsc_cmd)
270     return GS_PATH
271       " -q -dNODISPLAY -dSAFER -dDELAYSAFER"
272       " -sDSCname=%s -sPDFname=%s pdf2dsc.ps" " -c quit";
273   return gtk_gs_defaults.dsc_cmd;
274 }
275
276 const gchar *
277 gtk_gs_defaults_get_ungzip_cmd()
278 {
279   if(!gtk_gs_defaults.ungzip_cmd)
280     return "gzip -cd";
281   return gtk_gs_defaults.ungzip_cmd;
282 }
283
284 const gchar *
285 gtk_gs_defaults_get_unbzip2_cmd()
286 {
287   if(!gtk_gs_defaults.unbzip2_cmd)
288     return "bzip2 -cd";
289   return gtk_gs_defaults.unbzip2_cmd;
290 }
291
292 void
293 gtk_gs_defaults_set_interpreter_cmd(gchar * cmd)
294 {
295   if((NULL == gtk_gs_defaults.interpreter_cmd) ||
296      strcmp(gtk_gs_defaults.interpreter_cmd, cmd)) {
297     if(gtk_gs_defaults.interpreter_cmd)
298       g_free(gtk_gs_defaults.interpreter_cmd);
299     gtk_gs_defaults.interpreter_cmd = cmd;
300     gconf_client_set_string(gconf_client,
301                             "/apps/ggv/gtkgs/interpreter",
302                             gtk_gs_defaults_get_interpreter_cmd(), NULL);
303   }
304 }
305
306 void
307 gtk_gs_defaults_set_alpha_parameters(gchar * par)
308 {
309   if((NULL == gtk_gs_defaults.alpha_params) ||
310      strcmp(gtk_gs_defaults.alpha_params, par)) {
311     if(gtk_gs_defaults.alpha_params)
312       g_free(gtk_gs_defaults.alpha_params);
313     gtk_gs_defaults.alpha_params = par;
314     gconf_client_set_string(gconf_client,
315                             "/apps/ggv/gtkgs/alphaparams",
316                             gtk_gs_defaults_get_alpha_parameters(), NULL);
317   }
318 }
319
320 void
321 gtk_gs_defaults_set_convert_pdf_cmd(gchar * cmd)
322 {
323   if((NULL == gtk_gs_defaults.convert_pdf_cmd) ||
324      strcmp(gtk_gs_defaults.convert_pdf_cmd, cmd)) {
325     if(gtk_gs_defaults.convert_pdf_cmd)
326       g_free(gtk_gs_defaults.convert_pdf_cmd);
327     gtk_gs_defaults.convert_pdf_cmd = cmd;
328     gconf_client_set_string(gconf_client,
329                             "/apps/ggv/gtkgs/convertpdf",
330                             gtk_gs_defaults_get_convert_pdf_cmd(), NULL);
331   }
332 }
333
334 void
335 gtk_gs_defaults_set_dsc_cmd(gchar * cmd)
336 {
337   if((NULL == gtk_gs_defaults.dsc_cmd) || strcmp(gtk_gs_defaults.dsc_cmd, cmd)) {
338     if(gtk_gs_defaults.dsc_cmd)
339       g_free(gtk_gs_defaults.dsc_cmd);
340     gtk_gs_defaults.dsc_cmd = cmd;
341     gconf_client_set_string(gconf_client,
342                             "/apps/ggv/gtkgs/pdf2dsc",
343                             gtk_gs_defaults_get_dsc_cmd(), NULL);
344   }
345 }
346
347 void
348 gtk_gs_defaults_set_ungzip_cmd(gchar * cmd)
349 {
350   if((NULL == gtk_gs_defaults.ungzip_cmd) ||
351      strcmp(gtk_gs_defaults.ungzip_cmd, cmd)) {
352     if(gtk_gs_defaults.ungzip_cmd)
353       g_free(gtk_gs_defaults.ungzip_cmd);
354     gtk_gs_defaults.ungzip_cmd = cmd;
355     gconf_client_set_string(gconf_client,
356                             "/apps/ggv/gtkgs/ungzip",
357                             gtk_gs_defaults_get_ungzip_cmd(), NULL);
358   }
359 }
360
361 void
362 gtk_gs_defaults_set_unbzip2_cmd(gchar * cmd)
363 {
364   if((NULL == gtk_gs_defaults.unbzip2_cmd) ||
365      strcmp(gtk_gs_defaults.unbzip2_cmd, cmd)) {
366     if(gtk_gs_defaults.unbzip2_cmd)
367       g_free(gtk_gs_defaults.unbzip2_cmd);
368     gtk_gs_defaults.unbzip2_cmd = cmd;
369     gconf_client_set_string(gconf_client,
370                             "/apps/ggv/gtkgs/unbzip2",
371                             gtk_gs_defaults_get_unbzip2_cmd(), NULL);
372   }
373 }
374
375 GtkGSZoomMode
376 gtk_gs_defaults_get_zoom_mode()
377 {
378   return gtk_gs_defaults.zoom_mode;
379 }
380
381 void
382 gtk_gs_defaults_set_zoom_mode(GtkGSZoomMode zoom_mode)
383 {
384   if(gtk_gs_defaults.zoom_mode != zoom_mode) {
385     gtk_gs_defaults.zoom_mode = zoom_mode;
386     gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/zoommode",
387                          gtk_gs_defaults_get_zoom_mode(), NULL);
388   }
389 }
390
391 void
392 gtk_gs_defaults_load()
393 {
394   gtk_gs_defaults_gconf_client();
395
396   gtk_gs_defaults.respect_eof =
397     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/respect_eof", NULL));
398   gtk_gs_defaults.override_size =
399     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/override_size",
400                            NULL));
401   gtk_gs_defaults.override_orientation =
402     (gconf_client_get_bool
403      (gconf_client, "/apps/ggv/gtkgs/override_orientation", NULL));
404   gtk_gs_defaults.antialiased =
405     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/antialiasing", NULL));
406   gtk_gs_defaults.default_size =
407     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/size", NULL));
408   gtk_gs_defaults.zoom_factor =
409     (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/zoom", NULL));
410   gtk_gs_defaults.fallback_orientation =
411     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/orientation", NULL));
412   gtk_gs_defaults.interpreter_cmd =
413     (gconf_client_get_string
414      (gconf_client, "/apps/ggv/gtkgs/interpreter", NULL));
415   gtk_gs_defaults.alpha_params =
416     (gconf_client_get_string
417      (gconf_client, "/apps/ggv/gtkgs/alphaparams", NULL));
418   gtk_gs_defaults.convert_pdf_cmd =
419     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/convertpdf", NULL));
420   gtk_gs_defaults.dsc_cmd =
421     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
422   gtk_gs_defaults.ungzip_cmd =
423     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/ungzip", NULL));
424   gtk_gs_defaults.unbzip2_cmd =
425     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/unbzip2", NULL));
426   gtk_gs_defaults.show_scroll_rect =
427     (gconf_client_get_bool
428      (gconf_client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
429   gtk_gs_defaults.scroll_step =
430     (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/scrollstep", NULL));
431   gtk_gs_defaults.zoom_mode =
432     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/zoommode", NULL));
433 }
434
435 static void
436 gtk_gs_defaults_changed(GConfClient * client, guint cnxn_id,
437                         GConfEntry * entry, gpointer user_data)
438 {
439   if(!strcmp(entry->key, "/apps/ggv/gtkgs/respect_eof"))
440     gtk_gs_defaults_set_respect_eof
441       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/respect_eof", NULL));
442   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_orientation"))
443     gtk_gs_defaults_set_override_orientation
444       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_orientation",
445                              NULL));
446   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/orientation"))
447     gtk_gs_defaults_set_orientation
448       (gconf_client_get_int(client, "/apps/ggv/gtkgs/orientation", NULL));
449   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoom"))
450     gtk_gs_defaults_set_zoom_factor
451       (gconf_client_get_float(client, "/apps/ggv/gtkgs/zoom", NULL));
452   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/size"))
453     gtk_gs_defaults_set_size
454       (gconf_client_get_int(client, "/apps/ggv/gtkgs/size", NULL));
455   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/antialiasing"))
456     gtk_gs_defaults_set_antialiased
457       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/antialiasing", NULL));
458   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_size"))
459     gtk_gs_defaults_set_override_size
460       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_size", NULL));
461   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/show_scroll_rect"))
462     gtk_gs_defaults_set_show_scroll_rect
463       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
464   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/interpreter"))
465     gtk_gs_defaults_set_interpreter_cmd
466       (gconf_client_get_string(client, "/apps/ggv/gtkgs/interpreter", NULL));
467   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/alphaparams"))
468     gtk_gs_defaults_set_alpha_parameters
469       (gconf_client_get_string(client, "/apps/ggv/gtkgs/alphaparams", NULL));
470   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/convertpdf"))
471     gtk_gs_defaults_set_convert_pdf_cmd
472       (gconf_client_get_string(client, "/apps/ggv/gtkgs/convertpdf", NULL));
473   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/pdf2dsc"))
474     gtk_gs_defaults_set_dsc_cmd
475       (gconf_client_get_string(client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
476   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/ungzip"))
477     gtk_gs_defaults_set_ungzip_cmd
478       (gconf_client_get_string(client, "/apps/ggv/gtkgs/ungzip", NULL));
479   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/unbzip2"))
480     gtk_gs_defaults_set_unbzip2_cmd
481       (gconf_client_get_string(client, "/apps/ggv/gtkgs/unbzip2", NULL));
482   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoommode"))
483     gtk_gs_defaults_set_zoom_mode
484       (gconf_client_get_int(client, "/apps/ggv/gtkgs/zoommode", NULL));
485   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/scrollstep"))
486     gtk_gs_defaults_set_scroll_step
487       (gconf_client_get_float(client, "/apps/ggv/gtkgs/scrollstep", NULL));
488 }
489
490 GConfClient *
491 gtk_gs_defaults_gconf_client()
492 {
493   if(!gconf_client) {
494     g_assert(gconf_is_initialized());
495     gconf_client = gconf_client_get_default();
496     g_assert(gconf_client != NULL);
497     gconf_client_add_dir(gconf_client, "/apps/ggv/gtkgs",
498                          GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
499     gconf_client_notify_add(gconf_client,
500                             "/apps/ggv/gtkgs", (GConfClientNotifyFunc)
501                             gtk_gs_defaults_changed, NULL, NULL, NULL);
502   }
503
504   return gconf_client;
505 }