source: tuxpaint-config/trunk/fuentes/src/tuxpaint-config2.cxx @ 220

Last change on this file since 220 was 220, checked in by mabarracus, 4 years ago

added tuxpaint-config sources from trusty

File size: 110.2 KB
Line 
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__
37extern "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 */
48extern 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
54bool status_chng=0;
55
56char conf_filename[256];
57
58const 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
73const 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
94const 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
220const char * layouts[NUM_LAYOUTS][2] = {
221  {"abcde", "default.layout"},
222  {"qwerty", "qwerty.layout"}
223};
224
225#if USE_PAPERSIZES
226int num_papersizes;
227char * * papersizes;
228#endif
229
230static 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
244static 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
298static 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
423SPINNER_joystick_btn_brush->activate();
424SPINNER_joystick_btn_label->activate();
425SPINNER_joystick_btn_new->activate();
426SPINNER_joystick_btn_print->activate();
427SPINNER_joystick_btn_shapes->activate();
428SPINNER_joystick_btn_undo->activate();
429SPINNER_joystick_btn_eraser->activate();
430SPINNER_joystick_btn_lines->activate();
431SPINNER_joystick_btn_open->activate();
432SPINNER_joystick_btn_redo->activate();
433SPINNER_joystick_btn_stamp->activate();
434SPINNER_joystick_btn_escape->activate();
435SPINNER_joystick_btn_magic->activate();
436SPINNER_joystick_btn_pgsetup->activate();
437SPINNER_joystick_btn_save->activate();
438SPINNER_joystick_btn_text->activate();
439
440}
441
442static 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
547SPINNER_joystick_btn_brush->deactivate();
548SPINNER_joystick_btn_label->deactivate();
549SPINNER_joystick_btn_new->deactivate();
550SPINNER_joystick_btn_print->deactivate();
551SPINNER_joystick_btn_shapes->deactivate();
552SPINNER_joystick_btn_undo->deactivate();
553SPINNER_joystick_btn_eraser->deactivate();
554SPINNER_joystick_btn_lines->deactivate();
555SPINNER_joystick_btn_open->deactivate();
556SPINNER_joystick_btn_redo->deactivate();
557SPINNER_joystick_btn_stamp->deactivate();
558SPINNER_joystick_btn_escape->deactivate();
559SPINNER_joystick_btn_magic->deactivate();
560SPINNER_joystick_btn_pgsetup->deactivate();
561SPINNER_joystick_btn_save->deactivate();
562SPINNER_joystick_btn_text->deactivate();
563
564}
565
566static 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
581void 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
897void 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
1372static 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
1386Fl_Double_Window *WINDOW_tpc=(Fl_Double_Window *)0;
1387Fl_Tabs *TAB_alltabs=(Fl_Tabs *)0;
1388
1389Fl_Group *TABE_about=(Fl_Group *)0;
1390Fl_Group *GROUP_abouttpc=(Fl_Group *)0;
1391Fl_Text_Display *TEXTOUTPUT_abouttext=(Fl_Text_Display *)0;
1392Fl_Text_Buffer *TEXTBUFFER_abouttext = new Fl_Text_Buffer();
1393
1394Fl_Group *TABE_videoandsound=(Fl_Group *)0;
1395
1396Fl_Group *GROUP_video=(Fl_Group *)0;
1397Fl_Check_Button *CHECKBUTTON_fullscreen=(Fl_Check_Button *)0;
1398Fl_Check_Button *CHECKBUTTON_native=(Fl_Check_Button *)0;
1399Fl_Check_Button *CHECKBUTTON_startblank=(Fl_Check_Button *)0;
1400Fl_Group *GROUP_resolution=(Fl_Group *)0;
1401Fl_Choice *CHOICE_windowwidth=(Fl_Choice *) DEF_WINDOW_WIDTH;
1402Fl_Choice *CHOICE_windowheight=(Fl_Choice *) DEF_WINDOW_HEIGHT;
1403Fl_Check_Button *CHECKBUTTON_rotate=(Fl_Check_Button *)0;
1404Fl_Check_Button *CHECKBUTTON_screensaver=(Fl_Check_Button *)0;
1405
1406Fl_Group *GROUP_sound=(Fl_Group *)0;
1407Fl_Check_Button *CHECKBUTTON_soundeffects=(Fl_Check_Button *)0;
1408
1409Fl_Group *TABE_mouseandkeyboard=(Fl_Group *)0;
1410Fl_Group *GROUP_mouse=(Fl_Group *)0;
1411Fl_Check_Button *CHECKBUTTON_fancycursorshapes=(Fl_Check_Button *)0;
1412Fl_Check_Button *CHECKBUTTON_hidecursor=(Fl_Check_Button *)0;
1413Fl_Check_Button *CHECKBUTTON_grabmousepointer=(Fl_Check_Button *)0;
1414Fl_Check_Button *CHECKBUTTON_mousewheelsupport=(Fl_Check_Button *)0;
1415Fl_Check_Button *CHECKBUTTON_nobuttondistinction=(Fl_Check_Button *)0;
1416
1417Fl_Group *GROUP_keyboard=(Fl_Group *)0;
1418Fl_Check_Button *CHECKBUTTON_enablekbd=(Fl_Check_Button *)0;
1419
1420Fl_Group *TABE_simplification=(Fl_Group *)0;
1421Fl_Group *GROUP_interfacesimpl=(Fl_Group *)0;
1422Fl_Check_Button *CHECKBUTTON_disableshaperotation=(Fl_Check_Button *)0;
1423Fl_Check_Button *CHECKBUTTON_simpleshapeoutlines=(Fl_Check_Button *)0;
1424Fl_Check_Button *CHECKBUTTON_showuppercasetextonly=(Fl_Check_Button *)0;
1425Fl_Group *GROUP_controlsimpl=(Fl_Group *)0;
1426Fl_Check_Button *CHECKBUTTON_disablequitbutton=(Fl_Check_Button *)0;
1427Fl_Check_Button *CHECKBUTTON_disablestampstool=(Fl_Check_Button *)0;
1428Fl_Check_Button *CHECKBUTTON_disablestampcontrols=(Fl_Check_Button *)0;
1429Fl_Check_Button *CHECKBUTTON_disablemagiccontrols=(Fl_Check_Button *)0;
1430Fl_Check_Button *CHECKBUTTON_disablelabeltool=(Fl_Check_Button *)0;
1431Fl_Slider *SLIDER_stampsize=(Fl_Slider *)0;
1432Fl_Group *GROUP_stampsize=(Fl_Group *)0;
1433
1434Fl_Group *TABE_locale=(Fl_Group *)0;
1435Fl_Group *GROUP_locale=(Fl_Group *)0;
1436Fl_Choice *CHOICE_language=(Fl_Choice *)0;
1437Fl_Check_Button *CHECKBUTTON_mirrorstamps=(Fl_Check_Button *)0;
1438Fl_Check_Button *CHECKBUTTON_loadsystemfonts=(Fl_Check_Button *)0;
1439Fl_Check_Button *CHECKBUTTON_alllocalefonts=(Fl_Check_Button *)0;
1440
1441Fl_Group *TABE_printing=(Fl_Group *)0;
1442Fl_Group *GROUP_printperms=(Fl_Group *)0;
1443Fl_Check_Button *CHECKBUTTON_allowprinting=(Fl_Check_Button *)0;
1444Fl_Value_Input *VALUEINPUT_printdelay=(Fl_Value_Input *)0;
1445Fl_Group *GROUP_printcfg=(Fl_Group *)0;
1446Fl_Check_Button *CHECKBUTTON_printcfg=(Fl_Check_Button *)0;
1447Fl_Box *LABEL_seconds=(Fl_Box *)0;
1448Fl_Group *GROUP_printcmd=(Fl_Group *)0;
1449Fl_Check_Button *CHECKBUTTON_usealtprintcmd=(Fl_Check_Button *)0;
1450Fl_Group *GROUP_printdia=(Fl_Group *)0;
1451Fl_Check_Button *CHECKBUTTON_usealtprintdia=(Fl_Check_Button *)0;
1452
1453Fl_Group *GROUP_startblank=(Fl_Group *)0;
1454
1455Fl_Group *TABE_accessibility=(Fl_Group *)0;
1456Fl_Check_Button *CHECKBUTTON_mouse_accessibility=(Fl_Check_Button *)0;
1457Fl_Check_Button *CHECKBUTTON_keyboard_mouse=(Fl_Check_Button *)0;
1458Fl_Check_Button *CHECKBUTTON_onscreen_keyboard=(Fl_Check_Button *)0;
1459Fl_Choice *CHOICE_onscreen_keyboard_layout=(Fl_Choice *)0;
1460Fl_Check_Button *CHECKBUTTON_onscreen_keyboard_disable_change=(Fl_Check_Button *)0;
1461
1462Fl_Scroll *TABE_joystick=(Fl_Scroll *)0;
1463Fl_Spinner *SPINNER_joystick_dev=(Fl_Spinner *)0;
1464Fl_Spinner *SPINNER_joystick_slowness=(Fl_Spinner *)0;
1465Fl_Spinner *SPINNER_joystick_threshold=(Fl_Spinner *)0;
1466Fl_Spinner *SPINNER_joystick_maxsteps=(Fl_Spinner *)0;
1467Fl_Spinner *SPINNER_joystick_hat_slowness=(Fl_Spinner *)0;
1468Fl_Spinner *SPINNER_joystick_hat_timeout=(Fl_Spinner *)0;
1469Fl_Spinner *SPINNER_joystick_btn_brush=(Fl_Spinner *)0;
1470Fl_Spinner *SPINNER_joystick_btn_label=(Fl_Spinner *)0;
1471Fl_Spinner *SPINNER_joystick_btn_new=(Fl_Spinner *)0;
1472Fl_Spinner *SPINNER_joystick_btn_print=(Fl_Spinner *)0;
1473Fl_Spinner *SPINNER_joystick_btn_shapes=(Fl_Spinner *)0;
1474Fl_Spinner *SPINNER_joystick_btn_undo=(Fl_Spinner *)0;
1475Fl_Spinner *SPINNER_joystick_btn_eraser=(Fl_Spinner *)0;
1476Fl_Spinner *SPINNER_joystick_btn_lines=(Fl_Spinner *)0;
1477Fl_Spinner *SPINNER_joystick_btn_open=(Fl_Spinner *)0;
1478Fl_Spinner *SPINNER_joystick_btn_redo=(Fl_Spinner *)0;
1479Fl_Spinner *SPINNER_joystick_btn_stamp=(Fl_Spinner *)0;
1480Fl_Spinner *SPINNER_joystick_btn_escape=(Fl_Spinner *)0;
1481Fl_Spinner *SPINNER_joystick_btn_magic=(Fl_Spinner *)0;
1482Fl_Spinner *SPINNER_joystick_btn_pgsetup=(Fl_Spinner *)0;
1483Fl_Spinner *SPINNER_joystick_btn_save=(Fl_Spinner *)0;
1484Fl_Spinner *SPINNER_joystick_btn_text=(Fl_Spinner *)0;
1485
1486static 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}
1498static 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
1513Fl_Check_Button *CHECKBUTTON_joystick_buttons_ignore=(Fl_Check_Button *)0;
1514Fl_Input *TEXTINPUT_joystick_buttons_ignore=(Fl_Input *)0;
1515
1516
1517
1518
1519
1520static 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
1539static 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
1554static 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
1567Fl_Input *TEXTINPUT_printcmd=(Fl_Input *)0;
1568
1569static 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
1582Fl_Input *TEXTINPUT_printdia=(Fl_Input *)0;
1583
1584Fl_Group *TABE_saving=(Fl_Group *)0;
1585
1586Fl_Group *GROUP_saveover=(Fl_Group *)0;
1587Fl_Round_Button *ROUNDBUTTON_askbeforeoverwriting=(Fl_Round_Button *)0;
1588Fl_Round_Button *ROUNDBUTTON_alwaysoverwriteolderversion=(Fl_Round_Button *)0;
1589Fl_Round_Button *ROUNDBUTTON_alwayssavenewpicture=(Fl_Round_Button *)0;
1590
1591Fl_Round_Button *ROUNDBUTTON_printdialogmod=(Fl_Round_Button *)0;
1592Fl_Round_Button *ROUNDBUTTON_printdialogalways=(Fl_Round_Button *)0;
1593Fl_Round_Button *ROUNDBUTTON_printdialognever=(Fl_Round_Button *)0;
1594
1595#if USE_PAPERSIZES
1596Fl_Choice *CHOICE_papersize=(Fl_Choice *)0;
1597#endif
1598
1599Fl_Group *GROUP_savedir=(Fl_Group *)0;
1600Fl_Check_Button *CHECKBUTTON_usealternatesavedir=(Fl_Check_Button *)0;
1601
1602Fl_Group *TABE_data=(Fl_Group *)0;
1603
1604Fl_Group *GROUP_lockfile=(Fl_Group *)0;
1605Fl_Check_Button *CHECKBUTTON_nolockfile=(Fl_Check_Button *)0;
1606
1607Fl_Group *GROUP_datadir=(Fl_Group *)0;
1608Fl_Check_Button *CHECKBUTTON_usealternatedatadir=(Fl_Check_Button *)0;
1609
1610Fl_Group *GROUP_colorfile=(Fl_Group *)0;
1611Fl_Check_Button *CHECKBUTTON_usecolorfile=(Fl_Check_Button *)0;
1612
1613Fl_Group *GROUP_nosave=(Fl_Group *)0;
1614Fl_Check_Button *CHECKBUTTON_disablesavebutton=(Fl_Check_Button *)0;
1615
1616Fl_Check_Button *CHECKBUTTON_autosave=(Fl_Check_Button *)0;
1617
1618static 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
1632Fl_File_Input *FILEINPUT_alternatesavedir=(Fl_File_Input *)0;
1633
1634static 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
1649Fl_Button *BUTTON_browsealternatesavedir=(Fl_Button *)0;
1650
1651
1652static 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
1666Fl_File_Input *FILEINPUT_alternatedatadir=(Fl_File_Input *)0;
1667
1668static 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
1683Fl_Button *BUTTON_browsealternatedatadir=(Fl_Button *)0;
1684
1685static 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
1699Fl_File_Input *FILEINPUT_colorfile=(Fl_File_Input *)0;
1700
1701static 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
1716Fl_Button *BUTTON_browsecolorfile=(Fl_Button *)0;
1717
1718Fl_Button *BUTTON_apply=(Fl_Button *)0;
1719
1720void cb_BUTTON_apply(Fl_Button*, void*) {
1721  apply_settings();
1722}
1723
1724static void cb_BUTTON_reset(Fl_Button*, void*) {
1725  load_conf();
1726}
1727
1728Fl_Button *BUTTON_reset=(Fl_Button *)0;
1729
1730Fl_Button *BUTTON_defaults=(Fl_Button *)0;
1731Fl_Button *BUTTON_quit=(Fl_Button *)0;
1732
1733static void cb_BUTTON_defaults(Fl_Button*, void*) {
1734  CB_SetActualTabToDefaults ();
1735  WINDOW_tpc -> show ();
1736}
1737
1738static void cb_status_chng(Fl_Widget*, void*) {
1739  set_change_status(1);
1740}
1741
1742void 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
1755Fl_Choice *CHOICE_settings=(Fl_Choice *)0;
1756Fl_Check_Button *CHECKBUTTON_usealluserssettings=(Fl_Check_Button *)0;
1757
1758static 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
1771static 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
1801Fl_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}
Note: See TracBrowser for help on using the repository browser.