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.
28 #include "gsdefaults.h"
30 #include <gconf/gconf-client.h>
32 static void gtk_gs_defaults_changed (GConfClient * client, guint cnxn_id,
33 GConfEntry * entry, gpointer user_data);
36 * defaults for GtkGS widgets
39 static GConfClient *gconf_client;
41 /* Default values to pass to gtk_gs_init */
42 typedef struct _GtkGSDefaults {
44 gboolean override_size;
46 gboolean override_orientation;
48 gboolean show_scroll_rect;
49 gint fallback_orientation;
52 gchar *interpreter_cmd;
55 gchar *convert_pdf_cmd;
58 GtkGSZoomMode zoom_mode;
61 static GtkGSDefaults gtk_gs_defaults = {
62 TRUE, FALSE, 8, FALSE, TRUE, TRUE,
63 0, 1.0, 0.25, NULL, NULL, NULL, NULL, NULL, NULL,
67 GtkGSPaperSize gtk_gs_paper_sizes[] = {
69 {N_("Letter"), 612, 792,},
70 {N_("Tabloid"), 792, 1224,},
71 {N_("Ledger"), 1224, 792,},
72 {N_("Legal"), 612, 1008,},
73 {N_("Statement"), 396, 612,},
74 {N_("Executive"), 540, 720,},
75 {N_("A0"), 2380, 3368,},
76 {N_("A1"), 1684, 2380,},
77 {N_("A2"), 1190, 1684,},
78 {N_("A3"), 842, 1190,},
79 {N_("A4"), 595, 842,},
80 {N_("A5"), 420, 595,},
81 {N_("B4"), 729, 1032,},
82 {N_("B5"), 516, 729,},
83 {N_("Folio"), 612, 936,},
84 {N_("Quarto"), 610, 780,},
85 {N_("10x14"), 720, 1008,},
90 gtk_gs_defaults_set_scroll_step(gfloat step)
92 if(fabs(gtk_gs_defaults.scroll_step - step) > 0.001) {
93 gtk_gs_defaults.scroll_step = step;
94 gconf_client_set_float(gconf_client,
95 "/apps/ggv/gtkgs/scrollstep",
96 gtk_gs_defaults_get_scroll_step(), NULL);
101 gtk_gs_defaults_get_scroll_step()
103 return gtk_gs_defaults.scroll_step;
107 gtk_gs_defaults_set_size(gint iNewPageSize)
109 if(gtk_gs_defaults.default_size != iNewPageSize) {
110 gtk_gs_defaults.default_size = iNewPageSize;
111 gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/size",
112 gtk_gs_defaults_get_size(), NULL);
117 gtk_gs_defaults_get_size()
119 return gtk_gs_defaults.default_size;
123 gtk_gs_defaults_set_override_size(gboolean bOverrSize)
125 if(gtk_gs_defaults.override_size != bOverrSize) {
126 gtk_gs_defaults.override_size = bOverrSize;
127 gconf_client_set_bool(gconf_client,
128 "/apps/ggv/gtkgs/override_size",
129 gtk_gs_defaults_get_override_size(), NULL);
134 gtk_gs_defaults_get_override_size()
136 return gtk_gs_defaults.override_size;
140 gtk_gs_defaults_set_override_orientation(gboolean bOverOrien)
142 if(gtk_gs_defaults.override_orientation != bOverOrien) {
143 gtk_gs_defaults.override_orientation = bOverOrien;
144 gconf_client_set_bool(gconf_client,
145 "/apps/ggv/gtkgs/override_orientation",
146 gtk_gs_defaults_get_override_orientation(), NULL);
151 gtk_gs_defaults_get_override_orientation()
153 return gtk_gs_defaults.override_orientation;
157 gtk_gs_defaults_set_antialiased(gint iNewAntialiased)
159 if(gtk_gs_defaults.antialiased != iNewAntialiased) {
160 gtk_gs_defaults.antialiased = iNewAntialiased;
161 gconf_client_set_bool(gconf_client,
162 "/apps/ggv/gtkgs/antialiasing",
163 gtk_gs_defaults_get_antialiased(), NULL);
168 gtk_gs_defaults_get_antialiased()
170 return gtk_gs_defaults.antialiased;
174 gtk_gs_defaults_set_zoom_factor(gfloat fZoom)
176 fZoom = MIN(fZoom, 30.0);
177 fZoom = MAX(0.05, fZoom);
178 if(fabs(gtk_gs_defaults.zoom_factor - fZoom) > 0.001) {
179 gtk_gs_defaults.zoom_factor = fZoom;
180 gconf_client_set_float(gconf_client, "/apps/ggv/gtkgs/zoom",
181 gtk_gs_defaults_get_zoom_factor(), NULL);
186 gtk_gs_defaults_get_zoom_factor()
188 return gtk_gs_defaults.zoom_factor;
192 gtk_gs_defaults_set_orientation(gint iNewOrientation)
194 g_assert((iNewOrientation == GTK_GS_ORIENTATION_PORTRAIT) ||
195 (iNewOrientation == GTK_GS_ORIENTATION_LANDSCAPE) ||
196 (iNewOrientation == GTK_GS_ORIENTATION_UPSIDEDOWN) ||
197 (iNewOrientation == GTK_GS_ORIENTATION_SEASCAPE));
198 if(gtk_gs_defaults.fallback_orientation != iNewOrientation) {
199 gtk_gs_defaults.fallback_orientation = iNewOrientation;
200 gconf_client_set_int(gconf_client,
201 "/apps/ggv/gtkgs/orientation",
202 gtk_gs_defaults_get_orientation(), NULL);
207 gtk_gs_defaults_get_orientation()
209 return gtk_gs_defaults.fallback_orientation;
213 gtk_gs_defaults_set_respect_eof(gboolean resp)
215 if(gtk_gs_defaults.respect_eof != resp) {
216 gtk_gs_defaults.respect_eof = resp;
217 gconf_client_set_bool(gconf_client,
218 "/apps/ggv/gtkgs/respect_eof",
219 gtk_gs_defaults_get_respect_eof(), NULL);
224 gtk_gs_defaults_get_respect_eof()
226 return gtk_gs_defaults.respect_eof;
230 gtk_gs_defaults_get_paper_sizes()
232 return gtk_gs_paper_sizes;
236 gtk_gs_defaults_get_show_scroll_rect()
238 return gtk_gs_defaults.show_scroll_rect;
242 gtk_gs_defaults_set_show_scroll_rect(gboolean f)
244 if(gtk_gs_defaults.show_scroll_rect != f) {
245 gtk_gs_defaults.show_scroll_rect = f;
246 gconf_client_set_bool(gconf_client,
247 "/apps/ggv/gtkgs/show_scroll_rect",
248 gtk_gs_defaults_get_show_scroll_rect(), NULL);
253 gtk_gs_defaults_get_interpreter_cmd()
255 if(!gtk_gs_defaults.interpreter_cmd)
257 return gtk_gs_defaults.interpreter_cmd;
261 gtk_gs_defaults_get_alpha_parameters()
263 if(!gtk_gs_defaults.alpha_params)
265 return gtk_gs_defaults.alpha_params;
269 gtk_gs_defaults_get_convert_pdf_cmd()
271 if(!gtk_gs_defaults.convert_pdf_cmd)
273 " -q -dNOPAUSE -dBATCH -dSAFER"
274 " -dQUIET -sDEVICE=pswrite" " -sOutputFile=%s -c save pop -f %s";
275 return gtk_gs_defaults.convert_pdf_cmd;
279 gtk_gs_defaults_get_dsc_cmd()
281 if(!gtk_gs_defaults.dsc_cmd)
283 " -q -dNODISPLAY -dSAFER -dDELAYSAFER"
284 " -sDSCname=%s -sPDFname=%s pdf2dsc.ps" " -c quit";
285 return gtk_gs_defaults.dsc_cmd;
289 gtk_gs_defaults_get_ungzip_cmd()
291 if(!gtk_gs_defaults.ungzip_cmd)
293 return gtk_gs_defaults.ungzip_cmd;
297 gtk_gs_defaults_get_unbzip2_cmd()
299 if(!gtk_gs_defaults.unbzip2_cmd)
301 return gtk_gs_defaults.unbzip2_cmd;
305 gtk_gs_defaults_set_interpreter_cmd(gchar * cmd)
307 if((NULL == gtk_gs_defaults.interpreter_cmd) ||
308 strcmp(gtk_gs_defaults.interpreter_cmd, cmd)) {
309 if(gtk_gs_defaults.interpreter_cmd)
310 g_free(gtk_gs_defaults.interpreter_cmd);
311 gtk_gs_defaults.interpreter_cmd = cmd;
312 gconf_client_set_string(gconf_client,
313 "/apps/ggv/gtkgs/interpreter",
314 gtk_gs_defaults_get_interpreter_cmd(), NULL);
319 gtk_gs_defaults_set_alpha_parameters(gchar * par)
321 if((NULL == gtk_gs_defaults.alpha_params) ||
322 strcmp(gtk_gs_defaults.alpha_params, par)) {
323 if(gtk_gs_defaults.alpha_params)
324 g_free(gtk_gs_defaults.alpha_params);
325 gtk_gs_defaults.alpha_params = par;
326 gconf_client_set_string(gconf_client,
327 "/apps/ggv/gtkgs/alphaparams",
328 gtk_gs_defaults_get_alpha_parameters(), NULL);
333 gtk_gs_defaults_set_convert_pdf_cmd(gchar * cmd)
335 if((NULL == gtk_gs_defaults.convert_pdf_cmd) ||
336 strcmp(gtk_gs_defaults.convert_pdf_cmd, cmd)) {
337 if(gtk_gs_defaults.convert_pdf_cmd)
338 g_free(gtk_gs_defaults.convert_pdf_cmd);
339 gtk_gs_defaults.convert_pdf_cmd = cmd;
340 gconf_client_set_string(gconf_client,
341 "/apps/ggv/gtkgs/convertpdf",
342 gtk_gs_defaults_get_convert_pdf_cmd(), NULL);
347 gtk_gs_defaults_set_dsc_cmd(gchar * cmd)
349 if((NULL == gtk_gs_defaults.dsc_cmd) || strcmp(gtk_gs_defaults.dsc_cmd, cmd)) {
350 if(gtk_gs_defaults.dsc_cmd)
351 g_free(gtk_gs_defaults.dsc_cmd);
352 gtk_gs_defaults.dsc_cmd = cmd;
353 gconf_client_set_string(gconf_client,
354 "/apps/ggv/gtkgs/pdf2dsc",
355 gtk_gs_defaults_get_dsc_cmd(), NULL);
360 gtk_gs_defaults_set_ungzip_cmd(gchar * cmd)
362 if((NULL == gtk_gs_defaults.ungzip_cmd) ||
363 strcmp(gtk_gs_defaults.ungzip_cmd, cmd)) {
364 if(gtk_gs_defaults.ungzip_cmd)
365 g_free(gtk_gs_defaults.ungzip_cmd);
366 gtk_gs_defaults.ungzip_cmd = cmd;
367 gconf_client_set_string(gconf_client,
368 "/apps/ggv/gtkgs/ungzip",
369 gtk_gs_defaults_get_ungzip_cmd(), NULL);
374 gtk_gs_defaults_set_unbzip2_cmd(gchar * cmd)
376 if((NULL == gtk_gs_defaults.unbzip2_cmd) ||
377 strcmp(gtk_gs_defaults.unbzip2_cmd, cmd)) {
378 if(gtk_gs_defaults.unbzip2_cmd)
379 g_free(gtk_gs_defaults.unbzip2_cmd);
380 gtk_gs_defaults.unbzip2_cmd = cmd;
381 gconf_client_set_string(gconf_client,
382 "/apps/ggv/gtkgs/unbzip2",
383 gtk_gs_defaults_get_unbzip2_cmd(), NULL);
388 gtk_gs_defaults_get_zoom_mode()
390 return gtk_gs_defaults.zoom_mode;
394 gtk_gs_defaults_set_zoom_mode(GtkGSZoomMode zoom_mode)
396 if(gtk_gs_defaults.zoom_mode != zoom_mode) {
397 gtk_gs_defaults.zoom_mode = zoom_mode;
398 gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/zoommode",
399 gtk_gs_defaults_get_zoom_mode(), NULL);
404 gtk_gs_defaults_gconf_client()
407 g_assert(gconf_is_initialized());
408 gconf_client = gconf_client_get_default();
409 g_assert(gconf_client != NULL);
410 gconf_client_add_dir(gconf_client, "/apps/ggv/gtkgs",
411 GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
412 gconf_client_notify_add(gconf_client,
413 "/apps/ggv/gtkgs", (GConfClientNotifyFunc)
414 gtk_gs_defaults_changed, NULL, NULL, NULL);
421 gtk_gs_defaults_load()
423 gtk_gs_defaults_gconf_client();
425 gtk_gs_defaults.respect_eof =
426 (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/respect_eof", NULL));
427 gtk_gs_defaults.override_size =
428 (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/override_size",
430 gtk_gs_defaults.override_orientation =
431 (gconf_client_get_bool
432 (gconf_client, "/apps/ggv/gtkgs/override_orientation", NULL));
433 gtk_gs_defaults.antialiased =
434 (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/antialiasing", NULL));
435 gtk_gs_defaults.default_size =
436 (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/size", NULL));
437 gtk_gs_defaults.zoom_factor =
438 (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/zoom", NULL));
439 gtk_gs_defaults.fallback_orientation =
440 (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/orientation", NULL));
441 gtk_gs_defaults.interpreter_cmd =
442 (gconf_client_get_string
443 (gconf_client, "/apps/ggv/gtkgs/interpreter", NULL));
444 gtk_gs_defaults.alpha_params =
445 (gconf_client_get_string
446 (gconf_client, "/apps/ggv/gtkgs/alphaparams", NULL));
447 gtk_gs_defaults.convert_pdf_cmd =
448 (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/convertpdf", NULL));
449 gtk_gs_defaults.dsc_cmd =
450 (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
451 gtk_gs_defaults.ungzip_cmd =
452 (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/ungzip", NULL));
453 gtk_gs_defaults.unbzip2_cmd =
454 (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/unbzip2", NULL));
455 gtk_gs_defaults.show_scroll_rect =
456 (gconf_client_get_bool
457 (gconf_client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
458 gtk_gs_defaults.scroll_step =
459 (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/scrollstep", NULL));
460 gtk_gs_defaults.zoom_mode =
461 (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/zoommode", NULL));
465 gtk_gs_defaults_changed(GConfClient * client, guint cnxn_id,
466 GConfEntry * entry, gpointer user_data)
468 if(!strcmp(entry->key, "/apps/ggv/gtkgs/respect_eof"))
469 gtk_gs_defaults_set_respect_eof
470 (gconf_client_get_bool(client, "/apps/ggv/gtkgs/respect_eof", NULL));
471 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_orientation"))
472 gtk_gs_defaults_set_override_orientation
473 (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_orientation",
475 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/orientation"))
476 gtk_gs_defaults_set_orientation
477 (gconf_client_get_int(client, "/apps/ggv/gtkgs/orientation", NULL));
478 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoom"))
479 gtk_gs_defaults_set_zoom_factor
480 (gconf_client_get_float(client, "/apps/ggv/gtkgs/zoom", NULL));
481 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/size"))
482 gtk_gs_defaults_set_size
483 (gconf_client_get_int(client, "/apps/ggv/gtkgs/size", NULL));
484 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/antialiasing"))
485 gtk_gs_defaults_set_antialiased
486 (gconf_client_get_bool(client, "/apps/ggv/gtkgs/antialiasing", NULL));
487 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_size"))
488 gtk_gs_defaults_set_override_size
489 (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_size", NULL));
490 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/show_scroll_rect"))
491 gtk_gs_defaults_set_show_scroll_rect
492 (gconf_client_get_bool(client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
493 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/interpreter"))
494 gtk_gs_defaults_set_interpreter_cmd
495 (gconf_client_get_string(client, "/apps/ggv/gtkgs/interpreter", NULL));
496 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/alphaparams"))
497 gtk_gs_defaults_set_alpha_parameters
498 (gconf_client_get_string(client, "/apps/ggv/gtkgs/alphaparams", NULL));
499 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/convertpdf"))
500 gtk_gs_defaults_set_convert_pdf_cmd
501 (gconf_client_get_string(client, "/apps/ggv/gtkgs/convertpdf", NULL));
502 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/pdf2dsc"))
503 gtk_gs_defaults_set_dsc_cmd
504 (gconf_client_get_string(client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
505 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/ungzip"))
506 gtk_gs_defaults_set_ungzip_cmd
507 (gconf_client_get_string(client, "/apps/ggv/gtkgs/ungzip", NULL));
508 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/unbzip2"))
509 gtk_gs_defaults_set_unbzip2_cmd
510 (gconf_client_get_string(client, "/apps/ggv/gtkgs/unbzip2", NULL));
511 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoommode"))
512 gtk_gs_defaults_set_zoom_mode
513 (gconf_client_get_int(client, "/apps/ggv/gtkgs/zoommode", NULL));
514 else if(!strcmp(entry->key, "/apps/ggv/gtkgs/scrollstep"))
515 gtk_gs_defaults_set_scroll_step
516 (gconf_client_get_float(client, "/apps/ggv/gtkgs/scrollstep", NULL));