1 /*
2  GtkLP
3   graphical Frontends for non-administrative CUPS users.
4 
5  Copyright (C) 1998-2004 Tobias Mueller
6 
7  This program is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public License
9  as published by the Free Software Foundation; either version 2
10  of the License, or (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program; if not, write to the Free Software
19  Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  Boston, MA 02110-1301, USA
21 
22 */
23 
24 #include <config.h>
25 
26 #include "gtklptab.h"
27 
28 #include <stdlib.h>
29 #include <string.h>
30 #include <gtk/gtk.h>
31 
32 #include <gettext.h>
33 #include <defaults.h>
34 
35 #include <libgtklp.h>
36 
37 #include "gtklp.h"
38 #include "gtklp_functions.h"
39 #include "hpgl2.h"
40 #include "image.h"
41 #include "output.h"
42 #include "ppd.h"
43 #include "special.h"
44 #include "text.h"
45 
46 #include "logo_k.xpm"
47 
48 GtkWidget *gtklpTab;
49 GtkWidget *gtklpViewable, *gtklpViewOut, *gtklpViewText, *gtklpViewImage,
50     *gtklpViewHpgl2, *gtklpViewSpecial, *gtklpViewPPD;
51 GtkWidget *prefsFrame, *remPrinterCheck, *remTabCheck, *saveExitCheck,
52     *jobIDOnExitCheck, *wantconstCheck, *saveAnzCheck;
53 #if GTK_MAJOR_VERSION != 1
54 GtkWidget *saveSizePosCheck;
55 #endif
56 GtkWidget *pathesFrame;
57 GtkWidget *helpFrame;
58 GtkWidget *aboutWin;
59 GtkWidget *clearFileListCheck, *exitOnPrintCheck;
60 GtkWidget *browserCom, *helpURL, *gtklpqCom;
61 GtkWidget *buttonCons;
62 
gtklpTabSetDefaults(void)63 void gtklpTabSetDefaults(void)
64 {
65 	if (DEBUG)
66 		printf("Get gtklpDefaults\n");
67 
68 	/* Viewable sections */
69 	if (viewable[0])
70 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewOut),
71 					     1);
72 	else
73 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewOut),
74 					     0);
75 	if (viewable[1])
76 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewText),
77 					     1);
78 	else
79 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewText),
80 					     0);
81 
82 	if (viewable[2])
83 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewImage),
84 					     1);
85 	else
86 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewImage),
87 					     0);
88 
89 	if (viewable[3])
90 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewHpgl2),
91 					     1);
92 	else
93 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewHpgl2),
94 					     0);
95 
96 	if (viewable[4])
97 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
98 					     (gtklpViewSpecial), 1);
99 	else
100 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
101 					     (gtklpViewSpecial), 0);
102 
103 	if (viewable[5])
104 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewPPD),
105 					     1);
106 	else
107 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtklpViewPPD),
108 					     0);
109 	if (printerPPD == NULL) {
110 		gtk_widget_set_sensitive(gtklpViewPPD, FALSE);
111 		gtk_widget_hide(ppdTab);
112 		gtk_widget_set_sensitive(buttonCons, FALSE);
113 		gtk_widget_set_sensitive(wantconstCheck, FALSE);
114 		wantconst = 0;
115 	} else {
116 		gtk_widget_set_sensitive(gtklpViewPPD, TRUE);
117 		gtk_widget_set_sensitive(buttonCons, TRUE);
118 		gtk_widget_set_sensitive(wantconstCheck, TRUE);
119 		gtk_widget_show(ppdTab);
120 	}
121 
122 	/* Prefs */
123 	if (saveanz)
124 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(saveAnzCheck),
125 					     1);
126 	else
127 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(saveAnzCheck),
128 					     0);
129 	if (saveonexit)
130 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(saveExitCheck),
131 					     1);
132 	else
133 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(saveExitCheck),
134 					     0);
135 	if (rememberprinter)
136 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remPrinterCheck),
137 					     1);
138 	else
139 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remPrinterCheck),
140 					     0);
141 	if (remembertab)
142 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remTabCheck), 1);
143 	else
144 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remTabCheck), 0);
145 	if (clearfilelist)
146 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
147 					     (clearFileListCheck), 1);
148 	else
149 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
150 					     (clearFileListCheck), 0);
151 	if (exitonprint)
152 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
153 					     (exitOnPrintCheck), 1);
154 	else
155 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
156 					     (exitOnPrintCheck), 0);
157 	if (jobidonexit)
158 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
159 					     (jobIDOnExitCheck), 1);
160 	else
161 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
162 					     (jobIDOnExitCheck), 0);
163 	if (wantconst)
164 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wantconstCheck),
165 					     1);
166 	else
167 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wantconstCheck),
168 					     0);
169 #if GTK_MAJOR_VERSION != 1
170 	if (wantSaveSizePos)
171 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
172 					     (saveSizePosCheck), 1);
173 	else
174 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
175 					     (saveSizePosCheck), 0);
176 #endif
177 
178 	if (needFileSelection == 0) {
179 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
180 					     (exitOnPrintCheck), 1);
181 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
182 					     (clearFileListCheck), 1);
183 		gtk_widget_set_sensitive(GTK_WIDGET(clearFileListCheck), FALSE);
184 		gtk_widget_set_sensitive(GTK_WIDGET(exitOnPrintCheck), FALSE);
185 	}
186 
187 	if (saveonexit == 0) {
188 		gtk_widget_set_sensitive(GTK_WIDGET(saveAnzCheck), FALSE);
189 	}
190 
191 	/* Paths */
192 	gtk_entry_set_text(GTK_ENTRY(browserCom), str2str(BROWSER));
193 	gtk_entry_set_text(GTK_ENTRY(helpURL), str2str(HELPURL));
194 	gtk_entry_set_text(GTK_ENTRY(gtklpqCom), str2str(GTKLPQCOM));
195 }
196 
gtklpViewChanged(GtkWidget * widget,gpointer data)197 void gtklpViewChanged(GtkWidget * widget, gpointer data)
198 {
199 	if (DEBUG)
200 		printf("Gtklp view Changed: %s\n", (char *)data);
201 	if (strcmp((char *)data, "Out") == 0) {
202 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
203 			viewable[0] = 1;
204 			gtk_widget_hide(tabs);
205 			gtk_widget_show(outputTab);
206 			gtk_widget_show(tabs);
207 
208 		} else {
209 			viewable[0] = 0;
210 			gtk_widget_hide(outputTab);
211 		}
212 		return;
213 	}
214 	if (strcmp((char *)data, "Text") == 0) {
215 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
216 			viewable[1] = 1;
217 			gtk_widget_hide(tabs);
218 			gtk_widget_show(textTab);
219 			gtk_widget_show(tabs);
220 		} else {
221 			viewable[1] = 0;
222 			gtk_widget_hide(textTab);
223 		}
224 		return;
225 	}
226 	if (strcmp((char *)data, "Image") == 0) {
227 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
228 			viewable[2] = 1;
229 			gtk_widget_hide(tabs);
230 			gtk_widget_show(imageTab);
231 			gtk_widget_show(tabs);
232 		} else {
233 			viewable[2] = 0;
234 			gtk_widget_hide(imageTab);
235 		}
236 		return;
237 	}
238 	if (strcmp((char *)data, "Hpgl2") == 0) {
239 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
240 			viewable[3] = 1;
241 			gtk_widget_hide(tabs);
242 			gtk_widget_show(hpgl2Tab);
243 			gtk_widget_show(tabs);
244 		} else {
245 			viewable[3] = 0;
246 			gtk_widget_hide(hpgl2Tab);
247 		}
248 		return;
249 	}
250 	if (strcmp((char *)data, "Special") == 0) {
251 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
252 			viewable[4] = 1;
253 			gtk_widget_hide(tabs);
254 			gtk_widget_show(specialTab);
255 			gtk_widget_show(tabs);
256 		} else {
257 			viewable[4] = 0;
258 			gtk_widget_hide(specialTab);
259 		}
260 		return;
261 	}
262 	if (strcmp((char *)data, "PPD") == 0) {
263 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
264 			viewable[5] = 1;
265 			gtk_widget_hide(tabs);
266 			gtk_widget_show(ppdTab);
267 			gtk_widget_show(tabs);
268 		} else {
269 			viewable[5] = 0;
270 			gtk_widget_hide(ppdTab);
271 		}
272 		return;
273 	}
274 
275 	if (DEBUG)
276 		printf("Unknown View-Change !\n");
277 	emergency();
278 }
279 
GtklpViewable(GtkWidget * container)280 void GtklpViewable(GtkWidget * container)
281 {
282 	GtkWidget *mainHBox, *hbox, *vbox;
283 
284 	mainHBox = gtk_hbox_new(FALSE, INFRAME_SPACING_H);
285 	gtk_box_pack_start(GTK_BOX(container), mainHBox, FALSE, FALSE,
286 			   FRAME_SPACING_V);
287 	gtk_widget_show(mainHBox);
288 	gtklpViewable = gtk_frame_new(str2str(_("Look")));
289 	gtk_box_pack_start(GTK_BOX(mainHBox), gtklpViewable, TRUE, TRUE,
290 			   FRAME_SPACING_V);
291 
292 	/* Box */
293 	hbox = gtk_hbox_new(FALSE, 0);
294 	gtk_container_add(GTK_CONTAINER(gtklpViewable), hbox);
295 	gtk_widget_show(hbox);
296 
297 	vbox = gtk_vbox_new(FALSE, 0);
298 	gtk_container_set_border_width(GTK_CONTAINER(vbox), VBOX_BORDER);
299 	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE,
300 			   INFRAME_SPACING_V);
301 	gtk_widget_show(vbox);
302 
303 	/* Buttons */
304 	gtklpViewOut =
305 	    gtk_check_button_new_with_label(str2str(_("Show Output")));
306 	gtk_box_pack_start(GTK_BOX(vbox), gtklpViewOut, FALSE, FALSE, 0);
307 	gtk_signal_connect(GTK_OBJECT(gtklpViewOut), "toggled",
308 			   GTK_SIGNAL_FUNC(gtklpViewChanged), "Out");
309 	gtk_widget_show(gtklpViewOut);
310 
311 	gtklpViewText =
312 	    gtk_check_button_new_with_label(str2str(_("Show Text")));
313 	gtk_box_pack_start(GTK_BOX(vbox), gtklpViewText, FALSE, FALSE, 0);
314 	gtk_signal_connect(GTK_OBJECT(gtklpViewText), "toggled",
315 			   GTK_SIGNAL_FUNC(gtklpViewChanged), "Text");
316 	gtk_widget_show(gtklpViewText);
317 
318 	gtklpViewImage =
319 	    gtk_check_button_new_with_label(str2str(_("Show Image")));
320 	gtk_box_pack_start(GTK_BOX(vbox), gtklpViewImage, FALSE, FALSE, 0);
321 	gtk_signal_connect(GTK_OBJECT(gtklpViewImage), "toggled",
322 			   GTK_SIGNAL_FUNC(gtklpViewChanged), "Image");
323 	gtk_widget_show(gtklpViewImage);
324 
325 	gtklpViewHpgl2 =
326 	    gtk_check_button_new_with_label(str2str(_("Show HP-GL/2")));
327 	gtk_box_pack_start(GTK_BOX(vbox), gtklpViewHpgl2, FALSE, FALSE, 0);
328 	gtk_signal_connect(GTK_OBJECT(gtklpViewHpgl2), "toggled",
329 			   GTK_SIGNAL_FUNC(gtklpViewChanged), "Hpgl2");
330 	gtk_widget_show(gtklpViewHpgl2);
331 
332 	gtklpViewSpecial =
333 	    gtk_check_button_new_with_label(str2str(_("Show Special")));
334 	gtk_box_pack_start(GTK_BOX(vbox), gtklpViewSpecial, FALSE, FALSE, 0);
335 	gtk_signal_connect(GTK_OBJECT(gtklpViewSpecial), "toggled",
336 			   GTK_SIGNAL_FUNC(gtklpViewChanged), "Special");
337 	gtk_widget_show(gtklpViewSpecial);
338 
339 	gtklpViewPPD = gtk_check_button_new_with_label(str2str(_("Show PPD")));
340 	gtk_box_pack_start(GTK_BOX(vbox), gtklpViewPPD, FALSE, FALSE, 0);
341 	gtk_signal_connect(GTK_OBJECT(gtklpViewPPD), "toggled",
342 			   GTK_SIGNAL_FUNC(gtklpViewChanged), "PPD");
343 	gtk_widget_show(gtklpViewPPD);
344 
345 }
346 
prefsChanged(GtkWidget * widget,gpointer data)347 void prefsChanged(GtkWidget * widget, gpointer data)
348 {
349 	if (DEBUG)
350 		printf("prefsChanged: %s\n", (char *)data);
351 	if (strcmp((char *)data, "Rem") == 0) {
352 		if (rememberprinter == 0)
353 			rememberprinter = 1;
354 		else
355 			rememberprinter = 0;
356 		return;
357 	}
358 	if (strcmp((char *)data, "Tab") == 0) {
359 		if (remembertab == 0)
360 			remembertab = 1;
361 		else
362 			remembertab = 0;
363 		return;
364 	}
365 	if (strcmp((char *)data, "Save") == 0) {
366 		if (saveonexit == 0) {
367 			saveonexit = 1;
368 			gtk_widget_set_sensitive(GTK_WIDGET(saveAnzCheck),
369 						 TRUE);
370 		} else {
371 			saveonexit = 0;
372 			gtk_widget_set_sensitive(GTK_WIDGET(saveAnzCheck),
373 						 FALSE);
374 		}
375 		return;
376 	}
377 
378 	if (strcmp((char *)data, "CFL") == 0) {
379 		if (clearfilelist == 0)
380 			clearfilelist = 1;
381 		else
382 			clearfilelist = 0;
383 		return;
384 	}
385 
386 	if (strcmp((char *)data, "EOP") == 0) {
387 		if (exitonprint == 0)
388 			exitonprint = 1;
389 		else
390 			exitonprint = 0;
391 		return;
392 	}
393 
394 	if (strcmp((char *)data, "JOE") == 0) {
395 		if (jobidonexit == 0)
396 			jobidonexit = 1;
397 		else
398 			jobidonexit = 0;
399 		return;
400 	}
401 
402 	if (strcmp((char *)data, "CONS") == 0) {
403 		if (wantconst == 0)
404 			wantconst = 1;
405 		else
406 			wantconst = 0;
407 		return;
408 	}
409 
410 	if (strcmp((char *)data, "Anz") == 0) {
411 		if (saveanz == 0)
412 			saveanz = 1;
413 		else
414 			saveanz = 0;
415 		return;
416 	}
417 #if GTK_MAJOR_VERSION != 1
418 	if (strcmp((char *)data, "SSP") == 0) {
419 		if (wantSaveSizePos == 0)
420 			wantSaveSizePos = 1;
421 		else
422 			wantSaveSizePos = 0;
423 
424 		return;
425 	}
426 #endif
427 
428 	if (DEBUG)
429 		printf("PROG-ERROR: Unknown prefsChange !\n");
430 	emergency();
431 }
432 
constButton(GtkWidget * widget,gpointer data)433 void constButton(GtkWidget * widget, gpointer data)
434 {
435 	if (wantconst == 0) {
436 		wantconst = 1;
437 		constraints(ppdConflicts(printerPPD));
438 		wantconst = 0;
439 	} else {
440 		constraints(ppdConflicts(printerPPD));
441 	}
442 }
443 
PrefsFrame(GtkWidget * container)444 void PrefsFrame(GtkWidget * container)
445 {
446 	GtkWidget *mainHBox, *hbox, *vbox, *constbox;
447 
448 	mainHBox = gtk_hbox_new(FALSE, INFRAME_SPACING_H);
449 	gtk_box_pack_start(GTK_BOX(container), mainHBox, FALSE, FALSE,
450 			   FRAME_SPACING_V);
451 	gtk_widget_show(mainHBox);
452 	prefsFrame = gtk_frame_new(str2str(_("Feel")));
453 	gtk_box_pack_start(GTK_BOX(mainHBox), prefsFrame, TRUE, TRUE,
454 			   FRAME_SPACING_V);
455 
456 	/* Box */
457 	hbox = gtk_hbox_new(FALSE, 0);
458 	gtk_container_add(GTK_CONTAINER(prefsFrame), hbox);
459 	gtk_widget_show(hbox);
460 
461 	vbox = gtk_vbox_new(FALSE, 0);
462 	gtk_container_set_border_width(GTK_CONTAINER(vbox), VBOX_BORDER);
463 	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE,
464 			   INFRAME_SPACING_V);
465 	gtk_widget_show(vbox);
466 
467 	/* Buttons */
468 	remPrinterCheck =
469 	    gtk_check_button_new_with_label(str2str
470 					    (_("Remember last printer")));
471 	gtk_box_pack_start(GTK_BOX(vbox), remPrinterCheck, FALSE, FALSE, 0);
472 	gtk_signal_connect(GTK_OBJECT(remPrinterCheck), "pressed",
473 			   GTK_SIGNAL_FUNC(prefsChanged), "Rem");
474 	gtk_widget_show(remPrinterCheck);
475 
476 	remTabCheck =
477 	    gtk_check_button_new_with_label(str2str(_("Remember last Tab")));
478 	gtk_box_pack_start(GTK_BOX(vbox), remTabCheck, FALSE, FALSE, 0);
479 	gtk_signal_connect(GTK_OBJECT(remTabCheck), "pressed",
480 			   GTK_SIGNAL_FUNC(prefsChanged), "Tab");
481 	gtk_widget_show(remTabCheck);
482 
483 	saveExitCheck =
484 	    gtk_check_button_new_with_label(str2str
485 					    (_
486 					     ("Save all preferences on exit")));
487 	gtk_box_pack_start(GTK_BOX(vbox), saveExitCheck, FALSE, FALSE, 0);
488 	gtk_signal_connect(GTK_OBJECT(saveExitCheck), "pressed",
489 			   GTK_SIGNAL_FUNC(prefsChanged), "Save");
490 	gtk_widget_show(saveExitCheck);
491 
492 	saveAnzCheck =
493 	    gtk_check_button_new_with_label(str2str
494 					    (_
495 					     ("Save number of copies on exit")));
496 	gtk_box_pack_start(GTK_BOX(vbox), saveAnzCheck, FALSE, FALSE, 0);
497 	gtk_signal_connect(GTK_OBJECT(saveAnzCheck), "pressed",
498 			   GTK_SIGNAL_FUNC(prefsChanged), "Anz");
499 	gtk_widget_show(saveAnzCheck);
500 
501 	clearFileListCheck =
502 	    gtk_check_button_new_with_label(str2str
503 					    (_("Clear file list on print")));
504 	gtk_box_pack_start(GTK_BOX(vbox), clearFileListCheck, FALSE, FALSE, 0);
505 	gtk_signal_connect(GTK_OBJECT(clearFileListCheck), "pressed",
506 			   GTK_SIGNAL_FUNC(prefsChanged), "CFL");
507 	gtk_widget_show(clearFileListCheck);
508 
509 	exitOnPrintCheck =
510 	    gtk_check_button_new_with_label(str2str(_("Exit on print")));
511 	gtk_box_pack_start(GTK_BOX(vbox), exitOnPrintCheck, FALSE, FALSE, 0);
512 	gtk_signal_connect(GTK_OBJECT(exitOnPrintCheck), "pressed",
513 			   GTK_SIGNAL_FUNC(prefsChanged), "EOP");
514 	gtk_widget_show(exitOnPrintCheck);
515 
516 	jobIDOnExitCheck =
517 	    gtk_check_button_new_with_label(str2str(_("Show JobIDs")));
518 	gtk_box_pack_start(GTK_BOX(vbox), jobIDOnExitCheck, FALSE, FALSE, 0);
519 	gtk_signal_connect(GTK_OBJECT(jobIDOnExitCheck), "pressed",
520 			   GTK_SIGNAL_FUNC(prefsChanged), "JOE");
521 	gtk_widget_show(jobIDOnExitCheck);
522 
523 	constbox = gtk_hbox_new(FALSE, INFRAME_SPACING_H);
524 	gtk_box_pack_start(GTK_BOX(vbox), constbox, TRUE, TRUE, 0);
525 	gtk_widget_show(constbox);
526 
527 	wantconstCheck =
528 	    gtk_check_button_new_with_label(str2str
529 					    (_("Enable Constraints check")));
530 	gtk_box_pack_start(GTK_BOX(constbox), wantconstCheck, TRUE, TRUE, 0);
531 	gtk_signal_connect(GTK_OBJECT(wantconstCheck), "pressed",
532 			   GTK_SIGNAL_FUNC(prefsChanged), "CONS");
533 	gtk_widget_show(wantconstCheck);
534 
535 	buttonCons = gtk_button_new_with_label(str2str(_("Check now")));
536 	button_pad(buttonCons);
537 	gtk_box_pack_end(GTK_BOX(constbox), buttonCons, TRUE, TRUE, 0);
538 	gtk_signal_connect(GTK_OBJECT(buttonCons), "pressed",
539 			   GTK_SIGNAL_FUNC(constButton), NULL);
540 	gtk_widget_show(buttonCons);
541 
542 #if GTK_MAJOR_VERSION != 1
543 	saveSizePosCheck =
544 	    gtk_check_button_new_with_label(str2str
545 					    (_("Remember size and position")));
546 	gtk_box_pack_start(GTK_BOX(vbox), saveSizePosCheck, FALSE, FALSE, 0);
547 	gtk_signal_connect(GTK_OBJECT(saveSizePosCheck), "pressed",
548 			   GTK_SIGNAL_FUNC(prefsChanged), "SSP");
549 	gtk_widget_show(saveSizePosCheck);
550 #endif
551 
552 }
553 
visitIt(char * what)554 void visitIt(char *what)
555 {
556 	char tmp[2 * MAXPATH + 1];
557 	char tmpcmd[MAXPATH + 1];
558 	char *z1;
559 	int ret;
560 
561 	strncpy(tmpcmd, BROWSER, (size_t) (MAXPATH));
562 
563 	z1 = strstr(tmpcmd, "$0");
564 
565 	if (z1 != NULL) {
566 		*z1 = '%';
567 		z1++;
568 		*z1 = 's';
569 		snprintf(tmp, (size_t) (2 * MAXPATH), tmpcmd, what);
570 	} else {
571 		snprintf(tmp, (size_t) (2 * MAXPATH), "%s %s", tmpcmd, what);
572 	}
573 
574 	if (DEBUG)
575 		printf("Command to execute: %s\n", tmp);
576 
577 	ret = system(tmp);
578 	if (ret != 0) {
579 		if (DEBUG)
580 			printf("PROG-ERROR: Cannot call browser !\n");
581 	}
582 }
583 
visitMyHome(GtkWidget * widget,gpointer data)584 void visitMyHome(GtkWidget * widget, gpointer data)
585 {
586 	visitIt(MY_HOME);
587 }
588 
visitCupsHome(GtkWidget * widget,gpointer data)589 void visitCupsHome(GtkWidget * widget, gpointer data)
590 {
591 	visitIt(CUPS_HOME);
592 }
593 
destroyAbout(GtkWidget * widget,gpointer data)594 void destroyAbout(GtkWidget * widget, gpointer data)
595 {
596 	if (DEBUG)
597 		printf("About-Window destroyed !\n");
598 	gtk_window_set_modal(GTK_WINDOW(aboutWin), FALSE);
599 	gtk_window_set_modal(GTK_WINDOW(mainWindow), TRUE);
600 
601 	gtk_widget_destroy(aboutWin);
602 }
603 
showAbout(GtkWidget * widget,gpointer data)604 void showAbout(GtkWidget * widget, gpointer data)
605 {
606 #if GTK_MAJOR_VERSION == 1
607 	GtkWidget *mainVBox, *sep3, *hbox8;
608 #endif
609 	GtkWidget *mainHBox, *vbox, *pixmapwid;
610 	GtkWidget *label1, *label2, *label3, *label4, *label5, *label6, *label7,
611 	    *label8, *labelBox1, *labelBox3, *sep1;
612 	GtkWidget *hbox3, *hbox5, *hbox6;
613 	GtkWidget *button1, *button2, *button3;
614 	GdkPixmap *pixmap;
615 	GdkBitmap *mask;
616 	GtkStyle *style;
617 	gchar *version_name;
618 
619 	if (DEBUG)
620 		printf("Showing About-Dialog\n");
621 #if GTK_MAJOR_VERSION == 1
622 	aboutWin = gtk_window_new(GTK_WINDOW_DIALOG);
623 	gtk_window_set_position(GTK_WINDOW(aboutWin), GTK_WIN_POS_CENTER);
624 	gtk_window_set_policy(GTK_WINDOW(aboutWin), 0, 0, 0);
625 	gtk_window_set_modal(GTK_WINDOW(aboutWin), TRUE);
626 	gtk_window_set_modal(GTK_WINDOW(mainWindow), FALSE);
627 	gtk_signal_connect(GTK_OBJECT(aboutWin), "delete_event",
628 			   GTK_SIGNAL_FUNC(destroyAbout), NULL);
629 #else
630 	aboutWin =
631 	    gtk_dialog_new_with_buttons(str2str(PROGNAME),
632 					GTK_WINDOW(mainWindow),
633 					GTK_DIALOG_MODAL |
634 					GTK_DIALOG_DESTROY_WITH_PARENT, NULL);
635 	button3 = gtk_dialog_add_button(GTK_DIALOG(aboutWin), GTK_STOCK_OK, 0);
636 #endif
637 
638 #if GTK_MAJOR_VERSION == 1
639 	mainVBox = gtk_vbox_new(FALSE, 0);
640 	gtk_container_add(GTK_CONTAINER(aboutWin), mainVBox);
641 	gtk_widget_show(mainVBox);
642 
643 	mainHBox = gtk_hbox_new(FALSE, 0);
644 	gtk_box_pack_start(GTK_BOX(mainVBox), mainHBox, FALSE, FALSE,
645 			   FRAME_SPACING_V);
646 	gtk_widget_show(mainHBox);
647 #else
648 	mainHBox = gtk_hbox_new(FALSE, 0);
649 	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(aboutWin)->vbox), mainHBox);
650 	gtk_widget_show(mainHBox);
651 #endif
652 
653 	/* Box */
654 	vbox = gtk_vbox_new(FALSE, 0);
655 	gtk_box_pack_end(GTK_BOX(mainHBox), vbox, FALSE, FALSE,
656 			 FRAME_SPACING_H);
657 	gtk_widget_show(vbox);
658 
659 	/* Pixmap */
660 	style = gtk_widget_get_style(aboutWin);
661 	pixmap =
662 	    gdk_pixmap_create_from_xpm_d(mainWindow->window, &mask,
663 					 &style->bg[GTK_STATE_NORMAL],
664 					 (gchar **) logo_k);
665 	pixmapwid = gtk_pixmap_new(pixmap, mask);
666 	gtk_box_pack_start(GTK_BOX(mainHBox), pixmapwid, FALSE, FALSE,
667 			   MESSAGE_SPACING_H);
668 	gtk_widget_show(pixmapwid);
669 
670 	/* Titel */
671 	labelBox1 = gtk_hbox_new(FALSE, 0);
672 	gtk_box_pack_start(GTK_BOX(vbox), labelBox1, TRUE, TRUE, 0);
673 	gtk_widget_show(labelBox1);
674 	label1 = gtk_label_new(PROGNAME);
675 	gtk_box_pack_start(GTK_BOX(labelBox1), label1, TRUE, TRUE, 0);
676 	gtk_widget_show(label1);
677 
678 	version_name = g_strdup_printf("%s %s", str2str(_("version")), VERSION);
679 	label2 = gtk_label_new(version_name);
680 	g_free(version_name);
681 	gtk_box_pack_start(GTK_BOX(labelBox1), label2, TRUE, TRUE, 0);
682 	gtk_widget_show(label2);
683 
684 	/* ruler */
685 	sep1 = gtk_hseparator_new();
686 	gtk_box_pack_start(GTK_BOX(vbox), sep1, FALSE, FALSE, 0);
687 	gtk_widget_show(sep1);
688 
689 	/* from */
690 	label3 = gtk_label_new(str2str(_("written by")));
691 	gtk_box_pack_start(GTK_BOX(vbox), label3, FALSE, FALSE, 0);
692 	gtk_widget_show(label3);
693 	labelBox3 = gtk_hbox_new(FALSE, 0);
694 	gtk_box_pack_start(GTK_BOX(vbox), labelBox3, FALSE, FALSE, 0);
695 	gtk_widget_show(labelBox3);
696 	label4 = gtk_label_new(MY_NAME);
697 	gtk_box_pack_start(GTK_BOX(vbox), label4, FALSE, FALSE, 0);
698 	gtk_widget_show(label4);
699 
700 	label5 = gtk_label_new(MY_MAIL);
701 	gtk_box_pack_start(GTK_BOX(vbox), label5, FALSE, FALSE, 0);
702 	gtk_widget_show(label5);
703 	hbox3 = gtk_hbox_new(FALSE, 0);
704 	gtk_box_pack_start(GTK_BOX(vbox), hbox3, FALSE, FALSE, 0);
705 	gtk_widget_show(hbox3);
706 	hbox6 = gtk_hbox_new(FALSE, 0);
707 	gtk_box_pack_start(GTK_BOX(vbox), hbox6, FALSE, FALSE, 0);
708 	gtk_widget_show(hbox6);
709 	button1 = gtk_button_new_with_label(str2str(MY_HOME));
710 	button_pad(button1);
711 	gtk_box_pack_start(GTK_BOX(hbox6), button1, FALSE, FALSE, 0);
712 	gtk_signal_connect(GTK_OBJECT(button1), "pressed",
713 			   GTK_SIGNAL_FUNC(visitMyHome), NULL);
714 	gtk_widget_show(button1);
715 
716 	/* for */
717 	label7 = gtk_label_new(str2str(_("written for cups")));
718 	gtk_box_pack_start(GTK_BOX(vbox), label7, FALSE, FALSE, 0);
719 	gtk_widget_show(label7);
720 	hbox5 = gtk_hbox_new(FALSE, 0);
721 	gtk_box_pack_start(GTK_BOX(vbox), hbox5, FALSE, FALSE, 0);
722 	gtk_widget_show(hbox5);
723 
724 	button2 = gtk_button_new_with_label(str2str(CUPS_HOME));
725 	button_pad(button2);
726 	gtk_box_pack_start(GTK_BOX(vbox), button2, FALSE, FALSE, 0);
727 	gtk_signal_connect(GTK_OBJECT(button2), "pressed",
728 			   GTK_SIGNAL_FUNC(visitCupsHome), NULL);
729 	gtk_widget_show(button2);
730 
731 	label6 = gtk_label_new(str2str(ABOUT_CRIGHT));
732 	gtk_box_pack_start(GTK_BOX(vbox), label6, FALSE, FALSE, 0);
733 	gtk_widget_show(label6);
734 
735 	label8 = gtk_label_new(str2str(ABOUT_LICENSE));
736 	gtk_box_pack_start(GTK_BOX(vbox), label8, FALSE, FALSE, 0);
737 	gtk_widget_show(label8);
738 
739 	/* ruler */
740 #if GTK_MAJOR_VERSION == 1
741 	sep3 = gtk_hseparator_new();
742 	gtk_box_pack_start(GTK_BOX(vbox), sep3, FALSE, FALSE, 0);
743 	gtk_widget_show(sep3);
744 #endif
745 
746 	/* OK */
747 #if GTK_MAJOR_VERSION == 1
748 	hbox8 = gtk_hbox_new(FALSE, 0);
749 	gtk_box_pack_start(GTK_BOX(vbox), hbox8, FALSE, FALSE,
750 			   INFRAME_SPACING_V);
751 	gtk_widget_show(hbox8);
752 
753 	button3 = gtk_button_new_with_label(str2str(_("Ok")));
754 	button_pad(button3);
755 	gtk_box_pack_start(GTK_BOX(hbox8), button3, TRUE, TRUE,
756 			   INFRAME_SPACING_H);
757 	gtk_signal_connect(GTK_OBJECT(button3), "clicked",
758 			   GTK_SIGNAL_FUNC(destroyAbout), NULL);
759 	gtk_widget_show(button3);
760 
761 	gtk_widget_grab_focus(GTK_WIDGET(button3));
762 
763 	gtk_widget_show(aboutWin);
764 #else
765 	gtk_widget_grab_focus(GTK_WIDGET(button3));
766 	gtk_dialog_set_default_response(GTK_DIALOG(aboutWin), 0);
767 	gtk_dialog_run(GTK_DIALOG(aboutWin));
768 	gtk_widget_destroy(GTK_WIDGET(aboutWin));
769 #endif
770 
771 }
772 
showHTMLHelp(GtkWidget * widget,gpointer data)773 void showHTMLHelp(GtkWidget * widget, gpointer data)
774 {
775 	visitIt(HELPURL);
776 }
777 
HelpFrame(GtkWidget * container)778 void HelpFrame(GtkWidget * container)
779 {
780 	GtkWidget *mainHBox, *hbox, *button1, *button2;
781 	gchar *buf;
782 
783 	mainHBox = gtk_hbox_new(FALSE, INFRAME_SPACING_H);
784 	gtk_box_pack_start(GTK_BOX(container), mainHBox, FALSE, FALSE,
785 			   FRAME_SPACING_V);
786 	gtk_widget_show(mainHBox);
787 	helpFrame = gtk_frame_new(str2str(_("Help")));
788 	gtk_box_pack_start(GTK_BOX(mainHBox), helpFrame, TRUE, TRUE,
789 			   FRAME_SPACING_V);
790 
791 	/* Box */
792 	hbox = gtk_hbox_new(FALSE, INFRAME_SPACING_H);
793 	gtk_container_set_border_width(GTK_CONTAINER(hbox), VBOX_BORDER);
794 	gtk_container_add(GTK_CONTAINER(helpFrame), hbox);
795 	gtk_widget_show(hbox);
796 
797 	/* Buttons */
798 	button1 = gtk_button_new_with_label(str2str(_("Help on Options")));
799 	button_pad(button1);
800 	gtk_box_pack_start(GTK_BOX(hbox), button1, FALSE, FALSE, 0);
801 	gtk_signal_connect(GTK_OBJECT(button1), "pressed",
802 			   GTK_SIGNAL_FUNC(showHTMLHelp), NULL);
803 	gtk_widget_show(button1);
804 
805 	buf = g_strdup_printf(str2str(_("About %s")), PROGNAME);
806 	button2 = gtk_button_new_with_label(buf);
807 	button_pad(button2);
808 	g_free(buf);
809 	gtk_box_pack_start(GTK_BOX(hbox), button2, FALSE, FALSE, 0);
810 	gtk_signal_connect(GTK_OBJECT(button2), "pressed",
811 			   GTK_SIGNAL_FUNC(showAbout), NULL);
812 	gtk_widget_show(button2);
813 }
814 
PathesEntryChanged(GtkWidget * widget,gpointer data)815 void PathesEntryChanged(GtkWidget * widget, gpointer data)
816 {
817 	if (strcmp((char *)data, "BROWSER") == 0) {
818 		strncpy(BROWSER, (char *)gtk_entry_get_text(GTK_ENTRY(widget)),
819 			MAXPATH);
820 	}
821 
822 	if (strcmp((char *)data, "HELP") == 0) {
823 		strncpy(HELPURL, (char *)gtk_entry_get_text(GTK_ENTRY(widget)),
824 			MAXPATH);
825 	}
826 
827 	if (strcmp((char *)data, "GTKLPQ") == 0) {
828 		if (strlen(GTKLPQCOM) > 0)
829 			gtk_widget_hide(gtklpqFrame);
830 		strncpy(GTKLPQCOM,
831 			(char *)gtk_entry_get_text(GTK_ENTRY(widget)), MAXPATH);
832 		if (strlen(GTKLPQCOM) > 0)
833 			gtk_widget_show(gtklpqFrame);
834 	}
835 }
836 
PathesFrame(GtkWidget * container)837 void PathesFrame(GtkWidget * container)
838 {
839 	GtkWidget *mainHBox, *hbox, *vbox, *label1, *label2, *label3;
840 
841 	mainHBox = gtk_hbox_new(FALSE, INFRAME_SPACING_H);
842 	gtk_box_pack_start(GTK_BOX(container), mainHBox, FALSE, FALSE,
843 			   FRAME_SPACING_V);
844 	gtk_widget_show(mainHBox);
845 
846 	pathesFrame = gtk_frame_new(str2str(_("Commands and Paths")));
847 	gtk_box_pack_start(GTK_BOX(mainHBox), pathesFrame, TRUE, TRUE,
848 			   FRAME_SPACING_V);
849 
850 	hbox = gtk_hbox_new(FALSE, 0);
851 	gtk_container_add(GTK_CONTAINER(pathesFrame), hbox);
852 	gtk_widget_show(hbox);
853 
854 	vbox = gtk_vbox_new(FALSE, BUTTON_SPACING_V);
855 	gtk_container_set_border_width(GTK_CONTAINER(vbox), VBOX_BORDER);
856 	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
857 	gtk_widget_show(vbox);
858 
859 	label1 = gtk_label_new(str2str(_("Browser Command")));
860 	gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
861 	gtk_box_pack_start(GTK_BOX(vbox), label1, TRUE, TRUE,
862 			   0 * INFRAME_SPACING_H);
863 	gtk_widget_show(label1);
864 
865 	browserCom = gtk_entry_new_with_max_length(MAXPATH);
866 	gtk_entry_set_editable(GTK_ENTRY(browserCom), TRUE);
867 	gtk_entry_set_text(GTK_ENTRY(browserCom), str2str(DEF_BROWSER_CMD));
868 	gtk_box_pack_start(GTK_BOX(vbox), browserCom, TRUE, TRUE,
869 			   0 * INFRAME_SPACING_H);
870 	gtk_widget_show(browserCom);
871 
872 	label2 = gtk_label_new(str2str(_("Help URL")));
873 	gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
874 	gtk_box_pack_start(GTK_BOX(vbox), label2, TRUE, TRUE,
875 			   0 * INFRAME_SPACING_H);
876 	gtk_widget_show(label2);
877 
878 	helpURL = gtk_entry_new_with_max_length(MAXPATH);
879 	gtk_entry_set_editable(GTK_ENTRY(helpURL), TRUE);
880 	gtk_entry_set_text(GTK_ENTRY(helpURL), str2str(DEF_HELP_HOME));
881 	gtk_box_pack_start(GTK_BOX(vbox), helpURL, TRUE, TRUE,
882 			   0 * INFRAME_SPACING_H);
883 	gtk_widget_show(helpURL);
884 
885 	label3 = gtk_label_new(str2str(_("Gtklpq Command")));
886 	gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
887 	gtk_box_pack_start(GTK_BOX(vbox), label3, TRUE, TRUE,
888 			   0 * INFRAME_SPACING_H);
889 	gtk_widget_show(label3);
890 
891 	gtklpqCom = gtk_entry_new_with_max_length(MAXPATH);
892 	gtk_entry_set_editable(GTK_ENTRY(gtklpqCom), TRUE);
893 	gtk_entry_set_text(GTK_ENTRY(gtklpqCom), str2str(DEF_HELP_HOME));
894 	gtk_box_pack_start(GTK_BOX(vbox), gtklpqCom, TRUE, TRUE,
895 			   0 * INFRAME_SPACING_H);
896 	gtk_widget_show(gtklpqCom);
897 
898 #if GTK_MAJOR_VERSION == 1
899 	gtk_signal_connect(GTK_OBJECT(browserCom), "changed",
900 			   PathesEntryChanged, "BROWSER");
901 	gtk_signal_connect(GTK_OBJECT(helpURL), "changed", PathesEntryChanged,
902 			   "HELP");
903 	gtk_signal_connect(GTK_OBJECT(gtklpqCom), "changed", PathesEntryChanged,
904 			   "GTKLPQ");
905 #else
906 	gtk_signal_connect(GTK_OBJECT(browserCom), "changed",
907 			   GTK_SIGNAL_FUNC(PathesEntryChanged), "BROWSER");
908 	gtk_signal_connect(GTK_OBJECT(helpURL), "changed",
909 			   GTK_SIGNAL_FUNC(PathesEntryChanged), "HELP");
910 	gtk_signal_connect(GTK_OBJECT(gtklpqCom), "changed",
911 			   GTK_SIGNAL_FUNC(PathesEntryChanged), "GTKLPQ");
912 #endif
913 
914 }
915 
GtklpTabFrame(GtkWidget * container)916 GtkWidget *GtklpTabFrame(GtkWidget * container)
917 {
918 	GtkWidget *frameScrolled;
919 	GtkWidget *hbox, *vbox;
920 
921 	frameScrolled = gtk_scrolled_window_new(NULL, NULL);
922 	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(frameScrolled),
923 				       GTK_POLICY_AUTOMATIC,
924 				       GTK_POLICY_AUTOMATIC);
925 	gtk_box_pack_start(GTK_BOX(container), frameScrolled, TRUE, TRUE, 0);
926 	gtk_widget_show(frameScrolled);
927 
928 	hbox = gtk_hbox_new(FALSE, 0);
929 	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW
930 					      (frameScrolled), hbox);
931 	gtk_widget_show(hbox);
932 
933 	vbox = gtk_vbox_new(FALSE, 0);
934 	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, FRAME_SPACING_V);
935 	gtk_widget_show(vbox);
936 
937 	return (vbox);
938 }
939 
GtklpTabButtons(GtkWidget * container)940 void GtklpTabButtons(GtkWidget * container)
941 {
942 	GtkWidget *button, *hbox;
943 
944 	hbox = gtk_hbox_new(FALSE, 0);
945 	gtk_box_pack_start(GTK_BOX(container), hbox, FALSE, FALSE,
946 			   FRAME_SPACING_V);
947 	gtk_widget_show(hbox);
948 
949 #if GTK_MAJOR_VERSION != 1
950 	button = gtk_button_new_from_stock(GTK_STOCK_SAVE);
951 #else
952 	button = gtk_button_new_with_label(str2str(_("Save")));
953 #endif
954 	button_pad(button);
955 	gtk_signal_connect(GTK_OBJECT(button), "clicked",
956 			   GTK_SIGNAL_FUNC(SaveGtkLPPrefs), NULL);
957 	gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, FRAME_SPACING_V);
958 	gtk_widget_show(button);
959 }
960 
GtklpTab(void)961 void GtklpTab(void)
962 {
963 	GtkWidget *frame;
964 
965 	gtklpTab = gtk_vbox_new(FALSE, 0);
966 	gtk_notebook_append_page(GTK_NOTEBOOK(tabs), gtklpTab,
967 				 gtk_label_new(PROGNAME));
968 
969 	frame = GtklpTabFrame(gtklpTab);
970 	GtklpViewable(frame);
971 	PrefsFrame(frame);
972 	PathesFrame(frame);
973 	HelpFrame(frame);
974 	GtklpTabButtons(gtklpTab);
975 }
976