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