2 * gsdefaults.c: default settings for the GtkGS widget
4 * Copyright 2002 - 2005 the Free Software Foundation
6 * Author: Jaka Mocnik <jaka@gnu.org>
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.
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.
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.
29 #include "gsdefaults.h"
32 #include <gconf/gconf-client.h>
35 * defaults for GtkGS widgets
38 static GConfClient *gconf_client;
40 /* Default values to pass to gtk_gs_init */
41 typedef struct _GtkGSDefaults {
43 gboolean override_size;
45 gboolean override_orientation;
47 gboolean show_scroll_rect;
48 gint fallback_orientation;
51 gchar *interpreter_cmd;
54 gchar *convert_pdf_cmd;
57 GtkGSZoomMode zoom_mode;
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,
67 gtk_gs_defaults_set_scroll_step(gfloat step)
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);
78 gtk_gs_defaults_get_scroll_step()
80 return gtk_gs_defaults.scroll_step;
84 gtk_gs_defaults_set_size(gint iNewPageSize)
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);
94 gtk_gs_defaults_get_size()
96 return gtk_gs_defaults.default_size;
100 gtk_gs_defaults_set_override_size(gboolean bOverrSize)
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);
111 gtk_gs_defaults_get_override_size()
113 return gtk_gs_defaults.override_size;
117 gtk_gs_defaults_set_override_orientation(gboolean bOverOrien)
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);
128 gtk_gs_defaults_get_override_orientation()
130 return gtk_gs_defaults.override_orientation;
134 gtk_gs_defaults_set_antialiased(gint iNewAntialiased)
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);
145 gtk_gs_defaults_get_antialiased()
147 return gtk_gs_defaults.antialiased;
151 gtk_gs_defaults_set_zoom_factor(gfloat fZoom)
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);
163 gtk_gs_defaults_get_zoom_factor()
165 return gtk_gs_defaults.zoom_factor;
169 gtk_gs_defaults_set_orientation(gint iNewOrientation)
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);
184 gtk_gs_defaults_get_orientation()
186 return gtk_gs_defaults.fallback_orientation;
190 gtk_gs_defaults_set_respect_eof(gboolean resp)
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);
201 gtk_gs_defaults_get_respect_eof()
203 return gtk_gs_defaults.respect_eof;
207 gtk_gs_defaults_get_paper_sizes()
209 return ggv_paper_sizes;
213 gtk_gs_defaults_get_paper_count()
217 while(ggv_paper_sizes[n].name != NULL)
224 gtk_gs_defaults_get_show_scroll_rect()
226 return gtk_gs_defaults.show_scroll_rect;
230 gtk_gs_defaults_set_show_scroll_rect(gboolean f)
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);
241 gtk_gs_defaults_get_interpreter_cmd()
243 if(!gtk_gs_defaults.interpreter_cmd)
245 return gtk_gs_defaults.interpreter_cmd;
249 gtk_gs_defaults_get_alpha_parameters()
251 if(!gtk_gs_defaults.alpha_params)
253 return gtk_gs_defaults.alpha_params;
257 gtk_gs_defaults_get_convert_pdf_cmd()
259 if(!gtk_gs_defaults.convert_pdf_cmd)
261 " -q -dNOPAUSE -dBATCH -dSAFER"
262 " -dQUIET -sDEVICE=pswrite" " -sOutputFile=%s -c save pop -f %s";
263 return gtk_gs_defaults.convert_pdf_cmd;
267 gtk_gs_defaults_get_dsc_cmd()
269 if(!gtk_gs_defaults.dsc_cmd)
271 " -q -dNODISPLAY -dSAFER -dDELAYSAFER"
272 " -sDSCname=%s -sPDFname=%s pdf2dsc.ps" " -c quit";
273 return gtk_gs_defaults.dsc_cmd;
277 gtk_gs_defaults_get_ungzip_cmd()
279 if(!gtk_gs_defaults.ungzip_cmd)
281 return gtk_gs_defaults.ungzip_cmd;
285 gtk_gs_defaults_get_unbzip2_cmd()
287 if(!gtk_gs_defaults.unbzip2_cmd)
289 return gtk_gs_defaults.unbzip2_cmd;
293 gtk_gs_defaults_set_interpreter_cmd(gchar * cmd)
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);
307 gtk_gs_defaults_set_alpha_parameters(gchar * par)
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);
321 gtk_gs_defaults_set_convert_pdf_cmd(gchar * cmd)
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);
335 gtk_gs_defaults_set_dsc_cmd(gchar * cmd)
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);
348 gtk_gs_defaults_set_ungzip_cmd(gchar * cmd)
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);
362 gtk_gs_defaults_set_unbzip2_cmd(gchar * cmd)
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);
376 gtk_gs_defaults_get_zoom_mode()
378 return gtk_gs_defaults.zoom_mode;
382 gtk_gs_defaults_set_zoom_mode(GtkGSZoomMode zoom_mode)
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);
392 gtk_gs_defaults_load()
394 gtk_gs_defaults_gconf_client();
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",
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));
436 gtk_gs_defaults_changed(GConfClient * client, guint cnxn_id,
437 GConfEntry * entry, gpointer user_data)
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",
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));
491 gtk_gs_defaults_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);