1 /*
2   Tux Paint Config UI file
3   Originally generated by Fast Light User Interface Designer (fluid) v. 1.0104
4 
5   Torsten Giebl <wizard@turricane.org>
6   Jan Wynholds
7   Bill Kendrick <bill@newbreedsoftware.com>
8   Martin Fuhrer <mfuhrer@gmail.com>
9 
10   http://www.tuxpaint.org/
11 
12   November 12, 2002 - April 15, 2011
13 */
14 
15 #include <libintl.h>
16 #include <math.h>
17 #include "tuxpaint-config2.h"
18 #include <FL/fl_ask.H>
19 #include <FL/fl_message.H>
20 #include <FL/Fl.H>
21 #include <FL/Fl_File_Chooser.H>
22 #include <FL/Fl_Slider.H>
23 #include <FL/Fl_Pack.H>
24 #include <stdlib.h>
25 #include <stdio.h>
26 #include <string.h>
27 #include <sys/stat.h>
28 #include <errno.h>
29 #if USE_PAPERSIZES
30 #include <paper.h>
31 #endif
32 #include "version.h"
33 #include "about.h"
34 
35 /* Current build stuff doesn't deal with gettext; jdrake 2004-10-02 */
36 #ifdef __APPLE__
37 extern "C" {
38     #include "macosx_dialog.h"
39 }
40 #define gettext(text) text
41 #endif
42 
43 
44 /* Win32 specific stuff to help set the window icon */
45 #ifdef WIN32
46 #include "../visualc/resource.h"    /* contains IDI_ICON1 */
47 #include "win32utils.h"             /* Registry utilities */
48 extern HINSTANCE fl_display;        /* hInstance on win32 platform */
49 #endif
50 
51 /* dont think save_conf will work for win32...
52    need to redo with #IFDEF precompiler definitions and better writing */
53 
54 bool status_chng=0;
55 
56 char conf_filename[256];
57 
58 const char * window_widths[NUM_WINDOW_WIDTHS] = {
59   "640",
60   "768",
61   "800",
62   "854",
63   "1024",
64   "1280",
65   "1400",
66   "1600",
67   "1680",
68   "1920",
69   "2048",
70   "2560"
71 };
72 
73 const char * window_heights[NUM_WINDOW_HEIGHTS] = {
74   "480",
75   "576",
76   "600",
77   "720",
78   "768",
79   "800",
80   "960",
81   "1024",
82   "1050",
83   "1080",
84   "1200",
85   "1536",
86   "1600",
87   "2048"
88 };
89 
90 #define NUM_LANGS 121
91 #define LANG_NAME 0
92 #define LANG_CODE 1
93 
94 const char * langs[NUM_LANGS][2] = {
95 	{gettext("(Use system's setting)"), "default"},
96         {"Acholi", "acholi"},
97 	{"Afrikaans", "afrikaans"},
98         {"Akan", "akan"},
99 	{"Albanian", "albanian"},
100         {"Amharic", "amharic"},
101 	{"Arabic", "arabic"},
102 	{"Aragonese", "aragones"},
103 	{"Armenian", "armenian"},
104         {"Assamese", "assamese"},
105 	{"Asturian", "asturian"},
106         {"Azerbaijani", "azerbaijani"},
107         {"Bambara", "bambara"},
108 	{"Basque", "basque"},
109 	{"Belarusian", "belarusian"},
110 	{"Bosnian", "bosnian"},
111 	{"Breton", "breton"},
112 	{"Bulgarian", "bulgarian"},
113 	{"Catalan", "catalan"},
114         {"Chinese (Simplified)", "simplified-chinese"},
115         {"Chinese (Traditional)", "traditional-chinese"},
116 	{"Croatian", "croatian"},
117 	{"Czech", "czech"},
118 	{"Danish", "danish"},
119 	{"Dutch", "dutch"},
120 	{"English (USA)", "american-english"},
121 	{"English (Australian)", "australian-english"},
122 	{"English (Britain)", "british"},
123 	{"English (Canadian)", "canadian-english"},
124 	{"English (South Africa)", "southafrican-english"},
125 	{"Esperanto", "esperanto"},
126 	{"Estonian", "estonian"},
127 	{"Faroese", "faroese"},
128 	{"Finnish", "finnish"},
129 	{"French", "french"},
130         {"Fulah", "fulah"},
131 	{"Gaelic (Ireland)", "gaelic"},
132 	{"Gaelic (Scotland)", "scottish"},
133 	{"Galician", "galician"},
134 	{"Georgian", "georgian"},
135 	{"German", "german"},
136 	{"Greek", "greek"},
137 	{"Gronings", "gronings"},
138 	{"Gujarati", "gujarati"},
139 	{"Hebrew", "hebrew"},
140 	{"Hindi", "hindi"},
141 	{"Hungarian", "hungarian"},
142 	{"Icelandic", "icelandic"},
143 	{"Indonesian", "indonesian"},
144 	{"Inuktitut", "inuktitut"},
145 	{"Italian", "italian"},
146 	{"Japanese", "japanese"},
147         {"Kannada", "kannada"},
148 	{"Khmer", "khmer"},
149         {"Kiga", "kiga"},
150 	{"Kinyarwanda", "kinyarwanda"},
151 	{"Klingon", "klingon"},
152 	{"Konkani (Devaganari)", "konkani-devaganari"},
153 	{"Konkani (Roman)", "konkani-roman"},
154 	{"Korean", "korean"},
155 	{"Kurdish", "kurdish"},
156         {"Latvian", "latvian"},
157 	{"Lithuanian", "lithuanian"},
158         {"Luganda", "luganda"},
159         {"Luxembourgish", "luxembourgish"},
160 	{"Macedonian", "macedonian"},
161         {"Maithili", "maithili"},
162 	{"Malay", "malay"},
163         {"Malayalam", "malayalam"},
164 	{"Manipuri (Bengali)", "manipuri-bengali"},
165 	{"Manipuri (Meitei Mayek)", "manipuri-meitei-mayek"},
166 	{"Marathi", "marathi"},
167         {"Mongolian", "mongolian"},
168 	{"Ndebele", "ndebele"},
169 	{"Nepali", "nepali"},
170         {"Northern Sotho", "northern-sotho"},
171 	{"Norwegian Bokm�l", "bokmal"},
172 	{"Norwegian Nynorsk", "nynorsk"},
173 	{"Occitan", "occitan"},
174 	{"Ojibwe", "ojibwe"},
175 	{"Oriya", "oriya"},
176         {"Persian", "persian"},
177 	{"Polish", "polish"},
178 	{"Portuguese (Portugal)", "portuguese"},
179         {"Portuguese (Brazilian)", "brazilian-portuguese"},
180         {"Punjabi", "punjabi"},
181 	{"Romanian", "romanian"},
182 	{"Russian", "russian"},
183 	{"Sanskrit", "sanskrit"},
184 	{"Santali (Devaganari)", "santali-devaganari"},
185 	{"Santali (Ol-Chiki)", "santali-ol-chiki"},
186 	{"Serbian (cyrillic)", "serbian"},
187         {"Serbian (latin)", "serbian-latin"},
188         {"Shuswap", "shuswap"},
189 	{"Sinhala", "sinhala"},
190 	{"Slovak", "slovak"},
191 	{"Slovenian", "slovenian"},
192         {"Songhay", "songhay"},
193 	{"Spanish (Mexico)", "mexican-spanish"},
194 	{"Spanish (Spain)", "spanish"},
195         {"Sundanese", "sundanese"},
196 	{"Swahili", "swahili"},
197 	{"Swedish", "swedish"},
198 	{"Tagalog", "tagalog"},
199 	{"Tamil", "tamil"},
200         {"Telugu", "telugu"},
201 	{"Thai", "thai"},
202 	{"Tibetan", "tibetan"},
203 	{"Turkish", "turkish"},
204         {"Twi", "twi"},
205 	{"Ukrainian", "ukrainian"},
206 	{"Valencian", "valencian"},
207 	{"Venda", "venda"},
208         {"Venetian", "venetian"},
209 	{"Vietnamese", "vietnamese"},
210 	{"Walloon", "walloon"},
211 	{"Welsh", "welsh"},
212 	{"Wolof", "wolof"},
213 	{"Xhosa", "xhosa"},
214 	{"Zapotec (Miahuatlan)", "miahuatlan-zapotec"},
215         {"Zulu", "zulu"}
216 };
217 
218 #define NUM_LAYOUTS 2
219 #define LAYOUT_NAME 0
220 const char * layouts[NUM_LAYOUTS][2] = {
221   {"abcde", "default.layout"},
222   {"qwerty", "qwerty.layout"}
223 };
224 
225 #if USE_PAPERSIZES
226 int num_papersizes;
227 char * * papersizes;
228 #endif
229 
set_change_status(int status)230 static void set_change_status(int status)
231 {
232   status_chng=status;
233   if (status_chng == 0) {
234     BUTTON_apply->deactivate();
235     BUTTON_reset->deactivate();
236   }
237   else
238   {
239     BUTTON_apply->activate();
240     BUTTON_reset->activate();
241   }
242 }
243 
construct_conf_filename(int user)244 static void construct_conf_filename(int user)
245 {
246   strcpy(conf_filename, "tuxpaint.cfg");  /* default config file */
247   switch (user)
248   {
249     case (CURRENT_USER):
250 #if defined(WIN32)
251     {
252       char *savedir = 0;
253       savedir = GetDefaultSaveDir("TuxPaint"); /* FIXME */
254       snprintf(conf_filename, sizeof(conf_filename), "%s/tuxpaint.cfg", savedir);
255       free(savedir);
256     }
257 #elif defined(__BEOS__)
258       strcpy(conf_filename, "tuxpaint.cfg");
259 #elif defined(__APPLE__)
260       if (getenv("HOME") != NULL)
261       {
262         char mkdirCommand[256];
263         snprintf(mkdirCommand, sizeof(mkdirCommand),
264                  "mkdir -p '%s/Library/Application Support/TuxPaint'", getenv("HOME"));
265         system(mkdirCommand);
266         snprintf(conf_filename, sizeof(conf_filename),
267                  "%s/Library/Application Support/TuxPaint/tuxpaint.cfg", getenv("HOME"));
268       }
269 #else
270       /* Linux and other Unixes:  Use 'rc' style (~/.tuxpaintrc) */
271       if (getenv("HOME") != NULL)
272       {
273         snprintf(conf_filename, sizeof(conf_filename),
274                  "%s/.tuxpaintrc", getenv("HOME"));
275       }
276 #endif
277       break;
278 
279     case  (ALL_USERS):
280 #if defined(WIN32)
281     {
282       char *appdir = GetApplicationDir();
283       snprintf(conf_filename, sizeof(conf_filename), "%s/tuxpaint.cfg", appdir);
284       free(appdir);
285     }
286 #elif defined(__BEOS__)
287       strcpy(conf_filename, "tuxpaint.cfg");
288 #elif defined(__APPLE__)
289       system("mkdir -p '/Library/Application Support/TuxPaint'");
290       strcpy(conf_filename, "/Library/Application Support/TuxPaint/tuxpaint.cfg");
291 #else
292       snprintf(conf_filename, sizeof(conf_filename), "%s/tuxpaint.conf", CONFDIR);
293 #endif
294       break;
295   }
296 }
297 
activate_widgets()298 static void activate_widgets()
299 {
300   /* Video & Sound: */
301   /* -------------- */
302 
303   CHECKBUTTON_fullscreen->activate();
304   if (CHECKBUTTON_fullscreen->value()) {
305     CHECKBUTTON_native->activate();
306   }
307   CHOICE_windowwidth->activate();
308   CHOICE_windowheight->activate();
309   CHECKBUTTON_rotate->activate();
310   CHECKBUTTON_screensaver->activate();
311   CHECKBUTTON_soundeffects->activate();
312   CHECKBUTTON_usecolorfile->activate();
313   if (CHECKBUTTON_usecolorfile->value()) {
314     FILEINPUT_colorfile->activate();
315     BUTTON_browsecolorfile->activate();
316   }
317 
318 
319   /* Mouse & Keyboard: */
320   /* ----------------- */
321 
322   CHECKBUTTON_fancycursorshapes->activate();
323   CHECKBUTTON_hidecursor->activate();
324   CHECKBUTTON_grabmousepointer->activate();
325   CHECKBUTTON_mousewheelsupport->activate();
326   CHECKBUTTON_nobuttondistinction->activate();
327   CHECKBUTTON_enablekbd->activate();
328 
329   /* Simplification: */
330   /* --------------- */
331 
332   CHECKBUTTON_disableshaperotation->activate();
333   CHECKBUTTON_simpleshapeoutlines->activate();
334   CHECKBUTTON_showuppercasetextonly->activate();
335   CHECKBUTTON_disablequitbutton->activate();
336   CHECKBUTTON_disablestampstool->activate();
337   CHECKBUTTON_disablestampcontrols->activate();
338   CHECKBUTTON_disablemagiccontrols->activate();
339   CHECKBUTTON_disablelabeltool->activate();
340   SLIDER_stampsize->activate();
341 
342   /* Locale: */
343   /* ------- */
344 
345   CHOICE_language->activate();
346   CHECKBUTTON_mirrorstamps->activate();
347   CHECKBUTTON_loadsystemfonts->activate();
348   CHECKBUTTON_alllocalefonts->activate();
349 
350   /* Printing: */
351   /* --------- */
352 
353   CHECKBUTTON_allowprinting->activate();
354   VALUEINPUT_printdelay->activate();
355   CHECKBUTTON_printcfg->activate();
356   CHECKBUTTON_usealtprintcmd->activate();
357   if (CHECKBUTTON_usealtprintcmd->value()) {
358     TEXTINPUT_printcmd->activate();
359   }
360   CHECKBUTTON_usealtprintdia->activate();
361   if (CHECKBUTTON_usealtprintdia->value()) {
362     TEXTINPUT_printdia->activate();
363   }
364   ROUNDBUTTON_printdialogmod->activate();
365   ROUNDBUTTON_printdialogalways->activate();
366   ROUNDBUTTON_printdialognever->activate();
367 
368 #if USE_PAPERSIZES
369   CHOICE_papersize->activate();
370 #endif
371 
372   /* Saving: */
373   /* ------- */
374 
375   ROUNDBUTTON_askbeforeoverwriting->activate();
376   ROUNDBUTTON_alwaysoverwriteolderversion->activate();
377   ROUNDBUTTON_alwayssavenewpicture->activate();
378   CHECKBUTTON_usealternatesavedir->activate();
379   if (CHECKBUTTON_usealternatesavedir->value()) {
380     FILEINPUT_alternatesavedir->activate();
381     BUTTON_browsealternatesavedir->activate();
382   }
383   CHECKBUTTON_startblank->activate();
384   CHECKBUTTON_disablesavebutton->activate();
385   CHECKBUTTON_autosave->activate();
386 
387   /* Data: */
388   /* ----- */
389 
390   CHECKBUTTON_nolockfile->activate();
391   CHECKBUTTON_usealternatedatadir->activate();
392   if (CHECKBUTTON_usealternatedatadir->value()) {
393     FILEINPUT_alternatedatadir->activate();
394     BUTTON_browsealternatedatadir->activate();
395   }
396 
397   /* Accessibility */
398   /* ------------- */
399 
400   CHECKBUTTON_mouse_accessibility->activate();
401   CHECKBUTTON_keyboard_mouse->activate();
402   CHECKBUTTON_onscreen_keyboard->activate();
403   if (CHECKBUTTON_onscreen_keyboard->value() == 1)
404     {
405       CHOICE_onscreen_keyboard_layout->activate();
406       CHECKBUTTON_onscreen_keyboard_disable_change->activate();
407     }
408 
409   /* Joystick */
410   /* -------- */
411 
412   SPINNER_joystick_dev->activate();
413   SPINNER_joystick_slowness->activate();
414   SPINNER_joystick_threshold->activate();
415   SPINNER_joystick_maxsteps->activate();
416   SPINNER_joystick_hat_slowness->activate();
417   SPINNER_joystick_hat_timeout->activate();
418   CHECKBUTTON_joystick_buttons_ignore->activate();
419   if (CHECKBUTTON_joystick_buttons_ignore->value()) {
420     TEXTINPUT_joystick_buttons_ignore->activate();
421   }
422 
423 SPINNER_joystick_btn_brush->activate();
424 SPINNER_joystick_btn_label->activate();
425 SPINNER_joystick_btn_new->activate();
426 SPINNER_joystick_btn_print->activate();
427 SPINNER_joystick_btn_shapes->activate();
428 SPINNER_joystick_btn_undo->activate();
429 SPINNER_joystick_btn_eraser->activate();
430 SPINNER_joystick_btn_lines->activate();
431 SPINNER_joystick_btn_open->activate();
432 SPINNER_joystick_btn_redo->activate();
433 SPINNER_joystick_btn_stamp->activate();
434 SPINNER_joystick_btn_escape->activate();
435 SPINNER_joystick_btn_magic->activate();
436 SPINNER_joystick_btn_pgsetup->activate();
437 SPINNER_joystick_btn_save->activate();
438 SPINNER_joystick_btn_text->activate();
439 
440 }
441 
deactivate_widgets()442 static void deactivate_widgets()
443 {
444   /* Video & Sound: */
445   /* -------------- */
446 
447   CHECKBUTTON_fullscreen->deactivate();
448   CHECKBUTTON_native->deactivate();
449   CHOICE_windowwidth->deactivate();
450   CHOICE_windowheight->deactivate();
451   CHECKBUTTON_rotate->deactivate();
452   CHECKBUTTON_screensaver->deactivate();
453   CHECKBUTTON_soundeffects->deactivate();
454   CHECKBUTTON_usecolorfile->deactivate();
455   FILEINPUT_colorfile->deactivate();
456   BUTTON_browsecolorfile->deactivate();
457 
458   /* Mouse & Keyboard: */
459   /* ----------------- */
460 
461   CHECKBUTTON_fancycursorshapes->deactivate();
462   CHECKBUTTON_hidecursor->deactivate();
463   CHECKBUTTON_grabmousepointer->deactivate();
464   CHECKBUTTON_mousewheelsupport->deactivate();
465   CHECKBUTTON_nobuttondistinction->deactivate();
466   CHECKBUTTON_enablekbd->deactivate();
467 
468   /* Simplification: */
469   /* --------------- */
470 
471   CHECKBUTTON_disableshaperotation->deactivate();
472   CHECKBUTTON_simpleshapeoutlines->deactivate();
473   CHECKBUTTON_showuppercasetextonly->deactivate();
474   CHECKBUTTON_disablequitbutton->deactivate();
475   CHECKBUTTON_disablestampstool->deactivate();
476   CHECKBUTTON_disablestampcontrols->deactivate();
477   CHECKBUTTON_disablemagiccontrols->deactivate();
478   CHECKBUTTON_disablelabeltool->deactivate();
479   SLIDER_stampsize->deactivate();
480 
481   /* Locale: */
482   /* ------- */
483 
484   CHOICE_language->deactivate();
485   CHECKBUTTON_mirrorstamps->deactivate();
486   CHECKBUTTON_loadsystemfonts->deactivate();
487   CHECKBUTTON_alllocalefonts->deactivate();
488 
489   /* Printing: */
490   /* --------- */
491 
492   CHECKBUTTON_allowprinting->deactivate();
493   VALUEINPUT_printdelay->deactivate();
494   CHECKBUTTON_printcfg->deactivate();
495   TEXTINPUT_printcmd->deactivate();
496   CHECKBUTTON_usealtprintcmd->deactivate();
497   TEXTINPUT_printdia->deactivate();
498   CHECKBUTTON_usealtprintdia->deactivate();
499   ROUNDBUTTON_printdialogmod->deactivate();
500   ROUNDBUTTON_printdialogalways->deactivate();
501   ROUNDBUTTON_printdialognever->deactivate();
502 #if USE_PAPERSIZES
503   CHOICE_papersize->deactivate();
504 #endif
505 
506   /* Saving: */
507   /* ------- */
508 
509   ROUNDBUTTON_askbeforeoverwriting->deactivate();
510   ROUNDBUTTON_alwaysoverwriteolderversion->deactivate();
511   ROUNDBUTTON_alwayssavenewpicture->deactivate();
512   FILEINPUT_alternatesavedir->deactivate();
513   BUTTON_browsealternatesavedir->deactivate();
514   CHECKBUTTON_usealternatesavedir->deactivate();
515   CHECKBUTTON_startblank->deactivate();
516   CHECKBUTTON_disablesavebutton->deactivate();
517   CHECKBUTTON_autosave->deactivate();
518 
519   /* Data: */
520   /* ----- */
521 
522   FILEINPUT_alternatedatadir->deactivate();
523   BUTTON_browsealternatedatadir->deactivate();
524   CHECKBUTTON_usealternatedatadir->deactivate();
525 
526   /* Accessibility */
527   /* ------------- */
528 
529   CHECKBUTTON_mouse_accessibility->deactivate();
530   CHECKBUTTON_keyboard_mouse->deactivate();
531   CHECKBUTTON_onscreen_keyboard->deactivate();
532   CHOICE_onscreen_keyboard_layout->deactivate();
533   CHECKBUTTON_onscreen_keyboard_disable_change->deactivate();
534 
535   /* Joystick */
536   /* -------- */
537 
538   SPINNER_joystick_dev->deactivate();
539   SPINNER_joystick_slowness->deactivate();
540   SPINNER_joystick_threshold->deactivate();
541   SPINNER_joystick_maxsteps->deactivate();
542   SPINNER_joystick_hat_slowness->deactivate();
543   SPINNER_joystick_hat_timeout->deactivate();
544   TEXTINPUT_joystick_buttons_ignore->deactivate();
545   CHECKBUTTON_joystick_buttons_ignore->deactivate();
546 
547 SPINNER_joystick_btn_brush->deactivate();
548 SPINNER_joystick_btn_label->deactivate();
549 SPINNER_joystick_btn_new->deactivate();
550 SPINNER_joystick_btn_print->deactivate();
551 SPINNER_joystick_btn_shapes->deactivate();
552 SPINNER_joystick_btn_undo->deactivate();
553 SPINNER_joystick_btn_eraser->deactivate();
554 SPINNER_joystick_btn_lines->deactivate();
555 SPINNER_joystick_btn_open->deactivate();
556 SPINNER_joystick_btn_redo->deactivate();
557 SPINNER_joystick_btn_stamp->deactivate();
558 SPINNER_joystick_btn_escape->deactivate();
559 SPINNER_joystick_btn_magic->deactivate();
560 SPINNER_joystick_btn_pgsetup->deactivate();
561 SPINNER_joystick_btn_save->deactivate();
562 SPINNER_joystick_btn_text->deactivate();
563 
564 }
565 
conf_file_exists(int user)566 static bool conf_file_exists(int user)
567 {
568   FILE *fd;
569   char *flg=(char*)"r";
570 
571   construct_conf_filename(user);
572   fd = fopen(conf_filename,flg);
573   if (fd != NULL) {
574     fclose(fd);
575     return true;
576   }
577   return false;
578 }
579 
580 
save_conf(void)581 void save_conf(void)
582 {
583    FILE *fd;
584    char *flg=(char*)"w";
585 
586    construct_conf_filename(CHOICE_settings->value());
587 
588    fd = fopen(conf_filename,flg);
589 
590    if (fd == NULL)
591       {
592         fl_message("Cannot write %s: %s",conf_filename, strerror(errno));
593         return;
594       }
595 
596    fprintf(fd,"# Generated by tuxpaint-config version " VER_VERSION "\n");
597 
598    /* Video & Sound: */
599    /* -------------- */
600 
601    /* Video: */
602    if ((CHKBUT_fulls_isdef())==0)
603    {
604       if (CHECKBUTTON_native->value() == 0)
605         fprintf(fd,"fullscreen=yes\n");
606       else
607         fprintf(fd,"fullscreen=native\n");
608    }
609 
610    if (CHECKBUTTON_native->value() == 1 &&
611        CHKBUT_fulls_isdef() == 1)
612    {
613      fprintf(fd, "native=yes\n"); /* keep track of native when fullscreen is disabled */
614    }
615 
616    if (CHOICE_windowwidth->value() != DEF_WINDOW_WIDTH ||
617        CHOICE_windowheight->value() != DEF_WINDOW_HEIGHT)
618      fprintf(fd,"windowsize=%sx%s\n",
619        window_widths[CHOICE_windowwidth->value()],
620        window_heights[CHOICE_windowheight->value()]);
621 
622    if (CHECKBUTTON_rotate->value() != 0)
623      fprintf(fd,"orient=portrait\n");
624 
625    if (CHECKBUTTON_screensaver->value() != 0)
626      fprintf(fd,"allowscreensaver=yes\n");
627 
628    /* Sound: */
629    if (CHECKBUTTON_soundeffects->value()==0)
630       fprintf(fd,"nosound=yes\n");
631 
632    /* Color file: */
633    if (strlen(FILEINPUT_colorfile->value()) > 0)
634    {
635      if (CHECKBUTTON_usecolorfile->value()==1)
636        fprintf(fd,"colorfile=%s\n",FILEINPUT_colorfile->value());
637      else
638        fprintf(fd,"# colorfile=%s\n",FILEINPUT_colorfile->value());
639    }
640 
641    /* Mouse & Keyboard: */
642    /* ----------------- */
643 
644    /* Mouse: */
645    if ((CHKBUT_fancycursors_isdef())==0)
646       fprintf(fd,"nofancycursors=yes\n");
647    if (CHECKBUTTON_hidecursor->value()==1)
648       fprintf(fd,"hidecursor=yes\n");
649    if ((CHKBUT_grabmouse_isdef())==0)
650       fprintf(fd,"grab=yes\n");
651    if ((CHKBUT_mousewheelsup_isdef())==0)
652       fprintf(fd,"nowheelmouse=yes\n");
653    if (CHECKBUTTON_nobuttondistinction->value()==1)
654       fprintf(fd,"nobuttondistinction=yes\n");
655 
656    /* Keyboard: */
657    if (CHECKBUTTON_enablekbd->value()==0)
658       fprintf(fd,"noshortcuts=yes\n");
659 // if ((CHKBUT_xxx_isdef())==0)
660 //    fprintf(fd,"keyboard=yes\n");
661 
662 
663    /* Simplification: */
664    /* --------------- */
665 
666    /* Interface: */
667    if (CHECKBUTTON_disableshaperotation->value()==1)
668       fprintf(fd,"simpleshapes=yes\n");
669    if ((CHKBUT_smploutlns_isdef())==0)
670       fprintf(fd,"outlines=yes\n");
671    if ((CHKBUT_showUConly_isdef())==0)
672       fprintf(fd,"uppercase=yes\n");
673 
674    /* Control: */
675    if ((CHKBUT_disablequit_isdef())==0)
676       fprintf(fd,"noquit=yes\n");
677    if (CHECKBUTTON_disablestampstool->value()==1)
678       fprintf(fd,"nostamps=yes\n");
679    if (CHECKBUTTON_disablestampcontrols->value()==1)
680       fprintf(fd,"nostampcontrols=yes\n");
681    if (CHECKBUTTON_disablemagiccontrols->value()==1)
682       fprintf(fd,"nomagiccontrols=yes\n");
683    if (CHECKBUTTON_disablelabeltool->value()==1)
684       fprintf(fd,"nolabel=yes\n");
685 
686    /* Stamp size */
687    if (SLIDER_stampsize->value() != -1)
688       fprintf(fd,"stampsize=%d\n", (int) floor(SLIDER_stampsize->value()));
689 
690 
691    /* Locale: */
692    /* ------- */
693 
694    if(CHOICE_language->value()!=0)
695       fprintf(fd,"lang=%s\n",langs[CHOICE_language->value()][LANG_CODE]);
696    if ((CHKBUT_mirstamps_isdef())==0)
697       fprintf(fd,"mirrorstamps=yes\n");
698 
699    if (CHECKBUTTON_loadsystemfonts->value()==1)
700       fprintf(fd,"sysfonts=yes\n");
701 
702    if (CHECKBUTTON_alllocalefonts->value()==1)
703       fprintf(fd,"alllocalefonts=yes\n");
704 
705 
706    /* Printing: */
707    /* --------- */
708 
709    /* Print Permissions: */
710    if ((CHKBUT_allowprint_isdef())==0)
711       fprintf(fd,"noprint=yes\n");
712    if ((VALINP_printdel_isdef())==0)
713       fprintf(fd,"printdelay=%d\n",(int) VALUEINPUT_printdelay->value());
714 
715    /* Print configuration file use: */
716    if (CHECKBUTTON_printcfg->value() == 1)
717      fprintf(fd,"printcfg=yes\n");
718 
719    /* Print Command: */
720    if (strlen(TEXTINPUT_printcmd->value()) > 0)
721    {
722      if (CHECKBUTTON_usealtprintcmd -> value() == 1)
723        fprintf(fd,"printcommand=%s\n",TEXTINPUT_printcmd->value());
724      else
725        fprintf(fd,"# printcommand=%s\n",TEXTINPUT_printcmd->value());
726    }
727 
728    /* Print Dialog Alt. Command: */
729    if (strlen(TEXTINPUT_printdia->value()) > 0)
730    {
731      if (CHECKBUTTON_usealtprintdia -> value() == 1)
732        fprintf(fd,"altprintcommand=%s\n",TEXTINPUT_printdia->value());
733      else
734        fprintf(fd,"# altprintcommand=%s\n",TEXTINPUT_printdia->value());
735    }
736 
737    /* Show print dialog? */
738    if (ROUNDBUTTON_printdialogalways->value()==1)
739      fprintf(fd,"altprint=always\n");
740    else if (ROUNDBUTTON_printdialognever->value()==1)
741       fprintf(fd,"altprint=never\n");
742 
743 #if USE_PAPERSIZES
744    /* Specify a paper size? */
745    if (CHOICE_papersize->value() != 0)
746      fprintf(fd,"papersize=%s\n", papersizes[CHOICE_papersize->value()]);
747 #endif
748 
749 
750    /* Saving: */
751    /* ------- */
752 
753    /* Save Over Earlier Work: */
754    if (ROUNDBUTTON_alwaysoverwriteolderversion->value()==1)
755      fprintf(fd,"saveover=yes\n");
756    else if (ROUNDBUTTON_alwayssavenewpicture->value()==1)
757       fprintf(fd,"saveover=new\n");
758 
759    /* Save Directory: */
760    if (strlen(FILEINPUT_alternatesavedir->value()) > 0)
761    {
762      if ((CHKBUT_altsavedir_isdef())==0)
763        fprintf(fd,"savedir=%s\n",FILEINPUT_alternatesavedir->value());
764      else
765        fprintf(fd,"# savedir=%s\n",FILEINPUT_alternatesavedir->value());
766    }
767 
768    /* Start blank? */
769    if (CHECKBUTTON_startblank->value() == 1)
770      fprintf(fd,"startblank=yes\n");
771 
772    /* Disable saving: */
773    if (CHECKBUTTON_disablesavebutton->value()==1)
774       fprintf(fd,"nosave=yes\n");
775 
776    /* Auto-save on quit? */
777    if (CHECKBUTTON_autosave->value()==1)
778       fprintf(fd,"autosave=yes\n");
779 
780    /* Data: */
781    /* ----- */
782 
783    /* Lockfile: */
784    if (CHECKBUTTON_nolockfile->value()==1)
785        fprintf(fd,"nolockfile=yes\n");
786 
787    /* Data Directory: */
788    if (strlen(FILEINPUT_alternatedatadir->value()) > 0)
789    {
790      if ((CHKBUT_altdatadir_isdef())==0)
791        fprintf(fd,"datadir=%s\n",FILEINPUT_alternatedatadir->value());
792      else
793        fprintf(fd,"# datadir=%s\n",FILEINPUT_alternatedatadir->value());
794    }
795 
796    /* Accessibility */
797    /* ------------- */
798 
799       if (CHECKBUTTON_mouse_accessibility->value()==1)
800        fprintf(fd,"mouse-accessibility=yes\n");
801    if (CHECKBUTTON_keyboard_mouse->value()==1)
802        fprintf(fd,"keyboard=yes\n");
803    if (CHECKBUTTON_onscreen_keyboard->value()==1)
804      {
805        fprintf(fd,"onscreen-keyboard=yes\n");
806 
807        if(CHOICE_onscreen_keyboard_layout->value()!=0)
808 	 fprintf(fd,"onscreen-keyboard-layout=%s\n",layouts[CHOICE_onscreen_keyboard_layout->value()][LANG_CODE]);
809 
810        if (CHECKBUTTON_onscreen_keyboard_disable_change->value()==1)
811 	 fprintf(fd,"onscreen-keyboard-disable-change=yes\n");
812      }
813 
814 
815 
816    /* Joystick */
817    /* -------- */
818 
819    if (SPINNER_joystick_dev->value()!=0)
820      fprintf(fd,"joystick-dev=%d\n",(int) SPINNER_joystick_dev->value());
821 
822    if (SPINNER_joystick_slowness->value()!=15)
823      fprintf(fd,"joystick-slowness=%d\n",(int) SPINNER_joystick_slowness->value());
824 
825    if (SPINNER_joystick_threshold->value()!=3200)
826      fprintf(fd,"joystick-threshold=%d\n",(int) SPINNER_joystick_threshold->value());
827 
828    if (SPINNER_joystick_maxsteps->value()!=7)
829      fprintf(fd,"joystick-maxsteps=%d\n",(int) SPINNER_joystick_maxsteps->value());
830 
831    if (SPINNER_joystick_hat_slowness->value()!=15)
832      fprintf(fd,"joystick-hat-slowness=%d\n",(int) SPINNER_joystick_hat_slowness->value());
833 
834    if (SPINNER_joystick_hat_timeout->value()!=1000)
835      fprintf(fd,"joystick-hat-timeout=%d\n",(int) SPINNER_joystick_hat_timeout->value());
836 
837    /* Disable buttons: */
838    if (strlen(TEXTINPUT_joystick_buttons_ignore->value()) > 0)
839    {
840      if (CHECKBUTTON_joystick_buttons_ignore -> value() == 1)
841        fprintf(fd,"joystick-buttons-ignore=%s\n",TEXTINPUT_joystick_buttons_ignore->value());
842      else
843        fprintf(fd,"# joystick-buttons-ignore=%s\n",TEXTINPUT_joystick_buttons_ignore->value());
844    }
845 
846    if (SPINNER_joystick_btn_brush->value()!=255)
847      fprintf(fd,"joystick-btn-brush=%d\n",(int) SPINNER_joystick_btn_brush->value());
848    if (SPINNER_joystick_btn_label->value()!=255)
849      fprintf(fd,"joystick-btn-label=%d\n",(int) SPINNER_joystick_btn_label->value());
850    if (SPINNER_joystick_btn_new->value()!=255)
851      fprintf(fd,"joystick-btn-new=%d\n",(int) SPINNER_joystick_btn_new->value());
852    if (SPINNER_joystick_btn_print->value()!=255)
853      fprintf(fd,"joystick-btn-print=%d\n",(int) SPINNER_joystick_btn_print->value());
854    if (SPINNER_joystick_btn_shapes->value()!=255)
855      fprintf(fd,"joystick-btn-shapes=%d\n",(int) SPINNER_joystick_btn_shapes->value());
856    if (SPINNER_joystick_btn_undo->value()!=255)
857      fprintf(fd,"joystick-btn-undo=%d\n",(int) SPINNER_joystick_btn_undo->value());
858    if (SPINNER_joystick_btn_eraser->value()!=255)
859      fprintf(fd,"joystick-btn-eraser=%d\n",(int) SPINNER_joystick_btn_eraser->value());
860    if (SPINNER_joystick_btn_lines->value()!=255)
861      fprintf(fd,"joystick-btn-lines=%d\n",(int) SPINNER_joystick_btn_lines->value());
862    if (SPINNER_joystick_btn_open->value()!=255)
863      fprintf(fd,"joystick-btn-open=%d\n",(int) SPINNER_joystick_btn_open->value());
864    if (SPINNER_joystick_btn_redo->value()!=255)
865      fprintf(fd,"joystick-btn-redo=%d\n",(int) SPINNER_joystick_btn_redo->value());
866    if (SPINNER_joystick_btn_stamp->value()!=255)
867      fprintf(fd,"joystick-btn-stamp=%d\n",(int) SPINNER_joystick_btn_stamp->value());
868    if (SPINNER_joystick_btn_escape->value()!=255)
869      fprintf(fd,"joystick-btn-escape=%d\n",(int) SPINNER_joystick_btn_escape->value());
870    if (SPINNER_joystick_btn_magic->value()!=255)
871      fprintf(fd,"joystick-btn-magic=%d\n",(int) SPINNER_joystick_btn_magic->value());
872    if (SPINNER_joystick_btn_pgsetup->value()!=255)
873      fprintf(fd,"joystick-btn-pgsetup=%d\n",(int) SPINNER_joystick_btn_pgsetup->value());
874    if (SPINNER_joystick_btn_save->value()!=255)
875      fprintf(fd,"joystick-btn-save=%d\n",(int) SPINNER_joystick_btn_save->value());
876    if (SPINNER_joystick_btn_text->value()!=255)
877      fprintf(fd,"joystick-btn-text=%d\n",(int) SPINNER_joystick_btn_text->value());
878 
879 
880 
881 
882 
883 
884 
885    fclose(fd);
886 
887    set_change_status(0);
888 
889 /*
890    FIXME: Add "--keyboard" option to UI and save/load routines
891 */
892 
893 }
894 
895 
896 
load_conf(void)897 void load_conf(void)
898 {
899    FILE *fd;
900    char *flg=(char*)"r";
901    char line[256];
902    bool all_users_conf_file = conf_file_exists(ALL_USERS);
903 
904    CB_SetAllTabsToDefaults ();
905 
906    switch(CHOICE_settings->value())
907    {
908      case (CURRENT_USER):
909 
910        CHECKBUTTON_usealluserssettings->show();
911        if (all_users_conf_file == false)
912        {
913          CHECKBUTTON_usealluserssettings->value(0);
914          CHECKBUTTON_usealluserssettings->deactivate();
915          activate_widgets();
916        }
917        else
918        {
919          bool cur_user_conf_file = conf_file_exists(CURRENT_USER);
920          CHECKBUTTON_usealluserssettings->activate();
921          if (cur_user_conf_file == true)
922          {
923            CHECKBUTTON_usealluserssettings->value(0);
924            activate_widgets();
925          }
926          else
927          {
928            CHECKBUTTON_usealluserssettings->value(1);
929            deactivate_widgets();
930          }
931        }
932        break;
933 
934      case (ALL_USERS):
935        CHECKBUTTON_usealluserssettings->hide();
936        activate_widgets();
937        break;
938    }
939 
940    construct_conf_filename( CHOICE_settings->value() );
941 
942    fd = fopen(conf_filename,flg);
943 
944    if (fd != NULL)
945    {
946      do
947      {
948        if (fgets(line, sizeof(line), fd) && !feof(fd))
949        {
950 	 /* Trim EOL char(s): */
951 
952 	 while (strlen(line) > 0 &&
953 		(line[strlen(line) - 1] == '\r' ||
954 		 line[strlen(line) - 1] == '\n'))
955 	 {
956 	   line[strlen(line) - 1] = '\0';
957 	 }
958 
959 
960 	 /* Determine what option it is, and if we should alter the UI
961 	    to correspond */
962 
963 	 /* Video & Sound: */
964 	 if (strcmp(line, "fullscreen=yes") == 0)
965 	   CHECKBUTTON_fullscreen->value(1);
966 
967 	 if (strcmp(line, "fullscreen=native") == 0)
968          {
969 	   CHECKBUTTON_fullscreen->value(1);
970 	   CHECKBUTTON_native->value(1);
971          }
972 
973 	 if (strcmp(line, "native=yes") == 0)
974          {
975 	   CHECKBUTTON_native->value(1);
976          }
977 
978 	 if (strstr(line, "windowsize=") == line)
979 	 {
980 	   int i;
981            char tmp[32];
982 
983            for (i = 0; i < NUM_WINDOW_WIDTHS; i++)
984            {
985              sprintf(tmp, "windowsize=%sx", window_widths[i]);
986              if (strstr(line, tmp) == line)
987 	       CHOICE_windowwidth->value(i);
988            }
989 
990            for (i = 0; i < NUM_WINDOW_WIDTHS; i++)
991            {
992              sprintf(tmp, "windowsize=%sx%s",
993                window_widths[CHOICE_windowwidth->value()], window_heights[i]);
994              if (strcmp(line, tmp) == 0)
995 	       CHOICE_windowheight->value(i);
996            }
997 	 }
998          else if (strcmp(line, "orient=portrait") == 0)
999            CHECKBUTTON_rotate->value(1);
1000          else if (strcmp(line, "allowscreensaver=yes") == 0)
1001            CHECKBUTTON_screensaver->value(1);
1002 	 else if (strcmp(line, "nosound=yes") == 0)
1003 	   CHECKBUTTON_soundeffects->value(0);
1004 
1005 	 /* Mouse & Keyboard: */
1006 	 else if (strcmp(line, "nofancycursors=yes") == 0)
1007 	   CHECKBUTTON_fancycursorshapes->value(0);
1008 	 else if (strcmp(line, "hidecursor=yes") == 0)
1009 	   CHECKBUTTON_hidecursor->value(1);
1010 	 else if (strcmp(line, "grab=yes") == 0)
1011 	   CHECKBUTTON_grabmousepointer->value(1);
1012 	 else if (strcmp(line, "nowheelmouse=yes") == 0)
1013 	   CHECKBUTTON_mousewheelsupport->value(0);
1014 	 else if (strcmp(line, "nobuttondistinction=yes") == 0)
1015 	   CHECKBUTTON_nobuttondistinction->value(1);
1016 	 else if (strcmp(line, "noshortcuts=yes") == 0)
1017 	   CHECKBUTTON_enablekbd->value(0);
1018 
1019 	 /* Simplifications: */
1020 	 else if (strcmp(line, "simpleshapes=yes") == 0)
1021 	   CHECKBUTTON_disableshaperotation->value(1);
1022 	 else if (strcmp(line, "outlines=yes") == 0)
1023 	   CHECKBUTTON_simpleshapeoutlines->value(1);
1024 	 else if (strcmp(line, "uppercase=yes") == 0)
1025 	   CHECKBUTTON_showuppercasetextonly->value(1);
1026 	 else if (strcmp(line, "noquit=yes") == 0)
1027 	   CHECKBUTTON_disablequitbutton->value(1);
1028 	 else if (strcmp(line, "nostamps=yes") == 0)
1029 	   CHECKBUTTON_disablestampstool->value(1);
1030 	 else if (strcmp(line, "nostampcontrols=yes") == 0)
1031 	   CHECKBUTTON_disablestampcontrols->value(1);
1032 	 else if (strcmp(line, "nomagiccontrols=yes") == 0)
1033 	   CHECKBUTTON_disablemagiccontrols->value(1);
1034 	 else if (strcmp(line, "nolabel=yes") == 0)
1035 	   CHECKBUTTON_disablelabeltool->value(1);
1036 	 else if (strstr(line, "stampsize=") == line)
1037 	   SLIDER_stampsize->value(atoi(line + 10));
1038 
1039 	 /* Locale: */
1040 	 else if (strstr(line, "lang=") == line)
1041 	 {
1042 	   char * lang;
1043 	   int i;
1044 
1045 	   lang = strstr(line, "lang=") + strlen("lang=");
1046 
1047 	   for (i = 0; i < NUM_LANGS; i++)
1048 	   {
1049 	     if (strcmp(lang, langs[i][LANG_CODE]) == 0)
1050 	       CHOICE_language->value(i);
1051 	   }
1052 	 }
1053 	 else if (strcmp(line, "mirrorstamps=yes") == 0)
1054 	   CHECKBUTTON_mirrorstamps->value();
1055 	 else if (strcmp(line, "sysfonts=yes") == 0)
1056 	   CHECKBUTTON_loadsystemfonts->value(1);
1057 	 else if (strcmp(line, "alllocalefonts=yes") == 0)
1058 	   CHECKBUTTON_alllocalefonts->value(1);
1059 
1060 	 /* Printing: */
1061 	 else if (strcmp(line, "noprint=yes") == 0)
1062 	   CHECKBUTTON_allowprinting->value(0);
1063 	 else if (strcmp(line, "printcfg=yes") == 0)
1064 	   CHECKBUTTON_printcfg->value(1);
1065 	 else if (strstr(line, "printdelay=") == line)
1066 	 {
1067 	   VALUEINPUT_printdelay->value(atoi(strstr(line, "printdelay=") +
1068 				             strlen("printdelay=")));
1069 	 }
1070 	 else if (strstr(line, "printcommand=") != NULL)
1071 	 {
1072 	   TEXTINPUT_printcmd->value(strstr(line, "printcommand=") +
1073 			             strlen("printcommand="));
1074 
1075 	   if (strstr(line, "printcommand=") == line)
1076 	   {
1077              /* Active! */
1078 
1079 	     CHECKBUTTON_usealtprintcmd->value(1);
1080 	     TEXTINPUT_printcmd->activate();
1081 	   }
1082 	   else
1083 	   {
1084              /* Inactive! */
1085 
1086 	     CHECKBUTTON_usealtprintcmd->value(0);
1087 	     TEXTINPUT_printcmd->deactivate();
1088 	   }
1089 	 }
1090 	 else if (strstr(line, "altprintcommand=") != NULL)
1091 	 {
1092 	   TEXTINPUT_printcmd->value(strstr(line, "altprintcommand=") +
1093 			             strlen("altprintcommand="));
1094 
1095 	   if (strstr(line, "altprintcommand=") == line)
1096 	   {
1097              /* Active! */
1098 
1099 	     CHECKBUTTON_usealtprintdia->value(1);
1100 	     TEXTINPUT_printdia->activate();
1101 	   }
1102 	   else
1103 	   {
1104              /* Inactive! */
1105 
1106 	     CHECKBUTTON_usealtprintdia->value(0);
1107 	     TEXTINPUT_printdia->deactivate();
1108 	   }
1109 	 }
1110 
1111 	 /* Print Dialog: */
1112 	 else if (strcmp(line, "altprint=always") == 0)
1113 	 {
1114            ROUNDBUTTON_printdialogmod->value(0);
1115            ROUNDBUTTON_printdialogalways->value(1);
1116            ROUNDBUTTON_printdialognever->value(0);
1117 	 }
1118 	 else if (strcmp(line, "altprint=never") == 0)
1119 	 {
1120            ROUNDBUTTON_printdialogmod->value(0);
1121            ROUNDBUTTON_printdialogalways->value(0);
1122            ROUNDBUTTON_printdialognever->value(1);
1123 	 }
1124 	 else if (strcmp(line, "altprint=mod") == 0)
1125 	 {
1126            ROUNDBUTTON_printdialogmod->value(1);
1127            ROUNDBUTTON_printdialogalways->value(0);
1128            ROUNDBUTTON_printdialognever->value(0);
1129 	 }
1130 
1131 #if USE_PAPERSIZES
1132          /* Paper Size: */
1133          else if (strstr(line, "papersize=") == line)
1134          {
1135            for (int i = 1; i < num_papersizes; i++)
1136            {
1137              if (strcmp(line + strlen("papersize="), papersizes[i]) == 0)
1138                CHOICE_papersize->value(i);
1139            }
1140          }
1141 #endif
1142 
1143 	 /* Saving: */
1144 	 else if (strcmp(line, "saveover=ask") == 0)
1145 	 {
1146            ROUNDBUTTON_askbeforeoverwriting->value(1);
1147            ROUNDBUTTON_alwaysoverwriteolderversion->value(0);
1148            ROUNDBUTTON_alwayssavenewpicture->value(0);
1149 	 }
1150 	 else if (strcmp(line, "saveover=yes") == 0)
1151 	 {
1152            ROUNDBUTTON_askbeforeoverwriting->value(0);
1153            ROUNDBUTTON_alwaysoverwriteolderversion->value(1);
1154            ROUNDBUTTON_alwayssavenewpicture->value(0);
1155 	 }
1156 	 else if (strcmp(line, "saveover=new") == 0)
1157 	 {
1158            ROUNDBUTTON_askbeforeoverwriting->value(0);
1159            ROUNDBUTTON_alwaysoverwriteolderversion->value(0);
1160            ROUNDBUTTON_alwayssavenewpicture->value(1);
1161 	 }
1162 	 else if (strstr(line, "savedir=") != NULL)
1163 	 {
1164 	   FILEINPUT_alternatesavedir->value(strstr(line, "savedir=") +
1165 			                     strlen("savedir="));
1166 
1167 	   if (strstr(line, "savedir=") == line)
1168 	   {
1169              /* Active! */
1170 
1171 	     CHECKBUTTON_usealternatesavedir->value(1);
1172 	     FILEINPUT_alternatesavedir->activate();
1173 	     BUTTON_browsealternatesavedir->activate();
1174 	   }
1175 	   else
1176 	   {
1177              /* Inactive! */
1178 
1179 	     CHECKBUTTON_usealternatesavedir->value(0);
1180 	     FILEINPUT_alternatesavedir->deactivate();
1181 	     BUTTON_browsealternatesavedir->deactivate();
1182 	   }
1183 	 }
1184 	 else if (strstr(line, "datadir=") != NULL)
1185 	 {
1186 	   FILEINPUT_alternatedatadir->value(strstr(line, "datadir=") +
1187 			                     strlen("datadir="));
1188 
1189 	   if (strstr(line, "datadir=") == line)
1190 	   {
1191              /* Active! */
1192 
1193 	     CHECKBUTTON_usealternatedatadir->value(1);
1194 	     FILEINPUT_alternatedatadir->activate();
1195 	     BUTTON_browsealternatedatadir->activate();
1196 	   }
1197 	   else
1198 	   {
1199              /* Inactive! */
1200 
1201 	     CHECKBUTTON_usealternatedatadir->value(0);
1202 	     FILEINPUT_alternatedatadir->deactivate();
1203 	     BUTTON_browsealternatedatadir->deactivate();
1204 	   }
1205 	 }
1206 	 else if (strcmp(line, "nolockfile=yes") == 0 ||
1207 		  strcmp(line, "lockfile=no") == 0)
1208 	 {
1209            CHECKBUTTON_nolockfile->value(1);
1210 	 }
1211 	 else if (strstr(line, "colorfile=") != NULL)
1212 	 {
1213 	   FILEINPUT_colorfile->value(strstr(line, "colorfile=") +
1214 			                     strlen("colorfile="));
1215 
1216 	   if (strstr(line, "colorfile=") == line)
1217 	   {
1218              /* Active! */
1219 
1220 	     CHECKBUTTON_usecolorfile->value(1);
1221 	     FILEINPUT_colorfile->activate();
1222 	     BUTTON_browsecolorfile->activate();
1223 	   }
1224 	   else
1225 	   {
1226              /* Inactive! */
1227 
1228 	     CHECKBUTTON_usecolorfile->value(0);
1229 	     FILEINPUT_colorfile->deactivate();
1230 	     BUTTON_browsecolorfile->deactivate();
1231 	   }
1232 	 }
1233 	 else if (strcmp(line, "nosave=yes") == 0)
1234 	   CHECKBUTTON_disablesavebutton->value(1);
1235 	 else if (strcmp(line, "startblank=yes") == 0)
1236 	 /* Start blank? */
1237 	   CHECKBUTTON_startblank->value(1);
1238 	 else if (strcmp(line, "autosave=yes") == 0)
1239 	 /* Auto-save on quit? */
1240 	   CHECKBUTTON_autosave->value(1);
1241 	 /*Accessibility */
1242 	 else if (strcmp(line, "mouse-accessibility=yes") == 0)
1243 	 /* Mouse accessibility? */
1244 	   CHECKBUTTON_mouse_accessibility->value(1);
1245 	 else if (strcmp(line, "keyboard=yes") == 0)
1246 	 /* Keyboard mouse? */
1247 	   CHECKBUTTON_keyboard_mouse->value(1);
1248 	 else if (strcmp(line, "onscreen-keyboard=yes") == 0)
1249 	 /* Onscreen keyboard? */
1250 	   {
1251 	     CHECKBUTTON_onscreen_keyboard->value(1);
1252 	     CHOICE_onscreen_keyboard_layout->activate();
1253 	     CHECKBUTTON_onscreen_keyboard_disable_change->activate();
1254 	   }
1255 	 else if (strstr(line, "onscreen-keyboard-layout=") == line)
1256 	 {
1257 	   char * lay;
1258 	   int i;
1259 
1260 	   lay = strstr(line, "onscreen-keyboard-layout=") + strlen("onscreen-keyboard-layout=");
1261 
1262 	   for (i = 0; i < NUM_LAYOUTS; i++)
1263 	   {
1264 	     if (strcmp(lay, layouts[i][LANG_CODE]) == 0)
1265 	       CHOICE_onscreen_keyboard_layout->value(i);
1266 	   }
1267 	 }
1268 
1269 	 else if (strcmp(line, "onscreen-keyboard-disable-change=yes") == 0)
1270 	 /* Onscreen keyboard? */
1271 	   CHECKBUTTON_onscreen_keyboard_disable_change->value(1);
1272 
1273 	 /* joystick */
1274 	 else if (strstr(line, "joystick-dev=") == line)
1275 	   SPINNER_joystick_dev->value(atoi(strstr(line, "joystick-dev=") +
1276 					    strlen("joystick-dev=")));
1277 	 else if (strstr(line, "joystick-slowness=") == line)
1278 	   SPINNER_joystick_slowness->value(atoi(strstr(line, "joystick-slowness=") +
1279 					    strlen("joystick-slowness=")));
1280 	 else if (strstr(line, "joystick-threshold=") == line)
1281 	   SPINNER_joystick_threshold->value(atoi(strstr(line, "joystick-threshold=") +
1282 					    strlen("joystick-threshold=")));
1283 	 else if (strstr(line, "joystick-maxsteps=") == line)
1284 	   SPINNER_joystick_maxsteps->value(atoi(strstr(line, "joystick-maxsteps=") +
1285 					    strlen("joystick-maxsteps=")));
1286 	 else if (strstr(line, "joystick-hat-slowness=") == line)
1287 	   SPINNER_joystick_hat_slowness->value(atoi(strstr(line, "joystick-hat-slowness=") +
1288 					    strlen("joystick-hat-slowness=")));
1289 	 else if (strstr(line, "joystick-hat-timeout=") == line)
1290 	   SPINNER_joystick_hat_timeout->value(atoi(strstr(line, "joystick-hat-timeout=") +
1291 					    strlen("joystick-hat-timeout=")));
1292 
1293 	 else if (strstr(line, "joystick-buttons-ignore=") != NULL)
1294 	 {
1295 	   TEXTINPUT_joystick_buttons_ignore->value(strstr(line, "joystick-buttons-ignore=") +
1296 			             strlen("joystick-buttons-ignore="));
1297 	   if (strstr(line, "joystick-buttons-ignore=") == line)
1298 	   {
1299              /* Active! */
1300 
1301 	     CHECKBUTTON_joystick_buttons_ignore->value(1);
1302 	     TEXTINPUT_joystick_buttons_ignore->activate();
1303 	   }
1304 	   else
1305 	   {
1306              /* Inactive! */
1307 
1308 	     CHECKBUTTON_joystick_buttons_ignore->value(0);
1309 	     TEXTINPUT_joystick_buttons_ignore->deactivate();
1310 	   }
1311 	 }
1312 
1313 	 else if (strstr(line, "joystick-btn-brush=") == line)
1314 	   SPINNER_joystick_btn_brush->value(atoi(strstr(line, "joystick-btn-brush=") +
1315 					    strlen("joystick-btn-brush=")));
1316 	 else if (strstr(line, "joystick-btn-label=") == line)
1317 	   SPINNER_joystick_btn_label->value(atoi(strstr(line, "joystick-btn-label=") +
1318 					    strlen("joystick-btn-label=")));
1319 	 else if (strstr(line, "joystick-btn-new=") == line)
1320 	   SPINNER_joystick_btn_new->value(atoi(strstr(line, "joystick-btn-new=") +
1321 					    strlen("joystick-btn-new=")));
1322 	 else if (strstr(line, "joystick-btn-print=") == line)
1323 	   SPINNER_joystick_btn_print->value(atoi(strstr(line, "joystick-btn-print=") +
1324 					    strlen("joystick-btn-print=")));
1325 	 else if (strstr(line, "joystick-btn-shapes=") == line)
1326 	   SPINNER_joystick_btn_shapes->value(atoi(strstr(line, "joystick-btn-shapes=") +
1327 					    strlen("joystick-btn-shapes=")));
1328 	 else if (strstr(line, "joystick-btn-undo=") == line)
1329 	   SPINNER_joystick_btn_undo->value(atoi(strstr(line, "joystick-btn-undo=") +
1330 					    strlen("joystick-btn-undo=")));
1331 	 else if (strstr(line, "joystick-btn-eraser=") == line)
1332 	   SPINNER_joystick_btn_eraser->value(atoi(strstr(line, "joystick-btn-eraser=") +
1333 					    strlen("joystick-btn-eraser=")));
1334 	 else if (strstr(line, "joystick-btn-lines=") == line)
1335 	   SPINNER_joystick_btn_lines->value(atoi(strstr(line, "joystick-btn-lines=") +
1336 					    strlen("joystick-btn-lines=")));
1337 	 else if (strstr(line, "joystick-btn-open=") == line)
1338 	   SPINNER_joystick_btn_open->value(atoi(strstr(line, "joystick-btn-open=") +
1339 					    strlen("joystick-btn-open=")));
1340 	 else if (strstr(line, "joystick-btn-redo=") == line)
1341 	   SPINNER_joystick_btn_redo->value(atoi(strstr(line, "joystick-btn-redo=") +
1342 					    strlen("joystick-btn-redo=")));
1343 	 else if (strstr(line, "joystick-btn-stamp=") == line)
1344 	   SPINNER_joystick_btn_stamp->value(atoi(strstr(line, "joystick-btn-stamp=") +
1345 					    strlen("joystick-btn-stamp=")));
1346 	 else if (strstr(line, "joystick-btn-escape=") == line)
1347 	   SPINNER_joystick_btn_escape->value(atoi(strstr(line, "joystick-btn-escape=") +
1348 					    strlen("joystick-btn-escape=")));
1349 	 else if (strstr(line, "joystick-btn-magic=") == line)
1350 	   SPINNER_joystick_btn_magic->value(atoi(strstr(line, "joystick-btn-magic=") +
1351 					    strlen("joystick-btn-magic=")));
1352 	 else if (strstr(line, "joystick-btn-pgsetup=") == line)
1353 	   SPINNER_joystick_btn_pgsetup->value(atoi(strstr(line, "joystick-btn-pgsetup=") +
1354 					    strlen("joystick-btn-pgsetup=")));
1355 	 else if (strstr(line, "joystick-btn-save=") == line)
1356 	   SPINNER_joystick_btn_save->value(atoi(strstr(line, "joystick-btn-save=") +
1357 					    strlen("joystick-btn-save=")));
1358 	 else if (strstr(line, "joystick-btn-text=") == line)
1359 	   SPINNER_joystick_btn_text->value(atoi(strstr(line, "joystick-btn-text=") +
1360 					    strlen("joystick-btn-text=")));
1361 
1362 
1363 
1364        }
1365      }
1366      while (!feof(fd));
1367    }
1368 
1369    set_change_status(0);
1370 }
1371 
apply_settings(void)1372 static void apply_settings(void)
1373 {
1374   if (CHECKBUTTON_usealluserssettings->visible() && CHECKBUTTON_usealluserssettings->value())
1375   {
1376     construct_conf_filename(CURRENT_USER);
1377     remove(conf_filename);
1378     set_change_status(0);
1379   }
1380   else
1381   {
1382     save_conf();
1383   }
1384 }
1385 
1386 Fl_Double_Window *WINDOW_tpc=(Fl_Double_Window *)0;
1387 Fl_Tabs *TAB_alltabs=(Fl_Tabs *)0;
1388 
1389 Fl_Group *TABE_about=(Fl_Group *)0;
1390 Fl_Group *GROUP_abouttpc=(Fl_Group *)0;
1391 Fl_Text_Display *TEXTOUTPUT_abouttext=(Fl_Text_Display *)0;
1392 Fl_Text_Buffer *TEXTBUFFER_abouttext = new Fl_Text_Buffer();
1393 
1394 Fl_Group *TABE_videoandsound=(Fl_Group *)0;
1395 
1396 Fl_Group *GROUP_video=(Fl_Group *)0;
1397 Fl_Check_Button *CHECKBUTTON_fullscreen=(Fl_Check_Button *)0;
1398 Fl_Check_Button *CHECKBUTTON_native=(Fl_Check_Button *)0;
1399 Fl_Check_Button *CHECKBUTTON_startblank=(Fl_Check_Button *)0;
1400 Fl_Group *GROUP_resolution=(Fl_Group *)0;
1401 Fl_Choice *CHOICE_windowwidth=(Fl_Choice *) DEF_WINDOW_WIDTH;
1402 Fl_Choice *CHOICE_windowheight=(Fl_Choice *) DEF_WINDOW_HEIGHT;
1403 Fl_Check_Button *CHECKBUTTON_rotate=(Fl_Check_Button *)0;
1404 Fl_Check_Button *CHECKBUTTON_screensaver=(Fl_Check_Button *)0;
1405 
1406 Fl_Group *GROUP_sound=(Fl_Group *)0;
1407 Fl_Check_Button *CHECKBUTTON_soundeffects=(Fl_Check_Button *)0;
1408 
1409 Fl_Group *TABE_mouseandkeyboard=(Fl_Group *)0;
1410 Fl_Group *GROUP_mouse=(Fl_Group *)0;
1411 Fl_Check_Button *CHECKBUTTON_fancycursorshapes=(Fl_Check_Button *)0;
1412 Fl_Check_Button *CHECKBUTTON_hidecursor=(Fl_Check_Button *)0;
1413 Fl_Check_Button *CHECKBUTTON_grabmousepointer=(Fl_Check_Button *)0;
1414 Fl_Check_Button *CHECKBUTTON_mousewheelsupport=(Fl_Check_Button *)0;
1415 Fl_Check_Button *CHECKBUTTON_nobuttondistinction=(Fl_Check_Button *)0;
1416 
1417 Fl_Group *GROUP_keyboard=(Fl_Group *)0;
1418 Fl_Check_Button *CHECKBUTTON_enablekbd=(Fl_Check_Button *)0;
1419 
1420 Fl_Group *TABE_simplification=(Fl_Group *)0;
1421 Fl_Group *GROUP_interfacesimpl=(Fl_Group *)0;
1422 Fl_Check_Button *CHECKBUTTON_disableshaperotation=(Fl_Check_Button *)0;
1423 Fl_Check_Button *CHECKBUTTON_simpleshapeoutlines=(Fl_Check_Button *)0;
1424 Fl_Check_Button *CHECKBUTTON_showuppercasetextonly=(Fl_Check_Button *)0;
1425 Fl_Group *GROUP_controlsimpl=(Fl_Group *)0;
1426 Fl_Check_Button *CHECKBUTTON_disablequitbutton=(Fl_Check_Button *)0;
1427 Fl_Check_Button *CHECKBUTTON_disablestampstool=(Fl_Check_Button *)0;
1428 Fl_Check_Button *CHECKBUTTON_disablestampcontrols=(Fl_Check_Button *)0;
1429 Fl_Check_Button *CHECKBUTTON_disablemagiccontrols=(Fl_Check_Button *)0;
1430 Fl_Check_Button *CHECKBUTTON_disablelabeltool=(Fl_Check_Button *)0;
1431 Fl_Slider *SLIDER_stampsize=(Fl_Slider *)0;
1432 Fl_Group *GROUP_stampsize=(Fl_Group *)0;
1433 
1434 Fl_Group *TABE_locale=(Fl_Group *)0;
1435 Fl_Group *GROUP_locale=(Fl_Group *)0;
1436 Fl_Choice *CHOICE_language=(Fl_Choice *)0;
1437 Fl_Check_Button *CHECKBUTTON_mirrorstamps=(Fl_Check_Button *)0;
1438 Fl_Check_Button *CHECKBUTTON_loadsystemfonts=(Fl_Check_Button *)0;
1439 Fl_Check_Button *CHECKBUTTON_alllocalefonts=(Fl_Check_Button *)0;
1440 
1441 Fl_Group *TABE_printing=(Fl_Group *)0;
1442 Fl_Group *GROUP_printperms=(Fl_Group *)0;
1443 Fl_Check_Button *CHECKBUTTON_allowprinting=(Fl_Check_Button *)0;
1444 Fl_Value_Input *VALUEINPUT_printdelay=(Fl_Value_Input *)0;
1445 Fl_Group *GROUP_printcfg=(Fl_Group *)0;
1446 Fl_Check_Button *CHECKBUTTON_printcfg=(Fl_Check_Button *)0;
1447 Fl_Box *LABEL_seconds=(Fl_Box *)0;
1448 Fl_Group *GROUP_printcmd=(Fl_Group *)0;
1449 Fl_Check_Button *CHECKBUTTON_usealtprintcmd=(Fl_Check_Button *)0;
1450 Fl_Group *GROUP_printdia=(Fl_Group *)0;
1451 Fl_Check_Button *CHECKBUTTON_usealtprintdia=(Fl_Check_Button *)0;
1452 
1453 Fl_Group *GROUP_startblank=(Fl_Group *)0;
1454 
1455 Fl_Group *TABE_accessibility=(Fl_Group *)0;
1456 Fl_Check_Button *CHECKBUTTON_mouse_accessibility=(Fl_Check_Button *)0;
1457 Fl_Check_Button *CHECKBUTTON_keyboard_mouse=(Fl_Check_Button *)0;
1458 Fl_Check_Button *CHECKBUTTON_onscreen_keyboard=(Fl_Check_Button *)0;
1459 Fl_Choice *CHOICE_onscreen_keyboard_layout=(Fl_Choice *)0;
1460 Fl_Check_Button *CHECKBUTTON_onscreen_keyboard_disable_change=(Fl_Check_Button *)0;
1461 
1462 Fl_Scroll *TABE_joystick=(Fl_Scroll *)0;
1463 Fl_Spinner *SPINNER_joystick_dev=(Fl_Spinner *)0;
1464 Fl_Spinner *SPINNER_joystick_slowness=(Fl_Spinner *)0;
1465 Fl_Spinner *SPINNER_joystick_threshold=(Fl_Spinner *)0;
1466 Fl_Spinner *SPINNER_joystick_maxsteps=(Fl_Spinner *)0;
1467 Fl_Spinner *SPINNER_joystick_hat_slowness=(Fl_Spinner *)0;
1468 Fl_Spinner *SPINNER_joystick_hat_timeout=(Fl_Spinner *)0;
1469 Fl_Spinner *SPINNER_joystick_btn_brush=(Fl_Spinner *)0;
1470 Fl_Spinner *SPINNER_joystick_btn_label=(Fl_Spinner *)0;
1471 Fl_Spinner *SPINNER_joystick_btn_new=(Fl_Spinner *)0;
1472 Fl_Spinner *SPINNER_joystick_btn_print=(Fl_Spinner *)0;
1473 Fl_Spinner *SPINNER_joystick_btn_shapes=(Fl_Spinner *)0;
1474 Fl_Spinner *SPINNER_joystick_btn_undo=(Fl_Spinner *)0;
1475 Fl_Spinner *SPINNER_joystick_btn_eraser=(Fl_Spinner *)0;
1476 Fl_Spinner *SPINNER_joystick_btn_lines=(Fl_Spinner *)0;
1477 Fl_Spinner *SPINNER_joystick_btn_open=(Fl_Spinner *)0;
1478 Fl_Spinner *SPINNER_joystick_btn_redo=(Fl_Spinner *)0;
1479 Fl_Spinner *SPINNER_joystick_btn_stamp=(Fl_Spinner *)0;
1480 Fl_Spinner *SPINNER_joystick_btn_escape=(Fl_Spinner *)0;
1481 Fl_Spinner *SPINNER_joystick_btn_magic=(Fl_Spinner *)0;
1482 Fl_Spinner *SPINNER_joystick_btn_pgsetup=(Fl_Spinner *)0;
1483 Fl_Spinner *SPINNER_joystick_btn_save=(Fl_Spinner *)0;
1484 Fl_Spinner *SPINNER_joystick_btn_text=(Fl_Spinner *)0;
1485 
cb_CHECKBUTTON_joystick_buttons_ignore(Fl_Check_Button *,void *)1486 static void cb_CHECKBUTTON_joystick_buttons_ignore(Fl_Check_Button*, void*)
1487 {
1488   if (CHECKBUTTON_joystick_buttons_ignore -> value () == 1)
1489     {
1490       TEXTINPUT_joystick_buttons_ignore -> activate   ();
1491     }
1492   else
1493     {
1494       TEXTINPUT_joystick_buttons_ignore -> deactivate ();
1495     };
1496   set_change_status(1);
1497 }
cb_CHECKBUTTON_onscreen_keyboard(Fl_Check_Button *,void *)1498 static void cb_CHECKBUTTON_onscreen_keyboard(Fl_Check_Button*, void*)
1499 {
1500   if (CHECKBUTTON_onscreen_keyboard -> value () == 1)
1501     {
1502       CHOICE_onscreen_keyboard_layout->activate();
1503       CHECKBUTTON_onscreen_keyboard_disable_change->activate();
1504     }
1505   else
1506     {
1507       CHOICE_onscreen_keyboard_layout->deactivate();
1508       CHECKBUTTON_onscreen_keyboard_disable_change->deactivate();
1509     };
1510   set_change_status(1);
1511 }
1512 
1513 Fl_Check_Button *CHECKBUTTON_joystick_buttons_ignore=(Fl_Check_Button *)0;
1514 Fl_Input *TEXTINPUT_joystick_buttons_ignore=(Fl_Input *)0;
1515 
1516 
1517 
1518 
1519 
cb_SLIDER_stampsize(Fl_Slider *,void *)1520 static void cb_SLIDER_stampsize(Fl_Slider*, void*)
1521 {
1522   double val;
1523 
1524   val = floor(SLIDER_stampsize->value());
1525   SLIDER_stampsize->value(val);
1526 
1527   if (val == -1)
1528     SLIDER_stampsize->label(gettext("Default (no override)"));
1529   else if (val >= 0 && val <= 4)
1530     SLIDER_stampsize->label(gettext("Override: Small"));
1531   else if (val >= 4 && val < 8)
1532     SLIDER_stampsize->label(gettext("Override: Medium"));
1533   else if (val >= 8)
1534     SLIDER_stampsize->label(gettext("Override: Large"));
1535 
1536   set_change_status(1);
1537 }
1538 
cb_CHECKBUTTON_usefullscreen(Fl_Check_Button *,void *)1539 static void cb_CHECKBUTTON_usefullscreen(Fl_Check_Button*, void*)
1540 {
1541   if (CHECKBUTTON_fullscreen -> value() == 1)
1542   {
1543     CHECKBUTTON_native -> activate();
1544   }
1545   else
1546   {
1547     CHECKBUTTON_native -> deactivate();
1548     CHECKBUTTON_native -> value(0);
1549   }
1550   set_change_status(1);
1551 }
1552 
1553 
cb_CHECKBUTTON_usealtprintcmd(Fl_Check_Button *,void *)1554 static void cb_CHECKBUTTON_usealtprintcmd(Fl_Check_Button*, void*)
1555 {
1556   if (CHECKBUTTON_usealtprintcmd -> value () == 1)
1557     {
1558       TEXTINPUT_printcmd -> activate   ();
1559     }
1560   else
1561     {
1562       TEXTINPUT_printcmd -> deactivate ();
1563     };
1564   set_change_status(1);
1565 }
1566 
1567 Fl_Input *TEXTINPUT_printcmd=(Fl_Input *)0;
1568 
cb_CHECKBUTTON_usealtprintdia(Fl_Check_Button *,void *)1569 static void cb_CHECKBUTTON_usealtprintdia(Fl_Check_Button*, void*)
1570 {
1571   if (CHECKBUTTON_usealtprintdia -> value () == 1)
1572     {
1573       TEXTINPUT_printdia -> activate   ();
1574     }
1575   else
1576     {
1577       TEXTINPUT_printdia -> deactivate ();
1578     };
1579   set_change_status(1);
1580 }
1581 
1582 Fl_Input *TEXTINPUT_printdia=(Fl_Input *)0;
1583 
1584 Fl_Group *TABE_saving=(Fl_Group *)0;
1585 
1586 Fl_Group *GROUP_saveover=(Fl_Group *)0;
1587 Fl_Round_Button *ROUNDBUTTON_askbeforeoverwriting=(Fl_Round_Button *)0;
1588 Fl_Round_Button *ROUNDBUTTON_alwaysoverwriteolderversion=(Fl_Round_Button *)0;
1589 Fl_Round_Button *ROUNDBUTTON_alwayssavenewpicture=(Fl_Round_Button *)0;
1590 
1591 Fl_Round_Button *ROUNDBUTTON_printdialogmod=(Fl_Round_Button *)0;
1592 Fl_Round_Button *ROUNDBUTTON_printdialogalways=(Fl_Round_Button *)0;
1593 Fl_Round_Button *ROUNDBUTTON_printdialognever=(Fl_Round_Button *)0;
1594 
1595 #if USE_PAPERSIZES
1596 Fl_Choice *CHOICE_papersize=(Fl_Choice *)0;
1597 #endif
1598 
1599 Fl_Group *GROUP_savedir=(Fl_Group *)0;
1600 Fl_Check_Button *CHECKBUTTON_usealternatesavedir=(Fl_Check_Button *)0;
1601 
1602 Fl_Group *TABE_data=(Fl_Group *)0;
1603 
1604 Fl_Group *GROUP_lockfile=(Fl_Group *)0;
1605 Fl_Check_Button *CHECKBUTTON_nolockfile=(Fl_Check_Button *)0;
1606 
1607 Fl_Group *GROUP_datadir=(Fl_Group *)0;
1608 Fl_Check_Button *CHECKBUTTON_usealternatedatadir=(Fl_Check_Button *)0;
1609 
1610 Fl_Group *GROUP_colorfile=(Fl_Group *)0;
1611 Fl_Check_Button *CHECKBUTTON_usecolorfile=(Fl_Check_Button *)0;
1612 
1613 Fl_Group *GROUP_nosave=(Fl_Group *)0;
1614 Fl_Check_Button *CHECKBUTTON_disablesavebutton=(Fl_Check_Button *)0;
1615 
1616 Fl_Check_Button *CHECKBUTTON_autosave=(Fl_Check_Button *)0;
1617 
cb_CHECKBUTTON_usealternatesavedir(Fl_Check_Button *,void *)1618 static void cb_CHECKBUTTON_usealternatesavedir(Fl_Check_Button*, void*) {
1619   if (CHECKBUTTON_usealternatesavedir -> value () == 1)
1620   {
1621     FILEINPUT_alternatesavedir    -> activate   ();
1622     BUTTON_browsealternatesavedir -> activate   ();
1623   }
1624   else
1625   {
1626     FILEINPUT_alternatesavedir    -> deactivate ();
1627     BUTTON_browsealternatesavedir -> deactivate ();
1628   }
1629   set_change_status(1);
1630 }
1631 
1632 Fl_File_Input *FILEINPUT_alternatesavedir=(Fl_File_Input *)0;
1633 
cb_BUTTON_browsealternatesavedir(Fl_Button *,void *)1634 static void cb_BUTTON_browsealternatesavedir(Fl_Button*, void*) {
1635     const char *dirname="\n";
1636 #ifdef __APPLE__
1637     dirname = choosePath(0, 1, 0);
1638 #else
1639     dirname = fl_dir_chooser(gettext("Save Directory?"),"");
1640     fl_file_chooser_callback(0);
1641 #endif
1642     if (dirname != NULL && strlen(dirname) > 0) {
1643         FILEINPUT_alternatesavedir->value(dirname);
1644         WINDOW_tpc->show();
1645         set_change_status(1);
1646     }
1647 }
1648 
1649 Fl_Button *BUTTON_browsealternatesavedir=(Fl_Button *)0;
1650 
1651 
cb_CHECKBUTTON_usealternatedatadir(Fl_Check_Button *,void *)1652 static void cb_CHECKBUTTON_usealternatedatadir(Fl_Check_Button*, void*) {
1653   if (CHECKBUTTON_usealternatedatadir -> value () == 1)
1654   {
1655     FILEINPUT_alternatedatadir    -> activate   ();
1656     BUTTON_browsealternatedatadir -> activate   ();
1657   }
1658   else
1659   {
1660     FILEINPUT_alternatedatadir    -> deactivate ();
1661     BUTTON_browsealternatedatadir -> deactivate ();
1662   }
1663   set_change_status(1);
1664 }
1665 
1666 Fl_File_Input *FILEINPUT_alternatedatadir=(Fl_File_Input *)0;
1667 
cb_BUTTON_browsealternatedatadir(Fl_Button *,void *)1668 static void cb_BUTTON_browsealternatedatadir(Fl_Button*, void*) {
1669     const char *dirname="\n";
1670 #ifdef __APPLE__
1671     dirname = choosePath(0, 1, 0);
1672 #else
1673     dirname = fl_dir_chooser(gettext("Data Directory?"),"");
1674     fl_file_chooser_callback(0);
1675 #endif
1676     if (dirname != NULL && strlen(dirname) > 0) {
1677         FILEINPUT_alternatedatadir->value(dirname);
1678         WINDOW_tpc->show();
1679         set_change_status(1);
1680     }
1681 }
1682 
1683 Fl_Button *BUTTON_browsealternatedatadir=(Fl_Button *)0;
1684 
cb_CHECKBUTTON_usecolorfile(Fl_Check_Button *,void *)1685 static void cb_CHECKBUTTON_usecolorfile(Fl_Check_Button*, void*) {
1686   if (CHECKBUTTON_usecolorfile -> value () == 1)
1687   {
1688     FILEINPUT_colorfile    -> activate   ();
1689     BUTTON_browsecolorfile -> activate   ();
1690   }
1691   else
1692   {
1693     FILEINPUT_colorfile    -> deactivate ();
1694     BUTTON_browsecolorfile -> deactivate ();
1695   }
1696   set_change_status(1);
1697 }
1698 
1699 Fl_File_Input *FILEINPUT_colorfile=(Fl_File_Input *)0;
1700 
cb_BUTTON_browsecolorfile(Fl_Button *,void *)1701 static void cb_BUTTON_browsecolorfile(Fl_Button*, void*) {
1702     const char *filename="\n";
1703 #ifdef __APPLE__
1704     filename = choosePath(1, 0, "txt");
1705 #else
1706     filename = fl_file_chooser(gettext("Color Palette File?"),"*.txt","",0);
1707     fl_file_chooser_callback(0);
1708 #endif
1709     if (filename != NULL && strlen(filename) > 0) {
1710         FILEINPUT_colorfile->value(filename);
1711         WINDOW_tpc->show();
1712         set_change_status(1);
1713     }
1714 }
1715 
1716 Fl_Button *BUTTON_browsecolorfile=(Fl_Button *)0;
1717 
1718 Fl_Button *BUTTON_apply=(Fl_Button *)0;
1719 
cb_BUTTON_apply(Fl_Button *,void *)1720 void cb_BUTTON_apply(Fl_Button*, void*) {
1721   apply_settings();
1722 }
1723 
cb_BUTTON_reset(Fl_Button *,void *)1724 static void cb_BUTTON_reset(Fl_Button*, void*) {
1725   load_conf();
1726 }
1727 
1728 Fl_Button *BUTTON_reset=(Fl_Button *)0;
1729 
1730 Fl_Button *BUTTON_defaults=(Fl_Button *)0;
1731 Fl_Button *BUTTON_quit=(Fl_Button *)0;
1732 
cb_BUTTON_defaults(Fl_Button *,void *)1733 static void cb_BUTTON_defaults(Fl_Button*, void*) {
1734   CB_SetActualTabToDefaults ();
1735   WINDOW_tpc -> show ();
1736 }
1737 
cb_status_chng(Fl_Widget *,void *)1738 static void cb_status_chng(Fl_Widget*, void*) {
1739   set_change_status(1);
1740 }
1741 
confirm_exit_cb(Fl_Widget *,void *)1742 void confirm_exit_cb(Fl_Widget *, void *) {
1743   if (status_chng)
1744   {
1745     if (fl_choice(gettext("Quit without applying changes?"),
1746         gettext("&No"), gettext("&Yes"), NULL))
1747         exit(0);
1748   }
1749   else
1750   {
1751     exit(0);
1752   }
1753 }
1754 
1755 Fl_Choice *CHOICE_settings=(Fl_Choice *)0;
1756 Fl_Check_Button *CHECKBUTTON_usealluserssettings=(Fl_Check_Button *)0;
1757 
cb_CHECKBUTTON_usealluserssettings(Fl_Check_Button *,void *)1758 static void cb_CHECKBUTTON_usealluserssettings(Fl_Check_Button*, void*)
1759 {
1760   if (CHECKBUTTON_usealluserssettings->value() == 0)
1761   {
1762     activate_widgets();
1763   }
1764   else
1765   {
1766     deactivate_widgets();
1767   }
1768   set_change_status(1);
1769 }
1770 
cb_CHOICE_settings(Fl_Choice *,void *)1771 static void cb_CHOICE_settings(Fl_Choice*, void*)
1772 {
1773   if (status_chng)
1774   {
1775     const char* user = 0;
1776 
1777     CHOICE_settings->value( !(CHOICE_settings->value()) );
1778 
1779     switch(CHOICE_settings->value())
1780     {
1781       case (CURRENT_USER):
1782         user = gettext("current user");
1783         break;
1784       case (ALL_USERS):
1785         user = gettext("all users");
1786         break;
1787     }
1788 
1789     if (fl_choice(gettext("Apply changes you made to %s?"),
1790                   gettext("No"), gettext("Yes"), NULL, user))
1791     {
1792       apply_settings();
1793     }
1794 
1795     CHOICE_settings->value( !(CHOICE_settings->value()) );
1796   }
1797 
1798   load_conf();
1799 }
1800 
Show_TPC_Window()1801 Fl_Double_Window* Show_TPC_Window() {
1802   int boxx, boxy;
1803   int width = 800; //originally was 690
1804     int whalf=width / 2 - 17; //12 whalf 4 whalf 18 = width
1805   Fl_Double_Window* w;
1806   {
1807     Fl_Double_Window* o;
1808     int y = 0;
1809 #ifdef __APPLE__
1810     o = WINDOW_tpc = new Fl_Double_Window(width, 450, gettext("Tux Paint Config v" VER_VERSION));
1811     y = 20; /* vertical offset to account for lack of menu bar at top of window */
1812 #else
1813     o = WINDOW_tpc = new Fl_Double_Window(width - 6, 450, gettext("Tux Paint Config v" VER_VERSION));
1814 #endif
1815     w = o;
1816     o->callback((Fl_Callback*)confirm_exit_cb);
1817 
1818     {
1819       Fl_Tabs* o = TAB_alltabs = new Fl_Tabs(5, 30-y, width - 17, 370);
1820       o->box(FL_PLASTIC_UP_BOX);
1821       /* TAB: ABOUT */
1822       { Fl_Group* o = TABE_about = new Fl_Group(5, 64 - y, width - 17, 336, gettext("About"));
1823         o->box(FL_PLASTIC_UP_BOX);
1824         o->color((Fl_Color)132);
1825         o->selection_color((Fl_Color)92);
1826         o->align(37);
1827         boxx = 12;
1828         boxy = 70 - y;
1829         { Fl_Group* o = GROUP_abouttpc = new Fl_Group(boxx, boxy, width - 29, 324, gettext("About Tux Paint Config."));
1830           o->box(FL_PLASTIC_UP_BOX);
1831           o->labeltype(FL_EMBOSSED_LABEL);
1832           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
1833           TEXTOUTPUT_abouttext = new Fl_Text_Display(boxx + 25, boxy + 30, width - 72, 280);
1834 	  TEXTOUTPUT_abouttext->buffer(TEXTBUFFER_abouttext);
1835 
1836 	  TEXTBUFFER_abouttext->text(gettext(about_text));
1837 	  TEXTOUTPUT_abouttext->wrap_mode(1, 0);
1838 
1839           o->end();
1840         }
1841         o->end();
1842       }
1843 
1844       /* TAB: VIDEO / SOUND */
1845       { Fl_Group* o = TABE_videoandsound = new Fl_Group(5, 64-y, width - 17, 336, gettext("Video/Sound"));
1846         o->box(FL_PLASTIC_UP_BOX);
1847         o->color((Fl_Color)1);
1848         o->selection_color((Fl_Color)1);
1849         o->align(37);
1850         boxx = 12;
1851         boxy = 70 - y;
1852         { Fl_Group* o = GROUP_video = new Fl_Group(boxx, boxy, whalf, 324, gettext("Video:"));
1853           o->box(FL_PLASTIC_UP_BOX);
1854           o->labeltype(FL_EMBOSSED_LABEL);
1855           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
1856           { Fl_Check_Button* o = CHECKBUTTON_fullscreen = new Fl_Check_Button(boxx + 12, boxy + 22, whalf - 23, 30, gettext("&Fullscreen"));
1857             o->down_box(FL_DOWN_BOX);
1858             o->shortcut(0x80066);
1859 	    o->callback((Fl_Callback*)cb_CHECKBUTTON_usefullscreen);
1860           }
1861           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 50, whalf - 23, 36, gettext("Run Tux Paint in fullscreen mode, rather than in a window."));
1862             o->labelfont(FL_ITALIC);
1863             o->labelsize(10);
1864             o->align(197|FL_ALIGN_INSIDE);
1865           }
1866 
1867           { Fl_Check_Button* o = CHECKBUTTON_native = new Fl_Check_Button(boxx + 42, boxy + 77, whalf -53, 30, gettext("&Native"));
1868             o->down_box(FL_DOWN_BOX);
1869 	    o->callback((Fl_Callback*)cb_status_chng);
1870           }
1871           { Fl_Box* o = new Fl_Box(boxx + 42, boxy + 105, whalf - 23, 36, gettext("Use native screen resolution in fullscreen mode."));
1872             o->labelfont(FL_ITALIC);
1873             o->labelsize(10);
1874             o->align(197|FL_ALIGN_INSIDE);
1875           }
1876 
1877           { Fl_Choice* o = CHOICE_windowwidth = new Fl_Choice(boxx + 12, boxy + 158, (whalf - 23) / 2, 32, gettext("Window size : "));
1878             o->down_box(FL_BORDER_BOX);
1879             o->align(FL_ALIGN_TOP_LEFT);
1880 
1881 	    int i;
1882 	    for (i = 0; i < NUM_WINDOW_WIDTHS; i++)
1883 	    {
1884 	      o->add(window_widths[i], "", NULL, NULL, 0);
1885 	    }
1886 
1887 	    o->callback((Fl_Callback*)cb_status_chng);
1888           }
1889           { Fl_Choice* o = CHOICE_windowheight = new Fl_Choice(boxx + whalf / 2, boxy + 158, (whalf - 23) / 2, 32, "");
1890             o->down_box(FL_BORDER_BOX);
1891             o->align(FL_ALIGN_TOP_LEFT);
1892 
1893 	    int i;
1894 	    for (i = 0; i < NUM_WINDOW_HEIGHTS; i++)
1895 	    {
1896 	      o->add(window_heights[i], "", NULL, NULL, 0);
1897 	    }
1898 
1899 	    o->callback((Fl_Callback*)cb_status_chng);
1900           }
1901           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 192, whalf - 24, 36, gettext("Size of the window, or the resolution in fullscreen."));
1902             o->labelfont(FL_ITALIC);
1903             o->labelsize(10);
1904             o->align(197|FL_ALIGN_INSIDE);
1905           }
1906 
1907           { Fl_Check_Button* o = CHECKBUTTON_rotate = new Fl_Check_Button(boxx + 12, boxy + 206, whalf - 24, 32, gettext("&Rotate Orientation"));
1908             o->down_box(FL_DOWN_BOX);
1909             o->callback((Fl_Callback*)cb_status_chng);
1910           }
1911           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 232, whalf - 24, 36, gettext("Swap width and height, to rotate 90 degrees (useful for portrait-display on a tablet PC)"));
1912             o->labelfont(FL_ITALIC);
1913             o->labelsize(10);
1914             o->align(197|FL_ALIGN_INSIDE);
1915           }
1916 
1917           { Fl_Check_Button* o = CHECKBUTTON_screensaver = new Fl_Check_Button(boxx + 12, boxy + 262, whalf - 24, 32, gettext("Allow S&creensaver"));
1918             o->down_box(FL_DOWN_BOX);
1919             o->callback((Fl_Callback*)cb_status_chng);
1920           }
1921           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 288, whalf - 24, 36, gettext("Don't disable your system's screensaver while Tux Paint is running."));
1922             o->labelfont(FL_ITALIC);
1923             o->labelsize(10);
1924             o->align(197|FL_ALIGN_INSIDE);
1925           }
1926           o->end();
1927         }
1928         boxx = whalf + 16;
1929         boxy = 70 - y;
1930         { Fl_Group* o = GROUP_sound = new Fl_Group(boxx, boxy, whalf, 150, gettext("Sound:"));
1931           o->box(FL_PLASTIC_UP_BOX);
1932           o->labeltype(FL_EMBOSSED_LABEL);
1933           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
1934           { Fl_Check_Button* o = CHECKBUTTON_soundeffects = new Fl_Check_Button(boxx + 12, boxy + 26, whalf - 23, 30, gettext("Enable &Sound Effects"));
1935             o->down_box(FL_DOWN_BOX);
1936             o->shortcut(0x80073);
1937 	    o->callback((Fl_Callback*)cb_status_chng);
1938           }
1939           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 56, whalf - 23, 36, gettext("Enable/disable sound effects."));
1940             o->labelfont(FL_ITALIC);
1941             o->labelsize(10);
1942             o->align(197|FL_ALIGN_INSIDE);
1943           }
1944           o->end();
1945         }
1946 	//    boxx = 344;
1947         boxy = 224 - y;
1948         { Fl_Group* o = GROUP_colorfile = new Fl_Group(boxx, boxy, whalf, 170, gettext("Color Palette File:"));
1949           o->box(FL_PLASTIC_UP_BOX);
1950           o->labeltype(FL_EMBOSSED_LABEL);
1951           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
1952           { Fl_Check_Button* o = CHECKBUTTON_usecolorfile = new Fl_Check_Button(boxx + 12, boxy + 26, whalf - 23, 28, gettext("Use &Alternative Color Palette"));
1953             o->down_box(FL_DOWN_BOX);
1954             o->shortcut(0x80061);
1955             o->callback((Fl_Callback*)cb_CHECKBUTTON_usecolorfile);
1956           }
1957           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 54, whalf - 23, 30, gettext("Don't use default color palette, use colors defined in the following file:"));
1958             o->labelfont(FL_ITALIC);
1959             o->labelsize(10);
1960             o->align(197|FL_ALIGN_INSIDE);
1961           }
1962           { Fl_File_Input* o = FILEINPUT_colorfile = new Fl_File_Input(boxx + 12, boxy + 111, 218, 40, gettext("Color Palette File:"));
1963             o->align(69);
1964             o->deactivate();
1965 	    o->callback((Fl_Callback*)cb_status_chng);
1966           }
1967           { Fl_Button* o = BUTTON_browsecolorfile = new Fl_Button(boxx + 236, boxy + 111, 77, 29, gettext("Browse..."));
1968             o->shortcut(0x80062);
1969             o->deactivate();
1970 	    o->callback((Fl_Callback*)cb_BUTTON_browsecolorfile);
1971           }
1972           o->end();
1973         }
1974         o->end();
1975       }
1976 
1977       /* TAB: MOUSE / KEYBOARD */
1978       { Fl_Group* o = TABE_mouseandkeyboard = new Fl_Group(5, 64-y, width - 17, 336, gettext("Mouse/Keyboard"));
1979         o->box(FL_PLASTIC_UP_BOX);
1980         o->color((Fl_Color)2);
1981         o->selection_color((Fl_Color)2);
1982         o->align(37);
1983         o->hide();
1984         boxx = 12;
1985         boxy = 70 - y;
1986         { Fl_Group* o = GROUP_mouse = new Fl_Group(boxx, boxy, whalf, 170, gettext("Cursor:"));
1987           o->box(FL_PLASTIC_UP_BOX);
1988           o->labeltype(FL_EMBOSSED_LABEL);
1989           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
1990           { Fl_Check_Button* o = CHECKBUTTON_fancycursorshapes = new Fl_Check_Button(boxx + 12, boxy + 30, whalf - 23, 25, gettext("&Fancy Cursor Shapes"));
1991             o->down_box(FL_DOWN_BOX);
1992             o->shortcut(0x80066);
1993 	    o->callback((Fl_Callback*)cb_status_chng);
1994           }
1995           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 55, whalf - 23, 45, gettext("Change the shape of the mouse pointer depending on where the mouse is and what you are doing."));
1996             o->labelfont(FL_ITALIC);
1997             o->labelsize(10);
1998             o->align(197|FL_ALIGN_INSIDE);
1999           }
2000 
2001           { Fl_Check_Button* o = CHECKBUTTON_hidecursor = new Fl_Check_Button(boxx + 12, boxy + 100, whalf - 23, 25, gettext("&Hide Cursor"));
2002             o->down_box(FL_DOWN_BOX);
2003             o->shortcut(0x80066);
2004 	    o->callback((Fl_Callback*)cb_status_chng);
2005           }
2006           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 125, whalf - 23, 45, gettext("Completely hides cursor (useful on touchscreen devices)."));
2007             o->labelfont(FL_ITALIC);
2008             o->labelsize(10);
2009             o->align(197|FL_ALIGN_INSIDE);
2010           }
2011           o->end();
2012         }
2013         boxx = 12;
2014         boxy = 244 + y;
2015         { Fl_Group* o = GROUP_keyboard = new Fl_Group(boxx, boxy, whalf, 150, gettext("Keyboard:"));
2016           o->box(FL_PLASTIC_UP_BOX);
2017           o->labeltype(FL_EMBOSSED_LABEL);
2018           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2019           { Fl_Check_Button* o = CHECKBUTTON_enablekbd = new Fl_Check_Button(boxx + 12, boxy + 26, whalf - 23, 30, gettext("Enable &Keyboard Shortcuts"));
2020             o->down_box(FL_DOWN_BOX);
2021             o->shortcut(0x8006b);
2022 	    o->callback((Fl_Callback*)cb_status_chng);
2023           }
2024           { Fl_Box* o = new Fl_Box(boxx+12, boxy + 51, whalf - 23, 54, gettext("Allows key combinations to be used as shortcuts for certain commands. (e.g., Control+S to Save)"));
2025             o->labelfont(FL_ITALIC);
2026             o->labelsize(10);
2027             o->align(197|FL_ALIGN_INSIDE);
2028           }
2029 
2030           /* FIXME: Add on-screen keyboard option -bjk 2011.04.15 */
2031           /* FIXME: Add keymouse option -bjk 2011.04.15 */
2032           o->end();
2033         }
2034         boxx = whalf + 16;
2035         boxy = 70 - y;
2036         { Fl_Group* o = GROUP_keyboard = new Fl_Group(boxx, boxy, whalf, 324, gettext("Mouse:"));
2037           o->box(FL_PLASTIC_UP_BOX);
2038           o->labeltype(FL_EMBOSSED_LABEL);
2039           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2040           { Fl_Check_Button* o = CHECKBUTTON_grabmousepointer = new Fl_Check_Button(boxx + 12, boxy + 30, whalf - 23, 25, gettext("&Grab Mouse Pointer"));
2041             o->down_box(FL_DOWN_BOX);
2042             o->shortcut(0x80067);
2043 	    o->callback((Fl_Callback*)cb_status_chng);
2044           }
2045           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 55, whalf - 23, 30, gettext("Prevents the mouse pointer from leaving the Tux Paint window."));
2046             o->labelfont(FL_ITALIC);
2047             o->labelsize(10);
2048             o->align(197|FL_ALIGN_INSIDE);
2049           }
2050           { Fl_Check_Button* o = CHECKBUTTON_mousewheelsupport = new Fl_Check_Button(boxx + 12, boxy + 110, whalf - 23, 25, gettext("Mouse &Wheel Support"));
2051             o->down_box(FL_DOWN_BOX);
2052             o->shortcut(0x80077);
2053 	    o->callback((Fl_Callback*)cb_status_chng);
2054           }
2055           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 135, whalf - 23, 30, gettext("Allows a mouse wheel to be used to scroll through items. (e.g., brushes, stamps)"));
2056             o->labelfont(FL_ITALIC);
2057             o->labelsize(10);
2058             o->align(197|FL_ALIGN_INSIDE);
2059           }
2060           { Fl_Check_Button* o = CHECKBUTTON_nobuttondistinction = new Fl_Check_Button(boxx + 12, boxy + 190, whalf - 23, 25, gettext("No &Button Distinction"));
2061             o->down_box(FL_DOWN_BOX);
2062 	    o->callback((Fl_Callback*)cb_status_chng);
2063           }
2064           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 215, whalf - 23, 30, gettext("Allows middle and right mouse buttons to be used for clicking, too."));
2065             o->labelfont(FL_ITALIC);
2066             o->labelsize(10);
2067             o->align(197|FL_ALIGN_INSIDE);
2068           }
2069           /* FIXME: Add 'mouse-accessibilty' (click/release/move/click/release instead of click/drag/release) -bjk 2011.04.15 */
2070           o->end();
2071         }
2072         o->end();
2073       }
2074 
2075       /* TAB: SIMPLIFCIATION */
2076       /* FIXME: From here on, not using 'boxx/boxy' trick, used above -bjk 2011.04.15 */
2077       { Fl_Group* o = TABE_simplification = new Fl_Group(5, 64-y, width - 17, 336, gettext("Simplification"));
2078         o->box(FL_PLASTIC_UP_BOX);
2079         o->color((Fl_Color)3);
2080         o->selection_color((Fl_Color)3);
2081         o->align(37);
2082         o->hide();
2083         boxx = 12;
2084         boxy = 70 - y;
2085         { Fl_Group* o = GROUP_interfacesimpl = new Fl_Group(boxx, boxy, whalf, 250, gettext("Interface Simplification:"));
2086           o->box(FL_PLASTIC_UP_BOX);
2087           o->labeltype(FL_EMBOSSED_LABEL);
2088           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2089           { Fl_Check_Button* o = CHECKBUTTON_disableshaperotation = new Fl_Check_Button(boxx + 12, boxy + 26, whalf - 23, 30, gettext("Disable Shape &Rotation"));
2090             o->down_box(FL_DOWN_BOX);
2091             o->shortcut(0x80072);
2092 	    o->callback((Fl_Callback*)cb_status_chng);
2093           }
2094           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 56, whalf - 23, 54, gettext("Shape tool's rotation step is disabled. Useful for younger children."));
2095             o->labelfont(FL_ITALIC);
2096             o->labelsize(10);
2097             o->align(197|FL_ALIGN_INSIDE);
2098           }
2099           { Fl_Check_Button* o = CHECKBUTTON_simpleshapeoutlines = new Fl_Check_Button(boxx + 12, boxy + 95, whalf - 23, 30, gettext("Simple Stamp &Outlines"));
2100             o->down_box(FL_DOWN_BOX);
2101             o->shortcut(0x8006f);
2102 	    o->callback((Fl_Callback*)cb_status_chng);
2103           }
2104           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 125, whalf - 23, 54, gettext("Draw a rectangle around the cursor when placing stamps, rather than a detailed outline. (For slow computers and thin clients.)"));
2105             o->labelfont(FL_ITALIC);
2106             o->labelsize(10);
2107             o->align(197|FL_ALIGN_INSIDE);
2108           }
2109           { Fl_Check_Button* o = CHECKBUTTON_showuppercasetextonly = new Fl_Check_Button(boxx + 12, boxy + 164, whalf - 23, 30, gettext("Show &Uppercase Text Only"));
2110             o->down_box(FL_DOWN_BOX);
2111             o->shortcut(0x80075);
2112 	    o->callback((Fl_Callback*)cb_status_chng);
2113           }
2114 	  { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 194, whalf - 23, 54, gettext("Cause all text in Tux Paint (button labels, dialogs, etc.) to appear in UPPERCASE rather than Mixed Case."));
2115             o->labelfont(FL_ITALIC);
2116             o->labelsize(10);
2117             o->align(197|FL_ALIGN_INSIDE);
2118           }
2119           o->end();
2120         }
2121         boxx = 12;
2122         boxy = 324 - y;
2123         { Fl_Group* o = GROUP_stampsize = new Fl_Group(boxx, boxy, whalf, 70, gettext("Initial Stamp Size:"));
2124           o->box(FL_PLASTIC_UP_BOX);
2125           o->labeltype(FL_EMBOSSED_LABEL);
2126           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2127           { Fl_Slider* o = SLIDER_stampsize = new Fl_Slider(boxx + 24, boxy + 28, 280, 20, "");
2128 	    o->type(FL_HORIZONTAL);
2129 	    o->range(-1, 10);
2130             o->value(-1);
2131 	    o->slider_size(0.1);
2132             o->label(gettext("Default (no override)")); //FIXME Clean that text before applying the new text  WHERE?
2133             o->labelsize(10);
2134 	    o->callback((Fl_Callback*)cb_SLIDER_stampsize);
2135           }
2136           o->end();
2137         }
2138         boxx = whalf + 16;
2139         boxy = 70 - y;
2140         { Fl_Group* o = GROUP_controlsimpl = new Fl_Group(boxx, boxy, whalf, 324, gettext("Control Simplification:"));
2141           o->box(FL_PLASTIC_UP_BOX);
2142           o->labeltype(FL_EMBOSSED_LABEL);
2143           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2144           { Fl_Check_Button* o = CHECKBUTTON_disablequitbutton = new Fl_Check_Button(boxx + 12, boxy + 28, whalf - 23, 30, gettext("Disable \'&Quit\' Button and [Escape] key"));
2145             o->down_box(FL_DOWN_BOX);
2146             o->shortcut(0x80071);
2147 	    o->callback((Fl_Callback*)cb_status_chng);
2148           }
2149           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 53, whalf - 23, 54, gettext("Clicking the window\'s close (X) button in the title bar, or pressing [Alt]+[F4] or [Shift]+[Ctrl]+[Escape] will still quit Tux Paint."));
2150             o->labelfont(FL_ITALIC);
2151             o->labelsize(10);
2152             o->align(197|FL_ALIGN_INSIDE);
2153           }
2154           { Fl_Check_Button* o = CHECKBUTTON_disablestampstool = new Fl_Check_Button(boxx + 12, boxy + 86, whalf - 23, 30, gettext("Disable \'&Stamps\' Tool"));
2155             o->down_box(FL_DOWN_BOX);
2156             o->shortcut(0x80073);
2157 	    o->callback((Fl_Callback*)cb_status_chng);
2158           }
2159           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 111, whalf - 23, 54, gettext("Do not load stamps at startup, thus disabling the Stamps tool."));
2160             o->labelfont(FL_ITALIC);
2161             o->labelsize(10);
2162             o->align(197|FL_ALIGN_INSIDE);
2163           }
2164           { Fl_Check_Button* o = CHECKBUTTON_disablestampcontrols = new Fl_Check_Button(boxx + 12, boxy + 144, whalf - 23, 30, gettext("Disable Stamp &Controls"));
2165             o->down_box(FL_DOWN_BOX);
2166             o->shortcut(0x80063);
2167 	    o->callback((Fl_Callback*)cb_status_chng);
2168           }
2169           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 169, whalf - 23, 54, gettext("Simplify the \'Stamps\' tool by removing the stamp control buttons (Shrink, Grow, Mirror and Flip)."));
2170             o->labelfont(FL_ITALIC);
2171             o->labelsize(10);
2172             o->align(197|FL_ALIGN_INSIDE);
2173           }
2174           { Fl_Check_Button* o = CHECKBUTTON_disablemagiccontrols = new Fl_Check_Button(boxx + 12, boxy + 202, whalf - 23, 30, gettext("Disable &Magic Controls"));
2175             o->down_box(FL_DOWN_BOX);
2176             o->shortcut(0x80063);
2177 	    o->callback((Fl_Callback*)cb_status_chng);
2178           }
2179           { Fl_Box* o = new Fl_Box(boxx + 12, boxy + 227, whalf - 23, 54, gettext("Simplify the \'Magic\' tools by removing the buttons to switch between paint and fullscreen modes."));
2180             o->labelfont(FL_ITALIC);
2181             o->labelsize(10);
2182             o->align(197|FL_ALIGN_INSIDE);
2183           }
2184           { Fl_Check_Button* o = CHECKBUTTON_disablelabeltool = new Fl_Check_Button(boxx + 12, boxy + 260, whalf - 23, 30, gettext("Disable '&Label' Tool"));
2185             o->down_box(FL_DOWN_BOX);
2186             o->shortcut(0x80063);
2187 	    o->callback((Fl_Callback*)cb_status_chng);
2188           }
2189           { Fl_Box* o = new Fl_Box(boxx + 12, boxy+285, whalf - 23, 54, gettext("Disable the \'Label\' text-entry tool (leaving only the \'Text\' tool)."));
2190             o->labelfont(FL_ITALIC);
2191             o->labelsize(10);
2192             o->align(197|FL_ALIGN_INSIDE);
2193           }
2194           o->end();
2195         }
2196         o->end();
2197       }
2198 
2199       /* TAB: LANGUAGES */
2200       { Fl_Group* o = TABE_locale = new Fl_Group(5, 64-y, width - 17, 336, gettext("Languages"));
2201         o->box(FL_PLASTIC_UP_BOX);
2202         o->color((Fl_Color)4);
2203         o->selection_color((Fl_Color)4);
2204         o->align(37);
2205         o->hide();
2206         { Fl_Group* o = GROUP_locale = new Fl_Group(12, 70-y, whalf, 324, gettext("Language:"));
2207           o->box(FL_PLASTIC_UP_BOX);
2208           o->labeltype(FL_EMBOSSED_LABEL);
2209           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2210           { Fl_Choice* o = CHOICE_language = new Fl_Choice(20, 138-y, whalf - 23, 32, gettext("Language : "));
2211             o->down_box(FL_BORDER_BOX);
2212             o->align(FL_ALIGN_TOP_LEFT);
2213 	    /* FIXME: Perhaps we can load these from Tux Paint itself using
2214 	       a special command-line option? */
2215 	    /* FIXME: The labels should all be wrapped in 'gettext()' calls */
2216 
2217 	    int i;
2218 	    for (i = 0; i < NUM_LANGS; i++)
2219 	    {
2220 	      o->add(langs[i][LANG_NAME], "", NULL, NULL, 0);
2221 	    }
2222 
2223 	    o->callback((Fl_Callback*)cb_status_chng);
2224           }
2225           { Fl_Box* o = new Fl_Box(20, 182-y, whalf - 23, 54, gettext("Run Tux Paint in a particular language (overriding system's settings)."));
2226             o->labelfont(FL_ITALIC);
2227             o->labelsize(10);
2228             o->align(197|FL_ALIGN_INSIDE);
2229           }
2230           { Fl_Check_Button* o = CHECKBUTTON_mirrorstamps = new Fl_Check_Button(20, 228-y, whalf - 23, 32, gettext("&Mirror Stamps"));
2231             o->down_box(FL_DOWN_BOX);
2232             o->shortcut(0x8006d);
2233 	    o->callback((Fl_Callback*)cb_status_chng);
2234           }
2235           { Fl_Box* o = new Fl_Box(20, 258-y, whalf - 23, 54, gettext("Automatically mirror-image all mirror-able stamps. Useful for users who prefer things appearing right-to-left."));
2236             o->labelfont(FL_ITALIC);
2237             o->labelsize(10);
2238             o->align(197|FL_ALIGN_INSIDE);
2239           }
2240           o->end();
2241         }
2242 
2243 	boxx = whalf + 16;
2244         { Fl_Group* o = GROUP_locale = new Fl_Group(boxx, 70-y, whalf, 324, gettext("Fonts:"));
2245           o->box(FL_PLASTIC_UP_BOX);
2246           o->labeltype(FL_EMBOSSED_LABEL);
2247           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2248           { Fl_Check_Button* o = CHECKBUTTON_loadsystemfonts = new Fl_Check_Button(boxx + 12, 138-y, whalf - 23, 28, gettext("Load System &Fonts"));
2249             o->down_box(FL_DOWN_BOX);
2250 	    o->value(0);
2251             o->callback((Fl_Callback*)cb_status_chng);
2252           }
2253           { Fl_Box* o = new Fl_Box(boxx + 12, 168-y, whalf - 23, 54, gettext("Attempt to load more fonts, found elsewhere on your computer. (Note: may cause instability!)"));
2254             o->labelfont(FL_ITALIC);
2255             o->labelsize(10);
2256             o->align(197|FL_ALIGN_INSIDE);
2257           }
2258           { Fl_Check_Button* o = CHECKBUTTON_alllocalefonts = new Fl_Check_Button(boxx + 12, 228-y, whalf - 23, 28, gettext("Load All &Locale Fonts"));
2259             o->down_box(FL_DOWN_BOX);
2260 	    o->value(0);
2261             o->callback((Fl_Callback*)cb_status_chng);
2262           }
2263           { Fl_Box* o = new Fl_Box(boxx + 12, 258-y, whalf - 23, 54, gettext("Load all locale-specific fonts installed in Tux Paint, regardless of the locale Tux Paint is being run under."));
2264             o->labelfont(FL_ITALIC);
2265             o->labelsize(10);
2266             o->align(197|FL_ALIGN_INSIDE);
2267           }
2268 	  o->end();
2269 	}
2270         o->end();
2271       }
2272 
2273       /* TAB: PRINTING */
2274       { Fl_Group* o = TABE_printing = new Fl_Group(5, 64-y, width - 17, 336, gettext("Printing"));
2275         o->box(FL_PLASTIC_UP_BOX);
2276         o->color((Fl_Color)5);
2277         o->selection_color((Fl_Color)5);
2278         o->align(37);
2279         o->hide();
2280         { Fl_Group* o = GROUP_printperms = new Fl_Group(12, 70-y, whalf, 150, gettext("Print Permissions:"));
2281           o->box(FL_PLASTIC_UP_BOX);
2282           o->labeltype(FL_EMBOSSED_LABEL);
2283           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2284           { Fl_Check_Button* o = CHECKBUTTON_allowprinting = new Fl_Check_Button(24, 95-y, whalf - 23, 24, gettext("Allow &Printing"));
2285             o->down_box(FL_DOWN_BOX);
2286             o->shortcut(0x80070);
2287 	    o->callback((Fl_Callback*)cb_status_chng);
2288           }
2289           { Fl_Box* o = new Fl_Box(24, 115-y, whalf - 23, 40, gettext("Let users print from within Tux Paint."));
2290             o->labelfont(FL_ITALIC);
2291             o->labelsize(10);
2292             o->align(197|FL_ALIGN_INSIDE);
2293           }
2294           { Fl_Value_Input* o = VALUEINPUT_printdelay = new Fl_Value_Input(24, 152-y, 50, 29, gettext("Print Delay : "));
2295             o->maximum(3600);
2296             o->step(1);
2297             o->align(FL_ALIGN_TOP_LEFT);
2298 	    o->callback((Fl_Callback*)cb_status_chng);
2299           }
2300           { Fl_Box* o = LABEL_seconds = new Fl_Box(81, 152-y, 244, 29, gettext("seconds"));
2301             o->box(FL_FLAT_BOX);
2302             o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
2303           }
2304           { Fl_Box* o = new Fl_Box(24, 182-y, whalf - 23, 40, gettext("Restrict printing to once every N seconds. (Enter '0' to allow unrestricted printing.)"));
2305             o->labelfont(FL_ITALIC);
2306             o->labelsize(10);
2307             o->align(197|FL_ALIGN_INSIDE);
2308           }
2309           o->end();
2310 	}
2311 
2312         { Fl_Group* o = GROUP_printperms = new Fl_Group(12, 223-y, whalf, 123, gettext("Show Printer Dialog:"));
2313           o->box(FL_PLASTIC_UP_BOX);
2314           o->labeltype(FL_EMBOSSED_LABEL);
2315           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2316 
2317           { Fl_Round_Button* o = ROUNDBUTTON_printdialogmod = new Fl_Round_Button(24, 249-y, whalf - 23, 24, gettext("Only when [Alt] &modifier key is held"));
2318             o->type(102);
2319             o->down_box(FL_ROUND_DOWN_BOX);
2320             o->shortcut(0x80061);
2321 	    o->callback((Fl_Callback*)cb_status_chng);
2322           }
2323 
2324           { Fl_Round_Button* o = ROUNDBUTTON_printdialogalways = new Fl_Round_Button(24, 272-y, whalf - 23, 24, gettext("Always &show printer dialog"));
2325             o->type(102);
2326             o->down_box(FL_ROUND_DOWN_BOX);
2327             o->shortcut(0x80061);
2328 	    o->callback((Fl_Callback*)cb_status_chng);
2329           }
2330 
2331           { Fl_Round_Button* o = ROUNDBUTTON_printdialognever = new Fl_Round_Button(24, 295-y, whalf - 23, 24, gettext("&Never show printer dialog"));
2332             o->type(102);
2333             o->down_box(FL_ROUND_DOWN_BOX);
2334             o->shortcut(0x80061);
2335 	    o->callback((Fl_Callback*)cb_status_chng);
2336           }
2337 
2338           { Fl_Box* o = new Fl_Box(24, 320-y, whalf - 23, 24, gettext("(Even when [Alt] is held.)"));
2339             o->labelfont(FL_ITALIC);
2340             o->labelsize(10);
2341             o->align(197|FL_ALIGN_INSIDE);
2342           }
2343 
2344           o->end();
2345         }
2346 
2347         { Fl_Group* o = GROUP_printcfg = new Fl_Group(12, 349-y, whalf, 45, "");
2348           o->box(FL_PLASTIC_UP_BOX);
2349           o->labeltype(FL_EMBOSSED_LABEL);
2350           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2351 
2352           { Fl_Check_Button* o = CHECKBUTTON_printcfg = new Fl_Check_Button(24, 360-y, whalf - 23, 24, gettext("Save printer configuration"));
2353             o->down_box(FL_DOWN_BOX);
2354 	    o->callback((Fl_Callback*)cb_status_chng);
2355           }
2356 
2357           o->end();
2358         }
2359 
2360 	boxx=whalf + 16;
2361         { Fl_Group* o = GROUP_printcmd = new Fl_Group(boxx, 70-y, whalf, 324, gettext("Print Commands:"));
2362           o->box(FL_PLASTIC_UP_BOX);
2363           o->labeltype(FL_EMBOSSED_LABEL);
2364           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2365           { Fl_Check_Button* o = CHECKBUTTON_usealtprintcmd = new Fl_Check_Button(boxx + 12, 95-y, whalf - 23, 24, gettext("Use &Alternative Print Command"));
2366             o->down_box(FL_DOWN_BOX);
2367             o->shortcut(0x80061);
2368             o->callback((Fl_Callback*)cb_CHECKBUTTON_usealtprintcmd);
2369           }
2370           { Fl_Box* o = new Fl_Box(boxx + 12, 115-y, whalf - 23, 48, gettext("Override Tux Paint's default setting for print command ('lpr') with another. (Advanced! Unix/Linux only!)"));
2371             o->labelfont(FL_ITALIC);
2372             o->labelsize(10);
2373             o->align(197|FL_ALIGN_INSIDE);
2374           }
2375           { Fl_Input* o = TEXTINPUT_printcmd = new Fl_Input(boxx + 12, 145-y, whalf - 23, 29, "");
2376             o->align(FL_ALIGN_TOP_LEFT);
2377             o->deactivate();
2378 	    o->callback((Fl_Callback*)cb_status_chng);
2379           }
2380           { Fl_Box* o = new Fl_Box(boxx + 12, 175-y, whalf - 23, 48, gettext("Enter the command for printing. It must accept a PostScript format on its standard input (STDIN)."));
2381             o->labelfont(FL_ITALIC);
2382             o->labelsize(10);
2383             o->align(197|FL_ALIGN_INSIDE);
2384           }
2385           o->end();
2386 
2387 
2388           o->box(FL_PLASTIC_UP_BOX);
2389           o->labeltype(FL_EMBOSSED_LABEL);
2390           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2391           { Fl_Check_Button* o = CHECKBUTTON_usealtprintdia = new Fl_Check_Button(boxx + 12, 215-y, whalf - 23, 24, gettext("Use &Alternative Print Dialog"));
2392             o->down_box(FL_DOWN_BOX);
2393             o->shortcut(0x80061);
2394             o->callback((Fl_Callback*)cb_CHECKBUTTON_usealtprintdia);
2395           }
2396           { Fl_Box* o = new Fl_Box(boxx + 12, 235-y, whalf - 23, 48, gettext("Override Tux Paint's default setting for print dialog ('kprinter') with another. (Advanced! Unix/Linux only!)"));
2397             o->labelfont(FL_ITALIC);
2398             o->labelsize(10);
2399             o->align(197|FL_ALIGN_INSIDE);
2400           }
2401           { Fl_Input* o = TEXTINPUT_printdia = new Fl_Input(boxx + 12, 265-y, whalf - 23, 29, "");
2402             o->align(FL_ALIGN_TOP_LEFT);
2403             o->deactivate();
2404 	    o->callback((Fl_Callback*)cb_status_chng);
2405           }
2406           { Fl_Box* o = new Fl_Box(boxx + 12, 295-y, whalf - 23, 48, gettext("Enter the print dialog command. It must accept a PostScript format on its standard input (STDIN)."));
2407             o->labelfont(FL_ITALIC);
2408             o->labelsize(10);
2409             o->align(197|FL_ALIGN_INSIDE);
2410           }
2411 
2412 #if USE_PAPERSIZES
2413           { Fl_Choice* o = CHOICE_papersize = new Fl_Choice(boxx + 12, 355-y, whalf - 23, 29, gettext("Paper Size : "));
2414             o->down_box(FL_BORDER_BOX);
2415             o->align(FL_ALIGN_TOP_LEFT);
2416 
2417 	    int i;
2418 	    for (i = 0; i < num_papersizes; i++)
2419 	    {
2420 	      o->add(papersizes[i], "", NULL, NULL, 0);
2421 	    }
2422             o->align(FL_ALIGN_TOP_LEFT);
2423             o->deactivate();
2424 	    o->callback((Fl_Callback*)cb_status_chng);
2425           }
2426 #endif
2427 	  o->end();
2428 	}
2429 
2430         o->end();
2431       }
2432 
2433       /* TAB: SAVING */
2434       { Fl_Group* o = TABE_saving = new Fl_Group(5, 64-y, width - 17, 336, gettext("Saving"));
2435         o->box(FL_PLASTIC_UP_BOX);
2436         o->color((Fl_Color)6);
2437         o->selection_color((Fl_Color)6);
2438         o->align(37);
2439         o->hide();
2440 
2441         { Fl_Group* o = GROUP_saveover = new Fl_Group(12, 70-y, whalf, 235, gettext("Save Over Earlier Work:"));
2442           o->box(FL_PLASTIC_UP_BOX);
2443           o->labeltype(FL_EMBOSSED_LABEL);
2444           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2445           { Fl_Round_Button* o = ROUNDBUTTON_askbeforeoverwriting = new Fl_Round_Button(24, 96-y, whalf - 23, 28, gettext("&Ask Before Overwriting"));
2446             o->type(102);
2447             o->down_box(FL_ROUND_DOWN_BOX);
2448 	    o->callback((Fl_Callback*)cb_status_chng);
2449           }
2450           { Fl_Box* o = new Fl_Box(24, 125-y, whalf - 23, 30, gettext("When re-saving an image, ask whether to overwrite the earlier version, or make a new file."));
2451             o->labelfont(FL_ITALIC);
2452             o->labelsize(10);
2453             o->align(197|FL_ALIGN_INSIDE);
2454           }
2455           { Fl_Round_Button* o = ROUNDBUTTON_alwaysoverwriteolderversion = new Fl_Round_Button(24, 160-y, whalf - 23, 28, gettext("Always &Overwrite Older Version"));
2456             o->type(102);
2457             o->down_box(FL_ROUND_DOWN_BOX);
2458 	    o->callback((Fl_Callback*)cb_status_chng);
2459           }
2460           { Fl_Box* o = new Fl_Box(24, 189-y, whalf - 23, 30, gettext("When re-saving an image, always overwrite the earlier version. (Warning: Potential for lost work!)"));
2461             o->labelfont(FL_ITALIC);
2462             o->labelsize(10);
2463             o->align(197|FL_ALIGN_INSIDE);
2464           }
2465           { Fl_Round_Button* o = ROUNDBUTTON_alwayssavenewpicture = new Fl_Round_Button(24, 224-y, whalf - 23, 28, gettext("Always Save &New Picture"));
2466             o->type(102);
2467             o->down_box(FL_ROUND_DOWN_BOX);
2468 	    o->callback((Fl_Callback*)cb_status_chng);
2469           }
2470           { Fl_Box* o = new Fl_Box(24, 253-y, whalf - 23, 30, gettext("When re-saving an image, always make a new file. (Warning: Potential for lots of files!)"));
2471             o->labelfont(FL_ITALIC);
2472             o->labelsize(10);
2473             o->align(197|FL_ALIGN_INSIDE);
2474           }
2475           o->end();
2476         }
2477 	{ Fl_Group* o = GROUP_startblank = new Fl_Group(12, 309-y, whalf, 85, gettext("Start Blank:"));
2478 	  o->box(FL_PLASTIC_UP_BOX);
2479 	  o->labeltype(FL_EMBOSSED_LABEL);
2480 	  o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2481 	  {
2482 	    Fl_Check_Button* o = CHECKBUTTON_startblank = new Fl_Check_Button(24, 340-y, whalf - 23, 28, gettext("Start with &Blank Canvas"));
2483             o->down_box(FL_DOWN_BOX);
2484 	    o->callback((Fl_Callback*)cb_status_chng);
2485           }
2486 	  /* FIXME: Add some descriptive text */
2487           o->end();
2488 	}
2489 
2490 	boxx = whalf + 16;
2491         { Fl_Group* o = GROUP_savedir = new Fl_Group(boxx, 70-y, whalf, 160, gettext("Save Directory:"));
2492           o->box(FL_PLASTIC_UP_BOX);
2493           o->labeltype(FL_EMBOSSED_LABEL);
2494           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2495           { Fl_Check_Button* o = CHECKBUTTON_usealternatesavedir = new Fl_Check_Button(boxx + 12, 96-y, whalf - 23, 28, gettext("Use &Alternative Save Directory"));
2496             o->down_box(FL_DOWN_BOX);
2497             o->shortcut(0x80061);
2498             o->callback((Fl_Callback*)cb_CHECKBUTTON_usealternatesavedir);
2499           }
2500           { Fl_Box* o = new Fl_Box(boxx + 12, 124-y, whalf - 23, 30, gettext("Do not save pictures in the standard directory, use the following location:"));
2501             o->labelfont(FL_ITALIC);
2502             o->labelsize(10);
2503             o->align(197|FL_ALIGN_INSIDE);
2504           }
2505           { Fl_File_Input* o = FILEINPUT_alternatesavedir = new Fl_File_Input(boxx + 12, 180-y, (whalf - 24) * 218 / 300, 40, gettext("Alternative Save Directory:"));
2506             o->align(69);
2507             o->deactivate();
2508 	    o->callback((Fl_Callback*)cb_status_chng);
2509           }
2510           { Fl_Button* o = BUTTON_browsealternatesavedir = new Fl_Button(boxx + 12 + 6 + (whalf - 24) * 218 / 300, 191-y, (whalf - 24) * 77 / 300, 29, gettext("Browse..."));
2511             o->shortcut(0x80062);
2512             o->deactivate();
2513 	    o->callback((Fl_Callback*)cb_BUTTON_browsealternatesavedir);
2514           }
2515           o->end();
2516         }
2517         { Fl_Group* o = GROUP_nosave = new Fl_Group(boxx, 234-y, whalf, 160, gettext("More Saving Options:"));
2518           o->box(FL_PLASTIC_UP_BOX);
2519           o->labeltype(FL_EMBOSSED_LABEL);
2520           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2521 
2522           { Fl_Check_Button* o = CHECKBUTTON_disablesavebutton = new Fl_Check_Button(boxx + 12, 260-y, whalf - 23, 28, gettext("Disable \'&Save\' Button"));
2523             o->down_box(FL_DOWN_BOX);
2524             o->shortcut(0x80071);
2525 	    o->callback((Fl_Callback*)cb_status_chng);
2526           }
2527           { Fl_Box* o = new Fl_Box(boxx + 12, 285-y, whalf - 23, 54, gettext("Don't allow pictures to be saved. Tux Paint acts as temporary \'scratch paper.\'"));
2528             o->labelfont(FL_ITALIC);
2529             o->labelsize(10);
2530             o->align(197|FL_ALIGN_INSIDE);
2531           }
2532 
2533           { Fl_Check_Button* o = CHECKBUTTON_autosave = new Fl_Check_Button(boxx + 12, 320-y, whalf - 23, 28, gettext("&Auto-save on Quit"));
2534             o->down_box(FL_DOWN_BOX);
2535             o->shortcut(0x80071);
2536 	    o->callback((Fl_Callback*)cb_status_chng);
2537           }
2538           { Fl_Box* o = new Fl_Box(boxx + 12, 345-y, whalf - 23, 54, gettext("Don't ask to save current picture when quitting; just save."));
2539             o->labelfont(FL_ITALIC);
2540             o->labelsize(10);
2541             o->align(197|FL_ALIGN_INSIDE);
2542           }
2543 
2544 	  o->end();
2545 	}
2546         o->end();
2547       }
2548 
2549       /* TAB: DATA */
2550       { Fl_Group* o = TABE_data = new Fl_Group(5, 64-y, width - 17, 336, gettext("Data"));
2551         o->box(FL_PLASTIC_UP_BOX);
2552         o->color((Fl_Color)7);
2553         o->selection_color((Fl_Color)7);
2554         o->align(37);
2555         o->hide();
2556 
2557 	/* FIXME: Looks awful: */
2558         { Fl_Group* o = GROUP_lockfile = new Fl_Group(12, 70-y, whalf, 160, gettext("Lockfile:"));
2559           o->box(FL_PLASTIC_UP_BOX);
2560           o->labeltype(FL_EMBOSSED_LABEL);
2561           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2562           { Fl_Check_Button* o = CHECKBUTTON_nolockfile = new Fl_Check_Button(22, 96-y, whalf - 23, 28, gettext("&Don't use lockfile"));
2563             o->down_box(FL_DOWN_BOX);
2564 	    o->callback((Fl_Callback*)cb_status_chng);
2565           }
2566           { Fl_Box* o = new Fl_Box(24, 124-y, whalf - 23, 50, gettext("Do not check for a lockfile. Allow Tux Paint to be launched multiple times. (May be necessary in a networked environment.)"));
2567             o->labelfont(FL_ITALIC);
2568             o->labelsize(10);
2569             o->align(197|FL_ALIGN_INSIDE);
2570           }
2571           o->end();
2572 	}
2573 
2574 	/* FIXME: Looks awful: */
2575 	boxx = whalf + 16;
2576         { Fl_Group* o = GROUP_datadir = new Fl_Group(boxx, 70-y, whalf, 160, gettext("Data Directory:"));
2577           o->box(FL_PLASTIC_UP_BOX);
2578           o->labeltype(FL_EMBOSSED_LABEL);
2579           o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
2580           { Fl_Check_Button* o = CHECKBUTTON_usealternatedatadir = new Fl_Check_Button(boxx + 12, 96-y, whalf - 23, 28, gettext("Use &Alternative Data Directory"));
2581             o->down_box(FL_DOWN_BOX);
2582             o->shortcut(0x80061);
2583             o->callback((Fl_Callback*)cb_CHECKBUTTON_usealternatedatadir);
2584           }
2585           { Fl_Box* o = new Fl_Box(boxx + 12, 124-y, whalf - 23, 30, gettext("Do not load brushes, stamps, etc. from the standard directory, use the following location:"));
2586             o->labelfont(FL_ITALIC);
2587             o->labelsize(10);
2588             o->align(197|FL_ALIGN_INSIDE);
2589           }
2590           { Fl_File_Input* o = FILEINPUT_alternatedatadir = new Fl_File_Input(boxx + 12, 180-y, (whalf - 24) * 218 / 300, 40, gettext("Alternative Data Directory:"));
2591             o->align(69);
2592             o->deactivate();
2593 	    o->callback((Fl_Callback*)cb_status_chng);
2594           }
2595           { Fl_Button* o = BUTTON_browsealternatedatadir = new Fl_Button(boxx + 12 + 6 + (whalf - 24) * 218 / 300, 191-y, (whalf - 24) * 77 / 300, 29, gettext("Browse..."));
2596             o->shortcut(0x80062);
2597             o->deactivate();
2598 	    o->callback((Fl_Callback*)cb_BUTTON_browsealternatedatadir);
2599           }
2600           o->end();
2601         }
2602         o->end();
2603 
2604 
2605       }
2606 
2607 
2608 
2609 
2610 
2611 
2612       { Fl_Group* o = TABE_accessibility = new Fl_Group(5, 64 - y, width - 17 , 336, gettext("Accessibility"));
2613         o->box(FL_PLASTIC_UP_BOX);
2614         o->color((Fl_Color)93);
2615         o->selection_color((Fl_Color)93);
2616         o->align(Fl_Align(37));
2617 	boxx = 12;
2618         { Fl_Group* o = new Fl_Group(boxx, 70, whalf, 150, gettext("Mouse:"));
2619           o->box(FL_PLASTIC_UP_BOX);
2620           o->labeltype(FL_EMBOSSED_LABEL);
2621           o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2622           { Fl_Check_Button* o = CHECKBUTTON_mouse_accessibility = new Fl_Check_Button(boxx + 12, 100, whalf - 23, 30, gettext("Sticky mouse clicks"));
2623             o->down_box(FL_DOWN_BOX);
2624 	    o->callback((Fl_Callback*)cb_status_chng);
2625           } // Fl_Check_Button* o
2626           { Fl_Box* o = new Fl_Box(boxx + 12, 130, whalf - 23, 90, gettext("Useful for users who have difficulty clicking and dragging. When enabled, click and release to start painting, move to paint, and click and release again to stop. It can also be combined with joystick- and keyboard-based pointer controls."));
2627             o->labelfont(2);
2628             o->labelsize(10);
2629             o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2630           } // Fl_Box* o
2631           o->end();
2632         } // Fl_Group* o
2633         { Fl_Group* o = new Fl_Group(boxx, 224, whalf, 169, gettext("Keyboard:"));
2634           o->box(FL_PLASTIC_UP_BOX);
2635           o->labeltype(FL_EMBOSSED_LABEL);
2636           o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2637           { Fl_Check_Button* o = CHECKBUTTON_keyboard_mouse = new Fl_Check_Button(boxx + 12, 254, whalf - 23, 30, gettext("Keyboard controls the mouse pointer"));
2638             o->down_box(FL_DOWN_BOX);
2639 	    o->callback((Fl_Callback*)cb_status_chng);
2640           } // Fl_Check_Button* o
2641           { Fl_Box* o = new Fl_Box(boxx + 12, 284, whalf - 23, 104, gettext("When enabled, the arrow keys or numbers can be used to move the mouse pointer. Number 5, Space, Insert or F5 can be used to click. (When in \"Text\" or \"Label\" tools, the numbers and space cannot be used.) Also, F4 cycles the pointer between the \"Tools\" box, \"Colors\" box and drawing canvas, F8 and F7 move up/down inside the \"Tools\" box, and F11 and F12 move left/right inside the \"Tools\" and \"Colors\" boxes."));
2642             o->labelfont(2);
2643             o->labelsize(10);
2644             o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2645           } // Fl_Box* o
2646           o->end();
2647         } // Fl_Group* o
2648 	boxx = whalf + 16;
2649         { Fl_Group* o = new Fl_Group(boxx, 70, whalf, 325, gettext("Onscreen keyboard:"));
2650           o->box(FL_PLASTIC_UP_BOX);
2651           o->labeltype(FL_ENGRAVED_LABEL);
2652           o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2653           { Fl_Check_Button* o = CHECKBUTTON_onscreen_keyboard = new Fl_Check_Button(boxx + 12, 96, whalf, 30, gettext("Show a keyboard on the screen"));
2654             o->down_box(FL_DOWN_BOX);
2655 	    o->callback((Fl_Callback*)cb_CHECKBUTTON_onscreen_keyboard);
2656           } // Fl_Check_Button* o
2657           { Fl_Box* o = new Fl_Box(boxx + 12, 126, whalf , 40, gettext("Display a keyboard on the screen when the \"Text\" and \"Label\" tools are enabled, so you can 'type' with the mouse pointer."));
2658             o->labelfont(2);
2659             o->labelsize(10);
2660             o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2661           } // Fl_Box* o
2662           { Fl_Choice* o = CHOICE_onscreen_keyboard_layout = new Fl_Choice(boxx + 12, 180, whalf / 2, 30, gettext("Layout"));
2663             o->down_box(FL_BORDER_BOX);
2664             o->align(Fl_Align(FL_ALIGN_RIGHT));
2665             o->when(FL_WHEN_CHANGED);
2666 	    int i;
2667 	    for (i = 0; i < NUM_LAYOUTS; i++)
2668 	    {
2669 	      o->add(layouts[i][LAYOUT_NAME], "", NULL, NULL, 0);
2670 	      o->deactivate();
2671 	    }
2672 	    o->callback((Fl_Callback*)cb_status_chng);
2673           } // Fl_Choice* o
2674           { Fl_Box* o = new Fl_Box(boxx + 12, 210, whalf, 45, gettext("How are keys organized in the keyboard"));
2675             o->labelfont(2);
2676             o->labelsize(10);
2677             o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2678           } // Fl_Box* o
2679           { Fl_Check_Button* o = CHECKBUTTON_onscreen_keyboard_disable_change = new Fl_Check_Button(boxx + 12, 265, whalf, 30, gettext("Disable layout changes"));
2680             o->down_box(FL_DOWN_BOX);
2681 	    o->deactivate();
2682 	    o->callback((Fl_Callback*)cb_status_chng);
2683           } // Fl_Check_Button* o
2684           { Fl_Box* o = new Fl_Box(boxx + 12, 295, whalf, 55, gettext("Disable the buttons that allow changing the keyboard layout."));
2685             o->labelfont(2);
2686             o->labelsize(10);
2687             o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2688           } // Fl_Box* o
2689           o->end();
2690         } // Fl_Group* o
2691         o->end();
2692         Fl_Group::current()->resizable(o);
2693       } // Fl_Group* o
2694 
2695 
2696 
2697 
2698 
2699 
2700 
2701       /* TAB: JOYSTICK */
2702       { Fl_Scroll* o = TABE_joystick = new Fl_Scroll(5, 64 - y, width - 17, 336, gettext("Joystick"));
2703         o->type(2);
2704 	o->color((Fl_Color)234);
2705 	o->selection_color((Fl_Color)234);
2706         o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
2707 	o->box(FL_PLASTIC_UP_BOX);
2708 	int wj = width - 36; // Account for the scroll bar
2709 	int wjhalf = wj / 2 - 8;
2710 	boxx = 12;
2711         { Fl_Group* o = new Fl_Group(5, 64 - y, wj, 600);
2712 	  //     o->box(FL_PLASTIC_UP_BOX);
2713           { Fl_Group* o = new Fl_Group(boxx, 70, wjhalf, 300, gettext("Main device:"));
2714             o->box(FL_PLASTIC_UP_BOX);
2715             o->labeltype(FL_EMBOSSED_LABEL);
2716             o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2717             { Fl_Spinner* o = SPINNER_joystick_dev = new Fl_Spinner(boxx + 12, 100, wjhalf - 23, 30);
2718               o->minimum(0);
2719               o->value(0);
2720               o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
2721 	      o->callback((Fl_Callback*)cb_status_chng);
2722             } // Fl_Spinner* o
2723             { Fl_Box* o = new Fl_Box(boxx + 12, 130, wjhalf - 23, 30, gettext("Device number to use. (SDL starts numbering at 0)"));
2724               o->labelfont(2);
2725               o->labelsize(10);
2726               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2727             } // Fl_Box* o
2728             { Fl_Spinner* o = SPINNER_joystick_slowness = new Fl_Spinner(boxx + 12, 160, wjhalf - 23, 30); // joystick_slowness
2729               o->minimum(0);
2730               o->maximum(500);
2731               o->value(15);
2732 	      o->callback((Fl_Callback*)cb_status_chng);
2733             } // Fl_Spinner* o
2734             { Fl_Box* o = new Fl_Box(boxx + 12, 190, wjhalf - 23, 30, gettext("Joystick slowness. Increase this value for people with slow reactions. (0-500; default value is 15)"));
2735               o->labelfont(2);
2736               o->labelsize(10);
2737               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2738             } // Fl_Box* o
2739             { Fl_Spinner* o = SPINNER_joystick_threshold = new Fl_Spinner(boxx + 12, 220, wjhalf - 23, 30); // joystick_low_threshold
2740               o->minimum(0);
2741               o->maximum(32766);
2742               o->step(100);
2743               o->value(3200);
2744 	      o->callback((Fl_Callback*)cb_status_chng);
2745             } // Fl_Spinner* o
2746             { Fl_Box* o = new Fl_Box(boxx + 12, 250, wjhalf - 23, 40, gettext("SDL events under threshold will be discarded, useful to discard accidental unwanted movements. (0-32766; default value is 3200)"));
2747               o->labelfont(2);
2748               o->labelsize(10);
2749               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2750             } // Fl_Box* o
2751             { Fl_Spinner* o =SPINNER_joystick_maxsteps = new Fl_Spinner(boxx + 12, 290, wjhalf - 23, 30); // joystick_maxsteps
2752               o->maximum(7);
2753               o->value(7);
2754 	      o->callback((Fl_Callback*)cb_status_chng);
2755             } // Fl_Spinner* o
2756             { Fl_Box* o = new Fl_Box(boxx + 12, 320, wjhalf - 23, 30, gettext("Limit speed when moving. (1-7; default value is 7)"));
2757               o->labelfont(2);
2758               o->labelsize(10);
2759               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2760             } // Fl_Box* o
2761             o->end();
2762           } // Fl_Group* o
2763           { Fl_Group* o = new Fl_Group(boxx, 375, wjhalf, 170, gettext("Hat:"));
2764             o->box(FL_PLASTIC_UP_BOX);
2765             o->labeltype(FL_EMBOSSED_LABEL);
2766             o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2767             { Fl_Spinner* o = SPINNER_joystick_hat_slowness = new Fl_Spinner(boxx + 12, 400, wjhalf - 23, 30);
2768               o->maximum(500);
2769               o->value(15);
2770 	      o->callback((Fl_Callback*)cb_status_chng);
2771             } // Fl_Spinner* o
2772             { Fl_Box* o = new Fl_Box(boxx + 12, 430, wjhalf - 23, 30, gettext("Hat slowness. (0-500; default value is 15)"));
2773               o->labelfont(2);
2774               o->labelsize(10);
2775               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2776             } // Fl_Box* o
2777             { Fl_Spinner* o = SPINNER_joystick_hat_timeout = new Fl_Spinner(boxx + 12, 460, wjhalf - 23, 30);
2778 	      o->minimum(0);
2779               o->maximum(3000);
2780               o->step(100);
2781               o->value(1000);
2782 	      o->callback((Fl_Callback*)cb_status_chng);
2783             } // Fl_Spinner* o
2784             { Fl_Box* o = new Fl_Box(boxx + 12, 490, wjhalf - 23, 30, gettext("Hat timeout, the number of milliseconds to wait before starting to move continuously. (0-3000; default value is 1000)"));
2785               o->labelfont(2);
2786               o->labelsize(10);
2787               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2788             } // Fl_Box* o
2789             o->end();
2790           } // Fl_Group* o
2791 
2792 
2793 
2794 
2795           { Fl_Group* o = new Fl_Group(12, 550, wjhalf, 110, gettext("Buttons to disable:"));
2796             o->box(FL_PLASTIC_UP_BOX);
2797             o->labeltype(FL_ENGRAVED_LABEL);
2798             o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2799 
2800 	    { Fl_Check_Button* o = CHECKBUTTON_joystick_buttons_ignore = new Fl_Check_Button(24, 575, 24, 30);
2801 	      o->down_box(FL_DOWN_BOX);
2802 	      o->shortcut(0x80066);
2803 	      o->callback((Fl_Callback*)cb_CHECKBUTTON_joystick_buttons_ignore);
2804 	    }
2805 
2806             { Fl_Input* o = TEXTINPUT_joystick_buttons_ignore = new Fl_Input(48, 575, wjhalf - 23 - 24, 30);
2807               o->labeltype(FL_NO_LABEL);
2808               o->align(Fl_Align(196));
2809 	      o->callback((Fl_Callback*)cb_status_chng);
2810             } // Fl_Input* o
2811             { Fl_Box* o = new Fl_Box(24, 610, wjhalf - 23, 45, gettext("If for any reason one or more buttons of the joystick are posing problems, you can disable them here using a comma separated list of button numbers. (e.g. 2,3,5)"));
2812               o->labelfont(2);
2813               o->labelsize(10);
2814               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2815             } // Fl_Box* o
2816             o->end();
2817           } // Fl_Group* o
2818 
2819 	  boxx = wjhalf + 16;
2820           { Fl_Group* o = new Fl_Group(boxx, 70, wjhalf, 590, gettext("Button shortcuts:"));
2821             o->box(FL_PLASTIC_UP_BOX);
2822             o->labeltype(FL_EMBOSSED_LABEL);
2823             o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
2824             { Fl_Box* o = new Fl_Box(boxx + 12, 105, 355, 40, gettext("Here you can configure shortcuts for the different buttons of the joystick. (Beware to not assign a shortcut to the button used to draw.)"));
2825               o->labelfont(2);
2826               o->labelsize(10);
2827               o->align(Fl_Align(197|FL_ALIGN_INSIDE));
2828             } // Fl_Box* o
2829             { Fl_Spinner* o = SPINNER_joystick_btn_escape= new Fl_Spinner(boxx + 12, 165, 55, 30, gettext("Button number for the Escape key."));
2830               o->labelfont(2);
2831               o->labelsize(10);
2832 	      o->minimum(0);
2833 	      o->maximum(255);
2834 	      o->callback((Fl_Callback*)cb_status_chng);
2835               o->align(Fl_Align(FL_ALIGN_RIGHT));
2836             } // Fl_Spinner* o
2837             { Fl_Spinner* o =SPINNER_joystick_btn_brush= new Fl_Spinner(boxx + 12, 195, 55, 30, gettext("Button number for the Brush tool."));
2838               o->labelfont(2);
2839               o->labelsize(10);
2840 	      o->minimum(0);
2841 	      o->maximum(255);
2842 	      o->callback((Fl_Callback*)cb_status_chng);
2843               o->align(Fl_Align(FL_ALIGN_RIGHT));
2844             } // Fl_Spinner* o
2845             { Fl_Spinner* o =SPINNER_joystick_btn_stamp= new Fl_Spinner(boxx + 12, 225, 55, 30, gettext("Button number for the Stamps tool."));
2846               o->labelfont(2);
2847               o->labelsize(10);
2848 	      o->minimum(0);
2849 	      o->maximum(255);
2850 	      o->callback((Fl_Callback*)cb_status_chng);
2851               o->align(Fl_Align(FL_ALIGN_RIGHT));
2852             } // Fl_Spinner* o
2853             { Fl_Spinner* o = SPINNER_joystick_btn_lines= new Fl_Spinner(boxx + 12, 255, 55, 30, gettext("Button number for the Lines tool."));
2854               o->labelfont(2);
2855               o->labelsize(10);
2856 	      o->minimum(0);
2857 	      o->maximum(255);
2858 	      o->callback((Fl_Callback*)cb_status_chng);
2859               o->align(Fl_Align(FL_ALIGN_RIGHT));
2860             } // Fl_Spinner* o
2861             { Fl_Spinner* o =SPINNER_joystick_btn_shapes= new Fl_Spinner(boxx + 12, 285, 55, 30, gettext("Button number for the Shapes tool."));
2862               o->labelfont(2);
2863               o->labelsize(10);
2864 	      o->minimum(0);
2865 	      o->maximum(255);
2866 	      o->callback((Fl_Callback*)cb_status_chng);
2867               o->align(Fl_Align(FL_ALIGN_RIGHT));
2868             } // Fl_Spinner* o
2869             { Fl_Spinner* o = SPINNER_joystick_btn_text= new Fl_Spinner(boxx + 12, 315, 55, 30, gettext("Button number for the Text tool."));
2870               o->labelfont(2);
2871               o->labelsize(10);
2872 	      o->minimum(0);
2873 	      o->maximum(255);
2874 	      o->callback((Fl_Callback*)cb_status_chng);
2875               o->align(Fl_Align(FL_ALIGN_RIGHT));
2876             } // Fl_Spinner* o
2877             { Fl_Spinner* o = SPINNER_joystick_btn_label= new Fl_Spinner(boxx + 12, 345, 55, 30, gettext("Button number for the Label tool."));
2878               o->labelfont(2);
2879               o->labelsize(10);
2880 	      o->minimum(0);
2881 	      o->maximum(255);
2882 	      o->callback((Fl_Callback*)cb_status_chng);
2883               o->align(Fl_Align(FL_ALIGN_RIGHT));
2884             } // Fl_Spinner* o
2885             { Fl_Spinner* o = SPINNER_joystick_btn_magic= new Fl_Spinner(boxx + 12, 375, 55, 30, gettext("Button number for the Magic tool."));
2886               o->labelfont(2);
2887               o->labelsize(10);
2888 	      o->minimum(0);
2889 	      o->maximum(255);
2890 	      o->callback((Fl_Callback*)cb_status_chng);
2891               o->align(Fl_Align(FL_ALIGN_RIGHT));
2892             } // Fl_Spinner* o
2893             { Fl_Spinner* o = SPINNER_joystick_btn_undo= new Fl_Spinner(boxx + 12, 405, 55, 30, gettext("Button number for Undo."));
2894               o->labelfont(2);
2895               o->labelsize(10);
2896 	      o->minimum(0);
2897 	      o->maximum(255);
2898 	      o->callback((Fl_Callback*)cb_status_chng);
2899               o->align(Fl_Align(FL_ALIGN_RIGHT));
2900             } // Fl_Spinner* o
2901             { Fl_Spinner* o = SPINNER_joystick_btn_redo= new Fl_Spinner(boxx + 12, 435, 55, 30, gettext("Button number for Redo."));
2902               o->labelfont(2);
2903               o->labelsize(10);
2904 	      o->minimum(0);
2905 	      o->maximum(255);
2906 	      o->callback((Fl_Callback*)cb_status_chng);
2907               o->align(Fl_Align(FL_ALIGN_RIGHT));
2908             } // Fl_Spinner* o
2909             { Fl_Spinner* o = SPINNER_joystick_btn_eraser= new Fl_Spinner(boxx + 12, 465, 55, 30, gettext("Button number for the Eraser tool."));
2910               o->labelfont(2);
2911               o->labelsize(10);
2912 	      o->minimum(0);
2913 	      o->maximum(255);
2914 	      o->callback((Fl_Callback*)cb_status_chng);
2915               o->align(Fl_Align(FL_ALIGN_RIGHT));
2916             } // Fl_Spinner* o
2917             { Fl_Spinner* o = SPINNER_joystick_btn_new= new Fl_Spinner(boxx + 12, 495, 55, 30, gettext("Button number for the New tool."));
2918               o->labelfont(2);
2919               o->labelsize(10);
2920 	      o->minimum(0);
2921 	      o->maximum(255);
2922 	      o->callback((Fl_Callback*)cb_status_chng);
2923               o->align(Fl_Align(FL_ALIGN_RIGHT));
2924             } // Fl_Spinner* o
2925             { Fl_Spinner* o = SPINNER_joystick_btn_open= new Fl_Spinner(boxx + 12, 525, 55, 30, gettext("Button number for the Open tool."));
2926               o->labelfont(2);
2927               o->labelsize(10);
2928 	      o->minimum(0);
2929 	      o->maximum(255);
2930 	      o->callback((Fl_Callback*)cb_status_chng);
2931               o->align(Fl_Align(FL_ALIGN_RIGHT));
2932             } // Fl_Spinner* o
2933             { Fl_Spinner* o = SPINNER_joystick_btn_save= new Fl_Spinner(boxx + 12, 555, 55, 30, gettext("Button number for saving."));
2934               o->labelfont(2);
2935               o->labelsize(10);
2936 	      o->minimum(0);
2937 	      o->maximum(255);
2938 	      o->callback((Fl_Callback*)cb_status_chng);
2939               o->align(Fl_Align(FL_ALIGN_RIGHT));
2940             } // Fl_Spinner* o
2941             { Fl_Spinner* o = SPINNER_joystick_btn_pgsetup= new Fl_Spinner(boxx + 12, 585, 55, 30, gettext("Button number for Page Setup."));
2942               o->labelfont(2);
2943               o->labelsize(10);
2944 	      o->minimum(0);
2945 	      o->maximum(255);
2946 	      o->callback((Fl_Callback*)cb_status_chng);
2947               o->align(Fl_Align(FL_ALIGN_RIGHT));
2948             } // Fl_Spinner* o
2949             { Fl_Spinner* o = SPINNER_joystick_btn_print= new Fl_Spinner(boxx + 12, 615, 55, 30, gettext("Button number for printing."));
2950               o->labelfont(2);
2951               o->labelsize(10);
2952 	      o->minimum(0);
2953 	      o->maximum(255);
2954 	      o->callback((Fl_Callback*)cb_status_chng);
2955               o->align(Fl_Align(FL_ALIGN_RIGHT));
2956             } // Fl_Spinner* o
2957             o->end();
2958           } // Fl_Group* o
2959 
2960           o->end();
2961         } // Fl_Pack* o
2962         o->end();
2963       } // Fl_Scroll* o
2964 
2965 
2966 
2967 
2968 
2969       o->end(); // TAB_alltabs
2970     }
2971     { Fl_Choice* o = CHOICE_settings = new Fl_Choice(6, 423-y, 120 * width / 690, 22, gettext("Settings for : "));
2972       o->down_box(FL_BORDER_BOX);
2973       o->align(FL_ALIGN_TOP_LEFT);
2974 
2975       o->add(gettext("Current User"), "", NULL, NULL, 0);
2976       o->add(gettext("All Users"), "", NULL, NULL, 0);
2977 
2978       o->value(CURRENT_USER);
2979 
2980       o->callback((Fl_Callback*)cb_CHOICE_settings);
2981     }
2982     { Fl_Check_Button* o = CHECKBUTTON_usealluserssettings = new Fl_Check_Button(128 * width / 690, 423-y, 180 * width / 690, 22, gettext("Use \"All Users\" Settings"));
2983       o->down_box(FL_DOWN_BOX);
2984       o->callback((Fl_Callback*)cb_CHECKBUTTON_usealluserssettings);
2985     }
2986     { Fl_Button* o = BUTTON_apply = new Fl_Button(367 * width / 690, 412-y, 75 * width / 690, 32, gettext("Apply"));
2987       o->box(FL_PLASTIC_UP_BOX);
2988       o->down_box(FL_PLASTIC_DOWN_BOX);
2989       o->labelfont(FL_BOLD);
2990       o->align(FL_ALIGN_CLIP);
2991       o->callback((Fl_Callback*)cb_BUTTON_apply);
2992       o->deactivate();
2993     }
2994     { Fl_Button* o = BUTTON_reset = new Fl_Button(445 * width / 690, 412-y, 75 * width / 690, 32, gettext("Reset"));
2995       o->box(FL_PLASTIC_UP_BOX);
2996       o->down_box(FL_PLASTIC_DOWN_BOX);
2997       o->labelfont(FL_BOLD);
2998       o->callback( (Fl_Callback*)cb_BUTTON_reset );
2999       o->align(FL_ALIGN_CLIP);
3000     }
3001     { Fl_Button* o = BUTTON_defaults = new Fl_Button(523 * width / 690, 412-y, 75 * width / 690, 32, gettext("Defaults"));
3002       o->box(FL_PLASTIC_UP_BOX);
3003       o->down_box(FL_PLASTIC_DOWN_BOX);
3004       o->labelfont(FL_BOLD);
3005       o->callback((Fl_Callback*)cb_BUTTON_defaults);
3006       o->align(FL_ALIGN_CLIP);
3007     }
3008     { Fl_Button* o = BUTTON_quit = new Fl_Button(605 * width / 690, 412-y, 75 * width / 690, 32, gettext("Quit"));
3009       o->box(FL_PLASTIC_UP_BOX);
3010       o->down_box(FL_PLASTIC_DOWN_BOX);
3011       o->labelfont(FL_BOLD);
3012       o->callback((Fl_Callback*)confirm_exit_cb);
3013       o->align(FL_ALIGN_CLIP);
3014     }
3015     o->end();
3016   }
3017 
3018 
3019   /* It's kluge to do this here; sorry -bjk 2004-09-04 */
3020 
3021   load_conf();
3022 
3023 
3024   /* Show the window: */
3025 
3026 #ifdef WIN32
3027   /* must set the icon before calling show() */
3028   WINDOW_tpc->icon((char *)LoadIcon(fl_display, MAKEINTRESOURCE(IDI_ICON1)));
3029 #endif
3030 
3031   WINDOW_tpc -> show ();
3032   return w;
3033 }
3034