1# data file for the Fltk User Interface Designer (fluid)
2version 1.0305
3i18n_type 1
4i18n_include "gettext.h"
5i18n_function _
6header_name {.h}
7code_name {.cxx}
8decl {\#include <config.h>} {private local
9}
10
11decl {\#include <FL/Fl_Tooltip.H>} {private local
12}
13
14decl {\#include <FL/Fl_Box.H>} {private local
15}
16
17decl {\#include <FL/filename.H>} {private local
18}
19
20decl {\#include <FL/Fl_File_Chooser.H>} {private local
21}
22
23decl {\#include <FL/fl_show_colormap.H>} {private local
24}
25
26decl {\#include "main.h"} {private local
27}
28
29decl {\#include "fl_digi.h"} {private local
30}
31
32decl {\#include "data_io.h"} {private local
33}
34
35decl {\#include "Viewer.h"} {private global
36}
37
38decl {\#include "font_browser.h"} {public global
39}
40
41decl {\#include "soundconf.h"} {private local
42}
43
44decl {\#include "globals.h"} {public local
45}
46
47decl {\#include "modem.h"} {public local
48}
49
50decl {\#include "configuration.h"} {public local
51}
52
53decl {\#include "combo.h"} {public local
54}
55
56decl {\#include "waterfall.h"} {private local
57}
58
59decl {\#include "rigxml.h"} {private local
60}
61
62decl {\#include "lookupcall.h"} {private local
63}
64
65decl {\#include "icons.h"} {private local
66}
67
68decl {\#include "Viewer.h"} {private local
69}
70
71decl {\#include "pskrep.h"} {private global
72}
73
74decl {\#include "flinput2.h"} {public local
75}
76
77decl {\#include "flslider2.h"} {public local
78}
79
80decl {\#include "flmisc.h"} {public local
81}
82
83decl {\#include "logsupport.h"} {private local
84}
85
86decl {\#include "notify.h"} {private local
87}
88
89decl {\#include "debug.h"} {private local
90}
91
92decl {\#include "status.h"} {private local
93}
94
95decl {\#include "rx_extract.h"} {private local
96}
97
98decl {\#include "kmlserver.h"} {private local
99}
100
101decl {\#include "macroedit.h"} {private local
102}
103
104decl {\#include "fileselect.h"} {private local
105}
106
107decl {\#include "psm/psm.h"} {private local
108}
109
110decl {\#include "dx_cluster.h"} {private local
111}
112
113decl {extern void WefaxDestDirSet(Fl_File_Chooser *w, void *userdata);} {private local
114}
115
116decl {\#include "dx_dialog.h"} {private local
117}
118
119decl {\#if USE_HAMLIB
120  \#include "hamlib.h"
121\#endif} {private local
122}
123
124decl {\#include "fsq.h"} {private local
125}
126
127decl {Fl_Double_Window *dlgConfig;} {public local
128}
129
130decl {Mode_Browser* mode_browser;} {public local
131}
132
133decl {\#include <vector>} {private local
134}
135
136decl {struct CONFIG_PAGE {Fl_Group *grp; std::string label; CONFIG_PAGE(Fl_Group *_grp = 0, std::string _lbl = "") { grp = _grp; label = _lbl; } ~CONFIG_PAGE() { if (grp) delete grp; } };} {public global
137}
138
139decl {std::vector<CONFIG_PAGE *> config_pages;} {public local
140}
141
142decl {Fl_Group *current = 0;} {private local
143}
144
145Function {SelectItem_CB(Fl_Widget *w)} {open return_type void
146} {
147  code {Fl_Tree *tree = (Fl_Tree*)w;
148Fl_Tree_Item *item = tree->callback_item();
149tree->select_only(item, 0);
150
151if (tree->callback_reason() == FL_TREE_REASON_SELECTED) {
152  std::string pname;
153  char pn[200];
154  tree->item_pathname(pn, 200, item);
155  pname = pn;
156  size_t pos = std::string::npos;
157  for (size_t i = 0; i < config_pages.size(); i++) {
158    if ((pos = pname.find(config_pages[i]->label)) != std::string::npos) {
159      if (pname.substr(pos) == config_pages[i]->label) {
160        if (current) current->hide();
161        current = config_pages[i]->grp;
162        current->show();
163        return;
164      }
165    }
166  }
167}} {}
168}
169
170Function {choose_color(Fl_Color & c)} {open private return_type void
171} {
172  code {unsigned char r, g, b;
173Fl::get_color(c, r, g, b);
174if (fl_color_chooser("Font color", r, g, b))
175    c = fl_rgb_color(r, g, b);} {}
176}
177
178Function {cbRxFontBrowser(Fl_Widget*, void*)} {open private return_type void
179} {
180  code {Fl_Font font = font_browser->fontNumber();
181    int size = font_browser->fontSize();
182    Fl_Color color = font_browser->fontColor();
183
184    RxText->textfont(font);
185    RxText->textsize(size);
186    RxText->textcolor(color);
187    RxText->redraw();
188
189    progdefaults.RxFontnbr = font;
190    progdefaults.RxFontsize = size;
191    progdefaults.RxFontcolor = color;
192
193    ReceiveText->setFont(font);
194    ReceiveText->setFontSize(size);
195    ReceiveText->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
196
197    fsq_rx_text->setFont(font);
198    fsq_rx_text->setFontSize(size);
199    fsq_rx_text->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
200
201    ifkp_rx_text->setFont(font);
202    ifkp_rx_text->setFontSize(size);
203    ifkp_rx_text->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
204
205    font_browser->hide();
206
207    progdefaults.changed = true;} {}
208}
209
210Function {cbTxFontBrowser(Fl_Widget*, void*)} {private return_type void
211} {
212  code {Fl_Font font = font_browser->fontNumber();
213    int size = font_browser->fontSize();
214    Fl_Color color = font_browser->fontColor();
215
216    TxText->textfont(font);
217    TxText->textsize(size);
218    TxText->textcolor(color);
219    TxText->redraw();
220
221    progdefaults.TxFontnbr = font;
222    progdefaults.TxFontsize = size;
223    progdefaults.TxFontcolor = color;
224
225    TransmitText->setFont(font);
226    TransmitText->setFontSize(size);
227    TransmitText->setFontColor(progdefaults.TxFontcolor, FTextBase::RECV);
228
229    fsq_tx_text->setFont(font);
230    fsq_tx_text->setFontSize(size);
231    fsq_tx_text->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
232
233    ifkp_rx_text->setFont(font);
234    ifkp_rx_text->setFontSize(size);
235    ifkp_rx_text->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
236
237     font_browser->hide();
238
239    progdefaults.changed = true;} {}
240}
241
242Function {cbDXfont_browser(Fl_Widget*, void*)} {open private return_type void
243} {
244  code {Fl_Font font = font_browser->fontNumber();
245int size = font_browser->fontSize();
246Fl_Color color = font_browser->fontColor();
247
248progdefaults.DXfontcolor = color;
249progdefaults.DXfontnbr = font;
250progdefaults.DXfontsize = size;
251
252brws_tcpip_stream->setFont(font);
253brws_tcpip_stream->setFontSize(size);
254brws_tcpip_stream->setFontColor(color, FTextBase::RECV);
255brws_tcpip_stream->redraw();
256
257ed_telnet_cmds->setFont(font);
258ed_telnet_cmds->setFontSize(size);
259ed_telnet_cmds->setFontColor(color);
260ed_telnet_cmds->redraw();
261
262StreamText->textcolor(color);
263StreamText->redraw();
264
265brws_dxc_help->color(fl_rgb_color(
266    progdefaults.DX_Color.R,
267    progdefaults.DX_Color.G,
268    progdefaults.DX_Color.B));
269brws_dxc_help->setFont(font);
270brws_dxc_help->setFontSize(size);
271brws_dxc_help->setFontColor(color, FTextBase::RECV);
272brws_dxc_help->redraw();
273
274font_browser->hide();
275
276dxcluster_hosts_load();
277
278progdefaults.changed = true;} {}
279}
280
281Function {cbDXC_FontBrowser(Fl_Widget*, void*)} {open private return_type void
282} {
283  code {Fl_Font font = font_browser->fontNumber();
284    int size = font_browser->fontSize();
285    Fl_Color color = font_browser->fontColor();
286
287    progdefaults.DXC_textfont = font;
288    progdefaults.DXC_textsize = size;
289    progdefaults.DXC_textcolor = color;
290
291    DXC_display->textsize(size);
292    DXC_display->textcolor(color);
293    DXC_display->textfont(font);
294    DXC_display->redraw();
295
296    font_browser->hide();
297
298    dxc_lines_redraw();
299
300    progdefaults.changed = true;} {}
301}
302
303Function {cbMacroEditFontBrowser(Fl_Widget*, void*)} {private return_type void
304} {
305  code {Fl_Font font = font_browser->fontNumber();
306    int size = font_browser->fontSize();
307
308    MacroText->textfont(font);
309    MacroText->textsize(size);
310    MacroText->redraw();
311
312    progdefaults.MacroEditFontnbr = font;
313    progdefaults.MacroEditFontsize = size;
314
315    update_macroedit_font();
316
317    MacroText->textfont(font);
318    MacroText->textsize(size);
319
320    font_browser->hide();
321
322    progdefaults.changed = true;} {}
323}
324
325Function {cbWaterfallFontBrowser(Fl_Widget*, void*)} {return_type void
326} {
327  code {Fl_Font fnt = font_browser->fontNumber();
328    int size = font_browser->fontSize();
329
330    progdefaults.WaterfallFontnbr = fnt;
331    progdefaults.WaterfallFontsize = size;
332    progdefaults.changed = true;
333
334    font_browser->hide();} {}
335}
336
337Function {cbMacroBtnFontBrowser(Fl_Widget*, void*)} {private return_type void
338} {
339  code {progdefaults.MacroBtnFontnbr = font_browser->fontNumber();
340    progdefaults.MacroBtnFontsize = font_browser->fontSize();;
341    progdefaults.MacroBtnFontcolor = font_browser->fontColor();
342
343    font_browser->hide();
344
345    btnGroup1->labelcolor(progdefaults.MacroBtnFontcolor);
346    btnGroup1->labelfont(progdefaults.MacroBtnFontnbr);
347    btnGroup1->labelsize(progdefaults.MacroBtnFontsize);
348    btnGroup1->redraw_label();
349
350    btnGroup2->labelcolor(progdefaults.MacroBtnFontcolor);
351    btnGroup2->labelfont(progdefaults.MacroBtnFontnbr);
352    btnGroup2->labelsize(progdefaults.MacroBtnFontsize);
353    btnGroup2->redraw_label();
354
355    btnGroup3->labelcolor(progdefaults.MacroBtnFontcolor);
356    btnGroup3->labelfont(progdefaults.MacroBtnFontnbr);
357    btnGroup3->labelsize(progdefaults.MacroBtnFontsize);
358    btnGroup3->redraw_label();
359
360    progdefaults.changed = true;
361    colorize_macros();} {}
362}
363
364Function {cbViewerFontBrowser(Fl_Widget*, void*)} {return_type void
365} {
366  code {progdefaults.ViewerFontnbr = font_browser->fontNumber();
367    progdefaults.ViewerFontsize = font_browser->fontSize();
368    initViewer();
369    progdefaults.changed = true;
370
371    font_browser->hide();} {}
372}
373
374Function {cbFreqControlFontBrowser(Fl_Widget*, void*)} {return_type void
375} {
376  code {Fl_Font fnt = font_browser->fontNumber();
377    progdefaults.FreqControlFontnbr = fnt;
378    progdefaults.changed = true;
379
380    FDdisplay->labelfont(progdefaults.FreqControlFontnbr);
381    FDdisplay->redraw();
382    qsoFreqDisp1->font(progdefaults.FreqControlFontnbr);
383    qsoFreqDisp2->font(progdefaults.FreqControlFontnbr);
384    qsoFreqDisp3->font(progdefaults.FreqControlFontnbr);
385    qsoFreqDisp1->redraw();
386    qsoFreqDisp2->redraw();
387    qsoFreqDisp3->redraw();
388
389    font_browser->hide();} {}
390}
391
392Function {cbLOGGINGFontBrowser(Fl_Widget*, void*)} {private return_type void
393} {
394  code {Fl_Font font = font_browser->fontNumber();
395    int size = font_browser->fontSize();
396    Fl_Color color = font_browser->fontColor();
397
398    progdefaults.LOGGINGtextfont = font;
399    progdefaults.LOGGINGtextsize = size;
400    progdefaults.LOGGINGtextcolor = color;
401
402    LOGGINGdisplay->textsize(size);
403    LOGGINGdisplay->textcolor(color);
404    LOGGINGdisplay->textfont(font);
405    LOGGINGdisplay->redraw();
406
407    LOGGING_colors_font();
408
409    font_browser->hide();
410
411    progdefaults.changed = true;} {}
412}
413
414Function {cbLOGBOOKFontBrowser(Fl_Widget*, void*)} {private return_type void
415} {
416  code {Fl_Font font = font_browser->fontNumber();
417    int size = font_browser->fontSize();
418    Fl_Color color = font_browser->fontColor();
419
420    progdefaults.LOGBOOKtextfont = font;
421    progdefaults.LOGBOOKtextsize = size;
422    progdefaults.LOGBOOKtextcolor = color;
423
424    LOGBOOKdisplay->textsize(size);
425    LOGBOOKdisplay->textcolor(color);
426    LOGBOOKdisplay->textfont(font);
427    LOGBOOKdisplay->redraw();
428
429    LOGBOOK_colors_font();
430
431    font_browser->hide();
432
433    progdefaults.changed = true;} {}
434}
435
436Function {set_qrzxml_buttons(Fl_Button* b)} {return_type void
437} {
438  code {Fl_Button* qrzbxml[] = { btnQRZXMLnotavailable, btnQRZcdrom, btnQRZsub,
439                         btnHamcall,
440                         btnCALLOOK, btnHamQTH};
441
442for (size_t i = 0; i < sizeof(qrzbxml)/sizeof(*qrzbxml); i++)
443	qrzbxml[i]->value(b == qrzbxml[i]);} {}
444}
445
446Function {set_qrzweb_buttons(Fl_Button* b)} {open return_type void
447} {
448  code {Fl_Button* qrzbweb[] = { btnQRZWEBnotavailable, btnQRZonline,
449                              btnHAMCALLonline,
450                              btnHamQTHonline, btnCallookOnline };
451
452for (size_t i = 0; i < sizeof(qrzbweb)/sizeof(*qrzbweb); i++)
453	qrzbweb[i]->value(b == qrzbweb[i]);} {}
454}
455
456decl {class Fl_File_Chooser ;} {public global
457}
458
459Function {createConfig()} {return_type void
460} {
461  code {if (!dlgConfig) {
462    dlgConfig = ConfigureDialog();
463    dlgConfig->xclass(PACKAGE_NAME);
464  }} {}
465}
466
467Function {ConfigureDialog()} {open
468} {
469  code {font_browser = new Font_Browser;} {}
470  code {static const char szShifts[]  = "23|85|160|170|182|200|240|350|425|850|Custom";
471static const char szBauds[]  = "45|45.45|50|56|75|100|110|150|200|300";
472static const char szSelBits[] = "5 (baudot)|7 (ascii)|8 (ascii)";
473static const char szParity[]  = "none|even|odd|zero|one";
474static const char szStopBits[] = "1|1.5|2";
475static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
476static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
477static const char szContestiaTones[] = "2|4|8|16|32|64|128|256";
478static const char szContestiaBandwidth[] = "125|250|500|1000|2000";
479static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";
480static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";} {}
481  Fl_Window {} {
482    label {Fldigi configuration} open
483    xywh {496 30 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
484  } {
485    Fl_Group {} {
486      xywh {0 0 201 385} resizable
487    } {
488      Fl_Tree tab_tree {
489        callback SelectItem_CB
490        xywh {0 0 200 350} resizable
491        code0 {o->root_label(_("Configure"));}
492        code1 {o->selectmode(FL_TREE_SELECT_SINGLE);}
493        code2 {o->connectorstyle(FL_TREE_CONNECTOR_DOTTED); // default is NONE on Mac}
494        code3 {o->connectorwidth(15); // default is 17}
495      }
496      Fl_Group {} {open
497        xywh {0 350 201 35}
498      } {
499        Fl_Group {} {open
500          xywh {0 350 100 30} resizable
501        } {}
502        Fl_Button btn_collapse_tab_tree {
503          label {Collapse Tree}
504          callback {tab_tree->close(_("Colors-Fonts"));
505tab_tree->close(_("Contests"));
506tab_tree->close(_("IDs"));
507tab_tree->close(_("Logging"));
508tab_tree->close(_("Modem"));
509tab_tree->close(_("Misc"));
510tab_tree->close(_("Rig Control"));
511tab_tree->close(_("Soundcard"));
512tab_tree->close(_("UI"));
513tab_tree->close(_("Waterfall"));
514tab_tree->close(_("Web"));}
515          xywh {95 353 105 22}
516        }
517      }
518    }
519    Fl_Group {} {
520      label {Colors-Fonts/Buttons}
521      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
522      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/Buttons"));}
523      code1 {config_pages.push_back(p);}
524      code2 {tab_tree->add(_("Colors-Fonts/Buttons"));}
525    } {
526      Fl_Button btnSpotColor {
527        label Spot
528        callback {progdefaults.SpotColor = fl_show_colormap(progdefaults.SpotColor);
529spotcolor->color(progdefaults.SpotColor);
530spotcolor->redraw();
531spot_selection_color();
532progdefaults.changed = true;}
533        xywh {334 75 85 21}
534      }
535      Fl_Button btnRevColor {
536        label Rev
537        callback {progdefaults.RevColor = fl_show_colormap(progdefaults.RevColor);
538revcolor->color(progdefaults.RevColor);
539revcolor->redraw();
540rev_selection_color();
541progdefaults.changed = true;}
542        xywh {334 111 85 21}
543      }
544      Fl_Button btnTuneColor {
545        label Tune
546        callback {progdefaults.TuneColor = fl_show_colormap(progdefaults.TuneColor);
547tunecolor->color(progdefaults.TuneColor);
548tunecolor->redraw();
549tune_selection_color();
550progdefaults.changed = true;}
551        xywh {334 148 85 21}
552      }
553      Fl_Button btnRxIDColor {
554        label {RxID nar}
555        callback {progdefaults.RxIDColor = fl_show_colormap(progdefaults.RxIDColor);
556rxidcolor->color(progdefaults.RxIDColor);
557rxidcolor->redraw();
558rxid_selection_color();
559progdefaults.changed = true;
560
561Fl_Color clr = progdefaults.rsidWideSearch ? progdefaults.RxIDwideColor : progdefaults.RxIDColor;
562btnRSID->selection_color(clr);
563btnRSID->redraw();}
564        xywh {334 183 85 21}
565      }
566      Fl_Button btnLkColor {
567        label Lk
568        callback {progdefaults.LkColor = fl_show_colormap(progdefaults.LkColor);
569lockcolor->color(progdefaults.LkColor);
570lockcolor->redraw();
571xmtlock_selection_color();
572progdefaults.changed = true;}
573        xywh {469 75 85 21}
574      }
575      Fl_Button btnSql1Color {
576        label {SQL-1}
577        callback {progdefaults.Sql1Color = fl_show_colormap(progdefaults.Sql1Color);
578sql1color->color(progdefaults.Sql1Color);
579sql1color->redraw();
580sql_selection_color();
581progdefaults.changed = true;}
582        xywh {470 111 85 21}
583      }
584      Fl_Button btnXmtColor {
585        label {T/R}
586        callback {progdefaults.XmtColor = fl_show_colormap(progdefaults.XmtColor);
587xmtcolor->color(progdefaults.XmtColor);
588xmtcolor->redraw();
589xmtrcv_selection_color();
590progdefaults.changed = true;}
591        xywh {469 148 85 20}
592      }
593      Fl_Button btnRxIDwideColor {
594        label {RxID wide}
595        callback {progdefaults.RxIDwideColor = fl_show_colormap(progdefaults.RxIDwideColor);
596rxidcolorwide->color(progdefaults.RxIDwideColor);
597rxidcolorwide->redraw();
598rxid_selection_color();
599progdefaults.changed = true;
600
601Fl_Color clr = progdefaults.rsidWideSearch ? progdefaults.RxIDwideColor : progdefaults.RxIDColor;
602btnRSID->selection_color(clr);
603btnRSID->redraw();}
604        xywh {469 183 85 21}
605      }
606      Fl_Button btnAfcColor {
607        label AFC
608        callback {progdefaults.AfcColor = fl_show_colormap(progdefaults.AfcColor);
609afccolor->color(progdefaults.AfcColor);
610afccolor->redraw();
611afc_selection_color();
612progdefaults.changed = true;}
613        xywh {605 75 85 21}
614      }
615      Fl_Button btnSql2Color {
616        label {SQL-2}
617        callback {progdefaults.Sql2Color = fl_show_colormap(progdefaults.Sql2Color);
618sql2color->color(progdefaults.Sql2Color);
619sql2color->redraw();
620sql_selection_color();
621progdefaults.changed = true;}
622        xywh {605 111 85 20}
623      }
624      Fl_Button btnTxIDColor {
625        label TxID
626        callback {progdefaults.TxIDColor = fl_show_colormap(progdefaults.TxIDColor);
627txidcolor->color(progdefaults.TxIDColor);
628txidcolor->redraw();
629txid_selection_color();
630progdefaults.changed = true;
631
632btnTxRSID->selection_color(progdefaults.TxIDColor);
633btnTxRSID->redraw();}
634        xywh {604 183 85 20}
635      }
636      Fl_Box spotcolor {
637        xywh {310 76 18 19} box THIN_DOWN_BOX color 3
638        code0 {o->color(progdefaults.SpotColor);}
639      }
640      Fl_Box revcolor {
641        xywh {310 112 18 19} box THIN_DOWN_BOX
642        code0 {o->color(progdefaults.RevColor);}
643      }
644      Fl_Box tunecolor {
645        xywh {310 149 18 19} box THIN_DOWN_BOX
646        code0 {o->color(progdefaults.TuneColor);}
647      }
648      Fl_Box rxidcolor {
649        xywh {310 184 18 19} box THIN_DOWN_BOX
650        code0 {o->color(progdefaults.RxIDColor);}
651      }
652      Fl_Box lockcolor {
653        xywh {445 76 18 19} box THIN_DOWN_BOX color 3
654        code0 {o->color(progdefaults.LkColor);}
655      }
656      Fl_Box sql1color {
657        xywh {445 112 18 19} box THIN_DOWN_BOX
658        code0 {o->color(progdefaults.Sql1Color);}
659      }
660      Fl_Box rxidcolorwide {
661        xywh {445 184 18 19} box THIN_DOWN_BOX
662        code0 {o->color(progdefaults.RxIDwideColor);}
663      }
664      Fl_Box xmtcolor {
665        xywh {445 149 18 18} box THIN_DOWN_BOX
666        code0 {o->color(progdefaults.XmtColor);}
667      }
668      Fl_Box afccolor {
669        xywh {580 76 18 19} box THIN_DOWN_BOX color 3
670        code0 {o->color(progdefaults.AfcColor);}
671      }
672      Fl_Box sql2color {
673        xywh {580 112 18 18} box THIN_DOWN_BOX
674        code0 {o->color(progdefaults.Sql2Color);}
675      }
676      Fl_Box txidcolor {
677        xywh {580 184 18 18} box THIN_DOWN_BOX
678        code0 {o->color(progdefaults.TxIDColor);}
679      }
680      Fl_Box {} {
681        label {Lighted button enabled colors}
682        xywh {390 264 220 20} align 21
683      }
684      Fl_Button btn_default_btn_color {
685        label {All Others}
686        callback {progdefaults.default_btn_color = fl_show_colormap(progdefaults.default_btn_color);
687default_btn_color->color(progdefaults.default_btn_color);
688default_btn_color->redraw();
689set_default_btn_color();
690progdefaults.changed = true;}
691        xywh {469 218 85 21}
692      }
693      Fl_Box default_btn_color {
694        xywh {445 218 18 19} box THIN_DOWN_BOX
695        code0 {o->color(progdefaults.default_btn_color);}
696      }
697    }
698    Fl_Group {} {
699      label {Colors-Fonts/FreqDisp - Meters}
700      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
701      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/FreqDisp - Meters"));}
702      code1 {config_pages.push_back(p);}
703      code2 {tab_tree->add(_("Colors-Fonts/FreqDisp - Meters"));}
704    } {
705      Fl_Group {} {open
706        xywh {304 51 395 87} box ENGRAVED_FRAME
707      } {
708        Fl_Box FDdisplay {
709          label {14070.150}
710          xywh {384 55 235 45} box DOWN_BOX color 55 labelfont 4 labelsize 40
711          code0 {o->color(fl_rgb_color(progdefaults.FDbackground.R,progdefaults.FDbackground.G,progdefaults.FDbackground.B));}
712          code1 {o->labelcolor(fl_rgb_color(progdefaults.FDforeground.R,progdefaults.FDforeground.G,progdefaults.FDforeground.B));}
713          code2 {o->labelfont(progdefaults.FreqControlFontnbr);}
714        }
715        Fl_Button btn_freq_control_font {
716          label Font
717          callback {font_browser->fontNumber(progdefaults.FreqControlFontnbr);
718    font_browser->fontSize(14);
719    font_browser->fontColor(FL_FOREGROUND_COLOR);
720    font_browser->fontFilter(Font_Browser::FIXED_WIDTH);
721    font_browser->fontFilter(Font_Browser::ALL_TYPES);
722    font_browser->callback(cbFreqControlFontBrowser);
723font_browser->show();}
724          xywh {311 106 90 24}
725        }
726        Fl_Button btnBackgroundColor {
727          label {Bg Color}
728          callback {uchar r, g, b;
729    r = progdefaults.FDbackground.R;
730    g = progdefaults.FDbackground.G;
731    b = progdefaults.FDbackground.B;
732
733    if (!fl_color_chooser("Background", r, g, b))
734        return;
735
736    progdefaults.FDbackground.R = r;
737    progdefaults.FDbackground.G = g;
738    progdefaults.FDbackground.B = b;
739
740    FDdisplay->color(fl_rgb_color(r,g,b));
741    FDdisplay->redraw();
742
743    if (qsoFreqDisp) {
744        qsoFreqDisp->SetONOFFCOLOR(
745          fl_rgb_color(	progdefaults.FDforeground.R,
746                        progdefaults.FDforeground.G,
747                        progdefaults.FDforeground.B),
748          fl_rgb_color(	progdefaults.FDbackground.R,
749                        progdefaults.FDbackground.G,
750                        progdefaults.FDbackground.B));
751        qsoFreqDisp->redraw();
752    }
753    progdefaults.changed = true;}
754          xywh {407 106 90 24}
755        }
756        Fl_Button btnForegroundColor {
757          label {Digit Color}
758          callback {uchar r, g, b;
759    r = progdefaults.FDforeground.R;
760    g = progdefaults.FDforeground.G;
761    b = progdefaults.FDforeground.B;
762
763    if (!fl_color_chooser("Foreground", r, g, b))
764        return;
765
766    progdefaults.FDforeground.R = r;
767    progdefaults.FDforeground.G = g;
768    progdefaults.FDforeground.B = b;
769
770    FDdisplay->labelcolor(fl_rgb_color(r,g,b));
771    FDdisplay->redraw();
772
773    if (qsoFreqDisp) {
774        qsoFreqDisp->SetONOFFCOLOR(
775          fl_rgb_color(	progdefaults.FDforeground.R,
776                        progdefaults.FDforeground.G,
777                        progdefaults.FDforeground.B),
778          fl_rgb_color(	progdefaults.FDbackground.R,
779                        progdefaults.FDbackground.G,
780                        progdefaults.FDbackground.B));
781        qsoFreqDisp->redraw();
782    }
783    progdefaults.changed = true;}
784          xywh {503 106 90 24}
785        }
786        Fl_Button btnFD_SystemColor {
787          label {Sys Colors}
788          callback {uchar r, g, b;
789    Fl_Color clr = FL_BACKGROUND2_COLOR;
790
791    Fl::get_color(clr, r, g, b);
792
793    progdefaults.FDbackground.R = r;
794    progdefaults.FDbackground.G = g;
795    progdefaults.FDbackground.B = b;
796
797    FDdisplay->color(clr);
798
799    clr = FL_FOREGROUND_COLOR;
800    Fl::get_color(clr, r, g, b);
801
802    FDdisplay->labelcolor(clr);
803    FDdisplay->redraw();
804
805    progdefaults.FDforeground.R = r;
806    progdefaults.FDforeground.G = g;
807    progdefaults.FDforeground.B = b;
808
809    if (qsoFreqDisp) {
810        qsoFreqDisp->SetONOFFCOLOR(
811          fl_rgb_color(	progdefaults.FDforeground.R,
812                        progdefaults.FDforeground.G,
813                        progdefaults.FDforeground.B),
814          fl_rgb_color(	progdefaults.FDbackground.R,
815                        progdefaults.FDbackground.G,
816                        progdefaults.FDbackground.B));
817        qsoFreqDisp->redraw();
818    }
819    progdefaults.changed = true;}
820          xywh {599 106 90 24}
821        }
822      }
823      Fl_Group {} {
824        label {S-meter} open
825        xywh {304 142 395 62} box ENGRAVED_FRAME align 21
826      } {
827        Fl_Button btnSmeter_bg_color {
828          label {Bg Color}
829          callback {uchar r, g, b;
830    r = progdefaults.Smeter_bg_color.R;
831    g = progdefaults.Smeter_bg_color.G;
832    b = progdefaults.Smeter_bg_color.B;
833
834    if (!fl_color_chooser("Background", r, g, b))
835        return;
836
837    progdefaults.Smeter_bg_color.R = r;
838    progdefaults.Smeter_bg_color.G = g;
839    progdefaults.Smeter_bg_color.B = b;
840
841    set_smeter_colors();
842
843    progdefaults.changed = true;}
844          xywh {311 169 90 24}
845        }
846        Fl_Button btnSmeter_scale_color {
847          label {Scale Color}
848          callback {uchar r, g, b;
849    r = progdefaults.Smeter_scale_color.R;
850    g = progdefaults.Smeter_scale_color.G;
851    b = progdefaults.Smeter_scale_color.B;
852
853    if (!fl_color_chooser("Scale", r, g, b))
854        return;
855
856    progdefaults.Smeter_scale_color.R = r;
857    progdefaults.Smeter_scale_color.G = g;
858    progdefaults.Smeter_scale_color.B = b;
859
860    set_smeter_colors();
861
862    progdefaults.changed = true;}
863          xywh {407 169 90 24}
864        }
865        Fl_Button btnSmeter_meter_color {
866          label {Meter Color}
867          callback {uchar r, g, b;
868    r = progdefaults.Smeter_meter_color.R;
869    g = progdefaults.Smeter_meter_color.G;
870    b = progdefaults.Smeter_meter_color.B;
871
872    if (!fl_color_chooser("Meter", r, g, b))
873        return;
874
875    progdefaults.Smeter_meter_color.R = r;
876    progdefaults.Smeter_meter_color.G = g;
877    progdefaults.Smeter_meter_color.B = b;
878
879    set_smeter_colors();
880
881    progdefaults.changed = true;}
882          xywh {503 169 90 24}
883        }
884      }
885      Fl_Group {} {
886        label {PWR-meter} open
887        xywh {304 211 395 67} box ENGRAVED_FRAME align 21
888      } {
889        Fl_Button btnPWR_bg_color {
890          label {Bg Color}
891          callback {uchar r, g, b;
892    r = progdefaults.PWRmeter_bg_color.R;
893    g = progdefaults.PWRmeter_bg_color.G;
894    b = progdefaults.PWRmeter_bg_color.B;
895
896    if (!fl_color_chooser("Background", r, g, b))
897        return;
898
899    progdefaults.PWRmeter_bg_color.R = r;
900    progdefaults.PWRmeter_bg_color.G = g;
901    progdefaults.PWRmeter_bg_color.B = b;
902
903    set_smeter_colors();
904
905    progdefaults.changed = true;}
906          xywh {311 238 90 24}
907        }
908        Fl_Button btnPWR_scale_color {
909          label {Scale Color}
910          callback {uchar r, g, b;
911    r = progdefaults.PWRmeter_scale_color.R;
912    g = progdefaults.PWRmeter_scale_color.G;
913    b = progdefaults.PWRmeter_scale_color.B;
914
915    if (!fl_color_chooser("Scale", r, g, b))
916        return;
917
918    progdefaults.PWRmeter_scale_color.R = r;
919    progdefaults.PWRmeter_scale_color.G = g;
920    progdefaults.PWRmeter_scale_color.B = b;
921
922    set_smeter_colors();
923
924    progdefaults.changed = true;}
925          xywh {407 238 90 24}
926        }
927        Fl_Button btnPWR_meter_Color {
928          label {Meter Color}
929          callback {uchar r, g, b;
930    r = progdefaults.PWRmeter_meter_color.R;
931    g = progdefaults.PWRmeter_meter_color.G;
932    b = progdefaults.PWRmeter_meter_color.B;
933
934    if (!fl_color_chooser("Meter", r, g, b))
935        return;
936
937    progdefaults.PWRmeter_meter_color.R = r;
938    progdefaults.PWRmeter_meter_color.G = g;
939    progdefaults.PWRmeter_meter_color.B = b;
940
941    set_smeter_colors();
942
943    progdefaults.changed = true;}
944          xywh {503 238 90 24}
945        }
946        Fl_Group listboxPWRselect {
947          label {Power scale}
948          callback {progdefaults.PWRselect = o->index();
949set_smeter_colors();
950progdefaults.changed = true;} open
951          tooltip {Select the type of FFT prefilter} xywh {599 238 80 24} box DOWN_BOX color 7
952          code0 {o->add(_("25 W")); o->add("50 W");}
953          code1 {o->add("100 W"); o->add("200 W"); o->add("AUTO");}
954          code3 {o->index(progdefaults.PWRselect);o->labelsize(FL_NORMAL_SIZE);}
955          class Fl_ListBox
956        } {}
957      }
958    }
959    Fl_Group {} {
960      label {Colors-Fonts/Function keys}
961      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
962      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/Function keys"));}
963      code1 {config_pages.push_back(p);}
964      code2 {tab_tree->add(_("Colors-Fonts/Function keys"));}
965    } {
966      Fl_Check_Button btnUseGroupColors {
967        label {Use colored buttons}
968        callback {progdefaults.useGroupColors = o->value();
969    colorize_macros();
970    progdefaults.changed = true;}
971        xywh {337 92 165 21} down_box DOWN_BOX
972        code0 {btnUseGroupColors->value(progdefaults.useGroupColors);}
973      }
974      Fl_Button btnGroup1 {
975        label {Group 1}
976        callback {uchar r, g, b;
977    r = progdefaults.btnGroup1.R;
978    g = progdefaults.btnGroup1.G;
979    b = progdefaults.btnGroup1.B;
980
981    if (fl_color_chooser("Group 1", r, g, b) == 0)
982        return;
983    progdefaults.btnGroup1.R = r;
984    progdefaults.btnGroup1.G = g;
985    progdefaults.btnGroup1.B = b;
986    o->color(fl_rgb_color(r,g,b));
987    colorize_macros();
988
989    progdefaults.changed = true;}
990        tooltip {Background color for Function key group 1} xywh {305 140 90 30}
991        code0 {btnGroup1->color(fl_rgb_color(progdefaults.btnGroup1.R, progdefaults.btnGroup1.G,progdefaults.btnGroup1.B));}
992        code1 {btnGroup1->labelcolor(progdefaults.MacroBtnFontcolor);}
993      }
994      Fl_Button btnGroup2 {
995        label {Group 2}
996        callback {uchar r, g, b;
997    r = progdefaults.btnGroup2.R;
998    g = progdefaults.btnGroup2.G;
999    b = progdefaults.btnGroup2.B;
1000
1001    if (fl_color_chooser("Group 2", r, g, b) == 0)
1002        return;
1003    progdefaults.btnGroup2.R = r;
1004    progdefaults.btnGroup2.G = g;
1005    progdefaults.btnGroup2.B = b;
1006    o->color(fl_rgb_color(r,g,b));
1007    colorize_macros();
1008
1009    progdefaults.changed = true;}
1010        tooltip {Background color for Function key group 2} xywh {407 140 90 30}
1011        code0 {btnGroup2->color(fl_rgb_color(progdefaults.btnGroup2.R, progdefaults.btnGroup2.G,progdefaults.btnGroup2.B));}
1012        code1 {btnGroup2->labelcolor(progdefaults.MacroBtnFontcolor);}
1013      }
1014      Fl_Button btnGroup3 {
1015        label {Group 3}
1016        callback {uchar r, g, b;
1017    r = progdefaults.btnGroup3.R;
1018    g = progdefaults.btnGroup3.G;
1019    b = progdefaults.btnGroup3.B;
1020
1021    if (fl_color_chooser("Group 3", r, g, b) == 0)
1022        return;
1023    progdefaults.btnGroup3.R = r;
1024    progdefaults.btnGroup3.G = g;
1025    progdefaults.btnGroup3.B = b;
1026    o->color(fl_rgb_color(r,g,b));
1027
1028    colorize_macros();
1029    progdefaults.changed = true;}
1030        tooltip {Background color for Function key group 3} xywh {509 140 90 30}
1031        code0 {btnGroup3->color(fl_rgb_color(progdefaults.btnGroup3.R, progdefaults.btnGroup3.G,progdefaults.btnGroup3.B));}
1032        code1 {btnGroup3->labelcolor(progdefaults.MacroBtnFontcolor);}
1033      }
1034      Fl_Button btnFkeyDEfaults {
1035        label Defaults
1036        callback {uchar r, g, b;
1037    Fl_Color clr;
1038
1039    r = 80; g = 144; b = 144;
1040    clr = fl_rgb_color(r,g,b);
1041     btnGroup1->color(clr);
1042    progdefaults.btnGroup1.R = r;
1043    progdefaults.btnGroup1.G = g;
1044    progdefaults.btnGroup1.B = b;
1045
1046    r = 144; g = 80; b = 80;
1047    clr = fl_rgb_color(r,g,b);
1048    btnGroup2->color(clr);
1049    progdefaults.btnGroup2.R = r;
1050    progdefaults.btnGroup2.G = g;
1051    progdefaults.btnGroup2.B = b;
1052
1053    r = 80; g = 80; b = 144;
1054    clr = fl_rgb_color(r,g,b);
1055    btnGroup3->color(clr);
1056    progdefaults.btnGroup3.R = r;
1057    progdefaults.btnGroup3.G = g;
1058    progdefaults.btnGroup3.B = b;
1059
1060    progdefaults.MacroBtnFontcolor = FL_BLACK;
1061    progdefaults.MacroBtnFontnbr = FL_HELVETICA;
1062    progdefaults.MacroBtnFontsize = 12;
1063
1064    btnGroup1->labelcolor(progdefaults.MacroBtnFontcolor);
1065    btnGroup2->labelcolor(progdefaults.MacroBtnFontcolor);
1066    btnGroup3->labelcolor(progdefaults.MacroBtnFontcolor);
1067    btnGroup1->labelfont(progdefaults.MacroBtnFontnbr);
1068    btnGroup2->labelfont(progdefaults.MacroBtnFontnbr);
1069    btnGroup3->labelfont(progdefaults.MacroBtnFontnbr);
1070    btnGroup1->labelsize(progdefaults.MacroBtnFontsize);
1071    btnGroup2->labelsize(progdefaults.MacroBtnFontsize);
1072    btnGroup3->labelsize(progdefaults.MacroBtnFontsize);
1073
1074    btnGroup1->redraw_label();
1075    btnGroup2->redraw_label();
1076    btnGroup3->redraw_label();
1077
1078    colorize_macros();
1079
1080progdefaults.changed = true;}
1081        xywh {612 140 90 30}
1082      }
1083      Fl_Button btnMacroBtnFont {
1084        label {Font/Color}
1085        callback {font_browser->fontNumber(progdefaults.MacroBtnFontnbr);
1086    font_browser->fontSize(progdefaults.MacroBtnFontsize);
1087    font_browser->fontColor(progdefaults.MacroBtnFontcolor);
1088    font_browser->fontFilter(Font_Browser::ALL_TYPES);
1089    font_browser->callback(cbMacroBtnFontBrowser);
1090font_browser->show();}
1091        xywh {509 87 90 30}
1092      }
1093    }
1094    Fl_Group {} {
1095      label {Colors-Fonts/Logging controls}
1096      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
1097      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/Logging controls"));}
1098      code1 {config_pages.push_back(p);}
1099      code2 {tab_tree->add(_("Colors-Fonts/Logging controls"));}
1100    } {
1101      Fl_Group {} {
1102        label {Logging Panel Controls} open
1103        xywh {205 33 590 65} box ENGRAVED_FRAME align 21
1104      } {
1105        Fl_Output LOGGINGdisplay {
1106          xywh {233 57 184 25}
1107          code0 {o->textfont(progdefaults.LOGGINGtextfont);o->textsize(progdefaults.LOGGINGtextsize);o->textcolor(progdefaults.LOGGINGtextcolor);}
1108          code1 {o->color(progdefaults.LOGGINGcolor);}
1109          code2 {o->value("W1HKJ");}
1110          code3 {o->redraw();}
1111        }
1112        Fl_Button btnLOGGING_color {
1113          label {Bg Color}
1114          callback {uchar r, g, b;
1115    Fl::get_color(progdefaults.LOGGINGcolor, r, g, b);
1116
1117    if (!fl_color_chooser("Background", r, g, b))
1118        return;
1119
1120    progdefaults.LOGGINGcolor = fl_rgb_color(r, g, b);
1121
1122    LOGGINGdisplay->color(progdefaults.LOGGINGcolor);
1123    LOGGINGdisplay->redraw();
1124
1125    LOGGING_colors_font();
1126
1127    progdefaults.changed = true;}
1128          xywh {476 57 80 25}
1129        }
1130        Fl_Button btn_LOGGING_font {
1131          label Font
1132          callback {font_browser->fontNumber(progdefaults.LOGGINGtextfont);
1133font_browser->fontSize(progdefaults.LOGGINGtextsize);
1134font_browser->fontColor(progdefaults.LOGGINGtextcolor);
1135font_browser->fontFilter(Font_Browser::ALL_TYPES);
1136font_browser->callback(cbLOGGINGFontBrowser);
1137font_browser->show();}
1138          xywh {566 57 55 25}
1139        }
1140        Fl_Button btnLOGGINGdefault_colors_font {
1141          label Default
1142          callback {progdefaults.LOGGINGcolor = FL_BACKGROUND2_COLOR;
1143progdefaults.LOGGINGtextfont = (Fl_Font)0;
1144progdefaults.LOGGINGtextsize = 14;
1145progdefaults.LOGGINGtextcolor = FL_BLACK;
1146
1147LOGGINGdisplay->color(progdefaults.LOGGINGcolor);
1148LOGGINGdisplay->textsize(progdefaults.LOGGINGtextsize);
1149LOGGINGdisplay->textcolor(progdefaults.LOGGINGtextcolor);
1150LOGGINGdisplay->textfont(progdefaults.LOGGINGtextfont);
1151LOGGINGdisplay->redraw();
1152
1153LOGGING_colors_font();
1154
1155progdefaults.changed = true;}
1156          xywh {632 57 80 25}
1157        }
1158      }
1159      Fl_Group {} {
1160        label {Logbook Dialog} open
1161        xywh {205 99 590 65} box ENGRAVED_FRAME align 21
1162      } {
1163        Fl_Output LOGBOOKdisplay {
1164          xywh {233 123 184 25}
1165          code0 {o->textfont(progdefaults.LOGGINGtextfont);o->textsize(progdefaults.LOGGINGtextsize);o->textcolor(progdefaults.LOGBOOKtextcolor);}
1166          code1 {o->color(progdefaults.LOGBOOKcolor);}
1167          code2 {o->value("14.070000");}
1168          code3 {o->redraw();}
1169        }
1170        Fl_Button btnLOGBOOK_color {
1171          label {Bg Color}
1172          callback {uchar r, g, b;
1173    Fl::get_color(progdefaults.LOGBOOKcolor, r, g, b);
1174
1175   if (!fl_color_chooser("Background", r, g, b))
1176        return;
1177
1178    progdefaults.LOGBOOKcolor = fl_rgb_color(r, g, b);
1179
1180    LOGBOOKdisplay->color(progdefaults.LOGBOOKcolor);
1181    LOGBOOKdisplay->redraw();
1182
1183    LOGBOOK_colors_font();
1184
1185    progdefaults.changed = true;}
1186          xywh {475 123 80 25}
1187        }
1188        Fl_Button btn_LOGBOOK_font {
1189          label Font
1190          callback {font_browser->fontNumber(progdefaults.LOGBOOKtextfont);
1191font_browser->fontSize(progdefaults.LOGBOOKtextsize);
1192font_browser->fontColor(progdefaults.LOGBOOKtextcolor);
1193font_browser->fontFilter(Font_Browser::ALL_TYPES);
1194font_browser->callback(cbLOGBOOKFontBrowser);
1195font_browser->show();}
1196          xywh {565 123 55 25}
1197        }
1198        Fl_Button btnLOGBOOKdefault_colors_font {
1199          label Default
1200          callback {progdefaults.LOGBOOKcolor = FL_BACKGROUND2_COLOR;
1201progdefaults.LOGBOOKtextfont = (Fl_Font)0;
1202progdefaults.LOGBOOKtextsize = 14;
1203progdefaults.LOGBOOKtextcolor = FL_BLACK;
1204
1205LOGBOOKdisplay->color(progdefaults.LOGBOOKcolor);
1206LOGBOOKdisplay->textsize(progdefaults.LOGBOOKtextsize);
1207LOGBOOKdisplay->textcolor(progdefaults.LOGBOOKtextcolor);
1208LOGBOOKdisplay->textfont(progdefaults.LOGBOOKtextfont);
1209LOGBOOKdisplay->redraw();
1210
1211LOGBOOK_colors_font();
1212
1213progdefaults.changed = true;}
1214          xywh {631 123 80 25}
1215        }
1216      }
1217      Fl_Group {} {
1218        label {DX Cluster Dialog} open
1219        xywh {205 168 590 147} box ENGRAVED_FRAME align 21
1220      } {
1221        Fl_Output DXC_display {
1222          label {Report Browser}
1223          xywh {233 203 184 25} align 5
1224          code0 {o->textfont(progdefaults.LOGGINGtextfont);o->textsize(progdefaults.LOGGINGtextsize);}
1225          code2 {o->value("DX de W1HKJ-1");}
1226          code3 {o->redraw();}
1227        }
1228        Fl_Button btn_DXC_font {
1229          label Font
1230          callback {font_browser->fontNumber(progdefaults.DXC_textfont);
1231font_browser->fontSize(progdefaults.DXC_textsize);
1232font_browser->fontColor(progdefaults.DXC_textcolor);
1233font_browser->fontFilter(Font_Browser::FIXED_WIDTH);
1234font_browser->callback(cbDXC_FontBrowser);
1235font_browser->show();}
1236          xywh {422 203 86 25}
1237        }
1238        Fl_Button btnDXCdefault_colors_font {
1239          label Default
1240          callback {progdefaults.DXC_textfont = FL_COURIER;
1241progdefaults.DXC_textsize = 14;
1242progdefaults.DXC_textcolor = FL_BLACK;
1243progdefaults.DXC_even_color = 7;
1244progdefaults.DXC_odd_color = 246;
1245
1246DXC_display->textsize(progdefaults.DXC_textsize);
1247DXC_display->textcolor(progdefaults.DXC_textcolor);
1248DXC_display->textfont(progdefaults.DXC_textfont);
1249
1250DXC_display->redraw();}
1251          xywh {514 203 86 25}
1252        }
1253        Fl_Button btn_DXC_even_lines {
1254          label {Even Lines}
1255          callback {progdefaults.DXC_even_color = fl_show_colormap((Fl_Color)progdefaults.DXC_even_color);
1256o->color(progdefaults.DXC_even_color);
1257o->redraw();
1258dxc_lines_redraw();
1259progdefaults.changed = true}
1260          xywh {422 234 86 25} color 55
1261          code0 {o->color(progdefaults.DXC_even_color);}
1262        }
1263        Fl_Button btn_DXC_odd_lines {
1264          label {Odd Lines}
1265          callback {progdefaults.DXC_odd_color = fl_show_colormap((Fl_Color)progdefaults.DXC_odd_color);
1266o->color(progdefaults.DXC_odd_color);
1267o->redraw();
1268dxc_lines_redraw();
1269progdefaults.changed = true}
1270          xywh {514 234 86 25} color 246
1271          code0 {o->color(progdefaults.DXC_odd_color);}
1272        }
1273        Fl_Input StreamText {
1274          label {Stream Text}
1275          xywh {233 273 184 25} align 5
1276          code0 {o->value("DX de W1HKJ...");}
1277          code1 {o->color(fl_rgb_color(progdefaults.DX_Color.R, progdefaults.DX_Color.G, progdefaults.DX_Color.B));}
1278          code2 {o->textfont(progdefaults.DXfontnbr); o->textsize(progdefaults.DXfontsize); o->textcolor(progdefaults.DXfontcolor);}
1279        }
1280        Fl_Button btnDXcolor {
1281          label {Bg color}
1282          callback {uchar r, g, b;
1283r = progdefaults.DX_Color.R;
1284g = progdefaults.DX_Color.G;
1285b = progdefaults.DX_Color.B;
1286
1287if (!fl_color_chooser("DX Color", r, g, b))
1288    return;
1289
1290progdefaults.DX_Color.R = r;
1291progdefaults.DX_Color.G = g;
1292progdefaults.DX_Color.B = b;
1293
1294StreamText->color(fl_rgb_color(r,g,b));
1295StreamText->redraw();
1296
1297brws_tcpip_stream->color(fl_rgb_color(r,g,b));
1298brws_tcpip_stream->redraw();
1299
1300brws_dxcluster_hosts->color(fl_rgb_color(
1301    progdefaults.DX_Color.R,
1302    progdefaults.DX_Color.G,
1303    progdefaults.DX_Color.B));
1304brws_dxcluster_hosts->textcolor(progdefaults.DXfontcolor);
1305brws_dxcluster_hosts->textfont(progdefaults.DXfontnbr);
1306brws_dxcluster_hosts->textsize(progdefaults.DXfontsize);
1307brws_dxcluster_hosts->redraw();
1308
1309brws_dxc_help->color(fl_rgb_color(r,g,b));
1310brws_dxc_help->setFont(progdefaults.DXfontnbr);
1311brws_dxc_help->setFontSize(progdefaults.DXfontsize);
1312brws_dxc_help->setFontColor(progdefaults.DXfontcolor, FTextBase::RECV);
1313brws_dxc_help->redraw();
1314
1315ed_telnet_cmds->color(fl_rgb_color(r,g,b));
1316ed_telnet_cmds->redraw();
1317
1318dxcluster_hosts_load();
1319
1320progdefaults.changed = true;}
1321          xywh {422 273 86 25}
1322        }
1323        Fl_Button btnDXfont {
1324          label Font
1325          callback {font_browser->fontNumber(progdefaults.DXfontnbr);
1326    font_browser->fontSize(progdefaults.DXfontsize);
1327    font_browser->fontColor(progdefaults.DXfontcolor);
1328    font_browser->fontFilter(Font_Browser::FIXED_WIDTH);
1329    font_browser->callback(cbDXfont_browser);
1330font_browser->show();}
1331          xywh {514 273 86 25}
1332        }
1333        Fl_Button btnDXalt_color {
1334          label {Alt Color}
1335          callback {choose_color(progdefaults.DXalt_color);
1336
1337o->labelcolor(progdefaults.DXalt_color);
1338o->redraw_label();
1339
1340brws_tcpip_stream->setFontColor(progdefaults.DXalt_color, FTextBase::XMIT);
1341brws_tcpip_stream->redraw();
1342
1343progdefaults.changed = true;}
1344          tooltip {Color for outgoing telnet text} xywh {606 272 86 25}
1345          code0 {o->labelcolor(progdefaults.DXalt_color);}
1346        }
1347        Fl_Button btnDXdefault_colors_font {
1348          label Default
1349          callback {progdefaults.DX_Color.R = 255;
1350progdefaults.DX_Color.G = 255;
1351progdefaults.DX_Color.B = 255;
1352
1353progdefaults.DXfontnbr = FL_COURIER;
1354progdefaults.DXfontsize = 14;
1355progdefaults.DXfontcolor = FL_BLACK;
1356progdefaults.DXalt_color = fl_rgb_color(200, 0, 0);
1357btnDXalt_color->labelcolor(progdefaults.DXalt_color);
1358btnDXalt_color->redraw_label();
1359
1360brws_tcpip_stream->color(fl_rgb_color(
1361    progdefaults.DX_Color.R,
1362    progdefaults.DX_Color.G,
1363    progdefaults.DX_Color.B));
1364brws_tcpip_stream->setFont(progdefaults.DXfontnbr);
1365brws_tcpip_stream->setFontSize(progdefaults.DXfontsize);
1366brws_tcpip_stream->setFontColor(progdefaults.DXfontcolor, FTextBase::RECV);
1367brws_tcpip_stream->setFontColor(progdefaults.DXalt_color, FTextBase::XMIT);
1368brws_tcpip_stream->redraw();
1369
1370ed_telnet_cmds->color(fl_rgb_color(
1371    progdefaults.DX_Color.R,
1372    progdefaults.DX_Color.G,
1373    progdefaults.DX_Color.B));
1374ed_telnet_cmds->setFont(progdefaults.DXfontnbr);
1375ed_telnet_cmds->setFontSize(progdefaults.DXfontsize);
1376ed_telnet_cmds->setFontColor(progdefaults.DXfontcolor);
1377ed_telnet_cmds->redraw();
1378
1379brws_dxc_help->color(fl_rgb_color(
1380    progdefaults.DX_Color.R,
1381    progdefaults.DX_Color.G,
1382    progdefaults.DX_Color.B));
1383brws_dxc_help->setFont(progdefaults.DXfontnbr);
1384brws_dxc_help->setFontSize(progdefaults.DXfontsize);
1385brws_dxc_help->setFontColor(progdefaults.DXfontcolor, FTextBase::RECV);
1386brws_dxc_help->redraw();
1387
1388StreamText->color(fl_rgb_color(
1389    progdefaults.DX_Color.R,
1390    progdefaults.DX_Color.G,
1391    progdefaults.DX_Color.B));
1392StreamText->textcolor(progdefaults.DXfontcolor);
1393StreamText->redraw();
1394
1395dxcluster_hosts_load();
1396
1397font_browser->hide();
1398
1399progdefaults.changed = true;}
1400          xywh {700 272 86 25}
1401        }
1402      }
1403    }
1404    Fl_Group {} {
1405      label {Colors-Fonts/Rx-Tx}
1406      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
1407      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/Rx-Tx"));}
1408      code1 {config_pages.push_back(p);}
1409      code2 {tab_tree->add(_("Colors-Fonts/Rx-Tx"));}
1410    } {
1411      Fl_Group listbox_charset_status {
1412        label {Rx/Tx Character set} open
1413        tooltip {Select Rx/Tx Character Set} xywh {293 40 165 24} box BORDER_BOX color 55 align 8
1414        code0 {\#include "fl_digi.h"}
1415        code1 {o->labelsize(FL_NORMAL_SIZE);
1416                  listbox_charset_status->callback(cb_listbox_charset, 0);}
1417        class Fl_ListBox
1418      } {}
1419      Fl_Input RxText {
1420        xywh {293 71 220 36}
1421        code0 {RxText->value("Receive Text");}
1422        code1 {RxText->color(fl_rgb_color(progdefaults.RxColor.R, progdefaults.RxColor.G, progdefaults.RxColor.B));}
1423        code2 {RxText->textfont(progdefaults.RxFontnbr); RxText->textsize(progdefaults.RxFontsize); RxText->textcolor(progdefaults.RxFontcolor);}
1424        code3 {RxText->type(FL_MULTILINE_INPUT_WRAP);}
1425      }
1426      Fl_Button btnRxColor {
1427        label {Rx bkgnd}
1428        callback {uchar r, g, b;
1429    r = progdefaults.RxColor.R;
1430    g = progdefaults.RxColor.G;
1431    b = progdefaults.RxColor.B;
1432
1433    if (!fl_color_chooser("Rx Color", r, g, b))
1434        return;
1435
1436    progdefaults.RxColor.R = r;
1437    progdefaults.RxColor.G = g;
1438    progdefaults.RxColor.B = b;
1439    RxText->color(fl_rgb_color(r,g,b));
1440    ReceiveText->color(RxText->color());
1441    RxText->redraw();
1442    ReceiveText->redraw();
1443
1444    progdefaults.changed = true;}
1445        xywh {523 78 75 21}
1446      }
1447      Fl_Button btnTxColor {
1448        label {Tx bkgnd}
1449        callback {uchar r, g, b;
1450    r = progdefaults.TxColor.R;
1451    g = progdefaults.TxColor.G;
1452    b = progdefaults.TxColor.B;
1453
1454    if (!fl_color_chooser("Tx Color", r, g, b))
1455        return;
1456
1457    progdefaults.TxColor.R = r;
1458    progdefaults.TxColor.G = g;
1459    progdefaults.TxColor.B = b;
1460    TxText->color(fl_rgb_color(r,g,b));
1461    TransmitText->color(TxText->color());
1462    TxText->redraw();
1463    TransmitText->redraw();
1464
1465progdefaults.changed = true;}
1466        xywh {523 121 75 21}
1467      }
1468      Fl_Input TxText {
1469        xywh {293 113 220 37}
1470        code0 {TxText->value("Transmit Text");}
1471        code1 {TxText->color(fl_rgb_color(progdefaults.TxColor.R, progdefaults.TxColor.G, progdefaults.TxColor.B));}
1472        code2 {TxText->textfont(progdefaults.TxFontnbr); TxText->textsize(progdefaults.TxFontsize); TxText->textcolor(progdefaults.TxFontcolor);}
1473        code3 {TxText->type(FL_MULTILINE_INPUT_WRAP);}
1474      }
1475      Fl_Button btnRxFont {
1476        label {Rx font}
1477        callback {font_browser->fontNumber(progdefaults.RxFontnbr);
1478    font_browser->fontSize(progdefaults.RxFontsize);
1479    font_browser->fontColor(progdefaults.RxFontcolor);
1480    font_browser->fontFilter(Font_Browser::ALL_TYPES);
1481    font_browser->callback(cbRxFontBrowser);
1482font_browser->show();}
1483        xywh {608 78 75 21}
1484      }
1485      Fl_Button btnTxFont {
1486        label {Tx font}
1487        callback {font_browser->fontNumber(progdefaults.TxFontnbr);
1488    font_browser->fontSize(progdefaults.TxFontsize);
1489    font_browser->fontColor(progdefaults.TxFontcolor);
1490    font_browser->fontFilter(Font_Browser::ALL_TYPES);
1491    font_browser->callback(cbTxFontBrowser);
1492    font_browser->show();}
1493        xywh {608 121 75 21}
1494      }
1495      Fl_Input MacroText {
1496        xywh {293 156 220 37}
1497        code0 {MacroText->value("Macro editor text");}
1498        code1 {MacroText->textfont(progdefaults.MacroEditFontnbr);}
1499        code2 {MacroText->textsize(progdefaults.MacroEditFontsize);}
1500        code3 {MacroText->type(FL_MULTILINE_INPUT_WRAP);}
1501      }
1502      Fl_Button btnMacroEditFont {
1503        label {Macro Edit Font}
1504        callback {font_browser->fontNumber(progdefaults.MacroEditFontnbr);
1505font_browser->fontSize(progdefaults.MacroEditFontsize);
1506font_browser->fontFilter(Font_Browser::ALL_TYPES);
1507font_browser->callback(cbMacroEditFontBrowser);
1508font_browser->show();}
1509        xywh {523 164 120 21}
1510      }
1511      Fl_Group {} {
1512        label {Text Highlighting} open
1513        xywh {283 203 404 81} box ENGRAVED_FRAME align 17
1514      } {
1515        Fl_Button btnXMIT {
1516          label XMIT
1517          callback {choose_color(progdefaults.XMITcolor);
1518    btnXMIT->color( progdefaults.XMITcolor );
1519    btnXMIT->redraw();
1520    TransmitText->setFontColor(progdefaults.XMITcolor, FTextBase::XMIT);
1521    ReceiveText->setFontColor(progdefaults.XMITcolor, FTextBase::XMIT);
1522
1523    progdefaults.changed = true;}
1524          tooltip {Sent chars in Rx/Tx pane} xywh {301 231 40 21} align 2
1525          code0 {btnXMIT->color(progdefaults.XMITcolor);}
1526        }
1527        Fl_Button btnCTRL {
1528          label CTRL
1529          callback {choose_color(progdefaults.CTRLcolor);
1530    btnCTRL->color( progdefaults.CTRLcolor );
1531    btnCTRL->redraw();
1532    TransmitText->setFontColor(progdefaults.CTRLcolor, FTextBase::CTRL);
1533    ReceiveText->setFontColor(progdefaults.CTRLcolor, FTextBase::CTRL);
1534
1535    progdefaults.changed = true;}
1536          tooltip {Control chars in Rx/Tx pane} xywh {344 231 40 21} align 2
1537          code0 {btnCTRL->color(progdefaults.CTRLcolor);}
1538        }
1539        Fl_Button btnSKIP {
1540          label SKIP
1541          callback {choose_color(progdefaults.SKIPcolor);
1542    btnSKIP->color( progdefaults.SKIPcolor );
1543    btnSKIP->redraw();
1544    TransmitText->setFontColor(progdefaults.SKIPcolor, FTextBase::SKIP);
1545    ReceiveText->setFontColor(progdefaults.SKIPcolor, FTextBase::SKIP);
1546
1547    progdefaults.changed = true;}
1548          tooltip {Skipped chars in Tx pane
1549(Tx on/off in CW)} xywh {388 231 40 21} align 2
1550          code0 {btnSKIP->color(progdefaults.SKIPcolor);}
1551        }
1552        Fl_Button btnALTR {
1553          label ALTR
1554          callback {choose_color(progdefaults.ALTRcolor);
1555    btnALTR->color( progdefaults.ALTRcolor );
1556    btnALTR->redraw();
1557    TransmitText->setFontColor(progdefaults.ALTRcolor, FTextBase::ALTR);
1558    ReceiveText->setFontColor(progdefaults.ALTRcolor, FTextBase::ALTR);
1559
1560    progdefaults.changed = true;}
1561          tooltip {Alternate character color in Rx panelr} xywh {431 231 40 21} align 2
1562          code0 {btnALTR->color(progdefaults.ALTRcolor);}
1563        }
1564        Fl_Button btnSEL {
1565          label SEL
1566          callback {choose_color(progdefaults.RxTxSelectcolor);
1567btnSEL->color( progdefaults.RxTxSelectcolor );
1568btnSEL->redraw();
1569ReceiveText->color(
1570  fl_rgb_color(
1571    progdefaults.RxColor.R,
1572    progdefaults.RxColor.G,
1573    progdefaults.RxColor.B),
1574    progdefaults.RxTxSelectcolor);
1575TransmitText->color(
1576  fl_rgb_color(
1577    progdefaults.TxColor.R,
1578    progdefaults.TxColor.G,
1579    progdefaults.TxColor.B),
1580    progdefaults.RxTxSelectcolor);
1581
1582progdefaults.changed = true;}
1583          tooltip {Selection background color in Rx Tx panels} xywh {475 231 39 21} align 2
1584          code0 {btnSEL->color(progdefaults.RxTxSelectcolor);}
1585        }
1586        Fl_Button btnNoTextColor {
1587          label System
1588          callback {uchar r, g, b;
1589    Fl_Color clr = FL_BACKGROUND2_COLOR;
1590
1591    Fl::get_color(clr, r, g, b);
1592
1593    progdefaults.TxFontcolor = FL_BLACK;
1594    progdefaults.RxFontcolor = FL_BLACK;
1595    progdefaults.XMITcolor = FL_RED;
1596    progdefaults.CTRLcolor = FL_DARK_GREEN;
1597    progdefaults.SKIPcolor = FL_BLUE;
1598    progdefaults.ALTRcolor = FL_DARK_MAGENTA;
1599    btnXMIT->color(progdefaults.XMITcolor);
1600    btnCTRL->color(progdefaults.CTRLcolor);
1601    btnSKIP->color(progdefaults.SKIPcolor);
1602    btnALTR->color(progdefaults.ALTRcolor);
1603    btnXMIT->redraw();
1604    btnCTRL->redraw();
1605    btnSKIP->redraw();
1606    btnALTR->redraw();
1607
1608    progdefaults.RxColor.R = r;
1609    progdefaults.RxColor.G = g;
1610    progdefaults.RxColor.B = b;
1611
1612    clr = fl_rgb_color(r,g,b);
1613    RxText->color(clr);
1614    RxText->textcolor(progdefaults.RxFontcolor);
1615    RxText->redraw();
1616
1617    ReceiveText->color(clr);
1618    ReceiveText->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
1619    ReceiveText->setFontColor(progdefaults.XMITcolor, FTextBase::XMIT);
1620    ReceiveText->setFontColor(progdefaults.CTRLcolor, FTextBase::CTRL);
1621    ReceiveText->setFontColor(progdefaults.SKIPcolor, FTextBase::SKIP);
1622    ReceiveText->setFontColor(progdefaults.ALTRcolor, FTextBase::ALTR);
1623    ReceiveText->redraw();
1624
1625    progdefaults.TxColor.R = r;
1626    progdefaults.TxColor.G = g;
1627    progdefaults.TxColor.B = b;
1628
1629    TxText->color(clr);
1630    TxText->textcolor(progdefaults.TxFontcolor);
1631    TxText->redraw();
1632
1633    TransmitText->color(clr);
1634    TransmitText->setFontColor(progdefaults.TxFontcolor, FTextBase::RECV);
1635    TransmitText->setFontColor(progdefaults.XMITcolor, FTextBase::XMIT);
1636    TransmitText->setFontColor(progdefaults.CTRLcolor, FTextBase::CTRL);
1637    TransmitText->setFontColor(progdefaults.SKIPcolor, FTextBase::SKIP);
1638    TransmitText->setFontColor(progdefaults.ALTRcolor, FTextBase::ALTR);
1639    TransmitText->redraw();
1640
1641    progdefaults.changed = true;}
1642          xywh {522 231 70 21}
1643        }
1644        Fl_Button btnTextDefaults {
1645          label Defaults
1646          callback {uchar r, g, b;
1647    Fl_Color clr;
1648
1649    progdefaults.TxFontcolor = FL_BLACK;
1650    progdefaults.RxFontcolor = FL_BLACK;
1651    progdefaults.XMITcolor = FL_RED;
1652    progdefaults.CTRLcolor = FL_DARK_GREEN;
1653    progdefaults.SKIPcolor = FL_BLUE;
1654    progdefaults.ALTRcolor = FL_DARK_MAGENTA;
1655    btnXMIT->color(progdefaults.XMITcolor);
1656    btnCTRL->color(progdefaults.CTRLcolor);
1657    btnSKIP->color(progdefaults.SKIPcolor);
1658    btnALTR->color(progdefaults.ALTRcolor);
1659    btnXMIT->redraw();
1660    btnCTRL->redraw();
1661    btnSKIP->redraw();
1662    btnALTR->redraw();
1663
1664    r = 255; g = 242; b = 190;
1665    progdefaults.RxColor.R = r;
1666    progdefaults.RxColor.G = g;
1667    progdefaults.RxColor.B = b;
1668
1669    clr = fl_rgb_color(r,g,b);
1670    RxText->color(clr);
1671    RxText->textcolor(progdefaults.RxFontcolor);
1672    RxText->redraw();
1673
1674    ReceiveText->color(clr);
1675    ReceiveText->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
1676    ReceiveText->setFontColor(progdefaults.XMITcolor, FTextBase::XMIT);
1677    ReceiveText->setFontColor(progdefaults.CTRLcolor, FTextBase::CTRL);
1678    ReceiveText->setFontColor(progdefaults.SKIPcolor, FTextBase::SKIP);
1679    ReceiveText->setFontColor(progdefaults.ALTRcolor, FTextBase::ALTR);
1680    ReceiveText->redraw();
1681
1682    r = 200; g = 235; b = 255;
1683    progdefaults.TxColor.R = r;
1684    progdefaults.TxColor.G = g;
1685    progdefaults.TxColor.B = b;
1686
1687    clr = fl_rgb_color(r,g,b);
1688    TxText->color(clr);
1689    TxText->textcolor(progdefaults.TxFontcolor);
1690    TxText->redraw();
1691
1692    TransmitText->color(clr);
1693    TransmitText->setFontColor(progdefaults.TxFontcolor, FTextBase::RECV);
1694    TransmitText->setFontColor(progdefaults.XMITcolor, FTextBase::XMIT);
1695    TransmitText->setFontColor(progdefaults.CTRLcolor, FTextBase::CTRL);
1696    TransmitText->setFontColor(progdefaults.SKIPcolor, FTextBase::SKIP);
1697    TransmitText->setFontColor(progdefaults.ALTRcolor, FTextBase::ALTR);
1698    TransmitText->redraw();
1699
1700    progdefaults.changed = true;}
1701          xywh {596 231 70 21}
1702        }
1703      }
1704      Fl_Check_Button btn_show_all_codes {
1705        label {display Rx control chars as ascii string}
1706        callback {progdefaults.show_all_codes=o->value();
1707progdefaults.changed = true;}
1708        xywh {307 295 25 25} down_box DOWN_BOX
1709        code0 {o->value(progdefaults.show_all_codes);}
1710      }
1711    }
1712    Fl_Group {} {
1713      label {Colors-Fonts/Tabs}
1714      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
1715      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/Tabs"));}
1716      code1 {config_pages.push_back(p);}
1717      code2 {tab_tree->add(_("Colors-Fonts/Tabs"));}
1718    } {
1719      Fl_Button btnTabColor {
1720        label {Tab Color}
1721        callback {progdefaults.TabsColor = fl_show_colormap(progdefaults.TabsColor);
1722setTabColors();
1723LOGBOOK_colors_font();
1724progdefaults.changed = true;}
1725        xywh {396 69 75 21}
1726      }
1727      Fl_Button btnTabDefaultColor {
1728        label System
1729        callback {progdefaults.TabsColor = FL_BACKGROUND2_COLOR;
1730setTabColors();
1731LOGBOOK_colors_font();
1732progdefaults.changed = true;}
1733        xywh {526 69 75 21}
1734      }
1735    }
1736    Fl_Group {} {
1737      label {Colors-Fonts/Signal Level}
1738      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
1739      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Colors-Fonts/Signal Level"));}
1740      code1 {config_pages.push_back(p);}
1741      code2 {tab_tree->add(_("Colors-Fonts/Signal Level"));}
1742      code3 {tab_tree->close(_("Colors-Fonts"));}
1743    } {
1744      Fl_Box {} {
1745        label {Signal Level Indicator}
1746        xywh {340 39 316 21}
1747      }
1748      Fl_Box lowcolor {
1749        xywh {365 96 21 21} box DIAMOND_DOWN_BOX color 0
1750        code0 {o->color(progdefaults.LowSignal);}
1751      }
1752      Fl_Button btnLowSignal {
1753        label Low
1754        callback {progdefaults.LowSignal = fl_show_colormap(progdefaults.LowSignal);
1755lowcolor->color(progdefaults.LowSignal);
1756lowcolor->redraw();
1757progdefaults.changed = true;}
1758        xywh {402 96 70 21}
1759      }
1760      Fl_Box normalcolor {
1761        xywh {365 142 21 21} box DIAMOND_DOWN_BOX color 2
1762        code0 {o->color(progdefaults.NormSignal);}
1763      }
1764      Fl_Counter cnt_normal_signal_level {
1765        label {Transition
1766Level (dB)}
1767        callback {progdefaults.normal_signal_level = o->value();
1768
1769if (progdefaults.normal_signal_level > progdefaults.high_signal_level)
1770  progdefaults.high_signal_level = progdefaults.normal_signal_level + 0.1;
1771
1772if (progdefaults.high_signal_level > progdefaults.over_signal_level)
1773  progdefaults.over_signal_level = progdefaults.high_signal_level + 0.1;
1774
1775if (progdefaults.over_signal_level > 0)
1776  progdefaults.over_signal_level = 0;
1777
1778cnt_normal_signal_level->value(progdefaults.normal_signal_level);
1779cnt_high_signal_level->value(progdefaults.high_signal_level);
1780cnt_over_signal_level->value(progdefaults.over_signal_level);}
1781        xywh {480 119 114 21} align 1 minimum -90 maximum 0
1782        code0 {o->value(progdefaults.normal_signal_level);}
1783        code1 {o->lstep(1.0);}
1784      }
1785      Fl_Button btnNormalSignal {
1786        label Normal
1787        callback {progdefaults.NormSignal = fl_show_colormap(progdefaults.NormSignal);
1788normalcolor->color(progdefaults.NormSignal);
1789normalcolor->redraw();
1790progdefaults.changed = true;}
1791        xywh {402 142 70 21}
1792      }
1793      Fl_Box highcolor {
1794        xywh {365 189 21 21} box DIAMOND_DOWN_BOX color 3
1795        code0 {o->color(progdefaults.HighSignal);}
1796      }
1797      Fl_Counter cnt_high_signal_level {
1798        callback {progdefaults.high_signal_level = o->value();
1799
1800if (progdefaults.normal_signal_level > progdefaults.high_signal_level)
1801  progdefaults.high_signal_level = progdefaults.normal_signal_level + 0.1;
1802
1803if (progdefaults.high_signal_level > progdefaults.over_signal_level)
1804  progdefaults.over_signal_level = progdefaults.high_signal_level + 0.1;
1805
1806if (progdefaults.over_signal_level > 0)
1807  progdefaults.over_signal_level = 0;
1808
1809cnt_normal_signal_level->value(progdefaults.normal_signal_level);
1810cnt_high_signal_level->value(progdefaults.high_signal_level);
1811cnt_over_signal_level->value(progdefaults.over_signal_level);}
1812        xywh {480 165 114 21} minimum -90 maximum 0
1813        code0 {o->value(progdefaults.high_signal_level);}
1814        code1 {o->lstep(1.0);}
1815      }
1816      Fl_Button btnHighSignal {
1817        label High
1818        callback {progdefaults.HighSignal = fl_show_colormap(progdefaults.HighSignal);
1819highcolor->color(progdefaults.HighSignal);
1820highcolor->redraw();
1821progdefaults.changed = true;}
1822        xywh {402 189 70 21}
1823      }
1824      Fl_Box overcolor {
1825        xywh {365 236 21 21} box DIAMOND_DOWN_BOX color 1
1826        code0 {o->color(progdefaults.OverSignal);}
1827      }
1828      Fl_Counter cnt_over_signal_level {
1829        callback {progdefaults.over_signal_level = o->value();
1830
1831if (progdefaults.normal_signal_level > progdefaults.high_signal_level)
1832  progdefaults.high_signal_level = progdefaults.normal_signal_level + 0.1;
1833
1834if (progdefaults.high_signal_level > progdefaults.over_signal_level)
1835  progdefaults.over_signal_level = progdefaults.high_signal_level + 0.1;
1836
1837if (progdefaults.over_signal_level > 0)
1838  progdefaults.over_signal_level = 0;
1839
1840cnt_normal_signal_level->value(progdefaults.normal_signal_level);
1841cnt_high_signal_level->value(progdefaults.high_signal_level);
1842cnt_over_signal_level->value(progdefaults.over_signal_level);}
1843        xywh {480 212 114 21} minimum -90 maximum 0
1844        code0 {o->value(progdefaults.over_signal_level);}
1845        code1 {o->lstep(1.0);}
1846      }
1847      Fl_Button btnOverSignal {
1848        label Over
1849        callback {progdefaults.OverSignal = fl_show_colormap(progdefaults.OverSignal);
1850overcolor->color(progdefaults.OverSignal);
1851overcolor->redraw();
1852progdefaults.changed = true;}
1853        xywh {402 236 70 21}
1854      }
1855      Fl_Progress {} {
1856        label label
1857        xywh {295 289 416 25} hide
1858      }
1859      Fl_Progress sig_vumeter {
1860        label label
1861        xywh {322 280 360 24}
1862        code0 {\#include "vumeter.h"}
1863        class vumeter
1864      }
1865      Fl_Box {} {
1866        label {Input signal level}
1867        xywh {375 307 237 17}
1868      }
1869      Fl_Button btn_default_signal_levels {
1870        label Default
1871        callback {cnt_normal_signal_level->value(
1872  progdefaults.normal_signal_level = -60.0);
1873cnt_high_signal_level->value(
1874  progdefaults.high_signal_level = -6.0);
1875cnt_over_signal_level->value(
1876  progdefaults.over_signal_level = -3.0);}
1877        xywh {618 166 70 20}
1878      }
1879    }
1880    Fl_Group {} {
1881      label {Contests/General}
1882      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
1883      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Contests/General"));}
1884      code1 {config_pages.push_back(p);}
1885      code2 {tab_tree->add(_("Contests/General"));}
1886    } {
1887      Fl_Group listbox_contest {
1888        label Contest
1889        callback {progdefaults.logging = o->index();
1890if (contests[progdefaults.logging].name == "State QSO parties") {
1891  progdefaults.CONTESTnotes = QSOparties.qso_parties[progdefaults.SQSOcontest].notes;
1892  progdefaults.SQSOinstate = (QSOparties.qso_parties[progdefaults.SQSOcontest].instate[0] == 'T');
1893} else {
1894  listbox_QP_contests->index(0);
1895  progdefaults.CONTESTnotes = contests[progdefaults.logging].notes;
1896}
1897inp_contest_notes->value(progdefaults.CONTESTnotes.c_str());
1898UI_select();
1899clear_log_fields();
1900clearQSO();
1901progdefaults.changed = true;} open
1902        tooltip {Select Logging as QSO or Contest} xywh {287 41 500 24} box DOWN_BOX color 7 align 4
1903        code0 {\#include "contest.h"}
1904        code1 {o->add(contest_names().c_str());}
1905        code2 {o->index(progdefaults.logging);}
1906        class Fl_ListBox
1907      } {}
1908      Fl_Group listbox_QP_contests {
1909        label {State QSO Party}
1910        callback {int n = o->index();
1911progdefaults.SQSOcontest = n;
1912progdefaults.SQSOinstate = (QSOparties.qso_parties[n].instate[0] == 'T');
1913if (contests[progdefaults.logging].name == "State QSO parties") {
1914  progdefaults.CONTESTnotes = QSOparties.qso_parties[n].notes;
1915  inp_contest_notes->value(progdefaults.CONTESTnotes.c_str());
1916} else
1917  inp_contest_notes->value("");
1918adjust_for_contest(0);
1919UI_select();
1920clear_log_fields();
1921clearQSO();
1922progdefaults.changed = true;} open
1923        xywh {367 75 420 24} box DOWN_BOX color 7 align 4
1924        code0 {\#include "contest.h"}
1925        code1 {o->labelsize(FL_NORMAL_SIZE);}
1926        code2 {o->add(QSOparties.names().c_str());}
1927        code3 {o->index(progdefaults.SQSOcontest);}
1928        class Fl_ListBox
1929      } {}
1930      Fl_Input inp_contest_notes {
1931        label {Text capture order}
1932        tooltip {Context Notes} xywh {367 110 420 24}
1933        code0 {o->value(progdefaults.CONTESTnotes.c_str());}
1934        class Fl_Input2
1935      }
1936      Fl_Group {} {
1937        label {Duplicate check, CALL plus} open
1938        xywh {204 149 590 86} box ENGRAVED_FRAME align 21
1939      } {
1940        Fl_Light_Button btnDupCheckOn {
1941          label {On/Off}
1942          callback {progdefaults.EnableDupCheck = o->value();
1943progdefaults.changed = true;}
1944          tooltip {Check for duplicates} xywh {221 174 74 20} selection_color 2
1945          code0 {o->value(progdefaults.EnableDupCheck);}
1946        }
1947        Fl_Check_Button btnDupBand {
1948          label Band
1949          callback {progdefaults.dupband = o->value();
1950progdefaults.changed = true;}
1951          tooltip {Bands must match} xywh {333 174 70 20} down_box DOWN_BOX
1952          code0 {o->value(progdefaults.dupband);}
1953        }
1954        Fl_Check_Button btnDupMode {
1955          label Mode
1956          callback {progdefaults.dupmode = o->value();
1957progdefaults.changed = true;}
1958          tooltip {Mode must match} xywh {446 174 70 20} down_box DOWN_BOX
1959          code0 {o->value(progdefaults.dupmode);}
1960        }
1961        Fl_Check_Button btnDupTimeSpan {
1962          label {Time span over}
1963          callback {progdefaults.duptimespan=(int)o->value();
1964progdefaults.changed = true;}
1965          tooltip {QSO must not occur within a time period of} xywh {571 174 129 20} down_box DOWN_BOX
1966          code0 {o->value(progdefaults.duptimespan);}
1967        }
1968        Fl_Button btnDupColor {
1969          label {Dup Color}
1970          callback {fl_color_chooser("Dup Check",
1971  progdefaults.dup_color.R,
1972  progdefaults.dup_color.G,
1973  progdefaults.dup_color.B);
1974o->color(
1975  fl_rgb_color(
1976    progdefaults.dup_color.R,
1977    progdefaults.dup_color.G,
1978    progdefaults.dup_color.B));
1979o->redraw();
1980progdefaults.changed = true;}
1981          tooltip {Left click to select dup color} xywh {221 201 90 24} box DOWN_BOX down_box DOWN_BOX color 7 selection_color 7
1982          code0 {o->color(fl_rgb_color(progdefaults.dup_color.R, progdefaults.dup_color.G, progdefaults.dup_color.B));}
1983          code1 {\#include <FL/Fl_Color_Chooser.H>}
1984        }
1985        Fl_Button btnPossibleDupColor {
1986          label {? Dup Color}
1987          callback {fl_color_chooser("Possible_Dup Check",
1988  progdefaults.possible_dup_color.R,
1989  progdefaults.possible_dup_color.G,
1990  progdefaults.possible_dup_color.B);
1991o->color(
1992  fl_rgb_color(
1993    progdefaults.possible_dup_color.R,
1994    progdefaults.possible_dup_color.G,
1995    progdefaults.possible_dup_color.B));
1996o->redraw();
1997progdefaults.changed = true;}
1998          tooltip {Left click to select possible dup color} xywh {333 201 90 24} box DOWN_BOX down_box DOWN_BOX color 7 selection_color 7
1999          code0 {o->color(fl_rgb_color(progdefaults.possible_dup_color.R, progdefaults.possible_dup_color.G, progdefaults.possible_dup_color.B));}
2000          code1 {\#include <FL/Fl_Color_Chooser.H>}
2001        }
2002        Fl_Check_Button btnDupXchg1 {
2003          label {Exchange In}
2004          callback {progdefaults.dupxchg1 = o->value();
2005progdefaults.changed = true;}
2006          tooltip {free form 1 must match} xywh {446 203 105 20} down_box DOWN_BOX
2007          code0 {o->value(progdefaults.dupxchg1);}
2008        }
2009        Fl_Check_Button btnDupState {
2010          label State
2011          callback {progdefaults.dupstate = o->value();
2012progdefaults.changed = true;}
2013          tooltip {State must match} xywh {571 203 70 20} down_box DOWN_BOX
2014          code0 {o->value(progdefaults.dupstate);}
2015        }
2016        Fl_Value_Input nbrTimeSpan {
2017          label minutes
2018          callback {progdefaults.timespan = (int)o->value();
2019progdefaults.changed = true;}
2020          tooltip {Enter time span in minutes} xywh {664 201 53 24} align 8 maximum 1440 step 1 value 120
2021          code0 {o->value(progdefaults.timespan);}
2022          class Fl_Value_Input2
2023        }
2024      }
2025      Fl_Group {} {
2026        label {Contest Exchange / Serial \#} open
2027        xywh {204 233 590 100} box ENGRAVED_FRAME align 21
2028      } {
2029        Fl_Input inpSend1 {
2030          label Send
2031          callback {progdefaults.myXchg=o->value();
2032progdefaults.changed = true;}
2033          tooltip {free form exchange} xywh {269 257 200 24}
2034          code0 {o->value(progdefaults.myXchg.c_str());}
2035          code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2036          class Fl_Input2
2037        }
2038        Fl_Check_Button btn599 {
2039          label {RST always 599/59}
2040          callback {progdefaults.fixed599 = o->value();
2041progdefaults.changed = true;}
2042          tooltip {Force RST in/out to 599/59} xywh {484 259 130 20} down_box DOWN_BOX
2043          code0 {o->value(progdefaults.fixed599);}
2044        }
2045        Fl_Check_Button btnCutNbrs {
2046          label {Send CW cut \#'s}
2047          callback {progdefaults.cutnbrs=o->value();
2048progdefaults.changed = true;}
2049          tooltip {0 = T; 9 = N} xywh {644 259 139 20} down_box DOWN_BOX
2050          code0 {o->value(progdefaults.cutnbrs);}
2051        }
2052        Fl_Group {} {open
2053          xywh {211 286 576 42} box ENGRAVED_FRAME
2054        } {
2055          Fl_Value_Input nbrContestStart {
2056            label {Start Nbr}
2057            callback {progdefaults.ContestStart = (int)o->value();
2058progdefaults.changed = true;}
2059            tooltip {Starting number} xywh {298 295 45 24} maximum 10000 step 1
2060            code0 {o->value(progdefaults.ContestStart);}
2061            class Fl_Value_Input2
2062          }
2063          Fl_Value_Input nbrContestDigits {
2064            label Digits
2065            callback {progdefaults.ContestDigits = (int)o->value();
2066progdefaults.changed = true;}
2067            tooltip {Number of digits in serial number} xywh {420 295 46 24} minimum 1 maximum 5 step 1 value 3
2068            class Fl_Value_Input2
2069          }
2070          Fl_Check_Button btnUseLeadingZeros {
2071            label {Use leading zeros}
2072            callback {progdefaults.UseLeadingZeros = o->value();
2073progdefaults.changed = true;}
2074            tooltip {Insert leading zeros into Xmtd serial number} xywh {485 297 157 20} down_box DOWN_BOX value 1
2075          }
2076          Fl_Button btnResetSerNbr {
2077            label Reset
2078            callback {cb_ResetSerNbr();}
2079            tooltip {Initialize the QSO logging fields} xywh {682 295 71 24}
2080          }
2081        }
2082      }
2083    }
2084    Fl_Group {} {
2085      label {Contests/Field Day}
2086      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2087      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Contests/Field Day"));}
2088      code1 {config_pages.push_back(p);}
2089      code2 {tab_tree->add(_("Contests/Field Day"));}
2090    } {
2091      Fl_Input inp_my_FD_call {
2092        label {Operator Call}
2093        callback {progdefaults.fd_op_call=o->value();
2094progdefaults.changed = true;}
2095        tooltip {Field Day Callsign
2096May be same as OP callsign} xywh {346 73 80 24}
2097        code0 {o->value(progdefaults.fd_op_call.c_str());}
2098        code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2099        class Fl_Input2
2100      }
2101      Fl_Input inp_my_FD_section {
2102        label {My Section}
2103        callback {progdefaults.my_FD_section=o->value();
2104progdefaults.changed = true;}
2105        tooltip {Field Day Section} xywh {654 73 45 24}
2106        code0 {o->value(progdefaults.my_FD_section.c_str());}
2107        code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2108        class Fl_Input2
2109      }
2110      Fl_Input inp_my_FD_class {
2111        label {My Class}
2112        callback {progdefaults.my_FD_class=o->value();
2113progdefaults.changed = true;}
2114        tooltip {Field Day Class} xywh {507 73 50 24}
2115        code0 {o->value(progdefaults.my_FD_class.c_str());}
2116        code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2117        class Fl_Input2
2118      }
2119    }
2120    Fl_Group {} {
2121      label {Contests/JOTA School}
2122      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2123      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Contests/JOTA School"));}
2124      code1 {config_pages.push_back(p);}
2125      code2 {tab_tree->add(_("Contests/JOTA School"));}
2126      code3 {tab_tree->close(_("Contests"));}
2127    } {
2128      Fl_Group {} {
2129        label {School Round Up} open
2130        xywh {211 137 580 53} box ENGRAVED_BOX align 21
2131      } {
2132        Fl_Input inp_my_SCR_class {
2133          label {My Class}
2134          callback {progdefaults.my_SCR_class=o->value();
2135progdefaults.changed = true;}
2136          tooltip {School Round Up - allowable I, H, O - see rules} xywh {397 159 69 24}
2137          code0 {o->value(progdefaults.my_SCR_class.c_str());}
2138          code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2139          class Fl_Input2
2140        }
2141      }
2142      Fl_Group {} {
2143        label {Jamboree OTA} open
2144        xywh {211 44 580 89} box ENGRAVED_BOX align 21
2145      } {
2146        Fl_Input inp_my_JOTA_troop {
2147          label {My Troop}
2148          callback {progdefaults.my_JOTA_troop=o->value();
2149progdefaults.changed = true;}
2150          tooltip {My JOTA Troop} xywh {396 67 200 24}
2151          code0 {o->value(progdefaults.my_JOTA_troop.c_str());}
2152          code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2153          class Fl_Input2
2154        }
2155        Fl_Input inp_my_JOTA_scout {
2156          label {Scout Op'}
2157          callback {progdefaults.my_JOTA_scout = o->value();
2158progdefaults.changed=true;}
2159          tooltip {Scout Operator Name} xywh {396 98 200 24}
2160          code0 {o->value(progdefaults.my_JOTA_scout.c_str());}
2161          code1 {inpSend1->labelsize(FL_NORMAL_SIZE);}
2162          class Fl_Input2
2163        }
2164      }
2165    }
2166    Fl_Group {} {
2167      label {IDs/CW}
2168      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2169      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("IDs/CW"));}
2170      code1 {config_pages.push_back(p);}
2171      code2 {tab_tree->add(_("IDs/CW"));}
2172    } {
2173      Fl_Group sld {
2174        label {CW Postamble ID} open
2175        xywh {234 83 536 127} box ENGRAVED_FRAME align 21
2176      } {
2177        Fl_Check_Button btnCWID {
2178          label {Transmit callsign}
2179          callback {progdefaults.CWid = o->value();
2180progdefaults.changed = true;}
2181          tooltip {Send Callsign in CW at end of every transmission} xywh {287 121 140 24} down_box DOWN_BOX
2182          code0 {o->value(progdefaults.CWid);}
2183        }
2184        Fl_Value_Slider sldrCWIDwpm {
2185          label {Speed (WPM):}
2186          callback {progdefaults.CWIDwpm = (int)o->value();
2187progdefaults.changed = true;}
2188          tooltip {Send at this WPM} xywh {287 164 180 20} type Horizontal align 1 minimum 15 maximum 40 step 1 value 18 textsize 14
2189          code0 {o->value(progdefaults.CWIDwpm);}
2190          code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
2191          class Fl_Value_Slider2
2192        }
2193        Fl_Button bCWIDModes {
2194          label {CW ID modes}
2195          callback {mode_browser->label(o->label());
2196mode_browser->callback(0);
2197mode_browser->show_(&progdefaults.cwid_modes);
2198progdefaults.changed = true;}
2199          xywh {485 121 120 24}
2200        }
2201      }
2202    }
2203    Fl_Group {} {
2204      label {IDs/RsID}
2205      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2206      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("IDs/RsID"));}
2207      code1 {config_pages.push_back(p);}
2208      code2 {tab_tree->add(_("IDs/RsID"));}
2209    } {
2210      Fl_Group {} {
2211        label {Reed-Solomon ID (Rx)} open
2212        xywh {243 22 535 210} box ENGRAVED_FRAME align 21
2213      } {
2214        Fl_Check_Button chkRSidNotifyOnly {
2215          label {Notify only}
2216          callback {progdefaults.rsid_notify_only = o->value();
2217notify_create_rsid_event(progdefaults.rsid_notify_only);
2218if (progdefaults.rsid_notify_only) {
2219    chkRetainFreqLock->deactivate();
2220    chkDisableFreqChange->deactivate();
2221}
2222else {
2223    chkRetainFreqLock->activate();
2224    chkDisableFreqChange->activate();
2225}
2226progdefaults.changed = true;}
2227          tooltip {Check this to be notified when an RSID is received
2228without changing modem and frequency} xywh {251 79 168 20} down_box DOWN_BOX
2229          code0 {chkRSidNotifyOnly->value(progdefaults.rsid_notify_only);}
2230        }
2231        Fl_Button bRSIDRxModes {
2232          label {Receive modes}
2233          callback {mode_browser->label(o->label());
2234mode_browser->callback(0);
2235mode_browser->show_(&progdefaults.rsid_rx_modes);
2236progdefaults.changed = true;}
2237          xywh {251 48 130 24}
2238        }
2239        Fl_Check_Button chkRSidWideSearch {
2240          label {Searches passband}
2241          callback {progdefaults.rsidWideSearch=o->value();
2242rxid_selection_color();
2243progdefaults.changed = true;}
2244          tooltip {ON - search over entire waterfall
2245OFF - limit search to +/- 200 Hz} xywh {251 110 203 20} down_box DOWN_BOX
2246          code0 {o->value(progdefaults.rsidWideSearch);}
2247        }
2248        Fl_Check_Button chkRSidMark {
2249          label {Mark prev freq/mode}
2250          callback {progdefaults.rsid_mark = o->value();
2251progdefaults.changed = true;}
2252          tooltip {Insert RX text marker before
2253changing frequency and modem} xywh {251 142 203 20} down_box DOWN_BOX
2254          code0 {chkRSidMark->value(progdefaults.rsid_mark);}
2255        }
2256        Fl_Check_Button chkRSidAutoDisable {
2257          label {Disables detector}
2258          callback {progdefaults.rsid_auto_disable = o->value();
2259progdefaults.changed = true;}
2260          tooltip {Disable further detection when RSID is received} xywh {251 174 203 20} down_box DOWN_BOX
2261          code0 {if (progdefaults.rsid_notify_only) progdefaults.rsid_auto_disable = false;}
2262          code1 {chkRSidAutoDisable->value(progdefaults.rsid_auto_disable);}
2263          code2 {if (progdefaults.rsid_notify_only) chkRSidAutoDisable->deactivate();}
2264        }
2265        Fl_Group listbox_rsid_errors {
2266          label {Allow errors}
2267          callback {progdefaults.RsID_label_type = o->index();
2268progdefaults.changed = true;} open
2269          tooltip {Low = zero errors
2270Medium = 1 error
2271High = 2 errors} xywh {251 200 100 22} box DOWN_BOX color 7 align 8
2272          code0 {listbox_rsid_errors->add(_("Low")); listbox_rsid_errors->add(_("Medium")); listbox_rsid_errors->add(_("High"));}
2273          code1 {listbox_rsid_errors->index(progdefaults.RsID_label_type);}
2274          code2 {o->labelsize(FL_NORMAL_SIZE);}
2275          class Fl_ListBox
2276        } {}
2277        Fl_Counter val_RSIDsquelch {
2278          label {Squelch open (sec)}
2279          callback {progdefaults.rsid_squelch = (int)o->value();
2280progdefaults.changed = true;}
2281          tooltip {Use for triggering amplifier carrier detect} xywh {471 201 140 21} align 8 minimum 0 maximum 300 step 1
2282          code0 {o->value(progdefaults.rsid_squelch);}
2283          code1 {o->lstep(10.0);}
2284        }
2285        Fl_Check_Button chkRSidShowAlert {
2286          label {Disable alert dialog}
2287          callback {progdefaults.disable_rsid_warning_dialog_box = o->value();
2288progdefaults.changed = true;}
2289          tooltip {Do not show RsID alert dialog box} xywh {487 110 203 20} down_box DOWN_BOX
2290          code0 {o->value(progdefaults.disable_rsid_warning_dialog_box);}
2291        }
2292        Fl_Check_Button chkRetainFreqLock {
2293          label {Retain tx freq lock}
2294          callback {progdefaults.retain_freq_lock = o->value();
2295progdefaults.changed = true;}
2296          tooltip {Retain TX lock frequency (Lk) when changing to RX RsID frequency} xywh {487 142 203 20} down_box DOWN_BOX
2297          code0 {o->value(progdefaults.retain_freq_lock);}
2298        }
2299        Fl_Check_Button chkDisableFreqChange {
2300          label {Disable freq change}
2301          callback {progdefaults.disable_rsid_freq_change = o->value();
2302progdefaults.changed = true;}
2303          tooltip {Do not automatically change to RX RsID frequency} xywh {487 174 203 20} down_box DOWN_BOX
2304          code0 {o->value(progdefaults.disable_rsid_freq_change);}
2305        }
2306        Fl_Group {} {
2307          label {The RsID notification message contents and
2308display characteristics are configured on the
2309"Notifications" configure dialog.} open
2310          xywh {427 41 330 60} box BORDER_BOX align 21
2311        } {}
2312      }
2313      Fl_Group {} {
2314        label {Pre-Signal Tone} open
2315        xywh {243 245 265 97} box ENGRAVED_FRAME align 21
2316      } {
2317        Fl_Counter val_pretone {
2318          label Seconds
2319          callback {progdefaults.pretone = o->value();
2320progdefaults.changed = true;}
2321          tooltip {Use for triggering amplifier carrier detect} xywh {299 283 140 21} minimum 0 maximum 10
2322          code0 {o->value(progdefaults.pretone);}
2323        }
2324      }
2325      Fl_Group {} {
2326        label {Reed-Solomon ID (Tx)} open
2327        xywh {511 245 265 97} box ENGRAVED_FRAME align 21
2328      } {
2329        Fl_Button bRSIDTxModes {
2330          label {Transmit modes}
2331          callback {mode_browser->label(o->label());
2332mode_browser->callback(0);
2333mode_browser->show_(&progdefaults.rsid_tx_modes);
2334progdefaults.changed = true;}
2335          xywh {588 272 130 24}
2336        }
2337        Fl_Check_Button btn_post_rsid {
2338          label {End of xmt ID}
2339          callback {progdefaults.rsid_post=o->value();
2340progdefaults.changed = true;}
2341          tooltip {Add RsID signal to end of transmission} xywh {588 307 97 17} down_box DOWN_BOX
2342          code0 {o->value(progdefaults.rsid_post);}
2343        }
2344      }
2345    }
2346    Fl_Group {} {
2347      label {IDs/Video}
2348      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2349      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("IDs/Video"));}
2350      code1 {config_pages.push_back(p);}
2351      code2 {tab_tree->add(_("IDs/Video"));}
2352      code3 {tab_tree->close(_("IDs"));}
2353    } {
2354      Fl_Group {} {
2355        label {Video Preamble ID} open
2356        xywh {237 47 536 189} box ENGRAVED_FRAME align 21
2357      } {
2358        Fl_Check_Button btnsendid {
2359          label {Transmit mode ID}
2360          callback {progdefaults.sendid=o->value();
2361progdefaults.changed = true;}
2362          tooltip {Waterfall video ID} xywh {255 81 150 20} down_box DOWN_BOX
2363        }
2364        Fl_Check_Button btnsendvideotext {
2365          label {Transmit video text}
2366          callback {progdefaults.sendtextid=o->value();
2367progdefaults.changed = true;}
2368          tooltip {Waterfall video text} xywh {255 113 155 20} down_box DOWN_BOX
2369          code0 {o->value(progdefaults.sendtextid);}
2370        }
2371        Fl_Input valVideotext {
2372          label {:}
2373          callback {progdefaults.strTextid = o->value();
2374progdefaults.changed = true;}
2375          tooltip {Limit to a few characters,
2376as in CQEM or IOTA etc.} xywh {422 111 323 24}
2377          code0 {o->value(progdefaults.strTextid.c_str());}
2378          code1 {valVideotext->labelsize(FL_NORMAL_SIZE);}
2379          class Fl_Input2
2380        }
2381        Fl_Check_Button chkID_SMALL {
2382          label {Use small font}
2383          callback {progdefaults.ID_SMALL=o->value();
2384progdefaults.changed = true;}
2385          tooltip {ON - small font
2386OFF - large font} xywh {255 145 120 20} down_box DOWN_BOX value 1
2387          code0 {o->value(progdefaults.ID_SMALL);}
2388        }
2389        Fl_Value_Slider sldrVideowidth {
2390          label {Chars/Row:}
2391          callback {progdefaults.videowidth = (int)o->value();
2392progdefaults.changed = true;}
2393          tooltip {Set the number of characters per row} xywh {495 143 125 24} type Horizontal align 4 minimum 1 maximum 8 step 1 value 4 textsize 14
2394          code0 {o->value(progdefaults.videowidth);}
2395          code2 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
2396          class Fl_Value_Slider2
2397        }
2398        Fl_Check_Button btn_vidlimit {
2399          label {500 Hz limit}
2400          callback {progdefaults.vidlimit=o->value();
2401progdefaults.changed = true;}
2402          xywh {255 177 110 15} down_box DOWN_BOX
2403          code0 {o->value(progdefaults.vidlimit);}
2404        }
2405        Fl_Check_Button btn_vidmodelimit {
2406          label {Mode width limit}
2407          callback {progdefaults.vidmodelimit=o->value();
2408progdefaults.changed=true;}
2409          xywh {255 205 110 15} down_box DOWN_BOX
2410          code0 {o->value(progdefaults.vidmodelimit);}
2411        }
2412        Fl_Button bVideoIDModes {
2413          label {Video ID modes}
2414          callback {mode_browser->label(o->label());
2415mode_browser->callback(0);
2416mode_browser->show_(&progdefaults.videoid_modes);
2417progdefaults.changed = true;}
2418          xywh {625 78 120 24}
2419        }
2420      }
2421    }
2422    Fl_Group {} {
2423      label {Logging/MacLogger}
2424      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2425      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/MacLogger"));}
2426      code1 {config_pages.push_back(p);}
2427      code2 {tab_tree->add(_("Logging/MacLogger"));}
2428    } {
2429      Fl_Check_Button btnConnectToMaclogger {
2430        label {Connect to MacLogger}
2431        callback {progdefaults.connect_to_maclogger = o->value();
2432if (progdefaults.connect_to_maclogger == false)
2433  maclogger_close();
2434else
2435  maclogger_init();
2436progdefaults.changed = true;}
2437        xywh {211 35 186 20} down_box DOWN_BOX
2438        code0 {o->value(progdefaults.connect_to_maclogger);}
2439        code1 {\#include "maclogger.h"}
2440      }
2441      Fl_Check_Button btn_capture_maclogger_radio {
2442        label {Capture Radio Report}
2443        callback {progdefaults.capture_maclogger_radio = o->value();
2444progdefaults.changed = true;}
2445        xywh {406 35 186 20} down_box DOWN_BOX value 1
2446        code0 {o->value(progdefaults.capture_maclogger_radio);}
2447      }
2448      Fl_Check_Button btn_capture_maclogger_log {
2449        label {Capture Log Report}
2450        callback {progdefaults.capture_maclogger_log = o->value();
2451progdefaults.changed = true;}
2452        xywh {406 60 186 21} down_box DOWN_BOX
2453        code0 {o->value(progdefaults.capture_maclogger_log);}
2454      }
2455      Fl_Check_Button btn_capture_maclogger_lookup {
2456        label {Capture Lookup }
2457        callback {progdefaults.capture_maclogger_lookup = o->value();
2458progdefaults.changed = true;}
2459        xywh {606 35 186 20} down_box DOWN_BOX
2460        code0 {o->value(progdefaults.capture_maclogger_lookup);}
2461      }
2462      Fl_Check_Button btn_capture_maclogger_spot_tune {
2463        label {Capture Spot Tune}
2464        callback {progdefaults.capture_maclogger_spot_tune = o->value();
2465progdefaults.changed = true;}
2466        xywh {606 60 186 21} down_box DOWN_BOX
2467        code0 {o->value(progdefaults.capture_maclogger_spot_tune);}
2468      }
2469      Fl_Check_Button btn_capture_maclogger_spot_report {
2470        label {Capture Spot Report}
2471        callback {progdefaults.capture_maclogger_spot_report = o->value();
2472progdefaults.changed = true;}
2473        xywh {606 88 186 21} down_box DOWN_BOX
2474        code0 {o->value(progdefaults.capture_maclogger_spot_report);}
2475      }
2476      Fl_Check_Button btn_enable_maclogger_log {
2477        label {Enable UDP log file}
2478        callback {progdefaults.enable_maclogger_log = o->value();
2479progdefaults.changed = true;}
2480        xywh {211 117 165 26} down_box DOWN_BOX
2481        code0 {o->value(progdefaults.enable_maclogger_log);}
2482      }
2483      Fl_Text_Display txt_UDP_data {
2484        label {UDP data stream}
2485        xywh {210 164 580 161} align 5
2486        code0 {Fl_Text_Buffer *txtbuffer = new Fl_Text_Buffer();}
2487        code1 {o->buffer(txtbuffer);}
2488      }
2489      Fl_Output txt_maclogger_log_filename {
2490        xywh {379 117 272 26}
2491        code0 {o->value(progdefaults.maclogger_log_filename.c_str());}
2492      }
2493      Fl_Button {} {
2494        label {Clear UDP text}
2495        callback {txt_UDP_data->buffer()->text("");}
2496        xywh {661 117 129 26}
2497      }
2498      Fl_Check_Button btn_maclogger_spot_rx {
2499        label {Tune to Rx Spot}
2500        callback {progdefaults.maclogger_spot_rx = o->value();
2501progdefaults.changed = true;}
2502        tooltip {ON - use Rx spot freq
2503OFF - use Tx spot freq} xywh {406 88 186 21} down_box DOWN_BOX
2504        code0 {o->value(progdefaults.maclogger_spot_rx);}
2505      }
2506    }
2507    Fl_Group {} {
2508      label {Logging/N3FJP logs}
2509      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2510      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/N3FJP logs"));}
2511      code1 {config_pages.push_back(p);}
2512      code2 {tab_tree->add(_("Logging/N3FJP logs"));}
2513    } {
2514      Fl_Text_Display txt_N3FJP_data {
2515        label {TCP/IP Data Stream}
2516        xywh {205 94 590 150} align 5
2517        code0 {Fl_Text_Buffer *txtbuffer = new Fl_Text_Buffer();}
2518        code1 {o->buffer(txtbuffer);}
2519      }
2520      Fl_Button {} {
2521        label {Clear text}
2522        callback {txt_N3FJP_data->buffer()->text("");}
2523        xywh {701 247 90 24}
2524      }
2525      Fl_Input txt_N3FJP_ip_address {
2526        label Address
2527        callback {progdefaults.N3FJP_address = o->value();
2528progdefaults.changed = true;}
2529        tooltip {N3FJP Server IP Address} xywh {205 49 350 25} align 5
2530        code0 {o->labelsize(FL_NORMAL_SIZE);}
2531        code1 {o->value(progdefaults.N3FJP_address.c_str());}
2532        class Fl_Input2
2533      }
2534      Fl_Input txt_N3FJP_ip_port_no {
2535        label Port
2536        callback {progdefaults.N3FJP_port = o->value();
2537progdefaults.changed = true;}
2538        tooltip {N3FJP Server IP Port} xywh {565 49 55 25} align 5
2539        code0 {o->labelsize(FL_NORMAL_SIZE);}
2540        code1 {o->value(progdefaults.N3FJP_port.c_str());}
2541        class Fl_Input2
2542      }
2543      Fl_Button btn_default_N3FJP_ip {
2544        label Default
2545        callback {txt_N3FJP_ip_address->value("127.0.0.1");
2546progdefaults.N3FJP_address = "127.0.0.1";
2547txt_N3FJP_ip_port_no->value("1100");
2548progdefaults.N3FJP_port = "1100";
2549progdefaults.changed = true;}
2550        tooltip {Returns IP Address and port
2551number to the default value.} xywh {623 49 67 25}
2552      }
2553      Fl_Check_Button btn_enable_N3FJP_log {
2554        label {Enable Data Stream}
2555        callback {progdefaults.enable_N3FJP_log = o->value();
2556progdefaults.changed = true;}
2557        xywh {210 246 165 26} down_box DOWN_BOX
2558        code0 {o->value(progdefaults.enable_N3FJP_log);}
2559      }
2560      Fl_Check_Button btn_connect_to_n3fjp {
2561        label Connect
2562        callback {progdefaults.connect_to_n3fjp=o->value();
2563progdefaults.changed=true;}
2564        xywh {695 39 70 15} down_box DOWN_BOX
2565        code0 {o->value(progdefaults.connect_to_n3fjp);}
2566      }
2567      Fl_Box box_n3fjp_connected {
2568        label Connected
2569        xywh {695 66 16 16} box DIAMOND_DOWN_BOX color 52 selection_color 58 align 8
2570      }
2571      Fl_Check_Button btn_N3FJP_sweet_spot {
2572        label {Center DXspot freq at sweet spot}
2573        callback {progdefaults.N3FJP_sweet_spot = o->value();
2574progdefaults.changed = true;}
2575        tooltip {N3FJP DX spots centered on mode sweet spot} xywh {210 299 255 26} down_box DOWN_BOX
2576        code0 {o->value(progdefaults.N3FJP_sweet_spot);}
2577      }
2578      Fl_Check_Button btn_N3FJP_modem_carrier {
2579        label {Report actual modem RF frequency}
2580        callback {progdefaults.N3FJP_modem_carrier = o->value();
2581progdefaults.changed = true;}
2582        tooltip {Suppressed carrier +/- AF injection frequency} xywh {475 299 255 26} down_box DOWN_BOX
2583        code0 {o->value(progdefaults.N3FJP_modem_carrier);}
2584      }
2585      Fl_Check_Button btn_enable_N3FJP_RIGTX {
2586        label {PTT via <RIGTX> and <RIGRX>}
2587        callback {progdefaults.enable_N3FJP_RIGTX = o->value();
2588progdefaults.changed = true;}
2589        xywh {210 273 165 26} down_box DOWN_BOX
2590        code0 {o->value(progdefaults.enable_N3FJP_RIGTX);}
2591      }
2592    }
2593    Fl_Group {} {
2594      label {Logging/Call Lookup}
2595      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2596      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/Call Lookup"));}
2597      code1 {config_pages.push_back(p);}
2598      code2 {tab_tree->add(_("Logging/Call Lookup"));}
2599    } {
2600      Fl_Group {} {
2601        label {Web Browser lookup} open
2602        xywh {208 24 585 131} box ENGRAVED_FRAME align 21
2603      } {
2604        Fl_Round_Button btnQRZWEBnotavailable {
2605          label None
2606          callback {set_qrzweb_buttons(o);
2607progdefaults.QRZWEB = QRZWEBNONE;
2608progdefaults.changed = true;}
2609          tooltip {Do not use callsign lookup via web browser} xywh {248 43 61 20} down_box DOWN_BOX value 1
2610          code0 {o->value(progdefaults.QRZWEB == QRZWEBNONE);}
2611        }
2612        Fl_Round_Button btnQRZonline {
2613          label {QRZ on line}
2614          callback {set_qrzweb_buttons(o);
2615progdefaults.QRZWEB = QRZHTML;
2616progdefaults.changed = true;}
2617          tooltip {Visit QRZ web site} xywh {248 63 83 20} down_box DOWN_BOX
2618          code0 {o->value(progdefaults.QRZWEB == QRZHTML);}
2619        }
2620        Fl_Round_Button btnHAMCALLonline {
2621          label {HamCall online}
2622          callback {set_qrzweb_buttons(o);
2623progdefaults.QRZWEB = HAMCALLHTML;
2624progdefaults.changed = true;}
2625          tooltip {Visit Hamcall web site} xywh {248 84 83 20} down_box DOWN_BOX
2626          code0 {o->value(progdefaults.QRZWEB == HAMCALLHTML);}
2627        }
2628        Fl_Round_Button btnHamQTHonline {
2629          label {HamQTH online}
2630          callback {set_qrzweb_buttons(o);
2631progdefaults.QRZWEB = HAMQTHHTML;
2632progdefaults.changed = true;}
2633          tooltip {Visit hamQTH web site} xywh {248 105 20 20} down_box DOWN_BOX
2634          code0 {o->value(progdefaults.QRZWEB == HAMQTHHTML);}
2635        }
2636        Fl_Round_Button btnCallookOnline {
2637          label {Callook online}
2638          callback {set_qrzweb_buttons(o);
2639progdefaults.QRZWEB = CALLOOKHTML;
2640progdefaults.changed = true;}
2641          tooltip {Visit hamQTH web site} xywh {248 126 20 20} down_box DOWN_BOX
2642          code0 {o->value(progdefaults.QRZWEB == CALLOOKHTML);}
2643        }
2644        Fl_Input inp_qrzurl {
2645          label QRZ
2646          callback {progdefaults.qrzurl = o->value();
2647progdefaults.changed=true;}
2648          xywh {502 37 270 22}
2649          code0 {o->value(progdefaults.qrzurl.c_str());}
2650          class Fl_Input2
2651        }
2652        Fl_Input inp_hamcallurl {
2653          label Hamcall
2654          callback {progdefaults.hamcallurl = o->value();
2655progdefaults.changed = true;}
2656          xywh {502 64 270 22}
2657          code0 {o->value(progdefaults.hamcallurl.c_str());}
2658          class Fl_Input2
2659        }
2660        Fl_Input inp_hamqthurl {
2661          label HamQTH
2662          callback {progdefaults.hamqthurl = o->value();
2663progdefaults.changed = true;}
2664          xywh {502 92 270 22}
2665          code0 {o->value(progdefaults.hamqthurl.c_str());}
2666          class Fl_Input2
2667        }
2668        Fl_Input inp_callook_url {
2669          label Callook
2670          callback {progdefaults.callookurl = o->value();
2671progdefaults.changed = true;}
2672          tooltip {Callook.info web site} xywh {502 121 270 22}
2673          code0 {o->value(progdefaults.callookurl.c_str());}
2674          class Fl_Input2
2675        }
2676      }
2677      Fl_Group {} {
2678        label {Data base lookup} open
2679        xywh {208 156 585 185} box ENGRAVED_FRAME align 21
2680      } {
2681        Fl_Round_Button btnQRZXMLnotavailable {
2682          label None
2683          callback {set_qrzxml_buttons(o);
2684progdefaults.QRZXML = QRZXMLNONE;
2685progdefaults.changed = true;}
2686          tooltip {Do not use callsign database} xywh {255 179 69 20} down_box DOWN_BOX value 1
2687          code0 {o->value(progdefaults.QRZXML == QRZXMLNONE);}
2688        }
2689        Fl_Round_Button btnQRZcdrom {
2690          label {QRZ cdrom}
2691          callback {set_qrzxml_buttons(o);
2692progdefaults.QRZXML = QRZCD;
2693progdefaults.changed = true;}
2694          tooltip {Use CD or hard drive CD image} xywh {255 205 76 20} down_box DOWN_BOX
2695          code0 {o->value(progdefaults.QRZXML == QRZCD);}
2696        }
2697        Fl_Round_Button btnQRZsub {
2698          label {QRZ.com}
2699          callback {set_qrzxml_buttons(o);
2700progdefaults.QRZXML = QRZNET;
2701progdefaults.changed = true;}
2702          tooltip {You need a paid QRZ online
2703subscription to access} xywh {255 231 137 20} down_box DOWN_BOX
2704          code0 {o->value(progdefaults.QRZXML == QRZNET);}
2705        }
2706        Fl_Round_Button btnHamcall {
2707          label {Hamcall.net}
2708          callback {set_qrzxml_buttons(o);
2709progdefaults.QRZXML = HAMCALLNET;
2710progdefaults.changed = true;}
2711          tooltip {You need a paid Hamcall online
2712subscription to access} xywh {255 258 137 20} down_box DOWN_BOX
2713          code0 {o->value(progdefaults.QRZXML == HAMCALLNET);}
2714        }
2715        Fl_Round_Button btnHamQTH {
2716          label {HamQTH.com}
2717          callback {set_qrzxml_buttons(o);
2718progdefaults.QRZXML = HAMQTH;
2719progdefaults.changed = true;}
2720          tooltip {Free service courtesy of OK} xywh {255 284 137 20} down_box DOWN_BOX
2721          code0 {o->value(progdefaults.QRZXML == HAMQTH);}
2722        }
2723        Fl_Round_Button btnCALLOOK {
2724          label {Callook.info}
2725          callback {set_qrzxml_buttons(o);
2726progdefaults.QRZXML = CALLOOK;
2727progdefaults.changed = true;}
2728          tooltip {Callook.info lookup (free service US callsigns only)} xywh {255 311 113 20} down_box DOWN_BOX
2729          code0 {o->value(progdefaults.QRZXML == CALLOOK);}
2730        }
2731        Fl_Input txtQRZpathname {
2732          callback {progdefaults.QRZpathname = o->value();
2733progdefaults.QRZchanged = true;
2734progdefaults.changed = true;}
2735          tooltip {ie: /home/dave/CALLBK/ or C:/CALLBK/
2736Leave blank to search for database} xywh {372 204 401 22}
2737          code0 {o->value(progdefaults.QRZpathname.c_str());}
2738          code1 {txtQRZpathname->labelsize(FL_NORMAL_SIZE);}
2739          class Fl_Input2
2740        }
2741        Fl_Input inpQRZusername {
2742          label {User name}
2743          callback {progdefaults.QRZusername = o->value();
2744progdefaults.changed = true;}
2745          tooltip {Login name for QRZ / Hamcall / HamQTH} xywh {482 230 163 22}
2746          code0 {o->value(progdefaults.QRZusername.c_str());}
2747          code1 {inpQRZusername->labelsize(FL_NORMAL_SIZE);}
2748          class Fl_Input2
2749        }
2750        Fl_Input inpQRZuserpassword {
2751          label Password
2752          callback {progdefaults.QRZuserpassword = o->value();
2753progdefaults.changed = true;}
2754          tooltip {Password for QRZ / Hamcall / HamQTH} xywh {482 257 163 22}
2755          code0 {o->value(progdefaults.QRZuserpassword.c_str());}
2756          code1 {o->type(FL_SECRET_INPUT);}
2757          code2 {inpQRZuserpassword->labelsize(FL_NORMAL_SIZE);}
2758          class Fl_Input2
2759        }
2760        Fl_Button btnQRZpasswordShow {
2761          label Show
2762          callback {inpQRZuserpassword->type(inpQRZuserpassword->type() ^ FL_SECRET_INPUT);
2763inpQRZuserpassword->redraw();
2764o->label((inpQRZuserpassword->type() & FL_SECRET_INPUT) ? "Show" : "Hide");}
2765          tooltip {Show password in plain text} xywh {657 257 76 22}
2766        }
2767        Fl_Group {} {open
2768          xywh {377 307 403 27} box ENGRAVED_FRAME
2769        } {
2770          Fl_Check_Button btn_notes_address {
2771            label {Add address to notes field}
2772            callback {progdefaults.notes_address = o->value();
2773progdefaults.changed = true;}
2774            xywh {401 313 207 15} down_box DOWN_BOX
2775            code0 {o->value(progdefaults.notes_address);}
2776          }
2777          Fl_Check_Button btn_clear_notes {
2778            label {clear old data}
2779            callback {progdefaults.clear_notes = o->value();
2780progdefaults.changed= true;}
2781            xywh {628 313 122 15} down_box DOWN_BOX
2782            code0 {o->value(progdefaults.clear_notes);}
2783          }
2784        }
2785      }
2786    }
2787    Fl_Group {} {
2788      label {Logging/eQSL}
2789      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2790      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/eQSL"));}
2791      code1 {config_pages.push_back(p);}
2792      code2 {tab_tree->add(_("Logging/eQSL"));}
2793    } {
2794      Fl_Input inpEQSL_www_url {
2795        label {www url}
2796        callback {progdefaults.eqsl_www_url = o->value();
2797progdefaults.changed = true;}
2798        tooltip {Your login name} xywh {355 20 390 22}
2799        code0 {o->value(progdefaults.eqsl_www_url.c_str());}
2800        code1 {o->labelsize(FL_NORMAL_SIZE);}
2801        class Fl_Input2
2802      }
2803      Fl_Input inpEQSL_id {
2804        label {User ID}
2805        callback {progdefaults.eqsl_id = o->value();
2806progdefaults.changed = true;}
2807        tooltip {Your login name} xywh {354 43 150 22}
2808        code0 {o->value(progdefaults.eqsl_id.c_str());}
2809        code1 {o->labelsize(FL_NORMAL_SIZE);}
2810        class Fl_Input2
2811      }
2812      Fl_Input inpEQSL_pwd {
2813        label Password
2814        callback {progdefaults.eqsl_pwd = o->value();
2815progdefaults.changed = true;}
2816        tooltip {Your login password} xywh {354 66 150 22}
2817        code0 {o->value(progdefaults.eqsl_pwd.c_str());}
2818        code1 {o->type(FL_SECRET_INPUT);}
2819        code2 {o->labelsize(FL_NORMAL_SIZE);}
2820        class Fl_Input2
2821      }
2822      Fl_Button btnEQSL_pwd_show {
2823        label Show
2824        callback {inpEQSL_pwd->type(inpEQSL_pwd->type() ^ FL_SECRET_INPUT);
2825inpEQSL_pwd->redraw();
2826o->label((inpEQSL_pwd->type() & FL_SECRET_INPUT) ? _("Show") : _("Hide"));}
2827        tooltip {Show password in plain text} xywh {510 66 70 22}
2828      }
2829      Fl_Input inpEQSL_nick {
2830        label {QTH Nickname}
2831        callback {progdefaults.eqsl_nick = o->value();
2832progdefaults.changed = true;}
2833        tooltip {Your login name} xywh {354 90 150 22}
2834        code0 {o->value(progdefaults.eqsl_nick.c_str());}
2835        code1 {o->labelsize(FL_NORMAL_SIZE);}
2836        class Fl_Input2
2837      }
2838      Fl_Button btn_verify_eqsl {
2839        label Verify
2840        callback cb_btn_verify_eqsl
2841        tooltip {Verify database with eQSL download file} xywh {675 90 70 22}
2842      }
2843      Fl_Group {} {
2844        label Options open
2845        xywh {242 118 516 223} box ENGRAVED_FRAME align 21
2846      } {
2847        Fl_Check_Button btn_send_when_logged {
2848          label {send when logged (log button, <LOG>, <LNW>)}
2849          callback {progdefaults.eqsl_when_logged = o->value();
2850progdefaults.changed = true;}
2851          tooltip {automatic data upload} xywh {326 127 70 15} down_box DOWN_BOX
2852          code0 {o->value(progdefaults.eqsl_when_logged);}
2853        }
2854        Fl_Check_Button btn_send_datetime_off {
2855          label {Use date/time off for log entry}
2856          callback {progdefaults.eqsl_datetime_off = o->value();
2857progdefaults.changed = true;}
2858          tooltip {default uses date/time on} xywh {326 147 70 15} down_box DOWN_BOX
2859          code0 {o->value(progdefaults.eqsl_datetime_off);}
2860        }
2861        Fl_Check_Button btn_show_eqsl_delivery {
2862          label {Show delivery message}
2863          callback {progdefaults.eqsl_show_delivery = o->value();
2864progdefaults.changed = true;}
2865          tooltip {Display timed delivery message if enabled} xywh {326 167 70 15} down_box DOWN_BOX
2866          code0 {o->value(progdefaults.eqsl_show_delivery);}
2867        }
2868        Fl_Input txt_eqsl_default_message {
2869          label {Default message}
2870          callback {progdefaults.eqsl_default_message = o->value();
2871progdefaults.changed = true;}
2872          tooltip {default text to send with <LOG> etc} xywh {295 208 451 40} type Multiline align 5 when 1
2873          code0 {o->value(progdefaults.eqsl_default_message.c_str());}
2874          class Fl_Input2
2875        }
2876        Fl_Group {} {
2877          label {Text Tags (tags use {} delimiters)} open
2878          xywh {258 254 481 81} box FLAT_BOX align 21
2879        } {
2880          Fl_Box eqsl_txt1 {
2881            label {  {CALL} other ops call sign}
2882            xywh {264 294 220 17} align 20
2883          }
2884          Fl_Box eqsl_txt2 {
2885            label {  {MODE} full mode / submode}
2886            xywh {262 313 220 17} align 20
2887          }
2888          Fl_Box eqsl_txt3 {
2889            label {{NAME} other ops name}
2890            xywh {510 294 220 17} align 20
2891          }
2892          Fl_Box {} {
2893            label {These tags can also be used in <EQSL:[message]>}
2894            xywh {280 273 440 17}
2895          }
2896        }
2897      }
2898    }
2899    Fl_Group {} {
2900      label {Logging/LoTW}
2901      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
2902      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/LoTW"));}
2903      code1 {config_pages.push_back(p);}
2904      code2 {tab_tree->add(_("Logging/LoTW"));}
2905    } {
2906      Fl_Input txt_lotw_pathname {
2907        label {tqsl:}
2908        callback {progdefaults.lotw_pathname = o->value();
2909progdefaults.changed = true;}
2910        tooltip {Enter full path-filename for tqsl executable} xywh {283 50 422 24} when 1
2911        code0 {o->value(progdefaults.lotw_pathname.c_str());}
2912        class Fl_Input2
2913      }
2914      Fl_Input inpLOTW_pwd {
2915        label Password
2916        callback {progdefaults.lotw_pwd = o->value();
2917progdefaults.changed = true;}
2918        tooltip {Your tqsl login password} xywh {283 85 225 24}
2919        code0 {o->value(progdefaults.lotw_pwd.c_str());}
2920        code1 {o->type(FL_SECRET_INPUT);}
2921        code2 {inpLOTW_pwd->labelsize(FL_NORMAL_SIZE);}
2922        class Fl_Input2
2923      }
2924      Fl_Check_Button btn_submit_lotw_password {
2925        label {Password required}
2926        callback {progdefaults.submit_lotw_password=o->value();
2927progdefaults.changed=true;}
2928        tooltip {Submit password with each upload} xywh {605 89 162 16} down_box DOWN_BOX
2929        code0 {o->value(progdefaults.submit_lotw_password);}
2930      }
2931      Fl_Input inpLOTW_location {
2932        label Location
2933        callback {progdefaults.lotw_location = o->value();
2934progdefaults.changed = true;}
2935        tooltip {tqsl station location} xywh {283 116 250 24}
2936        code0 {o->value(progdefaults.lotw_location.c_str());}
2937        code1 {inpLOTW_pwd->labelsize(FL_NORMAL_SIZE);}
2938        class Fl_Input2
2939      }
2940      Fl_Button btn_select_lotw {
2941        label Locate
2942        callback {std::string str = select_binary_pathname(progdefaults.lotw_pathname);
2943txt_lotw_pathname->value(str.c_str());
2944progdefaults.lotw_pathname = str;
2945progdefaults.changed = true;}
2946        tooltip {Locate tqsl executable} xywh {710 50 70 24}
2947      }
2948      Fl_Check_Button btn_lotw_quiet_mode {
2949        label {Quiet mode [-q], do not open tqsl dialog}
2950        callback {progdefaults.lotw_quiet_mode=o->value();
2951progdefaults.changed=true;}
2952        tooltip {Operate tqsl in batch mode (no dialog)} xywh {243 149 309 16} down_box DOWN_BOX
2953        code0 {o->value(progdefaults.lotw_quiet_mode);}
2954      }
2955      Fl_Check_Button btn_submit_lotw {
2956        label {Send QSO data to LoTW when logged}
2957        callback {progdefaults.submit_lotw=o->value();
2958progdefaults.changed=true;}
2959        tooltip {Submit each QSO as logged} xywh {243 176 289 16} down_box DOWN_BOX
2960        code0 {o->value(progdefaults.submit_lotw);}
2961      }
2962      Fl_Check_Button btn_show_lotw_delivery {
2963        label {Show delivery message}
2964        callback {progdefaults.lotw_show_delivery = o->value();
2965progdefaults.changed = true;}
2966        tooltip {Display timed delivery message if enabled} xywh {243 203 70 15} down_box DOWN_BOX
2967        code0 {o->value(progdefaults.lotw_show_delivery);}
2968      }
2969      Fl_Button btn_export_lotw {
2970        label Export
2971        callback {cb_btnExportLoTW();}
2972        tooltip {Export records for LoTW upload} xywh {216 232 70 24}
2973      }
2974      Fl_Button btn_review_lotw {
2975        label Check
2976        callback {cb_review_lotw();}
2977        tooltip {Review lotw.adif file before sending with tqsl} xywh {216 259 70 24}
2978      }
2979      Fl_Button btn_send_lotw {
2980        label Send
2981        callback {cb_send_lotw();}
2982        tooltip {Send lotw.adif via tqsl} xywh {216 287 70 24}
2983      }
2984      Fl_Box {} {
2985        label {Export logbook records for LoTW upload}
2986        xywh {291 232 346 24} align 20
2987      }
2988      Fl_Box {} {
2989        label {Review / edit the exported LoTW upload adif file}
2990        xywh {291 259 346 24} align 20
2991      }
2992      Fl_Box {} {
2993        label {Submit the upload adif file to LoTW}
2994        xywh {291 287 346 24} align 20
2995      }
2996      Fl_Box {} {
2997        label {You must have tqsl installed and it's location recorded for LoTW updates to work!}
2998        xywh {212 22 574 24} align 16
2999      }
3000      Fl_Button btnLOTW_pwd_show {
3001        label Show
3002        callback {inpLOTW_pwd->type(inpLOTW_pwd->type() ^ FL_SECRET_INPUT);
3003inpLOTW_pwd->redraw();
3004o->label((inpLOTW_pwd->type() & FL_SECRET_INPUT) ? _("Show") : _("Hide"));}
3005        tooltip {Show password in plain text} xywh {516 85 70 24}
3006      }
3007      Fl_Box {} {
3008        label {Use this tqsl station location}
3009        xywh {540 116 211 24} align 20
3010      }
3011      Fl_Button btn_verify_lotw {
3012        label Match
3013        callback cb_btn_verify_lotw
3014        tooltip {Verify database with LoTW download file} xywh {216 315 70 24}
3015      }
3016      Fl_Box {} {
3017        label {Match logbook records with LoTW download file}
3018        xywh {291 315 346 24} align 20
3019      }
3020      Fl_Button btn_view_unmatched {
3021        label {View Unmatched}
3022        callback cb_btn_view_unmatched
3023        tooltip {Verify database with LoTW download file} xywh {645 313 139 24} deactivate
3024      }
3025      Fl_Counter cnt_tracefile_timeout {
3026        label Timeout
3027        callback {progdefaults.tracefile_timeout = o->value();}
3028        tooltip {Wait NN seconds for LoTW response} xywh {647 146 79 21} type Simple align 4 minimum 4 maximum 60 step 1 value 5
3029        code0 {o->value(progdefaults.tracefile_timeout);}
3030      }
3031    }
3032    Fl_Group {} {
3033      label {Logging/QSO logging}
3034      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
3035      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/QSO logging"));}
3036      code1 {config_pages.push_back(p);}
3037      code2 {tab_tree->add(_("Logging/QSO logging"));}
3038      code3 {tab_tree->close(_("Logging"));}
3039    } {
3040      Fl_Check_Button btnNagMe {
3041        label {Prompt to save log on exit}
3042        callback {btn2NagMe->value(o->value());
3043progdefaults.NagMe=o->value();
3044progdefaults.changed = true;}
3045        tooltip {Bug me about saving log entries} xywh {255 63 236 20} down_box DOWN_BOX
3046        code0 {o->value(progdefaults.NagMe);}
3047      }
3048      Fl_Check_Button btnClearOnSave {
3049        label {Clear on save}
3050        callback {progdefaults.ClearOnSave=o->value();
3051progdefaults.changed = true;}
3052        tooltip {Clear log entries after saving or using macro <LOG>} xywh {255 92 236 20} down_box DOWN_BOX
3053        code0 {o->value(progdefaults.ClearOnSave);}
3054      }
3055      Fl_Check_Button btnCallUpperCase {
3056        label {Convert callsign to upper case}
3057        callback {progdefaults.calluppercase = o->value();
3058progdefaults.changed = true;}
3059        tooltip {Force callsign field to UPPERCASE} xywh {255 121 236 20} down_box DOWN_BOX
3060        code0 {o->value(progdefaults.calluppercase);}
3061      }
3062      Fl_Check_Button btnAutoFillQSO {
3063        label {Auto-fill Country and Azimuth}
3064        callback {progdefaults.autofill_qso_fields = o->value();
3065progdefaults.changed = true;}
3066        tooltip {Fill in Country / Azimuth using cty.dat information} xywh {255 151 236 20} down_box DOWN_BOX
3067        code0 {o->value(progdefaults.autofill_qso_fields);}
3068      }
3069      Fl_Check_Button btnDateTimeSort {
3070        label {Sort by Date/Time OFF}
3071        callback {progdefaults.sort_date_time_off = o->value();
3072progdefaults.changed = true;
3073reload_browser();}
3074        tooltip {Sort by date/time OFF - effects all ADIF/Cabrillo reports} xywh {508 63 190 20} down_box DOWN_BOX
3075        code0 {o->value(progdefaults.sort_date_time_off);}
3076      }
3077      Fl_Check_Button btndate_time_force {
3078        label {Date time ON == OFF}
3079        callback {progdefaults.force_date_time = o->value();
3080progdefaults.changed = true;}
3081        tooltip {Force date/time ON == date/time OFF} xywh {508 92 190 20} down_box DOWN_BOX
3082        code0 {o->value(progdefaults.force_date_time);}
3083      }
3084      Fl_Check_Button btnRSTindefault {
3085        label {Default RST in to 599/59}
3086        callback {progdefaults.RSTin_default = o->value();
3087progdefaults.changed = true;}
3088        tooltip {Clear log controls sets RST in to 599/59} xywh {508 121 213 20} down_box DOWN_BOX
3089        code0 {o->value(progdefaults.RSTin_default);}
3090      }
3091      Fl_Check_Button btnRSTdefault {
3092        label {Default RST out to 599/59}
3093        callback {progdefaults.RSTdefault = o->value();
3094progdefaults.changed = true;}
3095        tooltip {Clear log controls sets RST out to 599/59} xywh {508 151 216 20} down_box DOWN_BOX
3096        code0 {o->value(progdefaults.RSTdefault);}
3097      }
3098      Fl_Input txt_cty_dat_pathname {
3099        label {cty.dat folder}
3100        callback {progdefaults.cty_dat_pathname = o->value();
3101progdefaults.changed = true;}
3102        tooltip {Enter full path-name for cty.dat folder} xywh {375 212 346 24} when 1
3103        code0 {o->value(progdefaults.cty_dat_pathname.c_str());}
3104        code1 {\#include "dxcc.h"}
3105        class Fl_Input2
3106      }
3107      Fl_Button btn_select_cty_dat {
3108        label Browse
3109        callback {select_cty_dat_pathname();}
3110        tooltip {Locate cty.dat file} xywh {256 241 75 24}
3111      }
3112      Fl_Button btn_default_cty_dat {
3113        label Default
3114        callback {default_cty_dat_pathname();}
3115        tooltip {Restore cty.dat default folder} xywh {351 241 75 24}
3116      }
3117      Fl_Button btn_reload_cty_dat {
3118        label Reload
3119        callback {reload_cty_dat();}
3120        tooltip {Reload cty.dat} xywh {446 241 75 24}
3121      }
3122      Fl_Input inpMyPower {
3123        label {Transmit Power}
3124        callback {progdefaults.mytxpower = o->value();
3125progdefaults.changed = true;}
3126        tooltip {Tx power used for logbook entries} xywh {671 241 50 24}
3127        code0 {o->value(progdefaults.mytxpower.c_str());}
3128        code1 {o->labelsize(FL_NORMAL_SIZE);}
3129        class Fl_Input2
3130      }
3131      Fl_Check_Button btnDisplayLogbookRead {
3132        label {Display logbook read datum at start}
3133        callback {progdefaults.DisplayLogbookRead = o->value();
3134progdefaults.changed = true;}
3135        tooltip {The filename is written to the RX text area} xywh {255 181 277 20} down_box DOWN_BOX
3136        code0 {o->value(progdefaults.DisplayLogbookRead);}
3137      }
3138    }
3139    Fl_Group {} {
3140      label {Modem/CW/General}
3141      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
3142      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/General"));}
3143      code1 {config_pages.push_back(p);}
3144      code2 {tab_tree->add(_("Modem/CW/General"));}
3145    } {
3146      Fl_Group {} {
3147        label Receive
3148        xywh {225 37 560 147} box ENGRAVED_FRAME align 21
3149      } {
3150        Fl_Check_Button btnCWuseSOMdecoding {
3151          label {SOM decoding}
3152          callback {progdefaults.CWuseSOMdecoding = o->value();
3153progdefaults.changed = true;}
3154          tooltip {Self Organizing Mapping} xywh {296 72 125 20} down_box DOWN_BOX value 1
3155          code0 {o->value(progdefaults.CWuseSOMdecoding);}
3156        }
3157        Fl_Check_Button btnCWrcvTrack {
3158          label {WPM Tracking}
3159          callback {progdefaults.CWtrack = o->value();
3160progdefaults.changed = true;}
3161          tooltip {Automatic Rx speed tracking} xywh {450 72 80 20} down_box DOWN_BOX value 1
3162          code0 {o->value(progdefaults.CWtrack);}
3163        }
3164        Fl_Value_Slider sldrCWbandwidth {
3165          label {Filter bandwidth}
3166          callback {progdefaults.CWbandwidth = (int)o->value();
3167progdefaults.changed = true;}
3168          tooltip {CW dsp filter bandwidth} xywh {250 113 250 20} type Horizontal align 5 minimum 10 maximum 400 step 1 value 66 textsize 14
3169          code0 {o->value(progdefaults.CWbandwidth);}
3170          code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
3171          class Fl_Value_Slider2
3172        }
3173        Fl_Check_Button btnCWmfilt {
3174          label {Matched Filt'}
3175          callback {progdefaults.CWmfilt = o->value();
3176progdefaults.changed = true;}
3177          tooltip {Matched Filter bandwidth} xywh {503 113 80 20} down_box DOWN_BOX value 1
3178          code0 {o->value(progdefaults.CWmfilt);}
3179        }
3180        Fl_Value_Output valCWrcvWPM {
3181          label {Rx WPM}
3182          callback {progdefaults.changed = true;}
3183          xywh {250 152 35 20} color 7 align 5
3184        }
3185        Fl_Progress prgsCWrcvWPM {
3186          tooltip {Tracked CW speed in WPM} xywh {286 152 214 20} color 49 selection_color 15 align 0
3187        }
3188        Fl_Counter cntLower {
3189          label Lower
3190          callback {progdefaults.CWlower = o->value();
3191progdefaults.changed = true;}
3192          tooltip {Detector low threshold} xywh {409 72 65 20} type Simple align 1 minimum 0.01 maximum 0.99 step 0.01 value 0.45 hide
3193          code0 {o->value(progdefaults.CWlower);}
3194          code1 {o->labelsize(FL_NORMAL_SIZE);}
3195          class Fl_Counter2
3196        }
3197        Fl_Counter cntUpper {
3198          label Upper
3199          callback {progdefaults.CWupper = o->value();
3200progdefaults.changed = true;}
3201          tooltip {Detector high threshold} xywh {502 72 65 20} type Simple align 1 minimum 0.01 maximum 0.99 step 0.01 value 0.55 hide
3202          code0 {o->value(progdefaults.CWupper);}
3203          code1 {o->labelsize(FL_NORMAL_SIZE);}
3204          class Fl_Counter2
3205        }
3206        Fl_Counter cntCWrange {
3207          label Range
3208          callback {progdefaults.CWrange = (int)o->value();
3209progdefaults.changed = true;}
3210          tooltip {Range +/- wpm} xywh {503 151 65 20} type Simple align 8 minimum 5 maximum 25 step 1 value 10
3211          code0 {o->value(progdefaults.CWrange);}
3212          code1 {o->labelsize(FL_NORMAL_SIZE);}
3213          class Fl_Counter2
3214        }
3215        Fl_Group {} {
3216          label {Signal tracking} open
3217          xywh {625 45 135 124} box ENGRAVED_BOX align 17
3218        } {
3219          Fl_Choice mnu_cwrx_attack {
3220            label Attack
3221            callback {progdefaults.cwrx_attack = o->value();
3222progdefaults.changed = true;} open
3223            xywh {680 70 72 20} down_box BORDER_BOX
3224            code0 {o->add("Slow|Med|Fast");}
3225            code1 {o->value(progdefaults.cwrx_attack);}
3226          } {}
3227          Fl_Choice mnu_cwrx_decay {
3228            label Decay
3229            callback {progdefaults.cwrx_decay = o->value();
3230progdefaults.changed = true;} open
3231            xywh {680 105 72 20} down_box BORDER_BOX
3232            code0 {o->add("Slow|Med|Fast");}
3233            code1 {o->value(progdefaults.cwrx_decay);}
3234          } {}
3235          Fl_Button btn_cw_tracking_defaults {
3236            label Defaults
3237            callback {progdefaults.cwrx_attack = 1;
3238progdefaults.cwrx_decay = 0;
3239mnu_cwrx_attack->value(progdefaults.cwrx_attack);
3240mnu_cwrx_decay->value(progdefaults.cwrx_decay);
3241progdefaults.changed = true;}
3242            xywh {680 135 70 20}
3243          }
3244        }
3245      }
3246      Fl_Group {} {
3247        label Transmit open
3248        xywh {225 184 560 161} box ENGRAVED_FRAME align 21
3249      } {
3250        Fl_Value_Slider sldrCWxmtWPM {
3251          label {char WPM}
3252          callback {progdefaults.CWspeed = (int)o->value();
3253cntCW_WPM->value(progdefaults.CWspeed);
3254cntr_nanoCW_WPM->value(progdefaults.CWspeed);
3255progdefaults.changed = true;
3256sync_cw_parameters();}
3257          tooltip {My transmit CW WPM} xywh {250 213 440 20} type Horizontal align 8 minimum 5 maximum 100 step 1 value 20 textsize 14
3258          code0 {o->value(progdefaults.CWspeed);}
3259          code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
3260          class Fl_Value_Slider2
3261        }
3262        Fl_Counter cntCWdefWPM {
3263          label Default
3264          callback {progdefaults.defCWspeed = (int)o->value();
3265progdefaults.changed = true;}
3266          tooltip {The default CW speed} xywh {291 254 64 20} type Simple align 1 minimum 5 maximum 200 step 1 value 18
3267          code0 {o->value(progdefaults.defCWspeed);}
3268          code1 {o->labelsize(FL_NORMAL_SIZE);}
3269          class Fl_Counter2
3270        }
3271        Fl_Counter cntCWlowerlimit {
3272          label {Lower limit}
3273          callback {progdefaults.CWlowerlimit = (int)o->value();
3274progdefaults.changed = true;
3275sldrCWxmtWPM->minimum(progdefaults.CWlowerlimit);
3276sldrCWxmtWPM->value(progdefaults.CWspeed);
3277sldrCWxmtWPM->redraw();
3278cntCWupperlimit->minimum(progdefaults.CWlowerlimit+20);
3279cntCW_WPM->minimum(progdefaults.CWlowerlimit);}
3280          tooltip {No slower than this} xywh {445 254 65 20} type Simple align 1 minimum 5 maximum 20 step 5 value 10
3281          code0 {o->value(progdefaults.CWlowerlimit);}
3282          code1 {o->labelsize(FL_NORMAL_SIZE);}
3283        }
3284        Fl_Counter cntCWupperlimit {
3285          label {Upper limit}
3286          callback {progdefaults.CWupperlimit = (int)o->value();
3287progdefaults.changed = true;
3288sldrCWxmtWPM->maximum(progdefaults.CWupperlimit);
3289sldrCWxmtWPM->value(progdefaults.CWspeed);
3290sldrCWxmtWPM->redraw();
3291cntCWlowerlimit->maximum(progdefaults.CWupperlimit-20);
3292cntCW_WPM->maximum(progdefaults.CWupperlimit);}
3293          tooltip {No faster than this} xywh {601 254 65 20} type Simple align 1 minimum 25 maximum 200 step 5 value 100
3294          code0 {o->value(progdefaults.CWupperlimit);}
3295          code1 {o->labelsize(FL_NORMAL_SIZE);}
3296        }
3297        Fl_Value_Slider sldrCWfarnsworth {
3298          label {text WPM}
3299          callback {progdefaults.CWfarnsworth = (int)o->value();
3300progdefaults.changed = true;}
3301          tooltip {My transmit CW WPM} xywh {250 308 440 20} type Horizontal align 8 minimum 5 maximum 100 step 1 value 20 textsize 14
3302          code0 {o->value(progdefaults.CWfarnsworth);}
3303          code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
3304          class Fl_Value_Slider2
3305        }
3306        Fl_Check_Button btnCWusefarnsworth {
3307          label {Use Farnsworth timing}
3308          callback {progdefaults.CWusefarnsworth=o->value();
3309progdefaults.changed = true;}
3310          tooltip {text WPM <= char WPM} xywh {270 285 180 15} down_box DOWN_BOX
3311          code0 {o->value(progdefaults.CWusefarnsworth);}
3312        }
3313      }
3314    }
3315    Fl_Group {} {
3316      label {Modem/CW/Timing and QSK}
3317      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
3318      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/Timing and QSK"));}
3319      code1 {config_pages.push_back(p);}
3320      code2 {tab_tree->add(_("Modem/CW/Timing and QSK"));}
3321    } {
3322      Fl_Group {} {
3323        label Timing open
3324        xywh {205 28 590 124} box ENGRAVED_FRAME align 21
3325      } {
3326        Fl_Counter cntCWdash2dot {
3327          label {Dash/Dot}
3328          callback {progdefaults.CWdash2dot=o->value();
3329cnt_nanoCWdash2dot->value(progdefaults.CWdash2dot);
3330progdefaults.changed = true;}
3331          tooltip {Dash to dot ratio} xywh {335 44 125 24} align 8 minimum 2.5 maximum 4 value 3
3332          code0 {o->value(progdefaults.CWdash2dot);}
3333          code1 {o->labelsize(FL_NORMAL_SIZE);}
3334          code2 {o->lstep(1);}
3335          class Fl_Counter2
3336        }
3337        Fl_Counter cntCWrisetime {
3338          label {Edge timing}
3339          callback {progdefaults.CWrisetime=o->value();
3340progdefaults.changed = true;}
3341          tooltip {Leading and Trailing edge risetimes (msec)} xywh {335 75 125 24} align 8 minimum 0 maximum 15 value 4
3342          code0 {o->value(progdefaults.CWrisetime);}
3343          code1 {o->labelsize(FL_NORMAL_SIZE);}
3344          code2 {o->lstep(1);}
3345          class Fl_Counter2
3346        }
3347        Fl_Group i_listboxQSKshape {
3348          label {Edge shape}
3349          callback {progdefaults.QSKshape = o->index();
3350progdefaults.changed = true;} open
3351          tooltip {Hanning/Blackman - use edge timing
3352BPF - use BPF bandwidth} xywh {335 108 125 24} box DOWN_BOX color 7 align 8
3353          code0 {o->add("Hanning|Blackman");}
3354          code1 {o->index(progdefaults.QSKshape);}
3355          code2 {o->labelsize(FL_NORMAL_SIZE);}
3356          class Fl_ListBox
3357        } {}
3358      }
3359      Fl_Group {} {
3360        label QSK open
3361        xywh {205 155 590 153} box ENGRAVED_FRAME align 21
3362      } {
3363        Fl_Check_Button btnQSK {
3364          label {QSK on right audio channel}
3365          callback {progdefaults.QSK = o->value();
3366btnQSK2->value(o->value());
3367progdefaults.changed = true;
3368if (o->value()) {
3369  progdefaults.sig_on_right_channel = false;
3370  chkAudioStereoOut->value(0);
3371  progdefaults.PTTrightchannel = false;
3372  btnPTTrightchannel->value(0);
3373}}
3374          tooltip {Generate square wave signal on right channel} xywh {267 172 217 20} down_box DOWN_BOX
3375          code0 {o->value(progdefaults.QSK);}
3376        }
3377        Fl_Counter cntQSKfrequency {
3378          label {QSK frequency}
3379          callback {progdefaults.QSKfrequency=o->value();
3380progdefaults.changed = true;}
3381          tooltip {Fundamental frequency of QSK square wave signal} xywh {215 206 125 24} align 8 minimum 800 maximum 8000 step 5 value 3200
3382          code0 {o->value(progdefaults.QSKfrequency);}
3383          code1 {o->labelsize(FL_NORMAL_SIZE);}
3384          code2 {o->lstep(100);}
3385          class Fl_Counter2
3386        }
3387        Fl_Counter cntPreTiming {
3388          label {Pre-keydown timing (ms)}
3389          callback {progdefaults.CWpre = o->value();
3390progdefaults.changed = true;}
3391          tooltip {Msec pre-keydown} xywh {476 206 125 24} align 8 minimum 0 maximum 100
3392          code0 {o->value(progdefaults.CWpre);}
3393          code1 {o->labelsize(FL_NORMAL_SIZE);}
3394          code2 {o->lstep(1);}
3395          class Fl_Counter2
3396        }
3397        Fl_Counter cntPostTiming {
3398          label {Post-keydown timing (ms)}
3399          callback {progdefaults.CWpost = o->value();
3400progdefaults.changed = true;}
3401          tooltip {Msec post-keydown} xywh {476 237 125 24} align 8 minimum 0 maximum 100
3402          code0 {o->value(progdefaults.CWpost);}
3403          code1 {o->labelsize(FL_NORMAL_SIZE);}
3404          code2 {o->lstep(1);}
3405          class Fl_Counter2
3406        }
3407        Fl_Counter cntQSKamp {
3408          label {QSK amplitude}
3409          callback {progdefaults.QSKamp=o->value();
3410progdefaults.changed = true;}
3411          tooltip {Amplitude of right channel QSK signal} xywh {215 237 125 24} align 8 minimum 0 maximum 1 step 0.01 value 0.8
3412          code0 {o->value(progdefaults.QSKamp);}
3413          code1 {o->labelsize(FL_NORMAL_SIZE);}
3414          code2 {o->lstep(0.1);}
3415          class Fl_Counter2
3416        }
3417        Fl_Counter cntQSKrisetime {
3418          label {Edge timing}
3419          callback {progdefaults.QSKrisetime=o->value();
3420progdefaults.changed = true;}
3421          tooltip {Leading and Trailing edge risetimes (msec)} xywh {215 270 125 24} align 8 minimum 0 maximum 15 value 4
3422          code0 {o->value(progdefaults.QSKrisetime);}
3423          code1 {o->labelsize(FL_NORMAL_SIZE);}
3424          code2 {o->lstep(1);}
3425          class Fl_Counter2
3426        }
3427      }
3428      Fl_Group {} {
3429        label {Send Test character} open
3430        xywh {205 310 590 40} box ENGRAVED_BOX align 21
3431      } {
3432        Fl_Group i_listbox_test_char {
3433          label {Test char}
3434          callback {progdefaults.TestChar = o->index();} open
3435          tooltip {Test character for QSK adjustment} xywh {391 319 112 22} box DOWN_BOX color 7 align 8
3436          code0 {extern char szTestChar[];}
3437          code1 {o->add(szTestChar);}
3438          code2 {o->index(progdefaults.TestChar);}
3439          code3 {o->labelsize(FL_NORMAL_SIZE);}
3440          class Fl_ListBox
3441        } {}
3442        Fl_Check_Button btnQSKadjust {
3443          label {Send continuously}
3444          callback {progdefaults.QSKadjust = o->value();}
3445          tooltip {Send a continuous stream of test characters} xywh {585 321 152 18} down_box DOWN_BOX
3446          code0 {o->value(progdefaults.QSKadjust);}
3447        }
3448      }
3449    }
3450    Fl_Group {} {
3451      label {Modem/CW/Prosigns}
3452      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
3453      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/Prosigns"));}
3454      code1 {config_pages.push_back(p);}
3455      code2 {tab_tree->add(_("Modem/CW/Prosigns"));}
3456    } {
3457      Fl_Group {} {
3458        label {Use these for WinKeyer
3459and nanoCW}
3460        xywh {555 39 182 262} box ENGRAVED_FRAME align 17
3461      } {
3462        Fl_Box {} {
3463          label {" RR}
3464          tooltip {.-..-.} xywh {615 70 59 22}
3465        }
3466        Fl_Box {} {
3467          label {$ SX}
3468          tooltip {...-..-} xywh {615 90 59 22}
3469        }
3470        Fl_Box {} {
3471          label {' WG}
3472          tooltip {.----.} xywh {615 109 59 22}
3473        }
3474        Fl_Box {} {
3475          label {( KN}
3476          tooltip {-.--.} xywh {615 128 59 22}
3477        }
3478        Fl_Box {} {
3479          label {) KK}
3480          tooltip {-.--.-} xywh {615 147 59 22}
3481        }
3482        Fl_Box {} {
3483          label {+ AR}
3484          tooltip {.-.-.} xywh {615 166 59 22}
3485        }
3486        Fl_Box {} {
3487          label {< AR}
3488          tooltip {.-.-.} xywh {615 185 59 22}
3489        }
3490        Fl_Box {} {
3491          label {> SK}
3492          tooltip {...-.-} xywh {615 204 59 22}
3493        }
3494        Fl_Box {} {
3495          label {= BT}
3496          tooltip {-...-} xywh {615 223 59 22}
3497        }
3498        Fl_Box {} {
3499          label {- DU}
3500          tooltip {-....-} xywh {615 242 59 22}
3501        }
3502        Fl_Box {} {
3503          label {@@ AC}
3504          tooltip {.--.-.} xywh {615 263 59 22}
3505        }
3506      }
3507      Fl_Group {listbox_prosign[0]} {
3508        label {<BT>}
3509        callback {int c = o->index();
3510for (int i = 0; i < 9; i++)
3511  if (listbox_prosign[i]->index() == c) {
3512    listbox_prosign[i]->index(12);
3513    progdefaults.CW_prosigns[i] = ' ';
3514  }
3515o->index(c);
3516char ps[] = "~%&+={}<>[] ";
3517progdefaults.CW_prosigns[0] = ps[c];
3518progdefaults.changed = true;} open
3519        xywh {304 50 47 22} box DOWN_BOX color 7 align 4
3520        code0 {o->add(szProsigns);}
3521        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[0];}
3522        code2 {o->value(s);
3523                       o->labelsize(FL_NORMAL_SIZE);}
3524        class Fl_ListBox
3525      } {}
3526      Fl_Group {listbox_prosign[1]} {
3527        label {<AA>}
3528        callback {int c = o->index();
3529for (int i = 0; i < 9; i++)
3530  if (listbox_prosign[i]->index() == c) {
3531    listbox_prosign[i]->index(12);
3532    progdefaults.CW_prosigns[i] = ' ';
3533  }
3534o->index(c);
3535char ps[] = "~%&+={}<>[] ";
3536progdefaults.CW_prosigns[1] = ps[c];
3537progdefaults.changed = true;} open
3538        xywh {304 77 47 22} box DOWN_BOX color 7 align 4
3539        code0 {o->add(szProsigns);}
3540        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[1];}
3541        code2 {o->value(s);
3542                       o->labelsize(FL_NORMAL_SIZE);}
3543        class Fl_ListBox
3544      } {}
3545      Fl_Group {listbox_prosign[2]} {
3546        label {<AS>}
3547        callback {int c = o->index();
3548for (int i = 0; i < 9; i++)
3549  if (listbox_prosign[i]->index() == c) {
3550    listbox_prosign[i]->index(12);
3551    progdefaults.CW_prosigns[i] = ' ';
3552  }
3553o->index(c);
3554char ps[] = "~%&+={}<>[] ";
3555progdefaults.CW_prosigns[2] = ps[c];
3556progdefaults.changed = true;} open
3557        xywh {304 105 47 22} box DOWN_BOX color 7 align 4
3558        code0 {o->add(szProsigns);}
3559        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[2];}
3560        code2 {o->value(s);
3561                       o->labelsize(FL_NORMAL_SIZE);}
3562        class Fl_ListBox
3563      } {}
3564      Fl_Group {listbox_prosign[3]} {
3565        label {<AR>}
3566        callback {int c = o->index();
3567for (int i = 0; i < 9; i++)
3568  if (listbox_prosign[i]->index() == c) {
3569    listbox_prosign[i]->index(12);
3570    progdefaults.CW_prosigns[i] = ' ';
3571  }
3572o->index(c);
3573char ps[] = "~%&+={}<>[] ";
3574progdefaults.CW_prosigns[3] = ps[c];
3575progdefaults.changed = true;} open
3576        xywh {304 132 47 22} box DOWN_BOX color 7 align 4
3577        code0 {o->add(szProsigns);}
3578        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[3];}
3579        code2 {o->value(s);}
3580        class Fl_ListBox
3581      } {}
3582      Fl_Group {listbox_prosign[4]} {
3583        label {<SK>}
3584        callback {int c = o->index();
3585for (int i = 0; i < 9; i++)
3586  if (listbox_prosign[i]->index() == c) {
3587    listbox_prosign[i]->index(12);
3588    progdefaults.CW_prosigns[i] = ' ';
3589  }
3590o->index(c);
3591char ps[] = "~%&+={}<>[] ";
3592progdefaults.CW_prosigns[4] = ps[c];
3593progdefaults.changed = true;} open
3594        xywh {304 160 47 22} box DOWN_BOX color 7 align 4
3595        code0 {o->add(szProsigns);}
3596        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[4];}
3597        code2 {o->value(s);
3598                       o->labelsize(FL_NORMAL_SIZE);}
3599        class Fl_ListBox
3600      } {}
3601      Fl_Group {listbox_prosign[5]} {
3602        label {<KN>}
3603        callback {int c = o->index();
3604for (int i = 0; i < 9; i++)
3605  if (listbox_prosign[i]->index() == c) {
3606    listbox_prosign[i]->index(12);
3607    progdefaults.CW_prosigns[i] = ' ';
3608  }
3609o->index(c);
3610char ps[] = "~%&+={}<>[] ";
3611progdefaults.CW_prosigns[5] = ps[c];
3612progdefaults.changed = true;} open
3613        xywh {304 188 47 22} box DOWN_BOX color 7 align 4
3614        code0 {o->add(szProsigns);}
3615        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[5];}
3616        code2 {o->value(s);
3617                       o->labelsize(FL_NORMAL_SIZE);}
3618        class Fl_ListBox
3619      } {}
3620      Fl_Group {listbox_prosign[6]} {
3621        label {<INT>}
3622        callback {int c = o->index();
3623for (int i = 0; i < 9; i++)
3624  if (listbox_prosign[i]->index() == c) {
3625    listbox_prosign[i]->index(12);
3626    progdefaults.CW_prosigns[i] = ' ';
3627  }
3628o->index(c);
3629char ps[] = "~%&+={}<>[] ";
3630progdefaults.CW_prosigns[6] = ps[c];
3631progdefaults.changed = true;} open
3632        xywh {304 215 47 22} box DOWN_BOX color 7 align 4
3633        code0 {o->add(szProsigns);}
3634        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[6];}
3635        code2 {o->value(s);
3636                       o->labelsize(FL_NORMAL_SIZE);}
3637        class Fl_ListBox
3638      } {}
3639      Fl_Group {listbox_prosign[7]} {
3640        label {<HM>}
3641        callback {int c = o->index();
3642for (int i = 0; i < 9; i++)
3643  if (listbox_prosign[i]->index() == c) {
3644    listbox_prosign[i]->index(12);
3645    progdefaults.CW_prosigns[i] = ' ';
3646  }
3647o->index(c);
3648char ps[] = "~%&+={}<>[] ";
3649progdefaults.CW_prosigns[7] = ps[c];
3650progdefaults.changed = true;;} open
3651        xywh {304 243 47 22} box DOWN_BOX color 7 align 4
3652        code0 {o->add(szProsigns);}
3653        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[7];}
3654        code2 {o->value(s);
3655                       o->labelsize(FL_NORMAL_SIZE);}
3656        class Fl_ListBox
3657      } {}
3658      Fl_Group {listbox_prosign[8]} {
3659        label {<VE>}
3660        callback {int c = o->index();
3661for (int i = 0; i < 9; i++)
3662  if (listbox_prosign[i]->index() == c) {
3663    listbox_prosign[i]->index(12);
3664    progdefaults.CW_prosigns[i] = ' ';
3665  }
3666o->index(c);
3667char ps[] = "~%&+={}<>[] ";
3668progdefaults.CW_prosigns[8] = ps[c];
3669progdefaults.changed = true;} open
3670        xywh {304 271 47 22} box DOWN_BOX color 7 align 4
3671        code0 {o->add(szProsigns);}
3672        code1 {char s[2] = " "; s[0] = progdefaults.CW_prosigns[8];}
3673        code2 {o->value(s);
3674                       o->labelsize(FL_NORMAL_SIZE);}
3675        class Fl_ListBox
3676      } {}
3677      Fl_Check_Button btnCW_use_paren {
3678        label {Use '(' paren not KN}
3679        callback {progdefaults.CW_use_paren=o->value();
3680progdefaults.changed = true;}
3681        xywh {354 187 68 15} down_box DOWN_BOX
3682        code0 {o->value(progdefaults.CW_use_paren);}
3683      }
3684      Fl_Check_Button btnCW_prosign_display {
3685        label {Display decoded as assigned key}
3686        callback {progdefaults.CW_prosign_display=o->value();
3687progdefaults.changed = true;}
3688        tooltip {Display the decoded prosign in the RX text using the short cut key} xywh {304 301 68 15} down_box DOWN_BOX
3689        code0 {o->value(progdefaults.CW_prosign_display);}
3690      }
3691    }
3692    Fl_Group {} {
3693      label {Modem/CW/Extended Chars.}
3694      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
3695      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/Extended Chars."));}
3696      code1 {config_pages.push_back(p);}
3697      code2 {tab_tree->add(_("Modem/CW/Extended Chars."));}
3698    } {
3699      Fl_Group {} {
3700        label {Check to enable character encode/decode
3701Select one character from each group} open
3702        xywh {205 30 590 286} box FLAT_BOX align 17
3703      } {
3704        Fl_Group {} {open
3705          xywh {210 109 99 80} box ENGRAVED_FRAME
3706        } {
3707          Fl_Check_Button btn_A_aelig {
3708            label {A aelig}
3709            callback {progdefaults.A_aelig = o->value();
3710if (progdefaults.A_aelig) {
3711	progdefaults.A_umlaut = false;
3712	btn_A_umlaut->value(0);
3713}
3714btn_A_umlaut->redraw();
3715progdefaults.changed = true;
3716CW_table_changed = true;}
3717            tooltip {Swap left/right keyer contacts} xywh {216 125 70 15} down_box DOWN_BOX
3718            code0 {\#include "cw.h"}
3719            code1 {o->value(progdefaults.A_aelig);}
3720          }
3721          Fl_Check_Button btn_A_umlaut {
3722            label { A umlaut}
3723            callback {progdefaults.A_umlaut = o->value();
3724if (progdefaults.A_umlaut) {
3725	progdefaults.A_aelig = false;
3726	btn_A_aelig->value(0);
3727}
3728btn_A_aelig->redraw();
3729progdefaults.changed = true;
3730CW_table_changed = true;}
3731            tooltip {Swap left/right keyer contacts} xywh {216 162 70 15} down_box DOWN_BOX
3732            code0 {o->value(progdefaults.A_umlaut);}
3733          }
3734        }
3735        Fl_Check_Button btn_A_ring {
3736          label { A ring}
3737          callback {progdefaults.A_ring = o->value();
3738progdefaults.changed = true;
3739CW_table_changed = true;}
3740          tooltip {Swap left/right keyer contacts} xywh {216 199 70 15} down_box DOWN_BOX
3741          code0 {o->value(progdefaults.A_ring);}
3742        }
3743        Fl_Group {} {open
3744          xywh {311 109 99 120} box ENGRAVED_FRAME
3745        } {
3746          Fl_Check_Button btn_O_acute {
3747            label { O acute}
3748            callback {progdefaults.O_acute = o->value();
3749if (progdefaults.O_acute) {
3750	progdefaults.O_umlaut = false;
3751	btn_O_umlaut->value(0);
3752	progdefaults.O_slash = false;
3753	btn_O_slash->value(0);
3754}
3755btn_O_umlaut->redraw();
3756btn_O_slash->redraw();
3757progdefaults.changed = true;
3758CW_table_changed = true;}
3759            tooltip {Swap left/right keyer contacts} xywh {316 125 70 15} down_box DOWN_BOX
3760            code0 {o->value(progdefaults.O_acute);}
3761          }
3762          Fl_Check_Button btn_O_slash {
3763            label { O slash}
3764            callback {progdefaults.O_slash = o->value();
3765if (progdefaults.O_slash) {
3766	progdefaults.O_umlaut = false;
3767	btn_O_umlaut->value(0);
3768	progdefaults.O_acute = false;
3769	btn_O_acute->value(0);
3770}
3771btn_O_umlaut->redraw();
3772btn_O_acute->redraw();
3773progdefaults.changed = true;
3774CW_table_changed = true;}
3775            tooltip {Swap left/right keyer contacts} xywh {316 199 70 15} down_box DOWN_BOX
3776            code0 {o->value(progdefaults.O_slash);}
3777          }
3778          Fl_Check_Button btn_O_umlaut {
3779            label { O umlaut}
3780            callback {progdefaults.O_umlaut = o->value();
3781if (progdefaults.O_umlaut) {
3782	progdefaults.O_acute = false;
3783	btn_O_acute->value(0);
3784	progdefaults.O_slash = false;
3785	btn_O_slash->value(0);
3786}
3787btn_O_acute->redraw();
3788btn_O_slash->redraw();
3789progdefaults.changed = true;
3790CW_table_changed = true;}
3791            tooltip {Swap left/right keyer contacts} xywh {316 162 70 15} down_box DOWN_BOX
3792            code0 {o->value(progdefaults.O_umlaut);}
3793          }
3794        }
3795        Fl_Check_Button btn_C_cedilla {
3796          label { C cedilla}
3797          callback {progdefaults.C_cedilla = o->value();
3798progdefaults.changed = true;
3799CW_table_changed = true;}
3800          tooltip {Swap left/right keyer contacts} xywh {413 125 70 15} down_box DOWN_BOX
3801          code0 {o->value(progdefaults.C_cedilla);}
3802        }
3803        Fl_Check_Button btn_E_grave {
3804          label { E grave}
3805          callback {progdefaults.E_grave = o->value();
3806progdefaults.changed = true;
3807CW_table_changed = true;}
3808          tooltip {Swap left/right keyer contacts} xywh {511 125 70 15} down_box DOWN_BOX
3809          code0 {o->value(progdefaults.E_grave);}
3810        }
3811        Fl_Check_Button btn_E_acute {
3812          label { E acute}
3813          callback {progdefaults.E_acute = o->value();
3814progdefaults.changed = true;
3815CW_table_changed = true;}
3816          tooltip {Swap left/right keyer contacts} xywh {511 162 70 15} down_box DOWN_BOX
3817          code0 {o->value(progdefaults.E_acute);}
3818        }
3819        Fl_Check_Button btn_N_tilde {
3820          label { N tilde}
3821          callback {progdefaults.N_tilde = o->value();
3822progdefaults.changed = true;
3823CW_table_changed = true;}
3824          tooltip {Swap left/right keyer contacts} xywh {604 125 70 15} down_box DOWN_BOX
3825          code0 {o->value(progdefaults.N_tilde);}
3826        }
3827        Fl_Group {} {open
3828          xywh {690 109 99 80} box ENGRAVED_FRAME
3829        } {
3830          Fl_Check_Button btn_U_umlaut {
3831            label { U umlaut}
3832            callback {progdefaults.U_umlaut = o->value();
3833if (progdefaults.U_umlaut) {
3834	progdefaults.U_circ = false;
3835	btn_U_circ->value(0);
3836}
3837btn_U_circ->redraw();
3838progdefaults.changed = true;
3839CW_table_changed = true;}
3840            tooltip {Swap left/right keyer contacts} xywh {695 125 70 15} down_box DOWN_BOX
3841            code0 {o->value(progdefaults.U_umlaut);}
3842          }
3843          Fl_Check_Button btn_U_circ {
3844            label { U circ}
3845            callback {progdefaults.U_circ = o->value();
3846if (progdefaults.U_circ) {
3847	progdefaults.U_umlaut = false;
3848	btn_U_umlaut->value(0);
3849}
3850btn_U_umlaut->redraw();
3851progdefaults.changed = true;
3852CW_table_changed = true;}
3853            tooltip {Swap left/right keyer contacts} xywh {695 162 70 15} down_box DOWN_BOX
3854            code0 {o->value(progdefaults.U_circ);}
3855          }
3856        }
3857        Fl_Group {} {
3858          label {See https://en.wikipedia.org/wiki/Morse_code
3859for information regarding extended Morse characters.} open
3860          xywh {310 249 403 45} align 17
3861        } {}
3862      }
3863    }
3864    Fl_Group {} {
3865      label {Punctuation/Noise Processing}
3866      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
3867      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/Punctuation-Noise"));}
3868      code1 {config_pages.push_back(p);}
3869      code2 {tab_tree->add(_("Modem/CW/Punctuation-Noise"));}
3870    } {
3871      Fl_Group {} {
3872        label {Check to enable character encode/decode} open
3873        xywh {205 30 590 185} box ENGRAVED_BOX align 17
3874      } {
3875        Fl_Check_Button btn_CW_backslash {
3876          label { backslash \\     ".-..-."}
3877          callback {progdefaults.CW_backslash = o->value();
3878progdefaults.changed = true;
3879CW_table_changed = true;}
3880          tooltip {disable for no printed character} xywh {265 65 70 15} down_box DOWN_BOX value 1 labelfont 4
3881          code0 {o->value(progdefaults.CW_backslash);}
3882        }
3883        Fl_Check_Button btn_CW_single_quote {
3884          label { single quote '  ".----."}
3885          callback {progdefaults.CW_single_quote = o->value();
3886progdefaults.changed = true;
3887CW_table_changed = true;}
3888          tooltip {disable for no printed character} xywh {265 92 70 15} down_box DOWN_BOX value 1 labelfont 4
3889          code0 {o->value(progdefaults.CW_single_quote);}
3890        }
3891        Fl_Check_Button btn_CW_dollar_sign {
3892          label { dollar sign $   "...-..-"}
3893          callback {progdefaults.CW_dollar_sign = o->value();
3894progdefaults.changed = true;
3895CW_table_changed = true;}
3896          tooltip {disable for no printed character} xywh {265 120 70 15} down_box DOWN_BOX value 1 labelfont 4
3897          code0 {o->value(progdefaults.CW_dollar_sign);}
3898        }
3899        Fl_Check_Button btn_CW_open_paren {
3900          label { open_paren (    "-.--."}
3901          callback {progdefaults.CW_open_paren = o->value();
3902progdefaults.changed = true;
3903CW_table_changed = true;}
3904          tooltip {disable for no printed character} xywh {265 147 70 15} down_box DOWN_BOX value 1 labelfont 4
3905          code0 {o->value(progdefaults.CW_open_paren);}
3906        }
3907        Fl_Check_Button btn_CW_close_paren {
3908          label { close paren )   "-.--.-"}
3909          callback {progdefaults.CW_close_paren = o->value();
3910progdefaults.changed = true;
3911CW_table_changed = true;}
3912          tooltip {disable for no printed character} xywh {265 175 70 15} down_box DOWN_BOX value 1 labelfont 4
3913          code0 {o->value(progdefaults.CW_close_paren);}
3914        }
3915        Fl_Check_Button btn_CW_colon {
3916          label { colon :        "---..."}
3917          callback {progdefaults.CW_colon = o->value();
3918progdefaults.changed = true;
3919CW_table_changed = true;}
3920          tooltip {disable for no printed character} xywh {535 65 70 15} down_box DOWN_BOX value 1 labelfont 4
3921          code0 {o->value(progdefaults.CW_colon);}
3922        }
3923        Fl_Check_Button btn_CW_semi_colon {
3924          label { semi colon ;   "-.-.-."}
3925          callback {progdefaults.CW_semi_colon = o->value();
3926progdefaults.changed = true;
3927CW_table_changed = true;}
3928          tooltip {disable for no printed character} xywh {535 92 70 15} down_box DOWN_BOX value 1 labelfont 4
3929          code0 {o->value(progdefaults.CW_semi_colon);}
3930        }
3931        Fl_Check_Button btn_CW_underscore {
3932          label { underscore _   "..--.-"}
3933          callback {progdefaults.CW_underscore = o->value();
3934progdefaults.changed = true;
3935CW_table_changed = true;}
3936          tooltip {disable for no printed character} xywh {535 120 70 15} down_box DOWN_BOX value 1 labelfont 4
3937          code0 {o->value(progdefaults.CW_underscore);}
3938        }
3939        Fl_Check_Button btn_CW_at_symbol {
3940          label { at symbol @@    ".--.-."}
3941          callback {progdefaults.CW_at_symbol = o->value();
3942progdefaults.changed = true;
3943CW_table_changed = true;}
3944          tooltip {disable for no printed character} xywh {535 147 70 15} down_box DOWN_BOX value 1 labelfont 4
3945          code0 {o->value(progdefaults.CW_at_symbol);}
3946        }
3947        Fl_Check_Button btn_CW_exclamation {
3948          label { exclamation !  "-.-.--"}
3949          callback {progdefaults.CW_exclamation = o->value();
3950progdefaults.changed = true;
3951CW_table_changed = true;}
3952          tooltip {disable for no printed character} xywh {535 175 70 15} down_box DOWN_BOX value 1 labelfont 4
3953          code0 {o->value(progdefaults.CW_exclamation);}
3954        }
3955      }
3956      Fl_Group {} {
3957        label {Unknown character decode (noise)} open
3958        xywh {205 203 590 142} box ENGRAVED_BOX align 17
3959      } {
3960        Fl_Check_Button btn_CW_noise0 {
3961          label { Do not display unknown MORSE symbol}
3962          callback {progdefaults.CW_noise = 0;
3963if (o->value()) {
3964  btn_CW_noise1->value(0);
3965  btn_CW_noise2->value(0);
3966  btn_CW_noise3->value(0);
3967  }
3968else
3969  progdefaults.CW_noise = 0;
3970progdefaults.changed = true;}
3971          tooltip {disable '*'or no printed character} xywh {265 226 193 24} down_box DOWN_BOX labelfont 4
3972          code0 {o->value(progdefaults.CW_noise == 0);}
3973        }
3974        Fl_Check_Button btn_CW_noise1 {
3975          label { Display '*' character for unknown MORSE symbol}
3976          callback {progdefaults.CW_noise = '*';
3977if (o->value()) {
3978  btn_CW_noise0->value(0);
3979  btn_CW_noise2->value(0);
3980  btn_CW_noise3->value(0);
3981  }
3982else
3983  progdefaults.CW_noise = 0;
3984progdefaults.changed = true;}
3985          tooltip {disable '*'or no printed character} xywh {265 254 193 24} down_box DOWN_BOX labelfont 4
3986          code0 {o->value(progdefaults.CW_noise == '*');}
3987        }
3988        Fl_Check_Button btn_CW_noise2 {
3989          label { Display '_' character for unknown MORSE symbol}
3990          callback {progdefaults.CW_noise = o->value();
3991if (o->value()) {
3992  btn_CW_noise0->value(0);
3993  btn_CW_noise1->value(0);
3994  btn_CW_noise3->value(0);
3995  }
3996else
3997  progdefaults.CW_noise = 0;
3998progdefaults.changed = true;}
3999          tooltip {disable '_' for no printed character} xywh {265 283 193 24} down_box DOWN_BOX labelfont 4
4000          code0 {o->value(progdefaults.CW_noise == '_');}
4001        }
4002        Fl_Check_Button btn_CW_noise3 {
4003          label { Display ' ' character for unknown MORSE symbol}
4004          callback {progdefaults.CW_noise = ' ';
4005if (o->value()) {
4006  btn_CW_noise0->value(0);
4007  btn_CW_noise1->value(0);
4008  btn_CW_noise2->value(0);
4009  }
4010else
4011  progdefaults.CW_noise = 0;
4012progdefaults.changed = true;}
4013          tooltip {disable ' ' for no printed character} xywh {265 312 193 24} down_box DOWN_BOX labelfont 4
4014          code0 {o->value(progdefaults.CW_noise == ' ');}
4015        }
4016      }
4017    }
4018    Fl_Group {} {
4019      label {Modem/CW/WinKeyer}
4020      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4021      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/WinKeyer"));}
4022      code1 {config_pages.push_back(p);}
4023      code2 {tab_tree->add(_("Modem/CW/WinKeyer"));}
4024    } {
4025      Fl_Group select_WK_CommPort {
4026        label {Ser. Port}
4027        callback {progStatus.WK_serial_port_name = o->value();
4028select_WKFSK_CommPort->value(progStatus.WK_serial_port_name.c_str());} open
4029        tooltip {Xcvr serial port} xywh {274 30 405 25} box DOWN_BOX color 55 align 4
4030        code0 {\#include "combo.h"}
4031        code1 {\#include "winkeyer.h"}
4032        code2 {o->value(progStatus.WK_serial_port_name.c_str());}
4033        class Fl_ComboBox
4034      } {}
4035      Fl_Light_Button btn_WKCW_connect {
4036        label Connect
4037        callback {WKCW_connect(o->value());}
4038        tooltip {Connect / Disconnect from WinKeyer} xywh {705 30 80 25}
4039        code0 {o->value(progStatus.WK_online);}
4040      }
4041      Fl_Box box_WK_wait {
4042        label Wait
4043        xywh {269 66 16 16} box DIAMOND_DOWN_BOX align 8
4044      }
4045      Fl_Box box_WK_break_in {
4046        label Bk
4047        xywh {344 66 16 16} box DIAMOND_DOWN_BOX align 8
4048      }
4049      Fl_Box box_WK_busy {
4050        label Busy
4051        xywh {419 66 16 16} box DIAMOND_DOWN_BOX align 8
4052      }
4053      Fl_Box box_WK_xoff {
4054        label Bfr
4055        xywh {494 66 16 16} box DIAMOND_DOWN_BOX align 8
4056      }
4057      Fl_Box box_WK_keydown {
4058        label Key
4059        xywh {570 66 16 16} box DIAMOND_DOWN_BOX align 8
4060      }
4061      Fl_Group choice_WK_keyer_mode {
4062        label {Keyer Mode}
4063        callback {WK_change_choice_keyer_mode();} open
4064        xywh {237 104 90 22} box BORDER_BOX color 55
4065        code0 {\#include "combo.h"}
4066        class Fl_ComboBox
4067      } {}
4068      Fl_Group choice_WK_hang {
4069        label Hang
4070        callback {WK_change_choice_hang();} open
4071        xywh {383 104 90 22} box BORDER_BOX color 55
4072        class Fl_ComboBox
4073      } {}
4074      Fl_Group choice_WK_sidetone {
4075        label Sidetone
4076        callback {WK_change_choice_sidetone();} open
4077        xywh {530 104 90 22} box BORDER_BOX color 55
4078        class Fl_ComboBox
4079      } {}
4080      Fl_Group choice_WK_output_pins {
4081        label {Output PIns}
4082        callback {WK_change_choice_output_pins();} open
4083        xywh {677 104 90 22} box BORDER_BOX color 55
4084        class Fl_ComboBox
4085      } {}
4086      Fl_Check_Button btn_WK_use_pot {
4087        label {Use Pot}
4088        callback {WK_use_pot_changed();}
4089        tooltip {Winkeyer pot controls WPM} xywh {623 64 20 16} down_box DOWN_BOX align 8 when 1
4090      }
4091      Fl_Output txt_WK_wpm {
4092        tooltip {WPM setting} xywh {710 61 50 24}
4093      }
4094      Fl_Group {} {
4095        label ModeReg open
4096        xywh {210 132 134 184} box ENGRAVED_FRAME align 17
4097      } {
4098        Fl_Check_Button btn_WK_swap {
4099          label Swap
4100          callback {WK_change_btn_swap();}
4101          tooltip {Swap left/right keyer contacts} xywh {220 174 70 15} down_box DOWN_BOX
4102        }
4103        Fl_Check_Button btn_WK_auto_space {
4104          label {Auto Space}
4105          callback {WK_change_btn_auto_space();}
4106          tooltip {Enable paddle auto spacing of characters} xywh {220 204 70 15} down_box DOWN_BOX
4107        }
4108        Fl_Check_Button btn_WK_ct_space {
4109          label {CT space}
4110          callback {WK_change_btn_ct_space();}
4111          tooltip {Enable contest character spacing} xywh {220 234 70 15} down_box DOWN_BOX
4112        }
4113        Fl_Check_Button btn_WK_paddledog {
4114          label {Paddle Dog}
4115          callback {WK_change_btn_paddledog();}
4116          xywh {220 264 70 15} down_box DOWN_BOX
4117        }
4118        Fl_Check_Button btn_WK_cut_zeronine {
4119          label {Cut 0/9}
4120          callback {WK_change_btn_cut_zeronine();}
4121          tooltip {Use T/N for 0/9} xywh {220 294 70 15} down_box DOWN_BOX
4122        }
4123      }
4124      Fl_Group {} {
4125        label ModeReg open
4126        xywh {367 132 134 184} box ENGRAVED_FRAME align 17
4127      } {
4128        Fl_Check_Button btn_WK_paddle_echo {
4129          label {Paddle echo}
4130          callback {WK_change_btn_paddle_echo();}
4131          tooltip {Echo paddle chars to Rx Panel} xywh {373 174 70 16} down_box DOWN_BOX
4132        }
4133        Fl_Check_Button btn_WK_serial_echo {
4134          label {Serial echo}
4135          callback {WK_change_btn_serial_echo();}
4136          xywh {373 204 70 16} down_box DOWN_BOX value 1
4137        }
4138        Fl_Check_Button btn_WK_sidetone_on {
4139          label {Tone Keyer}
4140          callback {WK_change_btn_sidetone_on();}
4141          tooltip {Enable Winkeyer tone keying} xywh {373 234 103 16} down_box DOWN_BOX
4142        }
4143        Fl_Check_Button btn_WK_tone_on {
4144          label {Tone ON}
4145          callback {WK_change_btn_tone_on();}
4146          tooltip {Enable Winkeyer audio tone} xywh {373 264 87 16} down_box DOWN_BOX
4147        }
4148        Fl_Check_Button btn_WK_ptt_on {
4149          label {PTT ON}
4150          callback {WK_change_btn_ptt_on();}
4151          tooltip {Enable Winkeyer PTT output} xywh {373 294 87 16} down_box DOWN_BOX
4152        }
4153      }
4154      Fl_Group {} {
4155        label {WPM Settings} open
4156        xywh {510 132 112 209} box ENGRAVED_FRAME align 17
4157      } {
4158        Fl_Counter cntr_WK_min_wpm {
4159          label {Min WPM}
4160          callback {WK_change_cntr_min_wpm();
4161if ((o->value() + cntr_WK_rng_wpm->value()) > 55)
4162  cntr_WK_rng_wpm->value(55 - o->value());}
4163          tooltip {Minimum WPM setting
4164default = 10} xywh {531 172 64 22} type Simple minimum 10 maximum 30 step 1 value 10
4165        }
4166        Fl_Counter cntr_WK_rng_wpm {
4167          label {Rng WPM}
4168          callback {WK_change_cntr_rng_wpm();
4169if ((cntr_WK_min_wpm->value() + o->value()) > 55)
4170o->value(55 - cntr_WK_min_wpm->value());}
4171          tooltip {Range WPM setting
4172default = 25} xywh {531 215 64 21} type Simple
4173        }
4174        Fl_Counter cntr_WK_farnsworth {
4175          label Farsnworth
4176          callback {WK_change_cntr_farnsworth();}
4177          tooltip {Farnsworth keying (0 = none)
4178default = 0} xywh {531 257 64 22} type Simple
4179        }
4180        Fl_Counter cntr_WK_cmd_wpm {
4181          label {Cmd WPM}
4182          callback {WK_change_cntr_cmd_wpm();}
4183          tooltip {WPM speed for Winkeyer Command strings
4184default = 18} xywh {531 300 64 22} type Simple
4185        }
4186      }
4187      Fl_Group {} {
4188        label {Timing/Settings} open
4189        xywh {630 132 160 209} box ENGRAVED_FRAME align 17
4190      } {
4191        Fl_Counter cntr_WK_ratio {
4192          label Ratio
4193          callback {WK_change_cntr_ratio();}
4194          tooltip {Keying ratio
4195default = 3.0} xywh {642 172 64 22} type Simple
4196        }
4197        Fl_Counter cntr_WK_comp {
4198          label Comp
4199          callback {WK_change_cntr_comp();}
4200          tooltip {Compensation in msec
4201default = 0} xywh {642 215 64 21} type Simple
4202        }
4203        Fl_Counter cntr_WK_first_ext {
4204          label {1st Ext}
4205          callback {WK_change_cntr_first_ext();}
4206          tooltip {Extra duration to first dit/dot in msec
4207default = 0} xywh {642 257 64 22} type Simple
4208        }
4209        Fl_Counter cntr_WK_sample {
4210          label Sample
4211          callback {WK_change_cntr_sample();}
4212          tooltip {Paddle sampling (see Winkeyer manual)
4213default = 50} xywh {642 300 64 22} type Simple
4214        }
4215        Fl_Counter cntr_WK_weight {
4216          label Weight
4217          callback {WK_change_cntr_weight();}
4218          tooltip {Keying weight
4219default = 50} xywh {713 172 64 22} type Simple
4220        }
4221        Fl_Counter cntr_WK_leadin {
4222          label Leadin
4223          callback {WK_change_cntr_leadin();}
4224          tooltip {Leadin in msec
4225default = 0} xywh {713 215 64 21} type Simple
4226        }
4227        Fl_Counter cntr_WK_tail {
4228          label Tail
4229          callback {WK_change_cntr_tail();}
4230          tooltip {Extend last dit/dot in msec
4231default = 0} xywh {713 257 64 22} type Simple
4232        }
4233      }
4234      Fl_Group {} {open
4235        xywh {210 317 291 25} box ENGRAVED_FRAME
4236      } {
4237        Fl_Check_Button btnK3NG {
4238          label {K3NG Arduino sketch emulation}
4239          callback {progdefaults.WK_K3NGsketch = o->value();
4240progdefaults.changed = true;}
4241          tooltip {Activate for Mortty K3NG sketch} xywh {220 324 223 15} down_box DOWN_BOX
4242          code0 {o->value(progdefaults.WK_K3NGsketch);}
4243        }
4244      }
4245    }
4246    Fl_Group {} {
4247      label {Modem/CW/nanoIO}
4248      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4249      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/nanoIO"));}
4250      code1 {config_pages.push_back(p);}
4251      code2 {tab_tree->add(_("Modem/CW/nanoIO"));}
4252    } {
4253      Fl_Group select_nanoCW_CommPort {
4254        label {Ser. Port}
4255        callback {progdefaults.nanoIO_serial_port_name = o->value();} open
4256        tooltip {nanoIO serial port} xywh {270 21 435 23} box DOWN_BOX color 55 align 4
4257        code0 {\#include "combo.h"}
4258        code1 {\#include "nanoIO.h"}
4259        code2 {o->value(progdefaults.nanoIO_serial_port_name.c_str());}
4260        class Fl_ComboBox
4261      } {}
4262      Fl_Light_Button btn_nanoCW_connect {
4263        label Connect
4264        callback {if (o->value()) {
4265  if (open_nanoCW()) {
4266    btn_nanoIO_connect->value(1);
4267    chk_nanoIO_CW_io->value(1);
4268  } else {
4269    o->value(0);
4270    btn_nanoIO_connect->value(0);
4271    chk_nanoIO_CW_io->value(0);
4272    chk_nanoIO_FSK_io->value(0);
4273  }
4274} else {
4275  close_nanoIO();
4276  o->value(0);
4277  btn_nanoIO_connect->value(0);
4278  chk_nanoIO_FSK_io->value(0);
4279  chk_nanoIO_CW_io->value(0);
4280}}
4281        tooltip {Connect / Disconnect from nanoIO} xywh {711 21 80 22}
4282      }
4283      Fl_Counter cntr_nanoCW_paddle_WPM {
4284        label Paddle
4285        callback {progdefaults.CW_keyspeed = (int)o->value();
4286set_nano_keyerWPM(progdefaults.CW_keyspeed);
4287progdefaults.changed = true;}
4288        tooltip {CW wpm using paddle keyer} xywh {260 48 110 22} align 4 minimum 5 maximum 100 step 1 value 20
4289        code0 {o->value(progdefaults.CW_keyspeed);}
4290        code1 {o->lstep(5);}
4291      }
4292      Fl_Text_Display txt_nano_CW_io {
4293        xywh {204 155 590 189} align 25
4294        code0 {\#include "FTextRXTX.h"}
4295        code1 {o->setFont(progdefaults.RxFontnbr);}
4296        code2 {o->setFontSize(12);}
4297        class FTextView
4298      }
4299      Fl_Counter cntr_nanoCW_WPM {
4300        label {Comp'}
4301        callback {progdefaults.CWspeed = (int)o->value();
4302cntCW_WPM->value(progdefaults.CWspeed);
4303sldrCWxmtWPM->value(progdefaults.CWspeed);
4304progdefaults.changed = true;
4305sync_cw_parameters();}
4306        tooltip {CW wpm keyboard strings} xywh {260 74 110 22} align 4 minimum 5 maximum 100 step 1 value 20
4307        code0 {o->value(progdefaults.CWspeed);}
4308        code1 {o->lstep(5);}
4309      }
4310      Fl_Counter cnt_nanoCWdash2dot {
4311        label {Dash/Dot}
4312        callback {progdefaults.CWdash2dot=o->value();
4313cntCWdash2dot->value(progdefaults.CWdash2dot);
4314progdefaults.changed = true;}
4315        tooltip {Dash to dot ratio} xywh {292 100 78 22} type Simple align 4 minimum 2.5 maximum 3.5 value 3
4316        code0 {o->value(progdefaults.CWdash2dot);}
4317        code1 {o->labelsize(FL_NORMAL_SIZE);}
4318        class Fl_Counter2
4319      }
4320      Fl_Group listbox_nanoIO_serbaud {
4321        label Baud
4322        callback {progdefaults.nanoIO_serbaud = o->index();
4323listbox_nanoIO_serbaud2->index(o->index());
4324progdefaults.changed = true;} open
4325        xywh {594 47 110 24} box DOWN_BOX color 7 align 4
4326        code0 {o->add("1200|4800|9600|19200|38400|57600|115200");}
4327        code1 {o->index(progdefaults.nanoIO_serbaud);}
4328        class Fl_ListBox
4329      } {}
4330      Fl_Group listbox_nano_keyer {
4331        label Keyer
4332        callback {progdefaults.nanoIO_CW_keyer = o->index();
4333set_nanoIO_keyer(o->index());
4334progdefaults.changed = true;} open
4335        xywh {595 73 110 24} box DOWN_BOX color 7 align 4
4336        code0 {o->add("Iambic-A|Iambic-B|Straight");}
4337        code1 {o->index(progdefaults.nanoIO_CW_keyer);}
4338        class Fl_ListBox
4339      } {}
4340      Fl_Group listbox_incr {
4341        label {Incr'}
4342        callback {progdefaults.nanoIO_CW_incr = o->index() + '1';
4343set_nanoIO_incr();
4344progdefaults.changed = true;} open
4345        xywh {645 99 60 24} box DOWN_BOX color 7 align 4
4346        code0 {o->add("1|2|3|4|5");}
4347        code1 {o->index(progdefaults.nanoIO_CW_incr - '1');}
4348        class Fl_ListBox
4349      } {}
4350      Fl_Button btn_cwfsk_save {
4351        label Save
4352        callback {nano_CW_save();}
4353        tooltip {Write state of nanoIO to Arduino EEPROM} xywh {711 74 80 22}
4354      }
4355      Fl_Button btn_cwfsk_query {
4356        label Status
4357        callback {nano_CW_query();}
4358        tooltip {Query state of nanoIO} xywh {711 100 80 22}
4359      }
4360      Fl_Group {} {open
4361        xywh {375 45 154 80} box FLAT_BOX
4362      } {
4363        Fl_Check_Button btn_nanoIO_pot {
4364          label {Use WPM pot'}
4365          callback {progdefaults.nanoIO_speed_pot=o->value();
4366progdefaults.changed=true;
4367nanoIO_use_pot();}
4368          tooltip {WPM pot update to nanoIO required} xywh {502 48 21 22} down_box DOWN_BOX align 4
4369          code0 {o->value(progdefaults.nanoIO_speed_pot);}
4370        }
4371        Fl_Counter cntr_nanoIO_min_wpm {
4372          label {Min WPM}
4373          callback {if ((o->value() + cntr_nanoIO_rng_wpm->value()) > 100)
4374  cntr_nanoIO_rng_wpm->value(100 - o->value());
4375set_nanoIO_min_max();}
4376          tooltip {Minimum WPM setting
4377default = 10} xywh {447 74 75 22} type Simple align 4 minimum 10 maximum 30 step 1 value 10
4378        }
4379        Fl_Counter cntr_nanoIO_rng_wpm {
4380          label {Rng WPM}
4381          callback {if ((cntr_nanoIO_min_wpm->value() + o->value()) > 100)
4382o->value(100 - cntr_nanoIO_min_wpm->value());
4383set_nanoIO_min_max();}
4384          tooltip {Range WPM setting
4385default = 20} xywh {447 100 75 22} type Simple align 4 minimum 10 maximum 40 step 1 value 20
4386        }
4387      }
4388      Fl_Check_Button btn_disable_CW_PTT {
4389        label {PTT off}
4390        callback {progdefaults.disable_CW_PTT=o->value();
4391progdefaults.changed=true;
4392nanoIO_set_cw_ptt();}
4393        tooltip {Disable PTT} xywh {531 99 70 24} down_box DOWN_BOX
4394        code0 {o->value(progdefaults.disable_CW_PTT);}
4395      }
4396      Fl_Group {} {
4397        label {Comp'} open
4398        xywh {204 125 590 30} box ENGRAVED_BOX align 20
4399      } {
4400        Fl_Counter cntrWPMtest {
4401          label WPM
4402          callback {progdefaults.nanoCW_test_wpm = o->value();
4403progdefaults.changed=true;}
4404          xywh {302 129 78 22} type Simple align 4 minimum 5 maximum 50 step 1 value 30
4405          code0 {o->value(progdefaults.nanoCW_test_wpm);}
4406        }
4407        Fl_Button btn_cal_variable {
4408          label {Test =>}
4409          callback {nanoIO_wpm_cal();}
4410          tooltip {Send "paris " WPM times} xywh {384 129 70 22}
4411        }
4412        Fl_Value_Input corr_var_wpm {
4413          label {secs' =>}
4414          tooltip {Test duration (60 seconds)} xywh {458 129 70 22} color 255 align 8
4415        }
4416        Fl_Value_Input usec_correc {
4417          label {Comp'}
4418          tooltip {Compensationin microseconds} xywh {645 129 60 22} color 255
4419          code0 {o->value(progdefaults.usec_correc);}
4420        }
4421        Fl_Button btn_correction {
4422          label Adjust
4423          callback {nanoIO_correction();}
4424          tooltip {send compensation to nanoIO} xywh {711 129 80 22}
4425        }
4426      }
4427      Fl_Check_Button chk_nanoIO_CW_io {
4428        label {CW i/o}
4429        callback {if (o->value() == 0) {
4430  o->value(1);
4431  return;
4432}
4433set_nanoCW();
4434chk_nanoIO_FSK_io->value(0);}
4435        tooltip {Enable CW operation} xywh {711 47 70 24} down_box DOWN_BOX
4436      }
4437    }
4438    Fl_Group {} {
4439      label {Modem/CW/DTR-RTS keying}
4440      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4441      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/DTR-RTS keying"));}
4442      code1 {config_pages.push_back(p);}
4443      code2 {tab_tree->add(_("Modem/CW/DTR-RTS keying"));}
4444    } {
4445      Fl_Group {} {open
4446        xywh {205 25 590 130} box ENGRAVED_BOX
4447      } {
4448        Fl_Box {} {
4449          label {DTR/RTS keying may be assigned to flrig,
4450
4451Share the RigCat serial port, share the Separate PTT serial
4452port, or be assigned to separate serial port.
4453
4454No settings for baud, stops bits, etc are needed.}
4455          xywh {210 31 580 116} align 20
4456        }
4457      }
4458      Fl_Group {} {open
4459        xywh {205 157 590 40} box ENGRAVED_FRAME
4460      } {
4461        Fl_Check_Button btn_CW_KEYLINE_flrig {
4462          label {Use flrig DTR/CTS keying}
4463          callback {int val = o->value();
4464progdefaults.use_FLRIGkeying = val;
4465if (val) {
4466  progdefaults.CW_KEYLINE_on_cat_port = 0;
4467  progdefaults.CW_KEYLINE_on_ptt_port = 0;
4468  btn_CW_KEYLINE_catport->value(0);
4469  btn_CW_KEYLINE_shared_PTT->value(0);
4470}
4471progdefaults.CW_KEYLINE_changed = true;}
4472          xywh {215 170 23 15} down_box DOWN_BOX align 8
4473          code0 {o->value(progdefaults.use_FLRIGkeying);}
4474        }
4475        Fl_Check_Button btn_FLRIG_CW_disable_ptt {
4476          label {Disable flrig CW PTT}
4477          callback {progdefaults.CATkeying_disable_ptt = o->value();
4478btn_CAT_CW_disable_ptt->value(o->value());
4479progdefaults.changed = true;}
4480          tooltip {Required for some transceivers
4481e.g. TS-480} xywh {475 170 70 14} down_box DOWN_BOX
4482          code0 {o->value(progdefaults.CATkeying_disable_ptt);}
4483        }
4484      }
4485      Fl_Group {} {open
4486        xywh {205 199 590 145} box ENGRAVED_FRAME
4487      } {
4488        Fl_Check_Button btn_CW_KEYLINE_catport {
4489          label {Share RIGCAT port}
4490          callback {int val = o->value();
4491progdefaults.CW_KEYLINE_on_cat_port = val;
4492if (val) {
4493  progdefaults.CW_KEYLINE_on_ptt_port = 0;
4494  progdefaults.use_FLRIGkeying = 0;
4495  btn_CW_KEYLINE_shared_PTT->value(0);
4496  btn_CW_KEYLINE_flrig->value(0);
4497}
4498progdefaults.CW_KEYLINE_changed = true;}
4499          xywh {215 215 23 15} down_box DOWN_BOX align 8
4500          code0 {o->value(progdefaults.CW_KEYLINE_on_cat_port);}
4501        }
4502        Fl_Check_Button btn_CW_KEYLINE_shared_PTT {
4503          label {Share Separate PTT port}
4504          callback {int val = o->value();
4505progdefaults.CW_KEYLINE_on_ptt_port = val;
4506if (val) {
4507  progdefaults.CW_KEYLINE_on_cat_port = 0;
4508  progdefaults.use_FLRIGkeying = 0;
4509  btn_CW_KEYLINE_catport->value(0);
4510  btn_CW_KEYLINE_flrig->value(0);
4511}
4512progdefaults.CW_KEYLINE_changed = true;}
4513          xywh {215 246 23 15} down_box DOWN_BOX align 8
4514          code0 {o->value(progdefaults.CW_KEYLINE_on_ptt_port);}
4515        }
4516        Fl_Group listbox_CW_KEYLINE {
4517          label {CW Keyline}
4518          callback {progdefaults.CW_KEYLINE = o->index();} open
4519          xywh {471 241 90 24} box DOWN_BOX color 7
4520          code0 {o->add("None|RTS|DTR");}
4521          code1 {o->index(progdefaults.CW_KEYLINE);}
4522          class Fl_ListBox
4523        } {}
4524        Fl_Group listbox_PTT_KEYLINE {
4525          label {PTT keyline}
4526          callback {progdefaults.PTT_KEYLINE = o->index();
4527progdefaults.changed = true;} open
4528          xywh {693 227 90 24} box DOWN_BOX color 7 align 4 hide
4529          code0 {o->add("None|RTS|DTR");}
4530          code1 {o->index(0);//progdefaults.PTT_KEYLINE);}
4531          class Fl_ListBox
4532        } {}
4533        Fl_Group select_CW_KEYLINE_CommPort {
4534          label {Use Separate Keying Serial Port}
4535          callback {progdefaults.CW_KEYLINE_serial_port_name = o->value();
4536
4537if (progStatus.useCW_KEYLINE) {
4538  close_CW_KEYLINE();
4539  if (!open_CW_KEYLINE()) {
4540    btn_CW_KEYLINE_connect->value(0);
4541    progStatus.useCW_KEYLINE = 0;
4542  }
4543    progStatus.useCW_KEYLINE = 1;
4544}
4545progdefaults.CW_KEYLINE_changed = true;} open
4546          tooltip {nanoIO serial port} xywh {210 295 470 24} box DOWN_BOX color 55 align 5
4547          code0 {\#include "combo.h"}
4548          code1 {\#include "nanoIO.h"}
4549          code2 {o->value(progdefaults.CW_KEYLINE_serial_port_name.c_str());}
4550          class Fl_ComboBox
4551        } {}
4552        Fl_Light_Button btn_CW_KEYLINE_connect {
4553          label Connect
4554          callback {if (o->value()) {
4555  if (!open_CW_KEYLINE())
4556    o->value(0);
4557  else {
4558	progStatus.useCW_KEYLINE = 1;
4559	btn_use_ELCTkeying->value(0);
4560	btn_use_KNWDkeying->value(0);
4561	btn_use_ICOMkeying->value(0);
4562	btn_use_YAESUkeying->value(0);
4563	progdefaults.use_ELCTkeying = 0;
4564	progdefaults.use_ICOMkeying = 0;
4565	progdefaults.use_KNWDkeying = 0;
4566	progdefaults.use_YAESUkeying = 0;
4567  }
4568} else {
4569  close_CW_KEYLINE();
4570  progStatus.useCW_KEYLINE = 0;
4571}}
4572          tooltip {Connect / Disconnect from nanoIO} xywh {692 295 90 24}
4573          code0 {o->value(progStatus.useCW_KEYLINE);}
4574        }
4575      }
4576      Fl_Counter cnt_cwio_comp {
4577        label {Comp (msec)}
4578        callback {progdefaults.cwio_comp = int(o->value());}
4579        tooltip {Timing compensation} xywh {600 241 80 24} type Simple align 1 minimum 0 maximum 10 step 1
4580        code0 {o->value(progdefaults.cwio_comp);}
4581      }
4582      Fl_Light_Button btn_cw_dtr_calibrate {
4583        label Calibrate
4584        callback {calibrate_cwio();}
4585        xywh {692 241 90 24} selection_color 6
4586      }
4587    }
4588    Fl_Group {} {
4589      label {Modem/CW/CAT Keying}
4590      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4591      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/CW/CAT keying"));}
4592      code1 {config_pages.push_back(p);}
4593      code2 {tab_tree->add(_("Modem/CW/CAT keying"));}
4594    } {
4595      Fl_Box {} {
4596        label {CW keying using CAT command strings.  Available for supported transceivers.
4597Use with RigCAT or flrig transceiver control.  A separate serial port is NOT needed.
4598
4599Disable CAT PTT if transceiver interprets that as a keydown command (e.g. TS480).
4600Recommend setting transceiver to either semi or full break-in.
4601
4602Enter correct CIV address for Icom transceivers.}
4603        xywh {210 23 585 140} box THIN_DOWN_BOX color 54 selection_color 54 labelsize 13 align 20
4604      }
4605      Fl_Check_Button btn_use_ICOMkeying {
4606        label Icom
4607        callback {progdefaults.use_ICOMkeying = o->value();
4608if (o->value()) {
4609  btn_use_ELCTkeying->value(0);
4610  btn_use_KNWDkeying->value(0);
4611  btn_use_YAESUkeying->value(0);
4612  progdefaults.use_ELCTkeying = 0;
4613  progdefaults.use_KNWDkeying = 0;
4614  progdefaults.use_YAESUkeying = 0;
4615  close_CW_KEYLINE();
4616  progStatus.useCW_KEYLINE = 0;
4617  btn_cw_dtr_calibrate->value(0);
4618  }
4619progdefaults.changed=true;}
4620        xywh {273 173 70 15} down_box DOWN_BOX
4621        code0 {o->value(progdefaults.use_ICOMkeying);}
4622      }
4623      Fl_Input val_ICOMcivaddr {
4624        label {Hex CIV addr}
4625        callback {progdefaults.ICOMcivaddr=o->value();
4626progdefaults.changed=true;}
4627        tooltip {Enter transceiver HEX CIV address} xywh {343 169 58 22} align 8
4628        code0 {o->value(progdefaults.ICOMcivaddr.c_str());}
4629      }
4630      Fl_Check_Button btn_use_ELCTkeying {
4631        label Elecraft
4632        callback {progdefaults.use_ELCTkeying = o->value();
4633if (o->value()) {
4634  btn_use_YAESUkeying->value(0);
4635  btn_use_ICOMkeying->value(0);
4636  btn_use_KNWDkeying->value(0);
4637  progdefaults.use_YAESUkeying = 0;
4638  progdefaults.use_ICOMkeying = 0;
4639  progdefaults.use_KNWDkeying = 0;
4640  close_CW_KEYLINE();
4641  progStatus.useCW_KEYLINE = 0;
4642  btn_cw_dtr_calibrate->value(0);
4643  }
4644progdefaults.changed=true;}
4645        xywh {273 197 70 15} down_box DOWN_BOX
4646        code0 {o->value(progdefaults.use_ELCTkeying);}
4647      }
4648      Fl_Check_Button btn_use_KNWDkeying {
4649        label Kenwood
4650        callback {progdefaults.use_KNWDkeying = o->value();
4651if (o->value()) {
4652  btn_use_YAESUkeying->value(0);
4653  btn_use_ICOMkeying->value(0);
4654  btn_use_ELCTkeying->value(0);
4655  progdefaults.use_YAESUkeying = 0;
4656  progdefaults.use_ICOMkeying = 0;
4657  progdefaults.use_ELCTkeying = 0;
4658  close_CW_KEYLINE();
4659  progStatus.useCW_KEYLINE = 0;
4660  btn_cw_dtr_calibrate->value(0);
4661  }
4662progdefaults.changed=true;}
4663        xywh {455 197 70 15} down_box DOWN_BOX
4664        code0 {o->value(progdefaults.use_KNWDkeying);}
4665      }
4666      Fl_Check_Button btn_use_YAESUkeying {
4667        label Yaesu
4668        callback {progdefaults.use_YAESUkeying = o->value();
4669if (o->value()) {
4670  btn_use_ELCTkeying->value(0);
4671  btn_use_KNWDkeying->value(0);
4672  btn_use_ICOMkeying->value(0);
4673  progdefaults.use_ELCTkeying = 0;
4674  progdefaults.use_KNWDkeying = 0;
4675  progdefaults.use_ICOMkeying = 0;
4676  close_CW_KEYLINE();
4677  progStatus.useCW_KEYLINE = 0;
4678  btn_cw_dtr_calibrate->value(0);
4679  }
4680progdefaults.changed=true;}
4681        xywh {637 197 70 15} down_box DOWN_BOX
4682        code0 {o->value(progdefaults.use_YAESUkeying);}
4683      }
4684      Fl_Group {} {
4685        label {Timing Compensation} open
4686        xywh {205 242 590 103} box ENGRAVED_BOX align 21
4687      } {
4688        Fl_Button btn_CAT_keying_calibrate {
4689          label Calibrate
4690          callback {CAT_keying_calibrate();}
4691          tooltip {Send WPM 'PARIS ' words} xywh {230 317 80 22}
4692          code0 {extern void CAT_keying_calibrate();}
4693        }
4694        Fl_Value_Input out_CATkeying_compensation {
4695          label {Compensate (secs)}
4696          callback {progdefaults.CATkeying_compensation = o->value() * 1000;
4697progdefaults.changed=true;}
4698          xywh {314 317 50 22} align 8 maximum 10 step 0.01
4699          code0 {o->value(progdefaults.CATkeying_compensation / 1000.0);}
4700        }
4701        Fl_Button btn_CAT_keying_clear {
4702          label Clear
4703          callback {progdefaults.CATkeying_compensation = 0;
4704out_CATkeying_compensation->value(0);
4705out_CATkeying_test_result->value(0);}
4706          tooltip {Clear compensation} xywh {510 317 50 22}
4707        }
4708        Fl_Group {} {
4709          label {Compute timing compensation at current WPM .  Set WPM to nominal.  Compensation
4710will be good over a 2:1 WPM range.  Calibration/Test is 1 minute of PARIS} open
4711          xywh {210 265 580 45} box THIN_DOWN_BOX color 54 labelsize 13 align 20
4712        } {}
4713        Fl_Button btn_CAT_keying_test {
4714          label Test
4715          callback {CAT_keying_test();}
4716          tooltip {Send WPM 'PARIS ' words} xywh {574 317 50 22}
4717          code0 {extern void CAT_keying_test();}
4718        }
4719        Fl_Value_Input out_CATkeying_test_result {
4720          label secs
4721          xywh {630 317 50 22} align 8 maximum 10 step 0.01
4722          code0 {o->value(0);}
4723        }
4724      }
4725      Fl_Check_Button btn_CAT_CW_disable_ptt {
4726        label {Disable CAT PTT}
4727        callback {progdefaults.CATkeying_disable_ptt = o->value();
4728btn_FLRIG_CW_disable_ptt->value(o->value());
4729progdefaults.changed = true;}
4730        tooltip {Required for some transceivers
4731e.g. TS-480} xywh {273 221 70 15} down_box DOWN_BOX
4732        code0 {o->value(progdefaults.CATkeying_disable_ptt);}
4733      }
4734    }
4735    Fl_Group {} {
4736      label {Modem/DominoEX}
4737      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4738      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/DominoEX"));}
4739      code1 {config_pages.push_back(p);}
4740      code2 {tab_tree->add(_("Modem/DominoEX"));}
4741    } {
4742      Fl_Input txtSecondary {
4743        label {Secondary Text}
4744        callback {progdefaults.secText = o->value();
4745progdefaults.changed = true;}
4746        tooltip {Text to send during keyboard idle times} xywh {310 88 360 40} type Multiline align 5 when 1
4747        code0 {txtSecondary->labelsize(FL_NORMAL_SIZE);}
4748        class Fl_Input2
4749      }
4750      Fl_Check_Button valDominoEX_FILTER {
4751        label Filtering
4752        callback {progdefaults.DOMINOEX_FILTER = o->value();
4753resetDOMEX();
4754progdefaults.changed = true;}
4755        tooltip {Use DSP filter before decoder} xywh {310 142 80 20} down_box DOWN_BOX value 1
4756        code0 {o->value(progdefaults.DOMINOEX_FILTER);}
4757      }
4758      Fl_Counter valDominoEX_BW {
4759        label {Filter bandwidth factor}
4760        callback {progdefaults.DOMINOEX_BW = o->value();
4761resetDOMEX();
4762progdefaults.changed = true;}
4763        tooltip {Filter bandwidth relative to signal width} xywh {451 142 63 20} type Simple align 8 minimum 1 maximum 2 value 1.5
4764        code0 {o->value(progdefaults.DOMINOEX_BW);}
4765        code1 {o->labelsize(FL_NORMAL_SIZE);}
4766        class Fl_Counter2
4767      }
4768      Fl_Check_Button chkDominoEX_FEC {
4769        label FEC
4770        callback {progdefaults.DOMINOEX_FEC = o->value();
4771progdefaults.changed = true;}
4772        tooltip {Enable MultiPSK-compatible FEC} xywh {310 172 51 20} down_box DOWN_BOX
4773        code0 {o->value(progdefaults.DOMINOEX_FEC);}
4774      }
4775      Fl_Value_Slider valDomCWI {
4776        label {CWI threshold}
4777        callback {progdefaults.DomCWI = o->value();
4778progdefaults.changed = true;}
4779        tooltip {CWI detection and suppression} xywh {310 208 260 20} type Horizontal align 1 textsize 14
4780        code0 {o->value(progdefaults.DomCWI);}
4781        code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
4782        class Fl_Value_Slider2
4783      }
4784      Fl_Counter valDominoEX_PATHS {
4785        label {Paths (hidden)}
4786        callback {progdefaults.DOMINOEX_PATHS = (int)o->value();
4787progdefaults.changed = true;}
4788        xywh {634 195 63 20} type Simple minimum 4 maximum 8 step 1 value 5
4789        code0 {o->value(progdefaults.DOMINOEX_PATHS);}
4790        code1 {o->labelsize(FL_NORMAL_SIZE);}
4791        code2 {o->hide();}
4792        class Fl_Counter2
4793      }
4794    }
4795    Fl_Group {} {
4796      label {Modem/Feld Hell}
4797      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4798      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Feld Hell"));}
4799      code1 {config_pages.push_back(p);}
4800      code2 {tab_tree->add(_("Modem/Feld Hell"));}
4801    } {
4802      Fl_Group {} {
4803        label {Hell Transmit Parameters} open
4804        xywh {247 31 500 133} box ENGRAVED_FRAME align 17
4805      } {
4806        Fl_Group listboxHellFont {
4807          label {Transmit font}
4808          callback {progdefaults.feldfontnbr=o->index();
4809progdefaults.changed = true;} open
4810          tooltip {Select TX raster font} xywh {262 56 225 22} box DOWN_BOX color 7 align 8
4811          code0 {\#include "fontdef.h"}
4812          code1 {o->add(szFeldFonts);}
4813          code2 {o->index(progdefaults.feldfontnbr);
4814                       o->labelsize(FL_NORMAL_SIZE);}
4815          class Fl_ListBox
4816        } {}
4817        Fl_Group listboxHellPulse {
4818          label {Pulse shape}
4819          callback {progdefaults.HellPulseFast = o->index();
4820progdefaults.changed = true;} open
4821          tooltip {Raised cosine pulse shape factor} xywh {262 104 150 22} box DOWN_BOX color 7 align 5
4822          code0 {o->add(_("Slow (4 msec)|Med (2 msec)|Fast (1 msec)|Hard Keying"));}
4823          code2 {o->index(progdefaults.HellPulseFast);
4824                       o->labelsize(FL_NORMAL_SIZE);}
4825          class Fl_ListBox
4826        } {}
4827        Fl_Check_Button btnFeldHellIdle {
4828          label {Transmit periods (.) when idle}
4829          callback {progdefaults.HellXmtIdle=o->value();
4830progdefaults.changed = true;}
4831          tooltip {Transmits a diddle dot when no keyboard activity} xywh {262 139 230 20} down_box DOWN_BOX value 1
4832          code0 {o->value(progdefaults.HellXmtIdle);}
4833        }
4834        Fl_Value_Slider valHellXmtWidth {
4835          label {Tx Width Multiplier}
4836          callback {progdefaults.HellXmtWidth=(int)o->value();
4837progdefaults.changed = true;}
4838          tooltip {Range 1...3} xywh {443 104 150 22} type {Horz Knob} color 54 align 8 minimum 1 maximum 3 step 1 value 1 textsize 14
4839          code0 {o->value(progdefaults.HellXmtWidth);}
4840        }
4841      }
4842      Fl_Group {} {
4843        label {Hell Receive Parameters} open
4844        xywh {247 167 500 173} box ENGRAVED_FRAME align 17
4845      } {
4846        Fl_Check_Button btnBlackboard {
4847          label {Reverse video}
4848          callback {progdefaults.HellBlackboard=o->value();
4849FHdisp->reverse(progdefaults.HellBlackboard);
4850progdefaults.changed = true;}
4851          tooltip {Display RX in reverse video} xywh {262 191 125 20} down_box DOWN_BOX
4852          code0 {o->value(progdefaults.HellBlackboard);}
4853        }
4854        Fl_Check_Button btnHellMarquee {
4855          label {Marquee text}
4856          callback {progdefaults.HellMarquee=o->value();
4857FHdisp->set_marquee(progdefaults.HellMarquee);
4858progdefaults.changed = true;}
4859          tooltip {Display RX as a scrolling marquee} xywh {447 191 125 20} down_box DOWN_BOX
4860          code0 {o->value(progdefaults.HellMarquee);}
4861        }
4862        Fl_Value_Slider valHellRcvWidth {
4863          label {Rx Width Multiplier}
4864          callback {progdefaults.HellRcvWidth=(int)o->value();
4865progdefaults.changed = true;}
4866          tooltip {Range 1...4} xywh {262 227 120 22} type {Horz Knob} color 54 align 8 minimum 1 maximum 4 step 1 value 1 textsize 14
4867          code0 {o->value(progdefaults.HellRcvWidth);}
4868        }
4869        Fl_Value_Slider valHellRcvHeight {
4870          label {Rx Height in pixels}
4871          callback {FHdisp_char_height();}
4872          tooltip {May require resizing the Rx/Tx panel} xywh {262 266 250 22} type {Horz Knob} color 54 align 8 minimum 14 maximum 42 step 2 value 20 textsize 14
4873          code0 {o->value(progdefaults.HellRcvHeight);}
4874        }
4875        Fl_Value_Slider sldrHellBW {
4876          label {Receive filter bandwidth}
4877          callback {progdefaults.HELL_BW = sldrHellBW->value();}
4878          tooltip {Adjust the DSP bandwidth} xywh {262 305 250 22} type Horizontal color 54 align 8 minimum 10 maximum 2400 step 5 value 400 textsize 14
4879          code0 {o->value(progdefaults.HELL_BW);}
4880          code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
4881          class Fl_Value_Slider2
4882        }
4883        Fl_Value_Slider val_hellagc {
4884          label {Rx AGC}
4885          callback {progdefaults.hellagc=(int)o->value();
4886progdefaults.changed = true;}
4887          tooltip {1 - Slow, 2 - Medium, 3 - Fast} xywh {527 227 120 22} type {Horz Knob} color 54 align 8 minimum 1 maximum 3 step 1 value 2 textsize 14
4888          code0 {o->value(progdefaults.hellagc);}
4889        }
4890      }
4891    }
4892    Fl_Group {} {
4893      label {Modem/FMT}
4894      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
4895      code0 {\#include "fmt_dialog.h"}
4896      code1 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/FMT"));}
4897      code2 {config_pages.push_back(p);}
4898      code3 {tab_tree->add(_("Modem/FMT"));}
4899    } {
4900      Fl_Group {} {
4901        label {Audio Stream Procesing}
4902        xywh {203 24 412 75} box ENGRAVED_FRAME align 21
4903      } {
4904        Fl_Group listbox_fmt_sr {
4905          label {Sample rate}
4906          callback {progdefaults.FMT_sr=o->index();
4907progdefaults.changed = true;} open
4908          tooltip {FMT sample rate} xywh {276 66 100 22} box DOWN_BOX color 7
4909          code1 {o->add("8000|11025|12000|16000|22050|24000|44100|48000");}
4910          code2 {o->index(progdefaults.FMT_sr);}
4911          class Fl_ListBox
4912        } {}
4913        Fl_Counter cnt_fmt_rx_ppm {
4914          label {Rx Codec PPM}
4915          callback {progdefaults.RX_corr = (int)o->value();
4916cntRxRateCorr->value(progdefaults.RX_corr);
4917progdefaults.changed = true;}
4918          tooltip {Audio Codec ppm correction} xywh {419 66 120 22} align 1 minimum -500 maximum 500 step 1
4919          code0 {o->value(progdefaults.RX_corr);}
4920          code1 {o->lstep(10);}
4921        }
4922      }
4923      Fl_Group {} {
4924        label Tracking open
4925        xywh {203 99 412 90} box ENGRAVED_FRAME align 21
4926      } {
4927        Fl_Button btnFMT_plot_background {
4928          label Bgnd
4929          callback {static uchar r, g, b;
4930  Fl::get_color(progdefaults.FMT_background, r, g, b);
4931  if (!fl_color_chooser("FMT Background", r, g, b))
4932    return;
4933  progdefaults.FMT_background = fl_rgb_color(r,g,b);
4934
4935  fmt_plot->bk_color(progdefaults.FMT_background);
4936  fmt_plot->redraw();
4937  progdefaults.changed = true;}
4938          tooltip {Change plot background color} xywh {209 122 60 22}
4939        }
4940        Fl_Button btnFMT_unk_color {
4941          label Unkn
4942          callback {static uchar r, g, b;
4943  Fl::get_color(progdefaults.FMT_unk_color, r, g, b);
4944  if (!fl_color_chooser("FMT Background", r, g, b))
4945    return;
4946  progdefaults.FMT_unk_color = fl_rgb_color(r,g,b);
4947
4948  fmt_plot->line_color_1(progdefaults.FMT_unk_color);
4949  fmt_plot->redraw();
4950  unk_color->color(progdefaults.FMT_unk_color);
4951  unk_color->redraw();
4952
4953  progdefaults.changed = true;}
4954          tooltip {Change plot unknown track color} xywh {209 153 60 22}
4955        }
4956        Fl_Button btnFMT_plot_ref_color {
4957          label Ref
4958          callback {static uchar r, g, b;
4959  Fl::get_color(progdefaults.FMT_ref_color, r, g, b);
4960  if (!fl_color_chooser("FMT Background", r, g, b))
4961    return;
4962  progdefaults.FMT_ref_color = fl_rgb_color(r,g,b);
4963
4964  fmt_plot->line_color_2(progdefaults.FMT_ref_color);
4965  fmt_plot->redraw();
4966  ref_color->color(progdefaults.FMT_ref_color);
4967  ref_color->redraw();
4968
4969  progdefaults.changed = true;}
4970          tooltip {Change plot reference track color} xywh {274 153 60 22}
4971        }
4972        Fl_Button btnFMT_plot_axis {
4973          label Axis
4974          callback {static uchar r, g, b;
4975  Fl::get_color(progdefaults.FMT_axis_color, r, g, b);
4976  if (!fl_color_chooser("FMT Axis Color", r, g, b))
4977    return;
4978  progdefaults.FMT_axis_color = fl_rgb_color(r,g,b);
4979
4980  fmt_plot->axis_color(progdefaults.FMT_axis_color);
4981  fmt_plot->redraw();
4982
4983  progdefaults.changed = true;}
4984          tooltip {Change Axis' color} xywh {274 122 60 22}
4985        }
4986        Fl_Button btnFMT_legend_color {
4987          label Lgnd
4988          callback {static uchar r, g, b;
4989  Fl::get_color(progdefaults.FMT_legend_color, r, g, b);
4990  if (!fl_color_chooser("FMT Legend Color", r, g, b))
4991    return;
4992  progdefaults.FMT_legend_color = fl_rgb_color(r,g,b);
4993
4994  fmt_plot->legend_color(progdefaults.FMT_legend_color);
4995  fmt_plot->redraw();
4996
4997  progdefaults.changed = true;}
4998          tooltip {Change legend color} xywh {339 107 60 22}
4999        }
5000        Fl_Check_Button btn_fmt_plot_over_axis {
5001          label {Line/Axis}
5002          callback {progdefaults.FMT_plot_over_axis = o->value();
5003fmt_plot->plot_over_axis(progdefaults.FMT_plot_over_axis);
5004progdefaults.changed = true;}
5005          tooltip {Enable to always plot data over axis} xywh {341 135 31 18} down_box DOWN_BOX
5006          code0 {o->value(progdefaults.FMT_plot_over_axis);}
5007        }
5008        Fl_Check_Button btn_fmt_thick_lines {
5009          label {Thick lines}
5010          callback {progdefaults.FMT_thick_lines = o->value();
5011fmt_plot->thick_lines(progdefaults.FMT_thick_lines);
5012progdefaults.changed = true;}
5013          tooltip {Enable to plot track lines 3 pixels wide} xywh {341 160 31 18} down_box DOWN_BOX
5014          code0 {o->value(progdefaults.FMT_thick_lines);}
5015        }
5016        Fl_Counter cnt_fmt_freq_corr {
5017          label {Freq Correction}
5018          callback {progdefaults.FMT_freq_corr=o->value();
5019progdefaults.RIT=progdefaults.FMT_freq_corr;
5020cntRIT->value(progdefaults.RIT);
5021progdefaults.changed = true;}
5022          tooltip {Offset plot lines on vertical scale} xywh {465 118 123 24} align 1 minimum -5 maximum 5 step 0.001
5023          code0 {o->value(progdefaults.FMT_freq_corr);}
5024          code1 {o->lstep(0.01);}
5025        }
5026        Fl_Button bnt_FMT_dec_corr {
5027          label {@|<}
5028          callback {progdefaults.FMT_freq_corr -= 0.1;
5029cnt_fmt_freq_corr->value(progdefaults.FMT_freq_corr);
5030progdefaults.RIT=progdefaults.FMT_freq_corr;
5031cntRIT->value(progdefaults.RIT);
5032progdefaults.changed = true;}
5033          xywh {446 119 19 24} labelsize 10
5034        }
5035        Fl_Button btn_FMT_incr_corr {
5036          label {@>|}
5037          callback {progdefaults.FMT_freq_corr += 0.1;
5038cnt_fmt_freq_corr->value(progdefaults.FMT_freq_corr);
5039progdefaults.RIT=progdefaults.FMT_freq_corr;
5040cntRIT->value(progdefaults.RIT);
5041progdefaults.changed = true;}
5042          xywh {588 119 18 24} labelsize 10
5043        }
5044        Fl_Counter cnt_fmt_freq_err {
5045          label {Max Error}
5046          callback {progdefaults.FMT_freq_err=o->value();
5047progdefaults.changed = true;}
5048          tooltip {Limit freq estimate error to this value} xywh {470 160 123 24} align 1 minimum 0.5 maximum 10 value 2
5049          code0 {o->value(progdefaults.FMT_freq_err);}
5050          code1 {o->lstep(1.0);}
5051        }
5052      }
5053      Fl_Group {} {
5054        label {DFT Estimator} open
5055        xywh {203 190 207 86} box ENGRAVED_FRAME align 21
5056      } {
5057        Fl_Counter cnt_FMT_movavg_len {
5058          label {Data Filter}
5059          callback {progdefaults.FMT_movavg_len = o->value();
5060progdefaults.changed = true;}
5061          tooltip {Moving average - average over NN seconds^0 - no averaging} xywh {214 232 110 24} align 1 minimum 0 maximum 10 value 1
5062          code0 {o->value(progdefaults.FMT_movavg_len);}
5063          code1 {o->lstep(1.0);}
5064        }
5065        Fl_Group listbox_fmt_dft_rate {
5066          label {DFT rate}
5067          callback {progdefaults.FMT_dft_rate=o->index();
5068progdefaults.changed = true;} open
5069          tooltip {\# DFT computations / second} xywh {334 232 60 24} box DOWN_BOX color 7
5070          code1 {o->add("1|2|3|4|5|6|7|8");}
5071          code2 {o->index(progdefaults.FMT_dft_rate);}
5072          class Fl_ListBox
5073        } {}
5074      }
5075      Fl_Group {} {
5076        label {FIR Filter} open
5077        xywh {411 190 205 86} box ENGRAVED_BOX align 21
5078      } {
5079        Fl_Counter cnt_FMT_bpf {
5080          label Width
5081          callback {progdefaults.FMT_bpf_width = o->value();
5082progdefaults.changed = true;}
5083          tooltip {Band pass filter / unknown / reference} xywh {457 218 100 24} align 1 minimum 5 maximum 200 step 5 value 100
5084          code0 {o->value(progdefaults.FMT_bpf_width);}
5085          code1 {o->lstep(50.0);}
5086        }
5087        Fl_Check_Button btn_fmt_unk_bpf_on {
5088          label {bpf Unk'}
5089          callback {progdefaults.FMT_unk_bpf_on = o->value();
5090progdefaults.changed = true;}
5091          tooltip {ON  - band pass filter unknown signal} xywh {429 246 70 18} down_box DOWN_BOX
5092          code0 {o->value(progdefaults.FMT_unk_bpf_on);}
5093        }
5094        Fl_Check_Button btn_fmt_ref_bpf_on {
5095          label {bpf Ref'}
5096          callback {progdefaults.FMT_ref_bpf_on = o->value();
5097progdefaults.changed = true;}
5098          tooltip {ON  - band pass filter reference signal} xywh {526 246 70 18} down_box DOWN_BOX
5099          code0 {o->value(progdefaults.FMT_ref_bpf_on);}
5100        }
5101      }
5102      Fl_Group {} {
5103        label {CSV Data Recording} open
5104        xywh {617 190 178 86} box ENGRAVED_BOX align 21
5105      } {
5106        Fl_Check_Button btn_fmt_autorecord {
5107          label {Auto record}
5108          tooltip {Automatically start csv data file recording with wav playback} xywh {658 246 107 18} down_box DOWN_BOX
5109        }
5110        Fl_Counter cnt_fmt_auto_record_time {
5111          tooltip {Record data for NN minutes after auto start} xywh {672 218 66 24} type Simple align 17 minimum 2 maximum 60 step 2 value 2
5112        }
5113      }
5114      Fl_Group {} {
5115        label {Wav file recording}
5116        xywh {203 277 592 66} box ENGRAVED_FRAME align 21
5117      } {
5118        Fl_Check_Button btn_fmt_record_wav {
5119          label {Record Audio}
5120          callback {cb_fmt_record_wav(o->value());
5121if (o->value() == 1)
5122  btn_fmt_sync_wav->deactivate();
5123else
5124  btn_fmt_sync_wav->activate();}
5125          tooltip {Wav file recording - START IMMEDIATELY} xywh {464 288 118 18} down_box DOWN_BOX
5126          code0 {if (progdefaults.fmt_sync_wav_file) o->deactivate();}
5127        }
5128        Fl_Check_Button btn_fmt_sync_wav {
5129          label {Sync to data record}
5130          callback {progdefaults.fmt_sync_wav_file = o->value();
5131if (o->value() == 1)
5132  btn_fmt_record_wav->deactivate();
5133else
5134  btn_fmt_record_wav->activate();
5135progdefaults.changed = true;}
5136          tooltip {Wav file recording - SYNCHRONIZE with data recording} xywh {599 288 118 18} down_box DOWN_BOX
5137          code0 {o->value(progdefaults.fmt_sync_wav_file);}
5138        }
5139        Fl_Output txt_fmt_wav_filename {
5140          label {File pathname:}
5141          tooltip {Computer generated file name} xywh {213 314 570 24} align 5
5142        }
5143      }
5144      Fl_Group {} {
5145        label Waterfall
5146        xywh {616 24 180 131} box ENGRAVED_FRAME align 21
5147      } {
5148        Fl_Box {} {
5149          label {Shft-click: select unknown
5150Ctrl-click: select reference}
5151          xywh {626 44 168 35} labelsize 12 align 20
5152        }
5153        Fl_Check_Button btn_fmt_center_on_unknown {
5154          label {Center on Unknown}
5155          callback {progdefaults.fmt_center_on_unknown = o->value();
5156if (o->value()) {
5157  progdefaults.fmt_center_on_median = 0;
5158  progdefaults.fmt_center_on_reference = 0;
5159  btn_fmt_center_on_median->value(0);
5160  btn_fmt_center_on_reference->value(0);
5161}
5162progdefaults.changed = true;}
5163          tooltip {Waterfall Centered on unknown signal} xywh {626 85 70 18} down_box DOWN_BOX
5164          code0 {o->value(progdefaults.fmt_center_on_unknown);}
5165        }
5166        Fl_Check_Button btn_fmt_center_on_reference {
5167          label {Center on Reference}
5168          callback {progdefaults.fmt_center_on_reference = o->value();
5169if (o->value()) {
5170  progdefaults.fmt_center_on_unknown = 0;
5171  progdefaults.fmt_center_on_median = 0;
5172  btn_fmt_center_on_median->value(0);
5173  btn_fmt_center_on_unknown->value(0);
5174}
5175progdefaults.changed = true;}
5176          tooltip {Waterfall centered on reference signal} xywh {626 109 70 18} down_box DOWN_BOX
5177          code0 {o->value(progdefaults.fmt_center_on_reference);}
5178        }
5179        Fl_Check_Button btn_fmt_center_on_median {
5180          label {Center on median}
5181          callback {progdefaults.fmt_center_on_median = o->value();
5182if (o->value()) {
5183  progdefaults.fmt_center_on_unknown = 0;
5184  progdefaults.fmt_center_on_reference = 0;
5185  btn_fmt_center_on_unknown->value(0);
5186  btn_fmt_center_on_reference->value(0);
5187}
5188progdefaults.changed = true;}
5189          tooltip {Waterfall centered 1/2 way between unknown & reference} xywh {627 133 70 17} down_box DOWN_BOX
5190          code0 {o->value(progdefaults.fmt_center_on_median);}
5191        }
5192      }
5193      Fl_Group {} {
5194        xywh {616 156 180 32} box ENGRAVED_FRAME
5195      } {
5196        Fl_Check_Button btn_fmt_use_tabs {
5197          label {Use TAB delimiters}
5198          callback {progdefaults.FMT_use_tabs = o->value();
5199progdefaults.changed = true;}
5200          tooltip {Use tab delimiters between columns on csv export file.} xywh {627 165 70 18} down_box DOWN_BOX
5201          code0 {o->value(progdefaults.FMT_use_tabs);}
5202        }
5203      }
5204    }
5205    Fl_Group {} {
5206      label {Modem/FSQ}
5207      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
5208      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/FSQ"));}
5209      code1 {config_pages.push_back(p);}
5210      code2 {tab_tree->add(_("Modem/FSQ"));}
5211    } {
5212      Fl_Group {} {
5213        label {Rx Parameters} open
5214        xywh {208 23 585 60} box ENGRAVED_BOX align 21
5215      } {
5216        Fl_Value_Slider valhits {
5217          label {Min Hits}
5218          callback {progdefaults.fsqhits=(int)o->value();
5219progdefaults.changed = true;}
5220          tooltip {Minimum \# hits in tone detector} xywh {343 28 125 22} type {Horz Knob} align 8 minimum 3 maximum 6 step 1 value 3 textsize 14
5221          code0 {o->value(progdefaults.fsqhits);}
5222        }
5223        Fl_Choice sel_fsq_lpf {
5224          label {Image LPF}
5225          callback {progdefaults.fsq_img_filter=o->value();
5226progdefaults.changed = true;} open
5227          tooltip {Narrow LPF if image noisy} xywh {366 53 102 22} down_box BORDER_BOX
5228          code0 {o->add("None"); o->add("300 Hz"); o->add("400 Hz"); o->add("500 Hz");}
5229          code1 {o->value(progdefaults.fsq_img_filter);}
5230        } {}
5231        Fl_Value_Slider sldrMovAvg {
5232          label {MovAvg:}
5233          callback {progdefaults.fsq_movavg = o->value();
5234progdefaults.changed = true;}
5235          tooltip {Filter FFT output} xywh {613 28 125 22} type Horizontal align 4 minimum 1 maximum 15 step 1 value 4 textsize 14
5236          code0 {o->value(progdefaults.fsq_movavg);}
5237          code1 {o->maximum(MOVAVGLIMIT);}
5238        }
5239        Fl_Choice sel_fsq_heard_aging {
5240          label {Heard aging}
5241          callback {progdefaults.fsq_heard_aging=o->value();
5242progdefaults.changed = true;} open
5243          tooltip {Remove call after ...} xywh {636 53 102 22} down_box BORDER_BOX
5244          code0 {o->add("Never"); o->add("1 min"); o->add("5 min");o->add("10 min"); o->add("20 min"); o->add("20 min"); o->add("30 min"); o->add("60 min"); o->add("90 min"); o->add("120 min");}
5245          code1 {o->value(progdefaults.fsq_heard_aging);}
5246        } {}
5247      }
5248      Fl_Group {} {
5249        label {Tx Parameters} open
5250        xywh {208 83 585 100} box ENGRAVED_BOX align 21
5251      } {
5252        Fl_Round_Button {btn_fsqbaud[0]} {
5253          label {1.5 baud}
5254          callback {if (o->value() == 1) {
5255progdefaults.fsqbaud = 1.5;
5256btn_fsqbaud[1]->value(0);
5257btn_fsqbaud[2]->value(0);
5258btn_fsqbaud[3]->value(0);
5259btn_fsqbaud[4]->value(0);
5260}
5261progdefaults.changed = true;}
5262          xywh {340 90 55 15} down_box ROUND_DOWN_BOX
5263          code0 {o->value(progdefaults.fsqbaud == 1.5);}
5264        }
5265        Fl_Round_Button {btn_fsqbaud[1]} {
5266          label {2 baud}
5267          callback {if (o->value() == 1) {
5268progdefaults.fsqbaud = 2;
5269btn_fsqbaud[0]->value(0);
5270btn_fsqbaud[2]->value(0);
5271btn_fsqbaud[3]->value(0);
5272btn_fsqbaud[4]->value(0);
5273}
5274progdefaults.changed = true;}
5275          xywh {430 90 55 15} down_box ROUND_DOWN_BOX
5276          code0 {o->value(progdefaults.fsqbaud == 2);}
5277        }
5278        Fl_Round_Button {btn_fsqbaud[2]} {
5279          label {3 baud}
5280          callback {if (o->value() == 1) {
5281progdefaults.fsqbaud = 3;
5282btn_fsqbaud[0]->value(0);
5283btn_fsqbaud[1]->value(0);
5284btn_fsqbaud[3]->value(0);
5285btn_fsqbaud[4]->value(0);
5286}
5287progdefaults.changed = true;}
5288          xywh {520 90 55 15} down_box ROUND_DOWN_BOX
5289          code0 {o->value(progdefaults.fsqbaud == 3);}
5290        }
5291        Fl_Round_Button {btn_fsqbaud[3]} {
5292          label {4.5 baud}
5293          callback {if (o->value() == 1) {
5294progdefaults.fsqbaud = 4.5;
5295btn_fsqbaud[0]->value(0);
5296btn_fsqbaud[1]->value(0);
5297btn_fsqbaud[2]->value(0);
5298btn_fsqbaud[4]->value(0);
5299}
5300progdefaults.changed = true;}
5301          xywh {610 90 55 15} down_box ROUND_DOWN_BOX
5302          code0 {o->value(progdefaults.fsqbaud == 4.5);}
5303        }
5304        Fl_Round_Button {btn_fsqbaud[4]} {
5305          label {6 baud}
5306          callback {if (o->value() == 1) {
5307progdefaults.fsqbaud = 6;
5308btn_fsqbaud[0]->value(0);
5309btn_fsqbaud[1]->value(0);
5310btn_fsqbaud[2]->value(0);
5311btn_fsqbaud[3]->value(0);
5312}
5313progdefaults.changed = true;}
5314          xywh {700 90 55 15} down_box ROUND_DOWN_BOX
5315          code0 {o->value(progdefaults.fsqbaud == 6);}
5316        }
5317        Fl_Choice sel_fsq_frequency {
5318          label {Center freq}
5319          callback {progdefaults.fsq_frequency=o->value();
5320progdefaults.changed = true;} open
5321          xywh {638 110 102 22} down_box BORDER_BOX
5322          code0 {o->add("1150"); o->add("1500"); o->add("Variable");}
5323          code1 {o->value(progdefaults.fsq_frequency);}
5324        } {}
5325        Fl_Choice sel_fsq_sounder {
5326          label Sounder
5327          callback {progdefaults.fsq_sounder=o->value();
5328progdefaults.changed = true;} open
5329          tooltip {Send beacon every ...} xywh {283 110 100 22} down_box BORDER_BOX
5330          code0 {o->add("OFF"); o->add("1 min"); o->add("10 min"); o->add("30 min"); o->add("60 min");}
5331          code1 {o->value(progdefaults.fsq_sounder);}
5332        } {}
5333        Fl_Counter cntr_FSQ_time_out {
5334          label {Time out}
5335          callback {progdefaults.fsq_time_out = o->value();
5336progdefaults.changed = true;}
5337          tooltip {Time out xmt attempt in XX seconds} xywh {457 110 80 22} type Simple align 4 minimum 2 maximum 20 step 1 value 6
5338          code0 {o->value(progdefaults.fsq_time_out);}
5339        }
5340        Fl_Input {} {
5341          label {QTC:}
5342          callback {progdefaults.fsqQTCtext = o->value();
5343progdefaults.changed = true;}
5344          tooltip {Enter QTC text} xywh {283 136 456 22}
5345          code0 {o->value(progdefaults.fsqQTCtext.c_str());}
5346        }
5347        Fl_Check_Button btn_fsq_lowercase {
5348          label {MYCALL always lower case}
5349          callback {progdefaults.fsq_lowercase=o->value();
5350progdefaults.changed = true;}
5351          tooltip {convert operator callsign to lower case} xywh {283 162 214 15} down_box DOWN_BOX
5352          code0 {o->value(progdefaults.fsq_lowercase);}
5353        }
5354      }
5355      Fl_Group {} {
5356        label {Message Logging} open
5357        xywh {208 184 585 44} box ENGRAVED_BOX align 21
5358      } {
5359        Fl_Check_Button btn_fsq_msg_dt_stamp {
5360          label {Add date/time}
5361          callback {progdefaults.add_fsq_msg_dt=o->value();
5362progdefaults.changed=true;}
5363          tooltip {Add date/time stamp to each \# received message} xywh {238 205 135 15} down_box DOWN_BOX value 1
5364          code0 {o->value(progdefaults.add_fsq_msg_dt);}
5365        }
5366        Fl_Check_Button btn_fsq_msg_append {
5367          label {always append to file(s)}
5368          callback {progdefaults.always_append=o->value();
5369progdefaults.changed=true;}
5370          tooltip {append \# directive msgs to named file} xywh {385 205 210 15} down_box DOWN_BOX value 1
5371          code0 {o->value(progdefaults.always_append);}
5372        }
5373        Fl_Counter cntr_FSQ_notify_time_out {
5374          label {Notify time out}
5375          callback {progdefaults.fsq_notify_time_out = o->value();
5376progdefaults.changed = true;}
5377          tooltip {Notification dialog closes after XX seconds;^j0 == dialog remains open} xywh {698 201 80 22} type Simple align 4 minimum 0 maximum 30 step 1 value 10
5378          code0 {o->value(progdefaults.fsq_notify_time_out);}
5379        }
5380      }
5381      Fl_Group {} {
5382        label Logging open
5383        xywh {208 228 585 80} box ENGRAVED_BOX align 21
5384      } {
5385        Fl_Output txtAuditLog {
5386          label {Audit log}
5387          xywh {285 248 325 22}
5388          code0 {o->value(progdefaults.fsq_audit_log.c_str());}
5389        }
5390        Fl_Light_Button btn_enable_auditlog {
5391          label Enable
5392          callback {progdefaults.fsq_enable_audit_log = o->value();
5393progdefaults.changed = true;}
5394          xywh {624 249 74 20} selection_color 2
5395          code0 {o->value(progdefaults.fsq_enable_audit_log);}
5396        }
5397        Fl_Button btn_select_auditlog {
5398          label Select
5399          callback {std::string str = std::string(TempDir);
5400str.append(progdefaults.fsq_audit_log);
5401const char *fname = FSEL::saveas("Audit log", "*.txt\\t*", str.c_str());
5402if (!fname) return;
5403if (!*fname) return;
5404progdefaults.fsq_audit_log = fl_filename_name(fname);
5405txtAuditLog->value(progdefaults.fsq_audit_log.c_str());
5406progdefaults.changed = true;}
5407          xywh {712 249 70 20}
5408        }
5409        Fl_Output txtHeardLog {
5410          label {Heard log}
5411          xywh {285 276 325 22}
5412          code0 {o->value(progdefaults.fsq_heard_log.c_str());}
5413        }
5414        Fl_Light_Button btn_enable_fsq_heard_log {
5415          label Enable
5416          callback {progdefaults.fsq_enable_heard_log = o->value();
5417progdefaults.changed = true;}
5418          xywh {624 277 74 20} selection_color 2
5419          code0 {o->value(progdefaults.fsq_enable_heard_log);}
5420        }
5421        Fl_Button btn_select_fsq_heard_log {
5422          label Select
5423          callback {std::string str = std::string(TempDir);
5424str.append(progdefaults.fsq_heard_log);
5425const char *fname = FSEL::saveas("Heard log", "*.txt\\t*", str.c_str());
5426if (!fname) return;
5427if (!*fname) return;
5428progdefaults.fsq_heard_log = fl_filename_name(fname);
5429txtHeardLog->value(progdefaults.fsq_heard_log.c_str());
5430progdefaults.changed = true;}
5431          xywh {712 277 70 20}
5432        }
5433      }
5434      Fl_Group {} {
5435        label {Text Colors} open
5436        xywh {208 308 585 35} box ENGRAVED_BOX align 21
5437      } {
5438        Fl_Button btn_fsq_xmt_color {
5439          label XMIT
5440          callback {choose_color(progdefaults.fsq_xmt_color);
5441
5442btn_fsq_xmt_color->color( progdefaults.fsq_xmt_color );
5443btn_fsq_xmt_color->redraw();
5444
5445fsq_rx_text->setFontColor(progdefaults.fsq_xmt_color, FTextBase::FSQ_TX);
5446
5447progdefaults.changed = true;}
5448          tooltip {Transmit text} xywh {348 315 40 20} align 4
5449          code0 {btn_fsq_xmt_color->color(progdefaults.fsq_xmt_color);}
5450        }
5451        Fl_Button btn_fsq_directed_color {
5452          label DIRECTED
5453          callback {choose_color(progdefaults.fsq_directed_color);
5454
5455btn_fsq_directed_color->color( progdefaults.fsq_directed_color );
5456btn_fsq_directed_color->redraw();
5457
5458fsq_rx_text->setFontColor(progdefaults.fsq_directed_color, FTextBase::FSQ_DIR);
5459
5460progdefaults.changed = true;}
5461          tooltip {Directed received text} xywh {478 315 40 20} align 4
5462          code0 {btn_fsq_directed_color->color(progdefaults.fsq_directed_color);}
5463        }
5464        Fl_Button btn_fsq_undirected_color {
5465          label UNDIRECTED
5466          callback {choose_color(progdefaults.fsq_undirected_color);
5467
5468btn_fsq_undirected_color->color( progdefaults.fsq_undirected_color);
5469btn_fsq_undirected_color->redraw();
5470
5471fsq_rx_text->setFontColor(progdefaults.fsq_undirected_color, FTextBase::FSQ_UND);
5472
5473progdefaults.changed = true;}
5474          tooltip {Undirected received text} xywh {628 315 40 20} align 4
5475          code0 {btn_fsq_undirected_color->color(progdefaults.fsq_undirected_color);}
5476        }
5477        Fl_Button btn_fsq_color_defaults {
5478          label Defaults
5479          callback {progdefaults.fsq_xmt_color = FL_RED;
5480btn_fsq_xmt_color->color(progdefaults.fsq_xmt_color);
5481btn_fsq_xmt_color->redraw();
5482
5483progdefaults.fsq_directed_color = FL_BLUE;
5484btn_fsq_directed_color->color(progdefaults.fsq_directed_color);
5485btn_fsq_directed_color->redraw();
5486
5487progdefaults.fsq_undirected_color = FL_DARK_GREEN;
5488btn_fsq_undirected_color->color(progdefaults.fsq_undirected_color);
5489btn_fsq_undirected_color->redraw();
5490
5491fsq_rx_text->setFontColor(progdefaults.fsq_xmt_color, FTextBase::FSQ_TX);
5492fsq_rx_text->setFontColor(progdefaults.fsq_directed_color, FTextBase::FSQ_DIR);
5493fsq_rx_text->setFontColor(progdefaults.fsq_undirected_color, FTextBase::FSQ_UND);
5494
5495progdefaults.changed = true;}
5496          xywh {710 315 74 20}
5497        }
5498      }
5499    }
5500    Fl_Group {} {
5501      label {Modem/IFKP}
5502      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
5503      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/IFKP"));}
5504      code1 {config_pages.push_back(p);}
5505      code2 {tab_tree->add(_("Modem/IFKP"));}
5506    } {
5507      Fl_Group {} {
5508        label {Tx Parameters} open
5509        xywh {208 46 587 120} box ENGRAVED_BOX align 21
5510      } {
5511        Fl_Round_Button {btn_ifkpbaud[0]} {
5512          label {1/2 speed}
5513          callback {if (o->value() == 1) {
5514progdefaults.ifkp_baud = 0;
5515btn_ifkpbaud[1]->value(0);
5516btn_ifkpbaud[2]->value(0);
5517}
5518progdefaults.changed = true;}
5519          xywh {303 74 100 17} down_box ROUND_DOWN_BOX
5520          code0 {o->value(progdefaults.ifkp_baud == 0);}
5521        }
5522        Fl_Round_Button {btn_ifkpbaud[1]} {
5523          label {1x speed}
5524          callback {if (o->value() == 1) {
5525progdefaults.ifkp_baud = 1;
5526btn_ifkpbaud[0]->value(0);
5527btn_ifkpbaud[2]->value(0);
5528}
5529progdefaults.changed = true;}
5530          tooltip default xywh {411 74 100 17} down_box ROUND_DOWN_BOX
5531          code0 {o->value(progdefaults.ifkp_baud == 1);}
5532        }
5533        Fl_Round_Button {btn_ifkpbaud[2]} {
5534          label {2x speed}
5535          callback {if (o->value() == 1) {
5536progdefaults.ifkp_baud = 2;
5537btn_ifkpbaud[0]->value(0);
5538btn_ifkpbaud[1]->value(0);
5539}
5540progdefaults.changed = true;}
5541          xywh {519 74 100 17} down_box ROUND_DOWN_BOX
5542          code0 {o->value(progdefaults.ifkp_baud == 2);}
5543        }
5544        Fl_Check_Button btn_ifkp_lowercase {
5545          label {MYCALL always lower case}
5546          callback {progdefaults.ifkp_lowercase=o->value();
5547progdefaults.changed = true;}
5548          tooltip {convert operator callsign to lower case} xywh {303 106 220 15} down_box DOWN_BOX
5549          code0 {o->value(progdefaults.ifkp_lowercase);}
5550        }
5551        Fl_Check_Button btn_ifkp_lowercase_call {
5552          label {CALLSIGN always lower case}
5553          callback {progdefaults.ifkp_lowercase_call=o->value();
5554progdefaults.changed = true;}
5555          tooltip {convert other callsign to lower case} xywh {528 106 220 15} down_box DOWN_BOX
5556          code0 {o->value(progdefaults.ifkp_lowercase_call);}
5557        }
5558        Fl_Check_Button btn_ifkp_freqlock {
5559          label {lock WF at 1500 Hz}
5560          callback {progdefaults.ifkp_freqlock=o->value();
5561if (active_modem == ifkp_modem &&
5562  o->value() )
5563  active_modem->set_freq(1500);
5564progdefaults.changed = true;}
5565          tooltip {Always transmit at 1500 Hertz center freq.} xywh {303 136 220 15} down_box DOWN_BOX
5566          code0 {\#include "trx.h"}
5567          code1 {o->value(progdefaults.ifkp_freqlock);}
5568        }
5569      }
5570      Fl_Group {} {
5571        label Logging open
5572        xywh {208 171 587 100} box ENGRAVED_BOX align 21
5573      } {
5574        Fl_Output txt_ifkp_audit_log {
5575          label {Audit log}
5576          xywh {295 201 323 25}
5577          code0 {o->value(progdefaults.ifkp_audit_log.c_str());}
5578        }
5579        Fl_Light_Button btn_enable_ifkp_audit_log {
5580          label Enable
5581          callback {progdefaults.ifkp_enable_audit_log = o->value();
5582progdefaults.changed = true;}
5583          xywh {632 201 73 25} selection_color 2
5584          code0 {o->value(progdefaults.ifkp_enable_audit_log);}
5585        }
5586        Fl_Button btn_ifkp_select_auditlog {
5587          label Select
5588          callback {std::string str = std::string(TempDir);
5589str.append(progdefaults.ifkp_audit_log);
5590const char *fname = FSEL::saveas("Audit log", "*.txt\\t*", str.c_str());
5591if (!fname) return;
5592if (!*fname) return;
5593progdefaults.ifkp_audit_log = fl_filename_name(fname);
5594txt_ifkp_audit_log->value(progdefaults.ifkp_audit_log.c_str());
5595progdefaults.changed = true;}
5596          xywh {713 201 70 25}
5597        }
5598        Fl_Output txt_ifkp_heard_log {
5599          label {Heard log}
5600          xywh {295 230 323 25}
5601          code0 {o->value(progdefaults.ifkp_heard_log.c_str());}
5602        }
5603        Fl_Light_Button btn_enable_ifkp_heard_log {
5604          label Enable
5605          callback {progdefaults.ifkp_enable_heard_log = o->value();
5606progdefaults.changed = true;}
5607          xywh {632 230 73 25} selection_color 2
5608          code0 {o->value(progdefaults.ifkp_enable_heard_log);}
5609        }
5610        Fl_Button btn_select_ifkp_heard_log {
5611          label Select
5612          callback {std::string str = std::string(TempDir);
5613str.append(progdefaults.ifkp_heard_log);
5614const char *fname = FSEL::saveas("Heard log", "*.txt\\t*", str.c_str());
5615if (!fname) return;
5616if (!*fname) return;
5617progdefaults.ifkp_heard_log = fl_filename_name(fname);
5618txt_ifkp_heard_log->value(progdefaults.ifkp_heard_log.c_str());
5619progdefaults.changed = true;}
5620          xywh {713 230 70 25}
5621        }
5622      }
5623    }
5624    Fl_Group {} {
5625      label {Modem/MT-63}
5626      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
5627      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/MT-63"));}
5628      code1 {config_pages.push_back(p);}
5629      code2 {tab_tree->add(_("Modem/MT-63"));}
5630    } {
5631      Fl_Group {} {open
5632        xywh {249 36 490 84} box ENGRAVED_FRAME align 21
5633      } {
5634        Fl_Check_Button btnMT63_8bit {
5635          label {8-bit extended characters (UTF-8)}
5636          callback {progdefaults.mt63_8bit = o->value();
5637progdefaults.changed = true;}
5638          tooltip {Enable this for UTF-8 characters} xywh {394 50 205 20} down_box DOWN_BOX value 1
5639          code0 {o->value(progdefaults.mt63_8bit);}
5640        }
5641        Fl_Check_Button btnMT63_rx_integration {
5642          label {Long receive integration}
5643          callback {progdefaults.mt63_rx_integration = o->value();
5644progdefaults.changed = true;}
5645          tooltip {Enable for very weak signals} xywh {394 80 190 20} down_box DOWN_BOX value 1
5646          code0 {o->value(progdefaults.mt63_rx_integration);}
5647        }
5648      }
5649      Fl_Group {} {open
5650        xywh {249 132 490 178} box ENGRAVED_FRAME
5651      } {
5652        Fl_Check_Button btnMT63_usetones {
5653          label {Transmit lower start tone}
5654          callback {progdefaults.mt63_usetones = o->value();
5655if (!o->value()) {
5656    btnMT63_upper_lower->value(0);
5657    btnMT63_upper_lower->do_callback();
5658    btnMT63_upper_lower->deactivate();
5659}
5660else
5661    btnMT63_upper_lower->activate();
5662progdefaults.changed = true;}
5663          xywh {393 140 200 20} down_box DOWN_BOX
5664          code0 {o->value(progdefaults.mt63_usetones);}
5665        }
5666        Fl_Check_Button btnMT63_upper_lower {
5667          label {Transmit upper start tone}
5668          callback {progdefaults.mt63_twotones = o->value();
5669progdefaults.changed = true;}
5670          xywh {393 170 200 20} down_box DOWN_BOX
5671          code0 {o->value(progdefaults.mt63_twotones);}
5672          code1 {if (!btnMT63_usetones->value()) o->deactivate();}
5673        }
5674        Fl_Spinner MT63_tone_duration {
5675          label {Tone Duration (secs)}
5676          callback {progdefaults.mt63_tone_duration=(int)o->value();
5677progdefaults.changed = true;}
5678          xywh {393 196 40 20} align 8 maximum 10 value 4
5679          code0 {o->value(progdefaults.mt63_tone_duration);}
5680          code1 {o->labelsize(FL_NORMAL_SIZE);}
5681          class Fl_Spinner2
5682        }
5683        Fl_Check_Button btnMT63_at500 {
5684          label {Low tone at 500 Hz}
5685          callback {o->value(1);
5686progdefaults.mt63_at500 = true;
5687progdefaults.mt63_centered = false;
5688btnMT63_centered->value(0);
5689btnMT63_manual->value(0);
5690progdefaults.changed = true;}
5691          xywh {393 225 200 20} down_box DOWN_BOX
5692          code0 {o->value(progdefaults.mt63_at500);}
5693        }
5694        Fl_Check_Button btnMT63_centered {
5695          label {Centered at 1500 Hz (SHARES)}
5696          callback {o->value(1);
5697progdefaults.mt63_centered = true;
5698progdefaults.mt63_at500 = false;
5699btnMT63_at500->value(0);
5700btnMT63_manual->value(0);
5701progdefaults.changed = true;}
5702          xywh {393 250 248 20} down_box DOWN_BOX
5703          code0 {o->value(progdefaults.mt63_centered);}
5704        }
5705        Fl_Check_Button btnMT63_manual {
5706          label {Manual tuning}
5707          callback {o->value(1);
5708progdefaults.mt63_centered = false;
5709progdefaults.mt63_at500 = false;
5710btnMT63_at500->value(0);
5711btnMT63_centered->value(0);
5712progdefaults.changed = true;}
5713          xywh {393 275 200 20} down_box DOWN_BOX
5714          code0 {o->value(!progdefaults.mt63_at500 && !progdefaults.mt63_centered);}
5715        }
5716      }
5717    }
5718    Fl_Group {} {
5719      label {Modem/Contestia}
5720      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
5721      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Contestia"));}
5722      code1 {config_pages.push_back(p);}
5723      code2 {tab_tree->add(_("Modem/Contestia"));}
5724    } {
5725      Fl_Group {} {open
5726        xywh {257 40 490 240} box ENGRAVED_FRAME
5727      } {
5728        Fl_Group i_listbox_contestia_bandwidth {
5729          label Bandwidth
5730          callback {progdefaults.contestiabw = o->index();
5731set_contestia_default_integ();
5732resetCONTESTIA();
5733progdefaults.changed = true;} open
5734          tooltip {Select bandwidth} xywh {312 60 85 22} box DOWN_BOX color 7 align 8
5735          code0 {o->add(szContestiaBandwidth);}
5736          code1 {o->index(progdefaults.contestiabw);}
5737          code2 {o->labelsize(FL_NORMAL_SIZE);}
5738          class Fl_ListBox
5739        } {}
5740        Fl_Group i_listbox_contestia_tones {
5741          label Tones
5742          callback {progdefaults.contestiatones = o->index();
5743set_contestia_default_integ();
5744resetCONTESTIA();
5745progdefaults.changed = true;} open
5746          tooltip {Select number of tones} xywh {573 60 70 22} box DOWN_BOX color 7 align 8
5747          code0 {o->add(szContestiaTones);}
5748          code1 {o->index(progdefaults.contestiatones);}
5749          code2 {o->labelsize(FL_NORMAL_SIZE);}
5750          class Fl_ListBox
5751        } {}
5752        Fl_Group {} {
5753          label {Receive synchronizer} open
5754          xywh {295 99 414 101} box ENGRAVED_FRAME align 21
5755        } {
5756          Fl_Counter cntContestia_smargin {
5757            label {Tune margin (tone frequency spacing)}
5758            callback {progdefaults.contestiasmargin = (int)(o->value());
5759resetCONTESTIA();
5760progdefaults.changed = true;}
5761            tooltip {Change ONLY to experiment} xywh {314 130 70 22} type Simple align 8 minimum 2 maximum 128 step 1 value 8
5762            code0 {o->labelsize(FL_NORMAL_SIZE);}
5763            class Fl_Counter2
5764          }
5765          Fl_Counter cntContestia_sinteg {
5766            label {Integration period (FEC blocks)}
5767            callback {progdefaults.contestiasinteg = (int)(o->value());
5768resetCONTESTIA();
5769progdefaults.changed = true;}
5770            tooltip {Change ONLY to experiment} xywh {314 162 70 22} type Simple align 8 minimum 2 maximum 128 step 1 value 4
5771            code0 {o->labelsize(FL_NORMAL_SIZE);}
5772            class Fl_Counter2
5773          }
5774        }
5775        Fl_Check_Button btnContestia_8bit {
5776          label {8-bit extended characters}
5777          callback {progdefaults.contestia8bit = o->value();
5778progdefaults.changed = true;}
5779          tooltip {Enable this for Latin-1 accented characters} xywh {312 209 200 20} down_box DOWN_BOX
5780        }
5781        Fl_Check_Button btnContestia_start_stop_tones {
5782          label {xmt start/stop tones}
5783          callback {progdefaults.contestia_start_tones = o->value();
5784progdefaults.changed = true;}
5785          tooltip {Enable this to send start/stop tones} xywh {312 240 265 20} down_box DOWN_BOX
5786          code0 {o->value(progdefaults.contestia_start_tones);}
5787        }
5788      }
5789    }
5790    Fl_Group {} {
5791      label {Modem/Olivia}
5792      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
5793      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Olivia"));}
5794      code1 {config_pages.push_back(p);}
5795      code2 {tab_tree->add(_("Modem/Olivia"));}
5796    } {
5797      Fl_Group {} {open
5798        xywh {253 40 490 280} box ENGRAVED_FRAME
5799      } {
5800        Fl_Group i_listbox_olivia_bandwidth {
5801          label Bandwidth
5802          callback {progdefaults.oliviabw = o->index();
5803set_olivia_default_integ();
5804resetOLIVIA();
5805progdefaults.changed = true;} open
5806          tooltip {Select bandwidth} xywh {308 60 85 22} box DOWN_BOX color 7 align 8
5807          code0 {o->add(szOliviaBandwidth);}
5808          code1 {o->index(progdefaults.oliviabw);}
5809          code2 {o->labelsize(FL_NORMAL_SIZE);}
5810          class Fl_ListBox
5811        } {}
5812        Fl_Group i_listbox_olivia_tones {
5813          label Tones
5814          callback {progdefaults.oliviatones = o->index();
5815set_olivia_default_integ();
5816resetOLIVIA();
5817progdefaults.changed = true;} open
5818          tooltip {Select number of tones} xywh {569 60 70 22} box DOWN_BOX color 7 align 8
5819          code0 {o->add(szOliviaTones);}
5820          code1 {o->index(progdefaults.oliviatones);}
5821          code2 {o->labelsize(FL_NORMAL_SIZE);}
5822          class Fl_ListBox
5823        } {}
5824        Fl_Group {} {
5825          label {Receive synchronizer} open
5826          xywh {308 99 379 133} box ENGRAVED_FRAME align 21
5827        } {
5828          Fl_Counter cntOlivia_smargin {
5829            label {Tune margin (tone frequency spacing)}
5830            callback {progdefaults.oliviasmargin = (int)(o->value());
5831resetOLIVIA();
5832progdefaults.changed = true;}
5833            tooltip {Change ONLY to experiment} xywh {323 130 70 22} type Simple align 8 minimum 2 maximum 128 step 1 value 8
5834            code0 {o->labelsize(FL_NORMAL_SIZE);}
5835            code1 {o->value(progdefaults.oliviasmargin);}
5836            class Fl_Counter2
5837          }
5838          Fl_Counter cntOlivia_sinteg {
5839            label {Integration period (FEC blocks)}
5840            callback {progdefaults.oliviasinteg = (int)(o->value());
5841resetOLIVIA();
5842progdefaults.changed = true;}
5843            tooltip {Change ONLY to experiment} xywh {323 162 70 22} type Simple align 8 minimum 2 maximum 128 step 1 value 4
5844            code0 {o->labelsize(FL_NORMAL_SIZE);}
5845            code1 {o->value(progdefaults.oliviasinteg);}
5846            class Fl_Counter2
5847          }
5848          Fl_Check_Button btn_olivia_reset_fec {
5849            label {Reset FEC blocks when changing BW or Tones}
5850            callback {progdefaults.olivia_reset_fec = o->value();
5851progdefaults.changed = true;}
5852            tooltip {Enable this for UTF-8 character transmission} xywh {324 194 349 20} down_box DOWN_BOX
5853            code0 {o->value(progdefaults.olivia_reset_fec);}
5854          }
5855        }
5856        Fl_Check_Button btnOlivia_8bit {
5857          label {8-bit extended characters (UTF-8)}
5858          callback {progdefaults.olivia8bit = o->value();
5859progdefaults.changed = true;}
5860          tooltip {Enable this for UTF-8 character transmission} xywh {329 255 265 20} down_box DOWN_BOX
5861          code0 {o->value(progdefaults.olivia8bit);}
5862        }
5863        Fl_Check_Button btnOlivia_start_stop_tones {
5864          label {xmt start/stop tones}
5865          callback {progdefaults.olivia_start_tones = o->value();
5866progdefaults.changed = true;}
5867          tooltip {Enable this to send start/stop tones} xywh {329 279 265 20} down_box DOWN_BOX
5868          code0 {o->value(progdefaults.olivia_start_tones);}
5869        }
5870      }
5871    }
5872    Fl_Group {} {
5873      label {Modem/Psk}
5874      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
5875      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Psk"));}
5876      code1 {config_pages.push_back(p);}
5877      code2 {tab_tree->add(_("Modem/Psk"));}
5878    } {
5879      Fl_Group {} {
5880        label {AFC behavior} open
5881        xywh {255 33 490 86} box ENGRAVED_FRAME align 21
5882      } {
5883        Fl_Counter cntSearchRange {
5884          label {Acquisition search range (Hz)}
5885          callback {progdefaults.SearchRange = (int)o->value();
5886wf->redraw_marker();
5887progdefaults.changed = true;}
5888          tooltip {Capture signals within this frequency range} xywh {400 57 75 20} type Simple align 8 minimum 10 maximum 500 step 10 value 200
5889          code0 {o->value(progdefaults.SearchRange);}
5890          code1 {o->labelsize(FL_NORMAL_SIZE);}
5891          class Fl_Counter2
5892        }
5893        Fl_Counter cntACQsn {
5894          label {Acquisition S/N (dB)}
5895          callback {progdefaults.ACQsn = o->value();
5896progdefaults.changed = true;}
5897          tooltip {Capture signals over this threshold} xywh {400 86 75 20} type Simple align 8 minimum 3 maximum 20 step 1 value 6
5898          code0 {o->value(progdefaults.ACQsn);}
5899          code1 {o->labelsize(FL_NORMAL_SIZE);}
5900          class Fl_Counter2
5901        }
5902      }
5903      Fl_Group {} {
5904        label {S/N and IMD behavior} open
5905        xywh {255 121 490 65} box ENGRAVED_FRAME align 21
5906      } {
5907        Fl_Group listbox_psk_status_timeout {
5908          label after
5909          callback {progdefaults.StatusDim = o->index();
5910progdefaults.changed = true;} open
5911          tooltip {Behavior of s/n imd} xywh {380 152 80 20} box DOWN_BOX color 7 align 8
5912          code0 {o->add(_("Clear")); o->add(_("Dim"));}
5913          code1 {o->index(progdefaults.StatusDim);
5914                       o->labelsize(FL_NORMAL_SIZE);}
5915          class Fl_ListBox
5916        } {}
5917        Fl_Counter {} {
5918          label seconds
5919          callback {progdefaults.StatusTimeout = (int)(o->value());
5920progdefaults.changed = true;}
5921          tooltip {Will occur after this time in seconds} xywh {521 152 75 20} type Simple align 8 minimum 0 maximum 30 step 1
5922          code0 {o->value(progdefaults.StatusTimeout);}
5923          code1 {o->labelsize(FL_NORMAL_SIZE);}
5924          class Fl_Counter2
5925        }
5926      }
5927      Fl_Group {} {
5928        label {Multi-Channel Signal Processing} open
5929        xywh {255 191 490 80} box ENGRAVED_FRAME align 21
5930      } {
5931        Fl_Check_Button btnEnablePSKbrowsing {
5932          label {Multi-channel detector}
5933          callback {progdefaults.pskbrowser_on = o->value();
5934progdefaults.changed = true;}
5935          xywh {425 241 180 20} down_box DOWN_BOX
5936          code0 {o->value(progdefaults.pskbrowser_on);}
5937        }
5938        Fl_Box {} {
5939          label {Disable on very slow CPUs or if signal browser is not used}
5940          xywh {265 218 440 20} align 20
5941        }
5942      }
5943      Fl_Group {} {
5944        label {8 psk} open
5945        xywh {255 273 490 47} box ENGRAVED_FRAME align 21
5946      } {
5947        Fl_Check_Button btnPSKpilot {
5948          label {Pilot tone}
5949          callback {progdefaults.pskpilot = o->value();
5950progdefaults.changed = true;}
5951          tooltip {Enable encode/decode vestigial pilot tone} xywh {300 286 113 20} down_box DOWN_BOX
5952          code0 {o->value(progdefaults.pskpilot);}
5953        }
5954        Fl_Counter cnt_pilot_power {
5955          label {pilot power (dB)}
5956          callback {progdefaults.pilot_power = o->value();
5957progdefaults.changed = true;}
5958          tooltip {Pilot tone power relative to signal} xywh {405 286 75 20} type Simple align 8 minimum -60 maximum -20 step 1 value -30
5959          code0 {o->value(progdefaults.pilot_power);}
5960          code1 {o->labelsize(FL_NORMAL_SIZE);}
5961          class Fl_Counter2
5962        }
5963        Fl_Check_Button btnPSK8Preamble {
5964          label {Short Preamble}
5965          callback {progStatus.psk8DCDShortFlag = o->value();}
5966          tooltip {Enable short preamble for 8PSK transmission} xywh {610 286 113 20} down_box DOWN_BOX
5967          code0 {o->value(progStatus.psk8DCDShortFlag);}
5968        }
5969      }
5970    }
5971    Fl_Group {} {
5972      label {Modem/TTY/Rx}
5973      xywh {200 0 600 350} box FLAT_BOX align 21 hide
5974      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/TTY/Rx"));}
5975      code1 {config_pages.push_back(p);}
5976      code2 {tab_tree->add(_("Modem/TTY/Rx"));}
5977    } {
5978      Fl_Group {} {
5979        label Receive open
5980        xywh {202 22 595 50} box ENGRAVED_FRAME align 21
5981      } {
5982        Fl_Group i_listbox_rtty_afc_speed {
5983          label {AFC speed}
5984          callback {progdefaults.rtty_afcspeed = o->index();
5985progdefaults.changed = true;} open
5986          tooltip {AFC tracking speed} xywh {296 43 90 22} box DOWN_BOX color 7 align 4
5987          code0 {o->add("Slow"); o->add("Normal"); o->add("Fast");}
5988          code1 {o->index(progdefaults.rtty_afcspeed);}
5989          code2 {o->labelsize(FL_NORMAL_SIZE);}
5990          class Fl_ListBox
5991        } {}
5992        Fl_Check_Button chkUOSrx {
5993          label {RX - unshift on space}
5994          callback {progdefaults.UOSrx=o->value();
5995progdefaults.changed = true;}
5996          tooltip {Revert to unshifted char's on a space} xywh {400 45 63 18} down_box DOWN_BOX
5997          code0 {o->value(progdefaults.UOSrx);}
5998        }
5999        Fl_Value_Input rtty_rx_shape {
6000          label {Filter Shape Factor}
6001          callback {progdefaults.rtty_filter = o->value();
6002progStatus.rtty_filter_changed = true;
6003progdefaults.changed = true;}
6004          tooltip {rcos timing coefficient:
60051.0 ... 2.0
6006W1HKJ best 1.275
6007DO2SMF best 1.500} xywh {745 42 48 25} minimum 1 maximum 2 step 0.001 value 1.25
6008          code0 {o->value(progdefaults.rtty_filter);}
6009        }
6010      }
6011      Fl_Group {} {
6012        label {Decode (CWI suppression)} open
6013        xywh {202 72 595 55} box ENGRAVED_FRAME align 21
6014      } {
6015        Fl_Check_Button {btnRxTones[0]} {
6016          label {Mark-Space}
6017          callback {if (o->value()) {
6018  btnRxTones[1]->value(0);
6019  btnRxTones[2]->value(0);
6020  progdefaults.rtty_cwi = 0;
6021}}
6022          xywh {308 98 77 13} down_box DOWN_BOX
6023          code0 {o->value(progdefaults.rtty_cwi == 0);}
6024        }
6025        Fl_Check_Button {btnRxTones[1]} {
6026          label {Mark only}
6027          callback {if (o->value()) {
6028  btnRxTones[0]->value(0);
6029  btnRxTones[2]->value(0);
6030  progdefaults.rtty_cwi = 1;
6031}}
6032          xywh {455 98 77 13} down_box DOWN_BOX
6033          code0 {o->value(progdefaults.rtty_cwi == 1);}
6034        }
6035        Fl_Check_Button {btnRxTones[2]} {
6036          label {Space only}
6037          callback {if (o->value()) {
6038  btnRxTones[1]->value(0);
6039  btnRxTones[0]->value(0);
6040  progdefaults.rtty_cwi = 2;
6041}}
6042          xywh {602 98 78 13} down_box DOWN_BOX
6043          code0 {o->value(progdefaults.rtty_cwi == 2);}
6044        }
6045      }
6046      Fl_Group {} {
6047        label {RTTY Scope Display} open
6048        xywh {202 128 595 55} box ENGRAVED_FRAME align 21
6049      } {
6050        Fl_Check_Button btnPreferXhairScope {
6051          label {Use cross hair scope}
6052          callback {progdefaults.PreferXhairScope=o->value();
6053progdefaults.changed = true;}
6054          tooltip {Default to cross hair digiscope} xywh {308 150 182 20} down_box DOWN_BOX
6055          code0 {o->value(progdefaults.PreferXhairScope);}
6056        }
6057        Fl_Check_Button chk_true_scope {
6058          label {XY - classic scope}
6059          callback {progdefaults.true_scope=o->value();
6060progdefaults.changed = true;}
6061          tooltip {Enabled - use Mark/Space filter outputs
6062Disabled - use pseudo signals} xywh {551 150 77 20} down_box DOWN_BOX
6063          code0 {o->value(progdefaults.true_scope);}
6064        }
6065      }
6066      Fl_Group {} {
6067        label {Log RTTY frequency} open
6068        xywh {202 184 595 54} box ENGRAVED_FRAME align 21
6069      } {
6070        Fl_Check_Button chk_useMARKfreq {
6071          label {Use MARK freq'}
6072          callback {progdefaults.useMARKfreq=o->value();
6073progdefaults.changed = true;}
6074          tooltip {Enabled - log QSO using Mark frequency
6075Disabled - log QSO using center frequency} xywh {308 208 161 17} down_box DOWN_BOX value 1
6076          code0 {o->value(progdefaults.useMARKfreq);}
6077        }
6078        Fl_Button btnRTTY_mark_color {
6079          label {track color}
6080          callback {if (fl_color_chooser("MARK freq track",
6081  progdefaults.rttymarkRGBI.R,
6082  progdefaults.rttymarkRGBI.G,
6083  progdefaults.rttymarkRGBI.B) ) {
6084o->color(fl_rgb_color(progdefaults.rttymarkRGBI.R,progdefaults.rttymarkRGBI.G,progdefaults.rttymarkRGBI.B));
6085o->redraw();
6086wf->redraw_marker();
6087progdefaults.changed = true;
6088}}
6089          tooltip {Color of Mark Track} xywh {551 205 45 20} color 2 align 8
6090          code0 {o->color(fl_rgb_color(progdefaults.rttymarkRGBI.R,progdefaults.rttymarkRGBI.G,progdefaults.rttymarkRGBI.B));}
6091        }
6092      }
6093      Fl_Group {} {
6094        label {RTTY Bell} open
6095        xywh {202 240 595 104} box ENGRAVED_FRAME align 21
6096      } {
6097        Fl_Check_Button chk_audibleBELL {
6098          label {Audible BELL}
6099          callback {progdefaults.audibleBELL=o->value();
6100progdefaults.changed = true;}
6101          tooltip {Enabled - log QSO using Mark frequency
6102Disabled - log QSO using center frequency} xywh {308 259 161 22} down_box DOWN_BOX value 1
6103          code0 {o->value(progdefaults.audibleBELL);}
6104        }
6105        Fl_Check_Button chk_visibleBELL {
6106          label {Visible BELL}
6107          callback {progdefaults.visibleBELL=o->value();
6108progdefaults.changed = true;}
6109          tooltip {Enabled - log QSO using Mark frequency
6110Disabled - log QSO using center frequency} xywh {551 259 161 22} down_box DOWN_BOX value 1
6111          code0 {o->value(progdefaults.visibleBELL);}
6112        }
6113        Fl_File_Input inp_wav_fname_bell_ring {
6114          label {RTTY Bell audio wav}
6115          xywh {223 301 301 35} align 5
6116          code0 {o->value(progdefaults.BELL_RING.c_str());}
6117        }
6118        Fl_Button btn_select_bell_ring_wav {
6119          label Select
6120          callback {Fl_Native_File_Chooser fnfc;
6121fnfc.title("Pick a file");
6122fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
6123fnfc.filter("wav files\\t*.{mp3,wav}\\n");
6124fnfc.directory("./");           // default directory to use
6125// Show native chooser
6126switch ( fnfc.show() ) {
6127  case -1: break; // ERROR
6128  case  1: break; // CANCEL
6129  default: {
6130  	progdefaults.BELL_RING = fnfc.filename();
6131  	inp_wav_fname_bell_ring->value(progdefaults.BELL_RING.c_str());
6132  	progdefaults.BELL_RING_MENU = 0;
6133  	mnu_bell_ring_menu->value(progdefaults.BELL_RING_MENU);
6134  	break; // FILE CHOSEN
6135  }
6136}}
6137          xywh {526 312 59 24}
6138        }
6139        Fl_Choice mnu_bell_ring_menu {
6140          label {Sound:}
6141          callback {if (o->value() > 0) {
6142  switch (o->value()) {
6143    case 1 : progdefaults.BELL_RING = "bark"; break;
6144    case 2 : progdefaults.BELL_RING = "checkout"; break;
6145    case 3 : progdefaults.BELL_RING = "diesel"; break;
6146    case 4 : progdefaults.BELL_RING = "steam_train"; break;
6147    case 5 : progdefaults.BELL_RING = "doesnot"; break;
6148    case 6 : progdefaults.BELL_RING = "beeboo"; break;
6149    case 7 : progdefaults.BELL_RING = "phone"; break;
6150    case 8 : progdefaults.BELL_RING = "dinner_bell"; break;
6151    case 9 : progdefaults.BELL_RING = "rtty_bell"; break;
6152    case 10 : progdefaults.BELL_RING = "standard_tone"; break;
6153  }
6154  inp_wav_fname_bell_ring->value(progdefaults.BELL_RING.c_str());
6155}
6156progdefaults.BELL_RING_MENU = o->value();} open
6157          xywh {589 312 134 24} box DOWN_BOX down_box BORDER_BOX color 53 align 5
6158          code0 {o->add("wav file|bark|checkout|diesel|steam_train|doesnot|beeboo|phone|dinner_bell|rtty_bell|standard_tone");}
6159          code1 {o->value(progdefaults.BELL_RING_MENU);}
6160        } {}
6161        Fl_Button btn_test_bell_ring_wav {
6162          label Test
6163          callback {audio_alert->alert(progdefaults.BELL_RING.c_str());}
6164          xywh {728 312 59 24}
6165        }
6166      }
6167    }
6168    Fl_Group {} {
6169      label {Modem/TTY/Tx}
6170      xywh {200 0 600 350} box FLAT_BOX align 21 hide
6171      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/TTY/Tx"));}
6172      code1 {config_pages.push_back(p);}
6173      code2 {tab_tree->add(_("Modem/TTY/Tx"));}
6174    } {
6175      Fl_Group {} {
6176        label {Sound Card FSK} open
6177        xywh {205 32 590 229} box ENGRAVED_FRAME align 21
6178      } {
6179        Fl_Group selShift {
6180          label {Carrier shift}
6181          callback {progdefaults.rtty_shift = o->index();
6182sel_xcvr_FSK_shift->index(progdefaults.rtty_shift);
6183if (progdefaults.rtty_shift == o->lsize() - 1)
6184    selCustomShift->activate();
6185else
6186    selCustomShift->deactivate();
6187selCustomShift->redraw();
6188resetRTTY();
6189progdefaults.changed = true;} open
6190          tooltip {Select carrier shift} xywh {281 65 100 22} box DOWN_BOX color 7 align 8 when 1
6191          code0 {o->add(szShifts);o->index(progdefaults.rtty_shift);
6192                       o->labelsize(FL_NORMAL_SIZE);}
6193          class Fl_ListBox
6194        } {}
6195        Fl_Counter selCustomShift {
6196          label {Custom shift}
6197          callback {progdefaults.rtty_custom_shift = o->value();
6198resetRTTY();
6199progdefaults.changed = true;}
6200          tooltip {Input carrier shift} xywh {281 98 100 22} align 8 minimum 10 maximum 1200 step 10 value 450
6201          code0 {o->lstep(100.0);}
6202          code1 {o->labelsize(FL_NORMAL_SIZE);}
6203          class Fl_Counter2
6204        }
6205        Fl_Group selBaud {
6206          label {Baud rate}
6207          callback {progdefaults.rtty_baud = o->index();
6208resetRTTY();
6209progdefaults.changed = true;} open
6210          tooltip {Select carrier baudrate} xywh {281 131 100 22} box DOWN_BOX color 7 align 8 when 1
6211          code0 {o->add(szBauds);}
6212          code1 {o->index(progdefaults.rtty_baud);}
6213          code2 {o->labelsize(FL_NORMAL_SIZE);}
6214          class Fl_ListBox
6215        } {}
6216        Fl_Group selBits {
6217          label {Bits per character}
6218          callback {progdefaults.rtty_bits = o->index();
6219selParity->do_callback();} open
6220          tooltip {Select \# bits / char} xywh {281 164 100 22} box DOWN_BOX color 7 align 8 when 1
6221          code0 {o->add(szSelBits);o->index(progdefaults.rtty_bits);
6222                       o->labelsize(FL_NORMAL_SIZE);}
6223          class Fl_ListBox
6224        } {}
6225        Fl_Group selParity {
6226          label Parity
6227          callback {if (progdefaults.rtty_bits == 0) {
6228  progdefaults.rtty_parity = rtty::RTTY_PARITY_NONE;
6229  o->index(progdefaults.rtty_parity);
6230} else
6231  progdefaults.rtty_parity = o->index();
6232resetRTTY();
6233progdefaults.changed = true;} open
6234          tooltip {Select parity} xywh {281 197 100 22} box DOWN_BOX color 7 align 8 when 1
6235          code0 {o->add(szParity);o->index(progdefaults.rtty_parity);
6236                       o->labelsize(FL_NORMAL_SIZE);}
6237          class Fl_ListBox
6238        } {}
6239        Fl_Group selStopBits {
6240          label {Stop bits}
6241          callback {progdefaults.rtty_stop = o->index();
6242resetRTTY();
6243progdefaults.changed = true;} open
6244          tooltip {Select \# stop bits} xywh {281 231 100 22} box DOWN_BOX color 7 align 8 when 1
6245          code0 {o->add(szStopBits);o->index(progdefaults.rtty_stop);
6246                       o->labelsize(FL_NORMAL_SIZE);}
6247          class Fl_ListBox
6248        } {}
6249        Fl_Check_Button btnAUTOCRLF {
6250          label AutoCRLF
6251          callback {progdefaults.rtty_autocrlf = o->value();
6252progdefaults.changed = true;}
6253          tooltip {Add CRLF after page width characters} xywh {532 65 90 22} down_box DOWN_BOX
6254          code0 {o->value(progdefaults.rtty_autocrlf);}
6255        }
6256        Fl_Counter cntrAUTOCRLF {
6257          label chars
6258          callback {progdefaults.rtty_autocount = (int)o->value();
6259progdefaults.changed = true;}
6260          tooltip {Auto CRLF line length} xywh {643 65 75 22} type Simple align 8 minimum 68 maximum 80 step 1 value 72
6261          code0 {o->labelsize(FL_NORMAL_SIZE);}
6262          class Fl_Counter2
6263        }
6264        Fl_Check_Button btnCRCRLF {
6265          label {CR-CR-LF}
6266          callback {progdefaults.rtty_crcrlf = o->value();
6267progdefaults.changed = true;}
6268          tooltip {Use "cr cr lf" for "cr lf"} xywh {532 98 90 22} down_box DOWN_BOX when 6
6269          code0 {o->value(progdefaults.rtty_crcrlf);}
6270        }
6271        Fl_Check_Button chkUOStx {
6272          label {TX - unshift on space}
6273          callback {progdefaults.UOStx=o->value();
6274progdefaults.changed = true;}
6275          tooltip {Revert to Unsifted char's on a space} xywh {532 131 63 22} down_box DOWN_BOX
6276          code0 {o->value(progdefaults.UOStx);}
6277        }
6278        Fl_Check_Button chk_shaped_rtty {
6279          label {Shaped Tx}
6280          callback {progStatus.shaped_rtty = o->value();}
6281          tooltip {Use wave shaping on Tx signal} xywh {532 197 212 22} down_box DOWN_BOX value 1
6282          code0 {o->value(progStatus.shaped_rtty);}
6283        }
6284        Fl_Check_Button chkPseudoFSK {
6285          label {Pseudo-FSK - right channel}
6286          callback {progdefaults.PseudoFSK = o->value();
6287chkPseudoFSK2->value(o->value());
6288progdefaults.changed = true;
6289if (o->value()) {
6290  progdefaults.sig_on_right_channel = false;
6291  chkAudioStereoOut->value(0);
6292  progdefaults.PTTrightchannel = false;
6293  btnPTTrightchannel->value(0);
6294}}
6295          tooltip {Create keyed square wave on right audio channel} xywh {532 164 212 22} down_box DOWN_BOX
6296          code0 {o->value(progdefaults.PseudoFSK);}
6297        }
6298        Fl_Counter cnt_TTY_LTRS {
6299          label {LTRS at start}
6300          callback {progdefaults.TTY_LTRS = (int)o->value();
6301progdefaults.changed = true;}
6302          tooltip {Insert NN LTRS bytes at start of each transmission} xywh {532 231 75 22} type Simple align 8 minimum 0 maximum 10 step 1 value 1
6303          code0 {o->value(progdefaults.TTY_LTRS);}
6304        }
6305      }
6306      Fl_Group {} {
6307        label {Transceiver FSK} open
6308        xywh {205 262 590 77} box ENGRAVED_FRAME align 21 hide
6309      } {
6310        Fl_Counter cntr_xcvr_FSK_MARK {
6311          label Mark
6312          callback {progdefaults.xcvr_FSK_MARK = o->value();}
6313          tooltip {Mark frequency in Hertz} xywh {221 297 126 23} align 8 minimum 500 maximum 3000 step 1 value 2115
6314          code0 {o->value(progdefaults.xcvr_FSK_MARK);}
6315          code1 {o->lstep(10);}
6316        }
6317        Fl_Group sel_xcvr_FSK_shift {
6318          label {Carrier shift}
6319          callback {progdefaults.rtty_shift = o->index();
6320selShift->index(progdefaults.rtty_shift);
6321resetRTTY();
6322progdefaults.changed = true;} open
6323          tooltip {Carrier shift in Hertz} xywh {404 297 100 23} box DOWN_BOX color 7 align 8 when 1
6324          code0 {o->add(szShifts);}
6325          code1 {o->index(progdefaults.rtty_shift);}
6326          class Fl_ListBox
6327        } {}
6328      }
6329    }
6330    Fl_Group {} {
6331      label {Modem/TTY/nanoIO}
6332      xywh {200 0 600 350} box FLAT_BOX align 21 hide
6333      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/TTY/nanoIO"));}
6334      code1 {config_pages.push_back(p);}
6335      code2 {tab_tree->add(_("Modem/TTY/nanoIO"));}
6336    } {
6337      Fl_Group select_nanoIO_CommPort {
6338        label {Ser. Port}
6339        callback {progdefaults.nanoIO_serial_port_name = o->value();} open
6340        tooltip {nanoIO serial port} xywh {290 23 420 25} box DOWN_BOX color 55 align 4
6341        code0 {\#include "combo.h"}
6342        code1 {\#include "nanoIO.h"}
6343        code2 {o->value(progdefaults.nanoIO_serial_port_name.c_str());}
6344        class Fl_ComboBox
6345      } {}
6346      Fl_Light_Button btn_nanoIO_connect {
6347        label Connect
6348        callback {if (o->value()) {
6349  if (open_nanoIO()) {
6350    btn_nanoCW_connect->value(1);
6351    chk_nanoIO_FSK_io->value(1);
6352  } else {
6353    o->value(0);
6354    btn_nanoCW_connect->value(0);
6355    chk_nanoIO_CW_io->value(0);
6356    chk_nanoIO_FSK_io->value(0);
6357  }
6358} else {
6359  close_nanoIO();
6360  o->value(0);
6361  btn_nanoCW_connect->value(0);
6362  chk_nanoIO_FSK_io->value(0);
6363  chk_nanoIO_CW_io->value(0);
6364}}
6365        tooltip {Connect / Disconnect from nanoIO} xywh {715 23 80 25}
6366      }
6367      Fl_Group listbox_nanoIO_serbaud2 {
6368        label {Serial Baud}
6369        callback {progdefaults.nanoIO_serbaud = o->index();
6370listbox_nanoIO_serbaud->index(o->index());
6371progdefaults.changed = true;} open
6372        xywh {293 57 92 24} box DOWN_BOX color 7 align 4
6373        code0 {o->add("1200|4800|9600|19200|38400|57600|115200");}
6374        code1 {o->index(progdefaults.nanoIO_serbaud);}
6375        class Fl_ListBox
6376      } {}
6377      Fl_Text_Display txt_nano_io {
6378        label {USB serial I/O}
6379        xywh {202 126 596 220} align 5
6380        code0 {\#include "FTextRXTX.h"}
6381        code1 {o->setFont(progdefaults.RxFontnbr);}
6382        code2 {o->setFontSize(12);}
6383        class FTextView
6384      }
6385      Fl_Button btn_nanofsk_save {
6386        label Save
6387        callback {nano_CW_save();}
6388        tooltip {Write state of nanoIO to Arduino EEPROM} xywh {715 90 80 25}
6389      }
6390      Fl_Button btn_nanofsk_query {
6391        label Status
6392        callback {nano_CW_query();}
6393        tooltip {Query state of nanoIO} xywh {630 57 80 25}
6394      }
6395      Fl_Check_Button chk_nanoIO_polarity {
6396        label {MARK polarity}
6397        callback {progdefaults.nanoIO_polarity=o->value();
6398nano_mark_polarity(progdefaults.nanoIO_polarity);
6399progdefaults.changed = true;}
6400        tooltip {Set - mark logical HIGH
6401Read from nanoIO} xywh {323 90 53 24} down_box DOWN_BOX
6402        code0 {o->value(progdefaults.nanoIO_polarity);}
6403      }
6404      Fl_Group sel_nanoIO_baud {
6405        label {TTY Baud}
6406        callback {progdefaults.nanoIO_baud = o->index();
6407nano_set_baud(progdefaults.nanoIO_baud);
6408progdefaults.changed = true;} open
6409        tooltip {nanoIO - TTY baud} xywh {447 90 84 25} box DOWN_BOX color 7 align 8 when 1
6410        code0 {o->add("45.45|50.0|75.0|100.0");}
6411        code1 {o->index(progdefaults.nanoIO_baud);}
6412        code2 {o->labelsize(FL_NORMAL_SIZE);}
6413        class Fl_ListBox
6414      } {}
6415      Fl_Group grp_nanoio_debug {
6416        label {Debug Output} open
6417        xywh {202 126 596 220} box ENGRAVED_FRAME align 5 hide resizable
6418      } {
6419        Fl_Browser brws_nanoio_sent {
6420          xywh {202 126 298 190} align 18
6421        }
6422        Fl_Browser brws_nanoio_rcvd {
6423          xywh {500 126 298 190} align 18
6424        }
6425        Fl_Button btn_nanoio_clear_sent {
6426          label {Clear Sent}
6427          callback {brws_nanoio_sent->clear();}
6428          xywh {309 319 85 20}
6429        }
6430        Fl_Button btn_nanoio_clear_both {
6431          label {Clear Both}
6432          callback {brws_nanoio_rcvd->clear();
6433brws_nanoio_sent->clear();}
6434          xywh {457 319 85 20}
6435        }
6436        Fl_Button btn_nanoio_clear_rcvd {
6437          label {Clear Rcvd}
6438          callback {brws_nanoio_rcvd->clear();}
6439          xywh {605 319 85 20}
6440        }
6441      }
6442      Fl_Light_Button btn_nanoio_debug {
6443        label Debug
6444        callback {if (o->value()) {
6445  grp_nanoio_debug->show();
6446  txt_nano_io->hide();
6447} else {
6448  grp_nanoio_debug->hide();
6449  txt_nano_io->show();
6450}}
6451        xywh {630 90 80 25}
6452      }
6453      Fl_Check_Button chk_nanoIO_FSK_io {
6454        label {TTY i/o}
6455        callback {if (o->value() == 0) {
6456  o->value(1);
6457  return;
6458}
6459set_nanoIO();
6460chk_nanoIO_CW_io->value(0);}
6461        tooltip {Enable TTY operation} xywh {715 57 70 24} down_box DOWN_BOX
6462      }
6463    }
6464    Fl_Group {} {
6465      label {Modem/TTY/Navigator}
6466      xywh {200 0 600 350} box FLAT_BOX align 21 hide
6467      code0 {\#include "Nav.h"}
6468      code1 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/TTY/Navigator"));}
6469      code2 {config_pages.push_back(p);}
6470      code3 {tab_tree->add(_("Modem/TTY/Navigator"));}
6471    } {
6472      Fl_Group {} {
6473        label {FSK Interface} open
6474        xywh {206 36 591 70} box ENGRAVED_FRAME align 21
6475      } {
6476        Fl_Group select_USN_FSK_port {
6477          label Port
6478          callback {progdefaults.Nav_FSK_port = o->value();} open
6479          tooltip {Navigator serial port} xywh {249 65 455 23} box DOWN_BOX color 55 align 4
6480          code0 {\#include "combo.h"}
6481          code1 {\#include "Nav.h"}
6482          code2 {o->value(progdefaults.Nav_FSK_port.c_str());}
6483          class Fl_ComboBox
6484        } {}
6485        Fl_Light_Button btn_Nav_connect {
6486          label FSK
6487          callback {if (o->value()) {
6488  if (!open_NavFSK())
6489    o->value(0);
6490} else {
6491  close_NavFSK();
6492}}
6493          tooltip {Connect / Disconnect from Nav FSK port} xywh {711 65 80 23}
6494        }
6495      }
6496      Fl_Group {} {
6497        label {Configuration Interface} open
6498        xywh {206 107 591 239} box ENGRAVED_FRAME align 21
6499      } {
6500        Fl_Group select_Nav_config_port {
6501          label Port
6502          callback {progdefaults.Nav_config_port = o->value();} open
6503          tooltip {Navigator configuration port} xywh {250 137 455 23} box DOWN_BOX color 55 align 4
6504          code0 {o->value(progdefaults.Nav_config_port.c_str());}
6505          class Fl_ComboBox
6506        } {}
6507        Fl_Group sel_Nav_ch1 {
6508          label {Channel 1 Attenuator}
6509          callback {progdefaults.Nav_channel_1_att = o->index();
6510Nav_set_channel_1_att(progdefaults.Nav_channel_1_att);
6511progdefaults.changed = true;} open
6512          tooltip {Nav Channel 1 attenuator} xywh {378 164 80 23} box DOWN_BOX color 7 align 4 when 1
6513          code1 {o->add("15 db|Normal");}
6514          code2 {o->index(progdefaults.Nav_channel_1_att);}
6515          class Fl_ListBox
6516        } {}
6517        Fl_Group sel_Nav_ch2 {
6518          label {Channel 2 attenuator}
6519          callback {progdefaults.Nav_channel_2_att = o->index();
6520Nav_set_channel_2_att(progdefaults.Nav_channel_2_att);
6521progdefaults.changed = true;} open
6522          tooltip {NavChannel 2 Attenuator} xywh {378 193 80 23} box DOWN_BOX color 7 align 4 when 1
6523          code1 {o->add("15 db|Normal");}
6524          code2 {o->index(progdefaults.Nav_channel_2_att);}
6525          class Fl_ListBox
6526        } {}
6527        Fl_Group sel_Nav_rf_att {
6528          label {RF attenuator}
6529          callback {progdefaults.Nav_rf_att = o->index();
6530Nav_set_rf_att(progdefaults.Nav_rf_att);
6531progdefaults.changed = true;} open
6532          tooltip {NavRF Attenuator} xywh {378 223 80 23} box DOWN_BOX color 7 align 4 when 1
6533          code1 {o->add("20 db|Normal");}
6534          code2 {o->index(progdefaults.Nav_rf_att);}
6535          class Fl_ListBox
6536        } {}
6537        Fl_Group sel_Nav_wk_ptt {
6538          label {WinKey PTT}
6539          callback {progdefaults.Nav_wk_ptt = o->index();
6540Nav_set_wk_ptt(progdefaults.Nav_wk_ptt);
6541progdefaults.changed = true;} open
6542          tooltip {NavWinkey PTT} xywh {378 253 80 23} box DOWN_BOX color 7 align 4 when 1
6543          code1 {o->index(progdefaults.Nav_wk_ptt);}
6544          code2 {o->add("On|Off");}
6545          class Fl_ListBox
6546        } {}
6547        Fl_Group sel_Nav_LED {
6548          label {LED brightness}
6549          callback {progdefaults.Nav_led = o->index();
6550Nav_set_led(progdefaults.Nav_led);
6551progdefaults.changed = true;} open
6552          tooltip {NavLED brightness} xywh {378 283 80 23} box DOWN_BOX color 7 align 4 when 1
6553          code1 {o->index(progdefaults.Nav_led);}
6554          code2 {o->add("Dim|Normal");}
6555          class Fl_ListBox
6556        } {}
6557        Fl_Group sel_Nav_CAT_LED {
6558          label {CAT LED state}
6559          callback {progdefaults.Nav_cat_led = o->index();
6560Nav_set_cat_led(progdefaults.Nav_cat_led);
6561progdefaults.changed = true;} open
6562          tooltip {NavCAT state LED} xywh {378 313 80 23} box DOWN_BOX color 7 align 4 when 1
6563          code1 {o->index(progdefaults.Nav_cat_led);}
6564          code2 {o->add("Steady|Polling");}
6565          class Fl_ListBox
6566        } {}
6567        Fl_Group sel_Nav_FSK_baud {
6568          label {Baud rate}
6569          callback {progdefaults.Nav_FSK_baud = o->index();
6570Nav_set_baud(progdefaults.Nav_FSK_baud);
6571progdefaults.changed = true;} open
6572          tooltip {Nav FSK baud rate} xywh {586 164 80 23} box DOWN_BOX color 7 align 4 when 1
6573          code0 {o->add("45.45|75|100");}
6574          code1 {o->index(progdefaults.Nav_FSK_baud);}
6575          class Fl_ListBox
6576        } {}
6577        Fl_Group sel_Nav_FSK_stopbits {
6578          label {Stop bits}
6579          callback {progdefaults.Nav_FSK_stopbits = o->index();
6580Nav_set_stopbits(progdefaults.Nav_FSK_stopbits);
6581progdefaults.changed = true;} open
6582          tooltip {Nav FSK Stop bits} xywh {585 193 80 23} box DOWN_BOX color 7 align 4 when 1
6583          code0 {o->add("1|1.5|2");}
6584          code1 {o->index(progdefaults.Nav_FSK_stopbits);}
6585          class Fl_ListBox
6586        } {}
6587        Fl_Group sel_Nav_FSK_polarity {
6588          label {Mark Polarity}
6589          callback {progdefaults.Nav_FSK_polarity = o->index();
6590Nav_set_polarity(progdefaults.Nav_FSK_polarity);
6591progdefaults.changed = true;} open
6592          tooltip {Nav FSK MARK Polarity} xywh {585 223 80 23} box DOWN_BOX color 7 align 4 when 1
6593          code0 {o->add("Normal|Reverse");}
6594          code1 {o->index(progdefaults.Nav_FSK_polarity);}
6595          class Fl_ListBox
6596        } {}
6597        Fl_Group sel_Nav_FSK_sidetone {
6598          label {Side tone}
6599          callback {progdefaults.Nav_FSK_sidetone = o->index();
6600Nav_set_sidetone(progdefaults.Nav_FSK_sidetone);
6601progdefaults.changed = true;} open
6602          tooltip {Nav FSK side tone} xywh {585 253 80 23} box DOWN_BOX color 7 align 4 when 1
6603          code0 {o->add("On|Off");}
6604          code1 {o->index(progdefaults.Nav_FSK_sidetone);}
6605          class Fl_ListBox
6606        } {}
6607        Fl_Group sel_Nav_FSK_ptt {
6608          label {FSK PTT}
6609          callback {progdefaults.Nav_FSK_ptt = o->index();
6610Nav_set_ptt(progdefaults.Nav_FSK_ptt);
6611progdefaults.changed = true;} open
6612          tooltip {Nav FSK PTT - should always be on} xywh {585 283 80 23} box DOWN_BOX color 7 align 4 when 1
6613          code0 {o->add("On|Off");}
6614          code1 {o->index(progdefaults.Nav_FSK_ptt);}
6615          class Fl_ListBox
6616        } {}
6617        Fl_Light_Button btn_Nav_config {
6618          label Config
6619          callback {if (o->value()) {
6620  if (!open_NavConfig())
6621    o->value(0);
6622} else {
6623  close_NavConfig();
6624}}
6625          tooltip {Connect / Disconnect from Nav Config port} xywh {710 137 80 23}
6626        }
6627      }
6628    }
6629    Fl_Group {} {
6630      label {Modem/TTY/Synop}
6631      xywh {200 0 600 350} box FLAT_BOX align 21 hide
6632      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/TTY/Synop"));}
6633      code1 {config_pages.push_back(p);}
6634      code2 {tab_tree->add(_("Modem/TTY/Synop"));}
6635    } {
6636      Fl_Check_Button btnSynopAdifDecoding {
6637        label {SYNOP to ADIF}
6638        callback {progdefaults.SynopAdifDecoding=o->value();
6639progdefaults.changed = true;}
6640        tooltip {Decodes SYNOP messages (Ex: Deutsche Wetterdienst) to ADIF log file} xywh {406 71 127 24} down_box DOWN_BOX align 148
6641        code0 {o->value(progdefaults.SynopAdifDecoding);}
6642      }
6643      Fl_Check_Button btnSynopKmlDecoding {
6644        label {SYNOP to KML}
6645        callback {progdefaults.SynopKmlDecoding=o->value();
6646progdefaults.changed = true;}
6647        tooltip {Decodes SYNOP messages (Ex: Deutsche Wetterdienst) to KML documents (Ex: Google Earth)} xywh {406 112 120 24} down_box DOWN_BOX align 148
6648        code0 {o->value(progdefaults.SynopKmlDecoding);}
6649      }
6650      Fl_Check_Button btnSynopInterleaved {
6651        label {Interleave SYNOP and text}
6652        callback {progdefaults.SynopInterleaved=o->value();
6653progdefaults.changed = true;}
6654        tooltip {Interleave text with decoded SYNOP messages, or replacement.} xywh {406 154 211 24} down_box DOWN_BOX align 148
6655        code0 {o->value(progdefaults.SynopInterleaved);}
6656      }
6657    }
6658    Fl_Group {} {
6659      label {Modem/TTY/Winkeyer 3}
6660      xywh {200 0 600 350} box FLAT_BOX align 21 hide
6661      code0 {\#include "winkeyer.h"}
6662      code1 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/TTY/Winkeyer 3"));}
6663      code2 {config_pages.push_back(p);}
6664      code3 {tab_tree->add(_("Modem/TTY/Winkeyer 3"));}
6665    } {
6666      Fl_Group {} {
6667        label {Serial Interface} open
6668        xywh {206 43 591 72} box ENGRAVED_FRAME align 21
6669      } {
6670        Fl_Group select_WKFSK_CommPort {
6671          label Port
6672          callback {progStatus.WK_serial_port_name = o->value();
6673select_WK_CommPort->value(progStatus.WK_serial_port_name.c_str());} open
6674          tooltip {Xcvr serial port} xywh {274 71 405 23} box DOWN_BOX color 55 align 4
6675          code0 {\#include "combo.h"}
6676          code1 {o->value(progStatus.WK_serial_port_name.c_str());}
6677          class Fl_ComboBox
6678        } {}
6679        Fl_Light_Button btn_WKFSK_connect {
6680          label Connect
6681          callback {WKFSK_connect(o->value());}
6682          tooltip {Connect / Disconnect from WinKeyer} xywh {705 71 80 23}
6683          code0 {o->value(progStatus.WK_online);}
6684        }
6685      }
6686      Fl_Group {} {
6687        label {Configuration Interface} open
6688        xywh {206 116 591 231} box ENGRAVED_FRAME align 21
6689      } {
6690        Fl_Group sel_WKFSK_baud {
6691          label {Baud rate}
6692          callback {progStatus.WKFSK_baud = o->index();
6693WKFSK_init();} open
6694          tooltip {Nav FSK baud rate} xywh {391 148 78 23} box DOWN_BOX color 7 align 4 when 1
6695          code0 {o->add("45.45|50|75|100");}
6696          code1 {o->index(progStatus.WKFSK_baud);}
6697          class Fl_ListBox
6698        } {}
6699        Fl_Group sel_WKFSK_stopbits {
6700          label {Stop bits}
6701          callback {progStatus.WKFSK_stopbits = o->index();
6702WKFSK_init();} open
6703          tooltip {Nav FSK Stop bits} xywh {391 177 78 23} box DOWN_BOX color 7 align 4 when 1
6704          code0 {o->add("2|1.5");}
6705          code1 {o->index(progStatus.WKFSK_stopbits);}
6706          class Fl_ListBox
6707        } {}
6708        Fl_Group sel_WKFSK_ptt {
6709          label {FSK port}
6710          callback {progStatus.WKFSK_ptt = o->index();
6711WKFSK_init();} open
6712          tooltip {NavWinkey PTT} xywh {391 206 78 23} box DOWN_BOX color 7 align 4 when 1
6713          code0 {o->add("On PTT|On KEY");}
6714          code1 {o->index(progStatus.WKFSK_ptt);}
6715          class Fl_ListBox
6716        } {}
6717        Fl_Group sel_WKFSK_polarity {
6718          label {Mark Polarity}
6719          callback {progStatus.WKFSK_polarity = o->index();
6720WKFSK_init();} open
6721          tooltip {Nav FSK MARK Polarity} xywh {391 236 78 23} box DOWN_BOX color 7 align 4 when 1
6722          code0 {o->add("Normal|Reverse");}
6723          code1 {o->index(progStatus.WKFSK_polarity);}
6724          class Fl_ListBox
6725        } {}
6726        Fl_Group sel_WKFSK_sidetone {
6727          label Sidetone
6728          callback {progStatus.WKFSK_sidetone = o->index();
6729WKFSK_init();} open
6730          tooltip {Nav FSK side tone} xywh {391 265 78 23} box DOWN_BOX color 7 align 4 when 1
6731          code0 {o->add("Off|On");}
6732          code1 {o->index(progStatus.WKFSK_sidetone);}
6733          class Fl_ListBox
6734        } {}
6735        Fl_Group sel_WKFSK_auto_crlf {
6736          label {Auto CRLF}
6737          callback {progStatus.WKFSK_auto_crlf = o->index();
6738WKFSK_init();} open
6739          tooltip {Nav FSK side tone} xywh {391 295 78 23} box DOWN_BOX color 7 align 4 when 1
6740          code0 {o->add("Off|On");}
6741          code1 {o->index(progStatus.WKFSK_auto_crlf);}
6742          class Fl_ListBox
6743        } {}
6744        Fl_Group sel_WKFSK_diddle {
6745          label Diddle
6746          callback {progStatus.WKFSK_diddle = o->index();
6747WKFSK_init();} open
6748          tooltip {Diddle On/OFF} xywh {581 148 78 23} box DOWN_BOX color 7 align 4 when 1
6749          code0 {o->add("Off|On");}
6750          code1 {o->index(progStatus.WKFSK_diddle);}
6751          class Fl_ListBox
6752        } {}
6753        Fl_Group sel_WKFSK_diddle_char {
6754          label {Diddle char}
6755          callback {progStatus.WKFSK_diddle_char = o->index();
6756WKFSK_init();} open
6757          tooltip {Diddle character} xywh {581 177 78 23} box DOWN_BOX color 7 align 4 when 1
6758          code0 {o->add("BLANK|LTRS");}
6759          code1 {o->index(progStatus.WKFSK_diddle_char);}
6760          class Fl_ListBox
6761        } {}
6762        Fl_Group sel_WKFSK_usos {
6763          label USOS
6764          callback {progStatus.WKFSK_usos = o->index();
6765WKFSK_init();} open
6766          tooltip {Unshift on space} xywh {581 206 78 23} box DOWN_BOX color 7 align 4 when 1
6767          code0 {o->add("Off|On");}
6768          code1 {o->index(progStatus.WKFSK_usos);}
6769          class Fl_ListBox
6770        } {}
6771        Fl_Group sel_WKFSK_monitor {
6772          label Echo
6773          callback {progStatus.WKFSK_monitor = o->index();
6774WKFSK_init();} open
6775          tooltip {Unshift on space} xywh {581 236 78 23} box DOWN_BOX color 7 align 4 when 1
6776          code0 {o->add("Off|On");}
6777          code1 {o->index(progStatus.WKFSK_monitor);}
6778          class Fl_ListBox
6779        } {}
6780      }
6781    }
6782    Fl_Group {} {
6783      label {Modem/Thor}
6784      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
6785      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Thor"));}
6786      code1 {config_pages.push_back(p);}
6787      code2 {tab_tree->add(_("Modem/Thor"));}
6788    } {
6789      Fl_Group {} {open
6790        xywh {262 40 490 270} box ENGRAVED_FRAME
6791      } {
6792        Fl_Input txtTHORSecondary {
6793          label {Secondary Text}
6794          callback {progdefaults.THORsecText = o->value();
6795progdefaults.changed = true;}
6796          tooltip {Text to send during keyboard idle times} xywh {291 67 430 40} type Multiline align 5 when 1
6797          code0 {txtTHORSecondary->labelsize(FL_NORMAL_SIZE);}
6798          class Fl_Input2
6799        }
6800        Fl_Check_Button valTHOR_FILTER {
6801          label Filtering
6802          callback {progdefaults.THOR_FILTER = o->value();
6803resetTHOR();
6804progdefaults.changed = true;}
6805          tooltip {Enable DSP prior to decoder} xywh {291 121 80 20} down_box DOWN_BOX value 1
6806          code0 {o->value(progdefaults.THOR_FILTER);}
6807        }
6808        Fl_Counter valTHOR_BW {
6809          label {Filter bandwidth factor}
6810          callback {progdefaults.THOR_BW = o->value();
6811resetTHOR();
6812progdefaults.changed = true;}
6813          tooltip {Filter bandwidth relative to signal width} xywh {436 121 63 20} type Simple align 8 minimum 1 maximum 2 value 1.5
6814          code0 {o->value(progdefaults.THOR_BW);}
6815          code1 {o->labelsize(FL_NORMAL_SIZE);}
6816          class Fl_Counter2
6817        }
6818        Fl_Value_Slider valThorCWI {
6819          label {CWI threshold}
6820          callback {progdefaults.ThorCWI = o->value();
6821progdefaults.changed = true;}
6822          tooltip {CWI detection and suppression} xywh {291 174 260 20} type Horizontal align 1 textsize 14
6823          code0 {o->value(progdefaults.ThorCWI);}
6824          code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
6825          class Fl_Value_Slider2
6826        }
6827        Fl_Check_Button valTHOR_PREAMBLE {
6828          label {Preamble Detection}
6829          callback {progdefaults.THOR_PREAMBLE = o->value();
6830progdefaults.changed = true;}
6831          tooltip {Detect the THOR preamble
6832Clear the Rx pipeline} xywh {291 216 200 20} down_box DOWN_BOX
6833          code0 {o->value(progdefaults.THOR_PREAMBLE);}
6834        }
6835        Fl_Check_Button valTHOR_SOFTSYMBOLS {
6836          label {Soft-symbol decoding}
6837          callback {progdefaults.THOR_SOFTSYMBOLS = o->value();
6838progdefaults.changed = true;}
6839          tooltip {Use soft-decision decoding for symbol detection
6840Assists soft-bit decoding} xywh {291 246 190 20} down_box DOWN_BOX
6841          code0 {o->value(progdefaults.THOR_SOFTSYMBOLS);}
6842        }
6843        Fl_Check_Button valTHOR_SOFTBITS {
6844          label {Soft-bit decoding}
6845          callback {progdefaults.THOR_SOFTBITS = o->value();
6846progdefaults.changed = true;}
6847          tooltip {Use soft-bit viterbi decoding for better Forward Error Correction
6848Works best with soft-symbol decoding enabled} xywh {291 276 170 20} down_box DOWN_BOX
6849          code0 {o->value(progdefaults.THOR_SOFTBITS);}
6850        }
6851        Fl_Counter valTHOR_PATHS {
6852          label {Paths (hidden)}
6853          callback {progdefaults.THOR_PATHS = (int)o->value();
6854progdefaults.changed = true;}
6855          xywh {638 265 75 21} type Simple align 1 minimum 4 maximum 8 step 1 value 5
6856          code0 {o->value(progdefaults.THOR_PATHS);}
6857          code1 {o->labelsize(FL_NORMAL_SIZE);}
6858          code2 {o->hide();}
6859          class Fl_Counter2
6860        }
6861      }
6862    }
6863    Fl_Group {} {
6864      label {Modem/Navtex}
6865      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
6866      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Navtex"));}
6867      code1 {config_pages.push_back(p);}
6868      code2 {tab_tree->add(_("Modem/Navtex"));}
6869    } {
6870      Fl_Check_Button btnNvtxAdifLog {
6871        label {Log Navtex messages to Adif file}
6872        callback {progdefaults.NVTX_AdifLog=o->value();
6873progdefaults.changed = true;}
6874        xywh {316 84 235 30} down_box DOWN_BOX
6875        code0 {o->value(progdefaults.NVTX_AdifLog);}
6876      }
6877      Fl_Check_Button btnNvtxKmlLog {
6878        label {Log Navtex messages to KML}
6879        callback {progdefaults.NVTX_KmlLog=o->value();
6880progdefaults.changed = true;}
6881        tooltip {Logs messages to Keyhole Markup Language (Google Earth, Marble, Gaia, etc...)} xywh {315 130 270 30} down_box DOWN_BOX
6882        code0 {o->value(progdefaults.NVTX_KmlLog);}
6883      }
6884    }
6885    Fl_Group {} {
6886      label {Modem/Wefax}
6887      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
6888      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Wefax"));}
6889      code1 {config_pages.push_back(p);}
6890      code2 {tab_tree->add(_("Modem/Wefax"));}
6891      code3 {tab_tree->close(_("Modem"));}
6892    } {
6893      Fl_Counter cntrWEFAX_Shift {
6894        label {Frequency shift}
6895        callback {progdefaults.WEFAX_Shift=o->value();
6896progdefaults.changed = true;}
6897        tooltip {Frequency shift of WEFAX signal
6898Nominal 800 Hz} xywh {262 50 150 24} align 1 minimum 750 maximum 900 step 10 value 800
6899        code0 {o->value(progdefaults.WEFAX_Shift);}
6900        code1 {o->lstep(100.0);}
6901      }
6902      Fl_Counter cntrWEFAX_Center {
6903        label {Center freq}
6904        callback {progdefaults.WEFAX_Center=o->value();
6905progdefaults.changed = true;}
6906        tooltip {Center of WEFAX signal
6907Nominal 1900 Hz} xywh {262 99 150 24} align 1 minimum 1000 maximum 2000 step 10 value 1900
6908        code0 {o->value(progdefaults.WEFAX_Center);}
6909        code1 {o->lstep(100.0);}
6910      }
6911      Fl_Counter cntrWEFAX_MaxRows {
6912        label {Max Image Rows}
6913        callback {progdefaults.WEFAX_MaxRows=o->value();
6914progdefaults.changed = true;}
6915        tooltip {Force save split image} xywh {588 50 150 24} align 1 minimum 1000 maximum 10000 step 100 value 1500
6916        code0 {o->value(progdefaults.WEFAX_MaxRows);}
6917        code1 {o->lstep(1000.0);}
6918      }
6919      Fl_Input btnWefaxSaveDir {
6920        label {Fax images destination directory}
6921        callback {progdefaults.wefax_save_dir=o->value();
6922progdefaults.changed = true;}
6923        tooltip {Store images in this directory} xywh {216 267 470 24} align 5
6924        code0 {o->value(progdefaults.wefax_save_dir.c_str());}
6925      }
6926      Fl_Button btnSelectFaxDestDir {
6927        label {Directory...}
6928        callback {Fl_File_Chooser *fc = new Fl_File_Chooser(".",NULL,Fl_File_Chooser::DIRECTORY,"Input File");
6929fc->callback(WefaxDestDirSet);
6930fc->show();}
6931        tooltip {Select destination directory} xywh {695 267 90 24}
6932      }
6933      Fl_Check_Button btnWefaxAdifLog {
6934        label {Log Wefax messages to Adif file}
6935        callback {progdefaults.WEFAX_AdifLog=o->value();
6936progdefaults.changed = true;}
6937        tooltip {Sent and received faxes are logged to Adif file.} xywh {216 298 235 30} down_box DOWN_BOX
6938        code0 {o->value(progdefaults.WEFAX_AdifLog);}
6939      }
6940      Fl_Choice wefax_choice_rx_filter {
6941        label Filter
6942        callback {progdefaults.wefax_filter=o->value();} open
6943        xywh {302 137 110 24} down_box BORDER_BOX
6944        code0 {o->add("Narrow|Medium|Wide");}
6945        code1 {o->value(progdefaults.wefax_filter < 3 ? progdefaults.wefax_filter : 0);}
6946      } {}
6947      Fl_Counter auto_after_nrows {
6948        label {Enable Auto-align after}
6949        callback {progdefaults.wefax_auto_after = o->value();
6950progdefaults.changed = true;}
6951        xywh {588 81 150 24} align 4 minimum 5 maximum 100 step 5 value 50
6952        code0 {o->value(progdefaults.wefax_auto_after);}
6953        code1 {o->lstep(50);}
6954      }
6955      Fl_Counter align_stop_after {
6956        label {Stop Auto-align after}
6957        callback {progdefaults.wefax_align_stop = o->value();
6958progdefaults.changed = true;}
6959        xywh {588 113 150 24} align 4 minimum 50 maximum 500 step 5 value 500
6960        code0 {o->value(progdefaults.wefax_align_stop);}
6961        code1 {o->lstep(50);}
6962      }
6963      Fl_Counter align_every_nrows {
6964        label {Auto-align every}
6965        callback {progdefaults.wefax_align_rows = o->value();
6966if (auto_after_nrows->minimum() < progdefaults.wefax_align_rows) {
6967  auto_after_nrows->minimum(progdefaults.wefax_align_rows);
6968  auto_after_nrows->value(progdefaults.wefax_align_rows);
6969}
6970progdefaults.changed = true;}
6971        xywh {624 145 80 24} type Simple align 4 minimum 5 maximum 100 step 5 value 25
6972        code0 {o->value(progdefaults.wefax_align_rows);}
6973      }
6974      Fl_Box {} {
6975        label rows
6976        xywh {743 81 42 22} align 20
6977      }
6978      Fl_Box {} {
6979        label rows
6980        xywh {743 113 42 22} align 20
6981      }
6982      Fl_Box {} {
6983        label rows
6984        xywh {706 146 42 22} align 20
6985      }
6986      Fl_Counter wefax_correlation {
6987        label Correlation
6988        callback {progdefaults.wefax_correlation = o->value();
6989progdefaults.changed = true;}
6990        tooltip {Row-to-row correlation
6991Used to detect presence of WEFAX signal
6992Lower: more false detections} xywh {589 179 150 24} align 4 minimum 0.01 maximum 0.1 step 0.001 value 0.05
6993        code0 {o->value(progdefaults.wefax_correlation);}
6994        code1 {o->lstep (0.01);}
6995      }
6996      Fl_Counter cntr_correlation_rows {
6997        label {\# Correlation rows}
6998        callback {progdefaults.wefax_correlation_rows = o->value();
6999progdefaults.changed = true;}
7000        tooltip {Compute correlation factor over this \# rows} xywh {624 213 80 24} type Simple align 4 minimum 2 maximum 50 step 1 value 10
7001        code0 {o->value(progdefaults.wefax_correlation_rows);}
7002      }
7003    }
7004    Fl_Group {} {
7005      label {Misc/Autostart}
7006      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7007      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/Autostart"));}
7008      code1 {config_pages.push_back(p);}
7009      code2 {tab_tree->add(_("Misc/Autostart"));}
7010    } {
7011      Fl_Input txt_auto_flrig_pathname {
7012        label {flrig:}
7013        callback {progdefaults.auto_flrig_pathname = o->value();
7014progdefaults.changed = true;}
7015        tooltip {Enter full path-filename for flrig} xywh {267 56 310 24} when 1
7016        code0 {o->value(progdefaults.auto_flrig_pathname.c_str());}
7017        class Fl_Input2
7018      }
7019      Fl_Button btn_select_flrig {
7020        label Locate
7021        callback {std::string str = select_binary_pathname(progdefaults.auto_flrig_pathname);
7022txt_auto_flrig_pathname->value(str.c_str());
7023progdefaults.auto_flrig_pathname = str;
7024progdefaults.changed = true;}
7025        tooltip {Locate flrig executable} xywh {599 56 70 24}
7026      }
7027      Fl_Input txt_auto_flamp_pathname {
7028        label {flamp:}
7029        callback {progdefaults.auto_flamp_pathname = o->value();
7030progdefaults.changed = true;}
7031        tooltip {Enter full path-filename for flamp} xywh {267 94 310 24} when 1
7032        code0 {o->value(progdefaults.auto_flamp_pathname.c_str());}
7033        class Fl_Input2
7034      }
7035      Fl_Button btn_select_auto_flamp {
7036        label Locate
7037        callback {std::string str = select_binary_pathname(progdefaults.auto_flamp_pathname);
7038txt_auto_flamp_pathname->value(str.c_str());
7039progdefaults.auto_flamp_pathname = str;
7040progdefaults.changed = true;}
7041        tooltip {Locate flamp executable} xywh {599 94 70 24}
7042      }
7043      Fl_Input txt_auto_flnet_pathname {
7044        label {flnet:}
7045        callback {progdefaults.auto_flnet_pathname = o->value();
7046progdefaults.changed = true;}
7047        tooltip {Enter full path-filename for flnet} xywh {267 132 310 24} when 1
7048        code0 {o->value(progdefaults.auto_flnet_pathname.c_str());}
7049        class Fl_Input2
7050      }
7051      Fl_Button btn_select_auto_flnet {
7052        label Locate
7053        callback {std::string str = select_binary_pathname(progdefaults.auto_flnet_pathname);
7054txt_auto_flnet_pathname->value(str.c_str());
7055progdefaults.auto_flnet_pathname = str;
7056progdefaults.changed = true;}
7057        tooltip {Locate flnet executable} xywh {599 132 70 24}
7058      }
7059      Fl_Input txt_auto_fllog_pathname {
7060        label {fllog:}
7061        callback {progdefaults.auto_fllog_pathname = o->value();
7062progdefaults.changed = true;}
7063        tooltip {Enter full path-filename for fllog} xywh {267 171 310 24} when 1
7064        code0 {o->value(progdefaults.auto_fllog_pathname.c_str());}
7065        class Fl_Input2
7066      }
7067      Fl_Button btn_select_fllog {
7068        label Locate
7069        callback {std::string str = select_binary_pathname(progdefaults.auto_fllog_pathname);
7070txt_auto_fllog_pathname->value(str.c_str());
7071progdefaults.auto_fllog_pathname = str;
7072progdefaults.changed = true;}
7073        tooltip {Locate fllog executable} xywh {599 171 70 24}
7074      }
7075      Fl_Input txt_auto_prog1_pathname {
7076        label {Prog 1:}
7077        callback {progdefaults.auto_prog1_pathname = o->value();
7078progdefaults.changed = true;}
7079        tooltip {Enter full path-filename for external program} xywh {267 209 310 24} when 1
7080        code0 {o->value(progdefaults.auto_prog1_pathname.c_str());}
7081        class Fl_Input2
7082      }
7083      Fl_Button btn_select_prog1 {
7084        label Locate
7085        callback {std::string str = select_binary_pathname(progdefaults.auto_prog1_pathname);
7086txt_auto_prog1_pathname->value(str.c_str());
7087progdefaults.auto_prog1_pathname = str;
7088progdefaults.changed = true;}
7089        tooltip {Locate program \#1 executable} xywh {599 209 70 24}
7090      }
7091      Fl_Input txt_auto_prog2_pathname {
7092        label {Prog 2:}
7093        callback {progdefaults.auto_prog2_pathname = o->value();
7094progdefaults.changed = true;}
7095        tooltip {Enter full path-filename for external program} xywh {267 247 310 24} when 1
7096        code0 {o->value(progdefaults.auto_prog2_pathname.c_str());}
7097        class Fl_Input2
7098      }
7099      Fl_Button btn_select_prog2 {
7100        label Locate
7101        callback {std::string str = select_binary_pathname(progdefaults.auto_prog2_pathname);
7102txt_auto_prog2_pathname->value(str.c_str());
7103progdefaults.auto_prog2_pathname = str;
7104progdefaults.changed = true;}
7105        tooltip {Locate program \#2 executable} xywh {599 247 70 24}
7106      }
7107      Fl_Input txt_auto_prog3_pathname {
7108        label {Prog 3:}
7109        callback {progdefaults.auto_prog3_pathname = o->value();
7110progdefaults.changed = true;}
7111        tooltip {Enter full path-filename for external program} xywh {267 286 310 24} when 1
7112        code0 {o->value(progdefaults.auto_prog3_pathname.c_str());}
7113        class Fl_Input2
7114      }
7115      Fl_Button btn_select_prog3 {
7116        label Locate
7117        callback {std::string str = select_binary_pathname(progdefaults.auto_prog3_pathname);
7118txt_auto_prog3_pathname->value(str.c_str());
7119progdefaults.auto_prog3_pathname = str;
7120progdefaults.changed = true;}
7121        tooltip {Locate program \#3 executable} xywh {599 286 70 24}
7122      }
7123      Fl_Check_Button btn_flrig_auto_enable {
7124        label {Enable
7125-}
7126        callback {progdefaults.flrig_auto_enable = o->value();
7127progdefaults.changed = true;}
7128        tooltip {Enable this entry when fldigi first starts} xywh {679 60 19 15} down_box DOWN_BOX align 1
7129        code0 {o->value(progdefaults.flrig_auto_enable);}
7130      }
7131      Fl_Check_Button btn_flamp_auto_enable {
7132        callback {progdefaults.flamp_auto_enable = o->value();
7133progdefaults.changed = true;}
7134        tooltip {Enable this entry when fldigi first starts} xywh {679 98 23 15} down_box DOWN_BOX
7135        code0 {o->value(progdefaults.flamp_auto_enable);}
7136      }
7137      Fl_Check_Button btn_flnet_auto_enable {
7138        callback {progdefaults.flnet_auto_enable = o->value();
7139progdefaults.changed = true;}
7140        tooltip {Enable this entry when fldigi first starts} xywh {679 136 23 15} down_box DOWN_BOX
7141        code0 {o->value(progdefaults.flnet_auto_enable);}
7142      }
7143      Fl_Check_Button btn_fllog_auto_enable {
7144        callback {progdefaults.fllog_auto_enable = o->value();
7145progdefaults.changed = true;}
7146        tooltip {Enable this entry when fldigi first starts} xywh {679 175 23 15} down_box DOWN_BOX
7147        code0 {o->value(progdefaults.fllog_auto_enable);}
7148      }
7149      Fl_Check_Button btn_prog1_auto_enable {
7150        callback {progdefaults.prog1_auto_enable = o->value();
7151progdefaults.changed = true;}
7152        tooltip {Enable this entry when fldigi first starts} xywh {679 213 23 15} down_box DOWN_BOX
7153        code0 {o->value(progdefaults.prog1_auto_enable);}
7154      }
7155      Fl_Check_Button btn_prog2_auto_enable {
7156        callback {progdefaults.prog2_auto_enable = o->value();
7157progdefaults.changed = true;}
7158        tooltip {Enable this entry when fldigi first starts} xywh {679 251 23 15} down_box DOWN_BOX
7159        code0 {o->value(progdefaults.prog2_auto_enable);}
7160      }
7161      Fl_Check_Button btn_prog3_auto_enable {
7162        callback {progdefaults.prog3_auto_enable = o->value();
7163progdefaults.changed = true;}
7164        tooltip {Enable this entry when fldigi first starts} xywh {679 290 23 15} down_box DOWN_BOX
7165        code0 {o->value(progdefaults.prog3_auto_enable);}
7166      }
7167      Fl_Button btn_test_flrig {
7168        label Test
7169        callback {start_process(progdefaults.auto_flrig_pathname);}
7170        tooltip {Start flrig} xywh {709 56 70 24}
7171      }
7172      Fl_Button btn_test_flamp {
7173        label Test
7174        callback {start_process(progdefaults.auto_flamp_pathname);}
7175        tooltip {Start flamp} xywh {709 94 70 24}
7176      }
7177      Fl_Button btn_test_flnet {
7178        label Test
7179        callback {start_process(progdefaults.auto_flnet_pathname);}
7180        tooltip {Start flnet} xywh {709 132 70 24}
7181      }
7182      Fl_Button btn_test_fllog {
7183        label Test
7184        callback {start_process(progdefaults.auto_fllog_pathname);}
7185        tooltip {Start fllog} xywh {709 171 70 24}
7186      }
7187      Fl_Button btn_test_prog1 {
7188        label Test
7189        callback {start_process(progdefaults.auto_prog1_pathname);}
7190        tooltip {Start prog1} xywh {709 209 70 24}
7191      }
7192      Fl_Button btn_test_prog2 {
7193        label Test
7194        callback {start_process(progdefaults.auto_prog2_pathname);}
7195        tooltip {Start prog2} xywh {709 247 70 24}
7196      }
7197      Fl_Button btn_test_prog3 {
7198        label Test
7199        callback {start_process(progdefaults.auto_prog3_pathname);}
7200        tooltip {Start prog3} xywh {709 286 70 24}
7201      }
7202    }
7203    Fl_Group {} {
7204      label {Misc/CPU}
7205      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7206      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/CPU"));}
7207      code1 {config_pages.push_back(p);}
7208      code2 {tab_tree->add(_("Misc/CPU"));}
7209    } {
7210      Fl_Check_Button chkSlowCpu {
7211        label {Slow CPU (less than 700MHz)}
7212        callback {progdefaults.slowcpu = o->value();
7213progdefaults.changed = true;}
7214        tooltip {Enable if you're computer does not decode properly} xywh {305 65 225 20} down_box DOWN_BOX
7215        code0 {o->value(progdefaults.slowcpu);}
7216      }
7217    }
7218    Fl_Group {} {
7219      label {TCP-IP sessions}
7220      callback {btnDisable_p2p_io_widgets->value(1);}
7221      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7222      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/TCP-IP sessions"));}
7223      code1 {config_pages.push_back(p);}
7224      code2 {tab_tree->add(_("Misc/TCP-IP sessions"));}
7225    } {
7226      Fl_Group {} {open
7227        xywh {205 18 588 102} box ENGRAVED_BOX align 21
7228      } {
7229        Fl_Check_Button btnDisable_p2p_io_widgets {
7230          label Lock user_data_type long
7231          callback {progStatus.ip_lock = o->value();
7232if(o->value())
7233	disable_config_p2p_io_widgets();
7234else
7235	enable_config_p2p_io_widgets();
7236kiss_io_set_button_state(0);}
7237          tooltip {Allow/Disallow Changes} xywh {211 96 85 20} down_box DOWN_BOX
7238          code0 {o->value(progStatus.ip_lock);}
7239        }
7240        Fl_Check_Button btnEnable_arq {
7241          label {Enable ARQ}
7242          callback {if(o->value()) {
7243	enable_arq();
7244}
7245
7246progdefaults.changed = true;}
7247          tooltip {Used For PSKMail and FLDIGI Suite of Programs} xywh {295 96 115 20} type Radio down_box DOWN_BOX
7248          code0 {if(progStatus.data_io_enabled == ARQ_IO) o->value(true);}
7249          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7250        }
7251        Fl_Check_Button btnEnable_kiss {
7252          label {Enable KISS}
7253          callback {if(o->value()) {
7254	enable_kiss();
7255}
7256progdefaults.changed = true;}
7257          tooltip {Used for BPQ32} xywh {420 96 115 20} type Radio down_box DOWN_BOX
7258          code0 {if(progStatus.data_io_enabled == KISS_IO) o->value(true);}
7259          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7260        }
7261        Fl_Box {} {
7262          label {Enable ARQ for programs that support TCP and FLDIGI ARQ protocol.
7263Enable KISS for programs that supports TCP/UDP and TNC-2 KISS protocol.
7264Only one interface (ARQ/KISS) can be active at any given time.
7265KISS/ARQ/XML Addr/Port changes require program restart.}
7266          xywh {207 21 582 72}
7267        }
7268      }
7269      Fl_Group {} {
7270        label KISS open
7271        xywh {205 122 588 80} box ENGRAVED_FRAME align 21
7272      } {
7273        Fl_Input txtKiss_ip_address {
7274          label Addr
7275          callback {progStatus.kiss_address = o->value();
7276progdefaults.kiss_address = o->value();
7277progdefaults.changed = true;}
7278          tooltip {IP Address for KISS interface
7279IP Address format: nnn.nnn.nnn.nnn
7280or name: i.e. localhost} xywh {254 175 230 22} align 8 when 1
7281          code0 {txtKiss_ip_address->labelsize(FL_NORMAL_SIZE);}
7282          code1 {o->value(progdefaults.kiss_address.c_str());}
7283          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7284          class Fl_Input2
7285        }
7286        Fl_Input txtKiss_ip_io_port_no {
7287          label {I/O}
7288          callback {progStatus.kiss_io_port = o->value();
7289progdefaults.kiss_io_port = o->value();
7290progdefaults.changed = true;}
7291          tooltip {IP Address Port Number} xywh {529 175 55 22} align 8 when 1
7292          code0 {txtKiss_ip_io_port_no->labelsize(FL_NORMAL_SIZE);}
7293          code1 {o->value(progdefaults.kiss_io_port.c_str());}
7294          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7295          class Fl_Input2
7296        }
7297        Fl_Input txtKiss_ip_out_port_no {
7298          label O
7299          callback {progStatus.kiss_out_port = o->value();
7300progdefaults.kiss_out_port = o->value();
7301progdefaults.changed = true;}
7302          tooltip {Output port number when same IP address used} xywh {621 175 55 22} align 8 when 1
7303          code0 {txtKiss_ip_out_port_no->labelsize(FL_NORMAL_SIZE);}
7304          code1 {o->value(progdefaults.kiss_out_port.c_str());}
7305          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7306          class Fl_Input2
7307        }
7308        Fl_Check_Button btnEnable_dual_port {
7309          label DP
7310          callback {if(o->value()) {
7311	progStatus.kiss_dual_port_enabled = true;
7312	progdefaults.kiss_dual_port_enabled = true;
7313}
7314else {
7315	progStatus.kiss_dual_port_enabled = false;
7316	progdefaults.kiss_dual_port_enabled = false;
7317}
7318
7319progdefaults.changed = true;}
7320          tooltip {Enable when both programs are using the same IP address} xywh {330 126 140 20} down_box DOWN_BOX
7321          code0 {if(progdefaults.kiss_dual_port_enabled) o->value(true); else o->value(false);}
7322          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7323        }
7324        Fl_Button btn_restart_kiss {
7325          label Restart
7326          callback {//restart_kiss_server();}
7327          xywh {705 149 82 22}
7328          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7329        }
7330        Fl_Button btn_connect_kiss_io {
7331          label Start
7332          callback {connect_to_kiss_io(true);}
7333          tooltip {Return KISS TCP IO connection to a Listening state} xywh {617 149 82 22}
7334          code0 {(progStatus.ip_lock || !progdefaults.kiss_tcp_io) ? o->deactivate() : o->activate();}
7335        }
7336        Fl_Button btnDefault_kiss_ip {
7337          label Default
7338          callback {set_ip_to_default(KISS_IO);
7339progdefaults.changed = true;}
7340          tooltip {Returns IP Address and port
7341number to the default value.} xywh {705 175 82 22}
7342          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7343        }
7344        Fl_Check_Button btnKissTCPIO {
7345          label {TCP/IP}
7346          callback {if(o->value()) {
7347	progStatus.kiss_tcp_io = true;
7348	progdefaults.kiss_tcp_io = true;
7349} else {
7350	progStatus.kiss_tcp_io = false;
7351	progdefaults.kiss_tcp_io = false;
7352}
7353kiss_io_set_button_state(0);
7354progdefaults.changed = true;}
7355          tooltip {Check to enable TCP/IP IO Connection} xywh {416 126 70 20} down_box DOWN_BOX
7356          code0 {if(progdefaults.kiss_tcp_io) o->value(true); else o->value(false);}
7357          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7358        }
7359        Fl_Check_Button btnKissUDPIO {
7360          label {UDP/IP}
7361          callback {if(o->value()) {
7362	progStatus.kiss_tcp_io = false;
7363	progdefaults.kiss_tcp_io = false;
7364} else {
7365	progStatus.kiss_tcp_io = true;
7366	progdefaults.kiss_tcp_io = true;
7367}
7368
7369kiss_io_set_button_state(0);
7370progdefaults.changed = true;}
7371          tooltip {Check to enable UDP/IP IO} xywh {254 126 70 20} down_box DOWN_BOX
7372          code0 {if(progdefaults.kiss_tcp_io) o->value(true); else o->value(false);}
7373          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7374        }
7375        Fl_Check_Button btnKissTCPListen {
7376          label {Listen / Bind}
7377          callback {if(o->value()) {
7378	progStatus.kiss_tcp_listen = true;
7379	progdefaults.kiss_tcp_listen = true;
7380} else {
7381	progStatus.kiss_tcp_listen = false;
7382	progdefaults.kiss_tcp_listen = false;
7383}
7384
7385progdefaults.changed = true;}
7386          tooltip {Monitor for TCP connection.} xywh {500 126 95 20} down_box DOWN_BOX
7387          code0 {if(progStatus.kiss_tcp_listen) o->value(true); else o->value(false);}
7388          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7389        }
7390        Fl_Check_Button btnEnable_7bit_modem_inhibit {
7391          label {Inhibit 7bit Modem}
7392          callback {if(o->value()) {
7393	progStatus.kiss_io_modem_change_inhibit = true;
7394	progdefaults.kiss_io_modem_change_inhibit = true;
7395}
7396else {
7397	progStatus.kiss_io_modem_change_inhibit = false;
7398	progdefaults.kiss_io_modem_change_inhibit = false;
7399}
7400
7401progdefaults.changed = true;}
7402          tooltip {Inhibit 7 bit modem change notice on user or RSID reception} xywh {254 149 140 20} down_box DOWN_BOX
7403          code0 {if(progdefaults.kiss_io_modem_change_inhibit) o->value(true); else o->value(false);}
7404          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7405        }
7406        Fl_Check_Button btnEnable_auto_connect {
7407          label {Auto Connect / Retry}
7408          callback {if(o->value()) {
7409	progdefaults.tcp_udp_auto_connect = true;
7410}
7411else {
7412	progdefaults.tcp_udp_auto_connect = false;
7413}
7414
7415progdefaults.changed = true;}
7416          tooltip {Connect to host program on FLDIGI start up} xywh {416 149 155 20} down_box DOWN_BOX
7417          code0 {if(progdefaults.tcp_udp_auto_connect) o->value(true); else o->value(false);}
7418          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7419        }
7420        Fl_Check_Button btnEnable_ax25_decode {
7421          label {AX25 Decode}
7422          callback {if(o->value()) {
7423	progStatus.ax25_decode_enabled = true;
7424	progdefaults.ax25_decode_enabled = true;
7425}
7426else {
7427	progStatus.ax25_decode_enabled = false;
7428	progdefaults.ax25_decode_enabled = false;
7429}
7430
7431progdefaults.changed = true;}
7432          tooltip {Decode AX25 Packets into human readable form} xywh {610 126 115 20} down_box DOWN_BOX
7433          code0 {if(progdefaults.ax25_decode_enabled) o->value(true); else o->value(false);}
7434          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7435        }
7436      }
7437      Fl_Group {} {
7438        label ARQ open
7439        xywh {205 203 588 35} box ENGRAVED_FRAME align 21
7440      } {
7441        Fl_Input txtArq_ip_address {
7442          label Addr
7443          callback {progdefaults.arq_address = o->value();
7444progdefaults.changed = true;}
7445          tooltip {IP Address for ARQ interface
7446IP Address format: nnn.nnn.nnn.nnn
7447or name: i.e. localhost} xywh {255 207 230 22} align 8 when 1
7448          code0 {o->labelsize(FL_NORMAL_SIZE);}
7449          code1 {o->value(progdefaults.arq_address.c_str());}
7450          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7451          class Fl_Input2
7452        }
7453        Fl_Input txtArq_ip_port_no {
7454          label Port
7455          callback {progdefaults.arq_port = o->value();
7456progdefaults.changed = true;}
7457          tooltip {IP Address Port Number} xywh {529 207 55 22} align 8 when 1
7458          code0 {o->labelsize(FL_NORMAL_SIZE);}
7459          code1 {o->value(progdefaults.arq_port.c_str());}
7460          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7461          class Fl_Input2
7462        }
7463        Fl_Button btnDefault_arq_ip {
7464          label Default
7465          callback {set_ip_to_default(ARQ_IO);
7466progdefaults.changed = true;}
7467          tooltip {Returns IP Address and port
7468number to the default value.} xywh {624 207 73 22}
7469          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7470        }
7471        Fl_Button btn_restart_arq {
7472          label Restart
7473          callback {//arq_restart();}
7474          xywh {704 207 82 22}
7475          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7476        }
7477      }
7478      Fl_Group {} {
7479        label XML open
7480        xywh {205 239 588 35} box ENGRAVED_FRAME align 21
7481      } {
7482        Fl_Button btnDefault_xmlrpc_ip {
7483          label Default
7484          callback {set_ip_to_default(XMLRPC_IO);
7485progdefaults.changed = true;}
7486          tooltip {Returns IP Address and port
7487number to the default value.} xywh {624 243 73 22}
7488          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7489        }
7490        Fl_Input txtXmlrpc_ip_address {
7491          label Addr
7492          callback {progdefaults.xmlrpc_address = o->value();
7493progdefaults.changed = true;}
7494          tooltip {IP Address for XMLRPC interface
7495IP Address format: nnn.nnn.nnn.nnn
7496or name: i.e. localhost} xywh {255 243 230 22} align 8 when 1
7497          code0 {o->labelsize(FL_NORMAL_SIZE);}
7498          code1 {o->value(progdefaults.xmlrpc_address.c_str());}
7499          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7500          class Fl_Input2
7501        }
7502        Fl_Input txtXmlrpc_ip_port_no {
7503          label Port
7504          callback {progdefaults.xmlrpc_port = o->value();
7505progdefaults.changed = true;}
7506          tooltip {IP Address Port Number} xywh {529 243 55 22} align 8 when 1
7507          code0 {o->labelsize(FL_NORMAL_SIZE);}
7508          code1 {o->value(progdefaults.xmlrpc_port.c_str());}
7509          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7510          class Fl_Input2
7511        }
7512        Fl_Button btn_restart_xml {
7513          label Restart
7514          callback {//restart_xml_server();}
7515          xywh {704 243 82 22}
7516          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7517        }
7518      }
7519      Fl_Group {} {
7520        label flrig open
7521        xywh {205 277 588 30} box ENGRAVED_FRAME align 21
7522      } {
7523        Fl_Button btnDefault_flrig_ip {
7524          label Default
7525          callback {set_ip_to_default(FLRIG_IO);
7526progdefaults.changed = true;}
7527          tooltip {Returns IP Address and port
7528number to the default value.} xywh {624 282 73 25}
7529          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7530        }
7531        Fl_Input txt_flrig_ip_address {
7532          label Addr
7533          callback {progdefaults.flrig_ip_address = o->value();
7534progdefaults.changed = true;}
7535          tooltip {IP Address for flrig interface
7536IP Address format: nnn.nnn.nnn.nnn
7537or name: i.e. localhost} xywh {255 282 230 22} align 8 when 1
7538          code0 {o->labelsize(FL_NORMAL_SIZE);}
7539          code1 {o->value(progdefaults.flrig_ip_address.c_str());}
7540          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7541          class Fl_Input2
7542        }
7543        Fl_Input txt_flrig_ip_port {
7544          label Port
7545          callback {progdefaults.flrig_ip_port = o->value();
7546progdefaults.changed = true;}
7547          tooltip {IP Address Port Number} xywh {529 282 55 22} align 8 when 1
7548          code0 {o->labelsize(FL_NORMAL_SIZE);}
7549          code1 {o->value(progdefaults.flrig_ip_port.c_str());}
7550          code2 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7551          class Fl_Input2
7552        }
7553        Fl_Button btn_reconnect_flrig_server {
7554          label Reconnect
7555          callback {reconnect_to_flrig();}
7556          xywh {704 282 82 22}
7557          code0 {\#include "rigsupport.h"}
7558          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7559        }
7560      }
7561      Fl_Group {} {
7562        label fllog open
7563        xywh {205 308 588 36} box ENGRAVED_FRAME align 21
7564      } {
7565        Fl_Input txt_fllog_ip_address {
7566          label Addr
7567          callback {progdefaults.xmllog_address = o->value();}
7568          tooltip {IP Address for fllog interface
7569IP Address format: nnn.nnn.nnn.nnn
7570or name: i.e. localhost} xywh {255 313 230 22} align 8
7571          code0 {o->value(progdefaults.xmllog_address.c_str());}
7572          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7573        }
7574        Fl_Input txt_fllog_ip_port {
7575          label Port
7576          callback {progdefaults.xmllog_port = o->value();}
7577          tooltip {IP Address Port Number} xywh {529 313 55 22} align 8
7578          code0 {o->value(progdefaults.xmllog_port.c_str());}
7579          code1 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7580        }
7581        Fl_Button btn_reconnect_log_server {
7582          label Reconnect
7583          callback {progdefaults.xml_logbook = true;
7584progdefaults.changed = true;
7585connect_to_log_server();}
7586          xywh {704 313 82 22}
7587          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7588        }
7589        Fl_Button btnDefault_fllog_ip {
7590          label Default
7591          callback {set_ip_to_default(FLLOG_IO);
7592progdefaults.changed = true;}
7593          tooltip {Returns IP Address and port
7594number to the default value.} xywh {624 313 73 22}
7595          code0 {progStatus.ip_lock ? o->deactivate() : o->activate();}
7596        }
7597      }
7598    }
7599    Fl_Group {} {
7600      label {NBEMS interface}
7601      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7602      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/NBEMS interface"));}
7603      code1 {config_pages.push_back(p);}
7604      code2 {tab_tree->add(_("Misc/NBEMS interface"));}
7605    } {
7606      Fl_Group {} {
7607        label {NBEMS data file interface} open
7608        xywh {251 35 500 75} box ENGRAVED_FRAME align 21
7609      } {
7610        Fl_Check_Button chkAutoExtract {
7611          label Enable
7612          callback {progdefaults.autoextract = o->value();
7613progdefaults.changed = true;}
7614          tooltip {Extract files for use with external "wrap / flmsg" program} xywh {305 66 75 20} down_box DOWN_BOX
7615          code0 {o->value(progdefaults.autoextract);}
7616        }
7617        Fl_Check_Button chk_open_wrap_folder {
7618          label {Open message folder}
7619          callback {progdefaults.open_nbems_folder = o->value();
7620progdefaults.changed = true;}
7621          tooltip {Opens NBEMS file folder upon successful capture} xywh {511 66 146 20} down_box DOWN_BOX
7622          code0 {o->value(progdefaults.open_nbems_folder);}
7623        }
7624      }
7625      Fl_Group {} {
7626        label {Reception of flmsg files} open
7627        xywh {251 111 500 199} box ENGRAVED_FRAME align 21
7628      } {
7629        Fl_Check_Button chk_open_flmsg {
7630          label {Open with flmsg}
7631          callback {progdefaults.open_flmsg = o->value();
7632progdefaults.changed = true;}
7633          tooltip {Open message with flmsg} xywh {305 211 136 20} down_box DOWN_BOX
7634          code0 {o->value(progdefaults.open_flmsg);}
7635        }
7636        Fl_Check_Button chk_open_flmsg_print {
7637          label {Open in browser}
7638          callback {progdefaults.open_flmsg_print = o->value();
7639progdefaults.changed = true;}
7640          tooltip {Open file with default browser} xywh {511 211 136 20} down_box DOWN_BOX
7641          code0 {o->value(progdefaults.open_flmsg_print);}
7642        }
7643        Fl_Input txt_flmsg_pathname {
7644          label {flmsg:}
7645          callback {progdefaults.flmsg_pathname = o->value();
7646progdefaults.changed = true;}
7647          tooltip {Enter full path-filename for flmsg} xywh {305 241 330 24} when 1
7648          code0 {o->value(progdefaults.flmsg_pathname.c_str());}
7649          class Fl_Input2
7650        }
7651        Fl_Button btn_select_flmsg {
7652          label {Locate flmsg}
7653          callback {select_flmsg_pathname();}
7654          tooltip {Locate flmsg executable} xywh {642 241 100 24}
7655        }
7656        Fl_Value_Slider sldr_extract_timeout {
7657          label {Timeout (secs)}
7658          callback {progdefaults.extract_timeout=o->value();
7659progdefaults.changed=true;}
7660          tooltip {Extract times out after NN seconds of inactivity.} xywh {271 279 364 21} type {Horz Knob} color 54 selection_color 0 align 8 minimum 1 maximum 20 step 0.5 value 10 textsize 14
7661          code0 {o->value(progdefaults.extract_timeout);}
7662        }
7663        Fl_Group {} {
7664          label {Selection of transfer direct takes precedence
7665over all other flmsg reception settings} open
7666          xywh {256 130 490 76} box ENGRAVED_FRAME align 17
7667        } {
7668          Fl_Check_Button chk_transfer__to_open_flmsg {
7669            label {Transfer direct to executing flmsg}
7670            callback {progdefaults.flmsg_transfer_direct = o->value();
7671progdefaults.changed = true;}
7672            tooltip {Send data stream directly to executing flmsg} xywh {361 174 271 20} down_box DOWN_BOX
7673            code0 {o->value(progdefaults.flmsg_transfer_direct);}
7674          }
7675        }
7676      }
7677    }
7678    Fl_Group {} {
7679      label {Misc/Sweet Spot}
7680      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7681      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/Sweet Spot"));}
7682      code1 {config_pages.push_back(p);}
7683      code2 {tab_tree->add(_("Misc/Sweet Spot"));}
7684    } {
7685      Fl_Group {} {open
7686        xywh {253 70 490 75} box ENGRAVED_FRAME align 21
7687      } {
7688        Fl_Value_Input valCWsweetspot {
7689          label CW
7690          callback {progdefaults.CWsweetspot=o->value();
7691progdefaults.changed = true;}
7692          tooltip {Default CW tracking point} xywh {290 81 65 20} minimum 200 maximum 4000 step 1 value 1000
7693          code0 {o->value(progdefaults.CWsweetspot);}
7694          code1 {o->labelsize(FL_NORMAL_SIZE);}
7695          class Fl_Value_Input2
7696        }
7697        Fl_Value_Input valRTTYsweetspot {
7698          label RTTY
7699          callback {progdefaults.RTTYsweetspot=o->value();
7700progdefaults.changed = true;}
7701          tooltip {Default RTTY tracking point} xywh {468 81 65 20} minimum 200 maximum 4000 step 1 value 1000
7702          code0 {o->value(progdefaults.RTTYsweetspot);}
7703          code1 {o->labelsize(FL_NORMAL_SIZE);}
7704          class Fl_Value_Input2
7705        }
7706        Fl_Value_Input valPSKsweetspot {
7707          label {PSK et al.}
7708          callback {progdefaults.PSKsweetspot=o->value();
7709progdefaults.changed = true;}
7710          tooltip {Default for all other modems} xywh {668 81 65 20} minimum 200 maximum 4000 step 1 value 1000
7711          code0 {o->value(progdefaults.PSKsweetspot);}
7712          code1 {o->labelsize(FL_NORMAL_SIZE);}
7713          class Fl_Value_Input2
7714        }
7715        Fl_Check_Button btnStartAtSweetSpot {
7716          label {Always start new modems at these frequencies}
7717          callback {progdefaults.StartAtSweetSpot = o->value();
7718progdefaults.changed = true;}
7719          tooltip {ON - start at default
7720OFF - keep current wf cursor position} xywh {263 111 348 20} down_box DOWN_BOX value 1
7721          code0 {o->value(progdefaults.StartAtSweetSpot);}
7722        }
7723      }
7724      Fl_Group {} {
7725        label {K3 A1A configuation} open
7726        xywh {253 150 490 60} box ENGRAVED_FRAME align 21
7727      } {
7728        Fl_Check_Button btnCWIsLSB {
7729          label {CW is LSB}
7730          callback {progdefaults.CWIsLSB=o->value();
7731progdefaults.changed=true;}
7732          tooltip {Select this for Elecraft K3
7733Other radios should not need it.} xywh {468 171 70 15} down_box DOWN_BOX
7734          code0 {o->value(progdefaults.CWIsLSB);}
7735        }
7736      }
7737    }
7738    Fl_Group {} {
7739      label {Misc/Rx text capture}
7740      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7741      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/Rx text capture"));}
7742      code1 {config_pages.push_back(p);}
7743      code2 {tab_tree->add(_("Misc/Rx text capture"));}
7744    } {
7745      Fl_Group grpTalker {
7746        label {Talker Socket (MS only)} open
7747        xywh {252 107 490 73} box ENGRAVED_FRAME align 21
7748      } {
7749        Fl_Light_Button btnConnectTalker {
7750          label Talker
7751          callback {if (o->value()) open_talker();
7752else close_talker();}
7753          xywh {278 127 74 20} selection_color 60
7754          code0 {extern void open_talker();}
7755          code1 {extern void close_talker();}
7756        }
7757        Fl_Box {} {
7758          label {Connect/disconnect to Talker socket server}
7759          xywh {357 127 345 20} align 20
7760        }
7761        Fl_Check_Button btn_auto_talk {
7762          label {Auto connect when fldigi opens (server must be up)}
7763          callback {progdefaults.auto_talk = o->value();}
7764          xywh {278 155 391 15} down_box DOWN_BOX
7765          code0 {o->value(progdefaults.auto_talk);}
7766        }
7767      }
7768      Fl_Group {} {
7769        label {Capture rx text to external file} open
7770        xywh {252 47 490 56} box ENGRAVED_FRAME align 21
7771      } {
7772        Fl_Check_Button chkRxStream {
7773          label {Enable rx text stream}
7774          callback {progdefaults.speak = o->value();
7775progdefaults.changed = true;}
7776          tooltip {Send rx text to file: textout.txt} xywh {278 74 175 20} down_box DOWN_BOX
7777          code0 {o->value(progdefaults.speak);}
7778        }
7779      }
7780    }
7781    Fl_Group {} {
7782      label {Misc/PSK reporter}
7783      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7784      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/PSK reporter"));}
7785      code1 {config_pages.push_back(p);}
7786      code2 {tab_tree->add(_("Misc/PSK reporter"));}
7787    } {
7788      Fl_Check_Button btnPSKRepAuto {
7789        label {Automatically spot callsigns in decoded text}
7790        callback {progdefaults.pskrep_auto = o->value();
7791btnPSKRepInit->labelcolor(FL_RED);
7792btnPSKRepInit->redraw_label();
7793progdefaults.changed = true;}
7794        tooltip {Parse all incoming text} xywh {252 65 324 20} down_box DOWN_BOX
7795        code0 {btnPSKRepAuto->value(progdefaults.pskrep_auto);}
7796      }
7797      Fl_Check_Button btnPSKRepLog {
7798        label {Send reception report when logging a QSO}
7799        callback {progdefaults.pskrep_log = o->value();
7800btnPSKRepInit->labelcolor(FL_RED);
7801btnPSKRepInit->redraw_label();
7802progdefaults.changed = true;}
7803        tooltip {Send report only when QSO is logged} xywh {252 96 327 20} down_box DOWN_BOX
7804        code0 {btnPSKRepLog->value(progdefaults.pskrep_log);}
7805      }
7806      Fl_Check_Button btnPSKRepQRG {
7807        label {Report rig frequency (enable only if you have rig control!)}
7808        callback {progdefaults.pskrep_qrg = o->value();
7809progdefaults.changed = true;}
7810        tooltip {Include the transmit frequency} xywh {252 128 416 20} down_box DOWN_BOX
7811        code0 {btnPSKRepQRG->value(progdefaults.pskrep_qrg);}
7812      }
7813      Fl_Check_Button btn_report_when_visible {
7814        label {Disable spotting when signal browser(s) are not visible.}
7815        callback {progdefaults.report_when_visible = o->value();
7816progdefaults.changed = true;}
7817        tooltip {Check to reduce CPU load in PSK and RTTY modes.} xywh {252 160 416 20} down_box DOWN_BOX value 1
7818        code0 {o->value(progdefaults.report_when_visible);}
7819      }
7820      Fl_Check_Button btn_pskrep_autostart {
7821        label {Log on to pskrep when starting fldigi}
7822        callback {progdefaults.pskrep_autostart = o->value();
7823progdefaults.changed = true;}
7824        tooltip {Automatically start psk reporter socket connection} xywh {252 192 291 20} down_box DOWN_BOX
7825        code0 {o->value(progdefaults.pskrep_autostart);}
7826      }
7827      Fl_Box box_connected_to_pskrep {
7828        label Connected
7829        xywh {562 193 18 18} box DIAMOND_DOWN_BOX color 7 align 8
7830      }
7831      Fl_Input inpPSKRepHost {
7832        label {Host:}
7833        callback {progdefaults.pskrep_host = o->value();
7834btnPSKRepInit->labelcolor(FL_RED);
7835btnPSKRepInit->redraw_label();
7836progdefaults.changed = true;}
7837        tooltip {To whom the connection is made} xywh {295 230 220 24} when 1
7838        code0 {inpPSKRepHost->value(progdefaults.pskrep_host.c_str());}
7839        code1 {inpPSKRepHost->labelsize(FL_NORMAL_SIZE);}
7840        class Fl_Input2
7841      }
7842      Fl_Input inpPSKRepPort {
7843        label {Port:}
7844        callback {progdefaults.pskrep_port = o->value();
7845btnPSKRepInit->labelcolor(FL_RED);
7846btnPSKRepInit->redraw_label();
7847progdefaults.changed = true;}
7848        tooltip {Using UDP port \#} xywh {664 230 60 24} when 1
7849        code0 {inpPSKRepPort->value(progdefaults.pskrep_port.c_str());}
7850        code1 {inpPSKRepPort->labelsize(FL_NORMAL_SIZE);}
7851        class Fl_Input2
7852      }
7853      Fl_Button btnPSKRepInit {
7854        label Initialize
7855        callback {pskrep_stop();
7856if (!pskrep_start()) {
7857    boxPSKRepMsg->copy_label(pskrep_error());
7858    progdefaults.usepskrep = false;
7859    box_connected_to_pskrep->color(FL_WHITE);
7860    box_connected_to_pskrep->redraw();
7861} else {
7862    boxPSKRepMsg->label(0);
7863    o->labelcolor(FL_FOREGROUND_COLOR);
7864    progdefaults.usepskrep = true;
7865    box_connected_to_pskrep->color(FL_GREEN);
7866    box_connected_to_pskrep->redraw();
7867}}
7868        tooltip {Initialize the socket client} xywh {644 275 80 24}
7869      }
7870      Fl_Box boxPSKRepMsg {
7871        label {<PSK Reporter error message>}
7872        xywh {254 259 300 48} labelfont 2
7873        code0 {boxPSKRepMsg->label(0);}
7874      }
7875    }
7876    Fl_Group {} {
7877      label {Misc/DTMF}
7878      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7879      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/DTMF"));}
7880      code1 {config_pages.push_back(p);}
7881      code2 {tab_tree->add(_("Misc/DTMF"));}
7882    } {
7883      Fl_Check_Button chkDTMFdecode {
7884        label {Decode DTMF tones}
7885        callback {progdefaults.DTMFdecode = o->value();}
7886        tooltip {Decode received DTMF tones} xywh {372 79 175 20} down_box DOWN_BOX
7887        code0 {o->value(progdefaults.DTMFdecode);}
7888      }
7889    }
7890    Fl_Group {} {
7891      label {Misc/KML}
7892      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
7893      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/KML"));}
7894      code1 {config_pages.push_back(p);}
7895      code2 {tab_tree->add(_("Misc/KML"));}
7896    } {
7897      Fl_Input btnKmlSaveDir {
7898        label {KML files directory}
7899        callback {progdefaults.kml_save_dir=o->value();
7900progdefaults.changed = true;
7901kml_init();}
7902        tooltip {Where generated KML documents are stored.} xywh {232 47 390 24} align 69
7903        code0 {o->value(progdefaults.kml_save_dir.c_str());}
7904      }
7905      Fl_Input inputKmlRootFile {
7906        label {KML root file}
7907        xywh {231 91 300 24} align 5
7908        code0 {o->value("fldigi.kml");}
7909      }
7910      Fl_Counter cntKmlMergeDistance {
7911        label {Minimum distance for splitting aliases (Meters)}
7912        callback {progdefaults.kml_merge_distance = o->value();
7913progdefaults.changed = true;
7914kml_init();}
7915        tooltip {Minimum distance for splitting alias nodes (Meters)} xywh {232 127 100 24} align 8 minimum 0 maximum 100000 step 10 value 1000
7916        code0 {o->value(progdefaults.kml_merge_distance);}
7917        code1 {o->lstep(1000);}
7918      }
7919      Fl_Counter cntKmlRetentionTime {
7920        label {Data retention time, in hours (0 for no limit)}
7921        callback {progdefaults.kml_retention_time = o->value();
7922progdefaults.changed = true;
7923kml_init();}
7924        tooltip {Number of hours data is kept for each node. Zero means keeping everything.} xywh {231 163 100 24} align 8 minimum 0 maximum 500 step 1
7925        code0 {o->value(progdefaults.kml_retention_time);}
7926        code1 {o->lstep(24);}
7927      }
7928      Fl_Spinner cntKmlRefreshInterval {
7929        label {KML refresh interval (seconds)}
7930        callback {progdefaults.kml_refresh_interval = (int)(o->value());
7931progdefaults.changed = true;
7932kml_init();}
7933        tooltip {Refresh time interval written in KML file (Seconds)} xywh {230 199 50 24} align 8 value 10
7934        code0 {o->minimum(1); o->maximum(3600); o->step(1);}
7935        code1 {o->value(progdefaults.kml_refresh_interval);}
7936        code2 {o->labelsize(FL_NORMAL_SIZE);}
7937        class Fl_Spinner2
7938      }
7939      Fl_Group listbox_kml_balloon_style {
7940        label {KML balloon display style}
7941        callback {progdefaults.kml_balloon_style = o->index();
7942progdefaults.changed = true;
7943kml_init();}
7944        tooltip {KML balloon in plain text, or HTML, in plain tables or matrices.} xywh {230 235 201 24} box DOWN_BOX color 7 align 8 when 1
7945        code0 {o->add("Plain text|HTML tables|Single HTML matrix");o->index(progdefaults.kml_balloon_style);}
7946        code1 {o->labelsize(FL_NORMAL_SIZE);}
7947        class Fl_ListBox
7948      } {}
7949      Fl_Input btnKmlCommand {
7950        label {Command run on KML creation}
7951        callback {progdefaults.kml_command=o->value();
7952progdefaults.changed = true;
7953kml_init();}
7954        tooltip {Command started when KML files are generated. Subprocesses are started once, and restarted if needed.} xywh {230 271 246 24} align 72
7955        code0 {o->value(progdefaults.kml_command.c_str());}
7956      }
7957      Fl_Button btlTestKmlCommand {
7958        label {Test command}
7959        callback {KmlServer::SpawnProcess();}
7960        tooltip {Execute command on KML files.} xywh {230 307 191 24}
7961      }
7962      Fl_Button btnSelectKmlDestDir {
7963        label {Change dir...}
7964        callback {Fl_File_Chooser *fc = new Fl_File_Chooser(".",NULL,Fl_File_Chooser::DIRECTORY,"Input File");
7965fc->callback(KmlDestDirSet);
7966fc->show();}
7967        tooltip {Choose directory to store KML documents} xywh {631 47 101 24}
7968      }
7969      Fl_Button btlPurge {
7970        label {Cleanup KML data now !}
7971        callback {KmlServer::GetInstance()->Reset();}
7972        tooltip {Cleanups KML documents, empties Google Earth display.} xywh {542 91 190 24}
7973      }
7974      Fl_Check_Button btnKmlPurgeOnStartup {
7975        label {Cleanup on startup}
7976        callback {progdefaults.kml_purge_on_startup = o->value();
7977progdefaults.changed = true;}
7978        tooltip {Empties KML documents when starting program.} xywh {528 203 172 15} down_box DOWN_BOX
7979        code0 {o->value(progdefaults.kml_purge_on_startup);}
7980      }
7981      Fl_Group {} {open
7982        xywh {475 301 310 40} box ENGRAVED_FRAME
7983      } {
7984        Fl_Check_Button btn_kml_enabled {
7985          label {KML server enabled (On / Off)}
7986          callback {progdefaults.kml_enabled = o->value();
7987if (progdefaults.kml_enabled) {
7988  kml_init(true);
7989  progdefaults.changed = true;
7990} else {
7991  KmlServer::Exit();
7992}}
7993          tooltip {Uncheck if KML is never used} xywh {497 311 242 19} down_box DOWN_BOX
7994          code0 {o->value(progdefaults.kml_enabled);}
7995        }
7996      }
7997    }
7998    Fl_Group {} {
7999      label {Misc/PSM}
8000      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
8001      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Misc/PSM"));}
8002      code1 {config_pages.push_back(p);}
8003      code2 {tab_tree->add(_("Misc/PSM"));}
8004      code3 {tab_tree->close(_("Misc"));}
8005    } {
8006      Fl_Group {} {open
8007        xywh {204 32 590 108} box ENGRAVED_BOX align 21
8008      } {
8009        Fl_Counter cntBusyChannelSeconds {
8010          label {Allow TX After Signal Detection (Secs)}
8011          callback {progStatus.busyChannelSeconds = (int) o->value();
8012progdefaults.busyChannelSeconds = (int) o->value();
8013progdefaults.changed = true;}
8014          tooltip {Allow transmits after 'N' seconds of a signal detection.} xywh {380 38 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8015          code0 {o->value(progdefaults.busyChannelSeconds);}
8016          code1 {o->step(1,10);}
8017        }
8018        Fl_Check_Button btnEnableBusyChannel {
8019          label {Enable Busy Channel}
8020          callback {if(o->value()) {
8021	progStatus.enableBusyChannel = true;
8022	progdefaults.enableBusyChannel = true;
8023}
8024else {
8025	progStatus.enableBusyChannel = false;
8026	progdefaults.enableBusyChannel = false;
8027}
8028progdefaults.changed = true;}
8029          tooltip {Enable to inhibit TX on signal Detections} xywh {210 40 115 20} down_box DOWN_BOX
8030          code0 {if(progdefaults.enableBusyChannel) o->value(true);}
8031          code1 {else o->value(false);}
8032        }
8033        Fl_Counter cntPSMTXBufferFlushTimer {
8034          label {TX Buffer Flush Timer (Mins, 0=Disable)}
8035          callback {progStatus.psm_flush_buffer_timeout = (int) o->value();
8036progdefaults.psm_flush_buffer_timeout = (int) o->value();
8037progdefaults.changed = true;}
8038          tooltip {Flushes the TX buffer after x period when Busy Channel remains on (TX inhibited)} xywh {380 63 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8039          code0 {o->value(progdefaults.psm_flush_buffer_timeout);}
8040          code1 {o->step(1,10); o->minimum(0); o->maximum(999);}
8041        }
8042        Fl_Counter cntPSMBandwidthMargins {
8043          label {Modem Bandwidth Margins }
8044          callback {progStatus.psm_minimum_bandwidth_margin   = (int) o->value();
8045progdefaults.psm_minimum_bandwidth_margin = (int) o->value();
8046progdefaults.changed = true;}
8047          tooltip {Monitor signals in modem bandwitdh plus margins.} xywh {380 88 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8048          code0 {o->value(progdefaults.psm_minimum_bandwidth_margin);}
8049          code1 {o->step(1,10);}
8050        }
8051        Fl_Counter cntPSMValidSamplePeriod {
8052          label {Valid Signal Sample Period (msecs)}
8053          callback {progStatus.psm_hit_time_window   = (int) o->value();
8054progdefaults.psm_hit_time_window = (int) o->value();
8055progdefaults.changed = true;}
8056          tooltip {Valid signal sample period in Milliseconds} xywh {380 114 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8057          code0 {o->value(progdefaults.psm_hit_time_window);}
8058          code1 {o->step(1,10);}
8059        }
8060      }
8061      Fl_Group {} {open
8062        xywh {204 140 590 84} box ENGRAVED_BOX align 21
8063      } {
8064        Fl_Check_Button btnEnable_csma {
8065          label {Enable CSMA}
8066          callback {if(o->value()) {
8067	progStatus.csma_enabled = true;
8068	progdefaults.csma_enabled = true;
8069} else {
8070	progStatus.csma_enabled = false;
8071	progdefaults.csma_enabled = false;
8072}
8073progdefaults.changed = true;}
8074          tooltip {Carrier Sense Mulitiple Access} xywh {214 148 114 20} down_box DOWN_BOX
8075          code0 {if(progdefaults.csma_enabled) o->value(true);}
8076        }
8077        Fl_Counter cntPersistance {
8078          label Persistance
8079          callback {progStatus.csma_persistance = (int) o->value();
8080progdefaults.csma_persistance = (int) o->value();
8081progdefaults.changed = true;
8082update_csma_io_config(CSMA_PERSISTANCE);}
8083          tooltip {Used to adjust the aggressiveness of TX} xywh {333 148 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8084          code0 {o->value(progdefaults.csma_persistance);}
8085          code1 {o->step(1,10); o->minimum(0); o->maximum(255);}
8086        }
8087        Fl_Counter cntSlotTime {
8088          label {Slot Time}
8089          callback {progStatus.csma_slot_time = (int) o->value();
8090progdefaults.csma_slot_time = (int) o->value();
8091progdefaults.changed = true;
8092update_csma_io_config(CSMA_SLOT_TIME);}
8093          tooltip {Non transmit window after a transmit period} xywh {333 173 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8094          code0 {o->value(progdefaults.csma_slot_time);}
8095          code1 {o->step(1,10); o->minimum(1); o->maximum(255);}
8096        }
8097        Fl_Counter cntTransmitDelay {
8098          label {Transmit Data Delay}
8099          callback {progStatus.csma_transmit_delay = (int) o->value();
8100progdefaults.csma_transmit_delay = (int) o->value();
8101progdefaults.changed = true;
8102update_csma_io_config(CSMA_TX_DELAY);}
8103          tooltip {Idle transmit before data sent} xywh {333 198 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8104          code0 {o->value(progdefaults.csma_transmit_delay);}
8105          code1 {o->step(1,10); o->minimum(1); o->maximum(255);}
8106        }
8107        Fl_Output OutputSlotTimeMS {
8108          label MilliSeconds
8109          tooltip {Displays the Slot Time in Milliseconds} xywh {599 173 95 20} align 8
8110        }
8111        Fl_Output OutputTransmitDelayMS {
8112          label MilliSeconds
8113          tooltip {Displays the Transmit Delay in Milliseconds} xywh {599 198 95 20} align 8
8114        }
8115        Fl_Output OutputPersistancePercent {
8116          label {Percent (%)}
8117          tooltip {Displays the Slot Time in Milliseconds} xywh {599 147 95 20} align 8
8118        }
8119      }
8120      Fl_Group {} {open
8121        xywh {204 223 590 31} box ENGRAVED_BOX align 21
8122      } {
8123        Fl_Check_Button btnEnable_histogram {
8124          label {Enable Histogram}
8125          callback {if(o->value()) {
8126	progStatus.psm_use_histogram = true;
8127	progdefaults.psm_use_histogram = true;
8128} else {
8129	progStatus.psm_use_histogram = false;
8130	progdefaults.psm_use_histogram = false;
8131}
8132progdefaults.changed = true;}
8133          tooltip {Enable Histogram threshold signal monitoring} xywh {216 230 139 20} down_box DOWN_BOX
8134          code0 {if(progdefaults.psm_use_histogram) o->value(true);}
8135        }
8136        Fl_Counter cntPSMThreshold {
8137          label {PSM Histogram Threshold}
8138          callback {progStatus.psm_histogram_offset_threshold = (int) o->value();
8139progdefaults.psm_histogram_offset_threshold = (int) o->value();
8140progdefaults.changed = true;}
8141          tooltip {Sets the theshold level to x value above the noise level} xywh {380 230 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8142          code0 {o->value(progdefaults.psm_histogram_offset_threshold);}
8143          code1 {o->step(1,10); o->minimum(1); o->maximum(20);}
8144        }
8145      }
8146      Fl_Group {} {open
8147        xywh {204 254 590 34} box ENGRAVED_BOX align 21
8148      } {
8149        Fl_Counter cntKPSQLAttenuation {
8150          label {PSM Attenuate}
8151          callback {progStatus.kpsql_attenuation = (int) o->value();
8152progdefaults.kpsql_attenuation = (int) o->value();
8153update_kpsql_fractional_gain(progStatus.kpsql_attenuation);
8154progdefaults.changed = true;}
8155          tooltip {Adjust sensitivity by 1/N fractional values.} xywh {380 261 110 20} align 8 minimum 1 maximum 999 step 1 value 1
8156          code0 {o->value(progdefaults.kpsql_attenuation);}
8157          code1 {o->step(1,10); o->minimum(1); o->maximum(999);}
8158          code2 {update_kpsql_fractional_gain(progdefaults.kpsql_attenuation);}
8159        }
8160      }
8161      Fl_Group {} {open
8162        xywh {204 287 590 28} box ENGRAVED_BOX align 21
8163      } {
8164        Fl_Check_Button btn_show_psm_button {
8165          label {Show and enable Power Signal Monitor button (PSM)}
8166          callback {progdefaults.show_psm_btn = o->value();
8167UI_select();
8168progdefaults.changed = true;}
8169          tooltip {display PSM button on main dialog} xywh {214 291 150 20} down_box DOWN_BOX
8170          code0 {o->value(progdefaults.show_psm_btn);}
8171        }
8172      }
8173      Fl_Button btnBuyChannelDefaults {
8174        label {Default Settings}
8175        callback {psm_set_defaults();}
8176        xywh {669 320 126 22}
8177      }
8178    }
8179    Fl_Group grpOperator {
8180      label {Operator-Station}
8181      xywh {200 0 600 350} box ENGRAVED_BOX color 50 align 21 hide
8182      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Operator-Station"));}
8183      code1 {config_pages.push_back(p);}
8184      code2 {tab_tree->add(_("Operator-Station"));}
8185    } {
8186      Fl_Input inpMyCallsign {
8187        label {Station Callsign:}
8188        callback {const char *triggers = " !\#$%&'()*+,-.;<=>?@[\\\\]^_{|}~";
8189std::string mycall = inpMyCallsign->value();
8190
8191bool modified = false;
8192for (size_t k = 0; k < mycall.length(); k++) {
8193  for (size_t n = 0; n < strlen(triggers); n++) {
8194    if (mycall[k] == triggers[n]) {
8195      if ( fl_choice2("Replace FSQ trigger character with slash /", _("no"), _("yes"), NULL ) ) {
8196        mycall[k] = '/';
8197        modified = true;
8198      }
8199    }
8200  }
8201}
8202if (modified) {
8203  int p = inpMyCallsign->position();
8204  inpMyCallsign->value(mycall.c_str());
8205  inpMyCallsign->position(p); // causes a redraw
8206}
8207
8208progdefaults.myCall = mycall;
8209
8210if (progdefaults.THORsecText.empty()) {
8211progdefaults.THORsecText = mycall;
8212progdefaults.THORsecText.append(" ");
8213txtTHORSecondary->value(progdefaults.THORsecText.c_str());
8214}
8215
8216if (progdefaults.secText.empty()) {
8217progdefaults.secText = mycall;
8218progdefaults.secText.append(" ");
8219txtSecondary->value(progdefaults.secText.c_str());
8220}
8221
8222update_main_title();
8223notify_change_callsign();
8224progdefaults.changed = true;}
8225        tooltip {Station callsign} xywh {386 54 110 24} when 1
8226        code0 {inpMyCallsign->labelsize(FL_NORMAL_SIZE);}
8227        class Fl_Input2
8228      }
8229      Fl_Input inpOperCallsign {
8230        label {Operator Callsign:}
8231        callback {progdefaults.operCall = o->value();
8232progdefaults.changed = true;}
8233        tooltip {Operator callsign (if different than station callsign)} xywh {386 84 110 24}
8234        code0 {o->labelsize(FL_NORMAL_SIZE);}
8235        code1 {o->value(progdefaults.operCall.c_str());}
8236        class Fl_Input2
8237      }
8238      Fl_Input inpMyName {
8239        label {Operator Name:}
8240        callback {progdefaults.myName = o->value();
8241progdefaults.changed = true;}
8242        tooltip {Operators name} xywh {386 115 140 24}
8243        code0 {inpMyName->labelsize(FL_NORMAL_SIZE);}
8244        class Fl_Input2
8245      }
8246      Fl_Input inpMyAntenna {
8247        label {Antenna:}
8248        callback {progdefaults.myAntenna = o->value();
8249progdefaults.changed = true;}
8250        tooltip {Short description of antenna} xywh {386 145 320 24}
8251        code0 {inpMyAntenna->labelsize(FL_NORMAL_SIZE);}
8252        class Fl_Input2
8253      }
8254      Fl_Input inpMyQth {
8255        label {Station QTH:}
8256        callback {progdefaults.myQth = o->value();
8257progdefaults.changed = true;}
8258        tooltip {Operators QTH} xywh {386 176 320 24}
8259        code0 {inpMyQth->labelsize(FL_NORMAL_SIZE);}
8260        class Fl_Input2
8261      }
8262      Fl_Input inpMyLocator {
8263        label {Station Locator:}
8264        callback {progdefaults.myLocator = o->value();
8265progdefaults.changed = true;}
8266        tooltip {Maidenhead locator as in EM64qv} xywh {386 206 85 24}
8267        code0 {inpMyLocator->labelsize(FL_NORMAL_SIZE);}
8268        class Fl_Input2
8269      }
8270      Fl_Group listbox_states {
8271        label {State / Provinces}
8272        callback {listbox_counties->clear();
8273listbox_counties->add(states.counties(o->value()).c_str());
8274listbox_counties->index(0);
8275inp_QP_short_county->value(states.cnty_short(listbox_states->value(),listbox_counties->value()).c_str());
8276inp_QP_state_short->value(states.state_short(o->value()).c_str());
8277progdefaults.SQSOstate = o->index();
8278progdefaults.changed = true;} open
8279        tooltip {US States / Canadian Provinces} xywh {386 237 319 24} box DOWN_BOX color 7 align 4
8280        code0 {\#include "counties.h"}
8281        code1 {o->labelsize(FL_NORMAL_SIZE);}
8282        code2 {o->add(states.names().c_str());}
8283        code3 {o->index(progdefaults.SQSOstate);}
8284        class Fl_ListBox
8285      } {}
8286      Fl_Input inp_QP_state_short {
8287        tooltip {Abbreviation for State/Province} xywh {710 237 60 24} align 5
8288        code0 {o->value(states.state_short(listbox_states->value()).c_str());}
8289        class Fl_Input2
8290      }
8291      Fl_Group listbox_counties {
8292        label {Counties / Regions}
8293        callback {inp_QP_short_county->value(states.cnty_short(listbox_states->value(),o->value()).c_str());
8294progdefaults.SQSOcounty = o->index();
8295progdefaults.changed = true;} open
8296        tooltip {US/Canadian Counties / Regions} xywh {386 268 319 24} box DOWN_BOX color 7 align 4
8297        code0 {o->clear(); o->add(states.counties(listbox_states->value()).c_str());}
8298        code1 {o->index(progdefaults.SQSOcounty);}
8299        code2 {o->labelsize(FL_NORMAL_SIZE);}
8300        class Fl_ListBox
8301      } {}
8302      Fl_Input inp_QP_short_county {
8303        tooltip {Abbreviation for County/Region} xywh {710 268 60 24} align 5
8304        code0 {inp_QP_short_county->value(states.cnty_short(listbox_states->value(),listbox_counties->value()).c_str());}
8305        class Fl_Input2
8306      }
8307    }
8308    Fl_Group grpRigFlrig {
8309      label {Rig Control/flrig}
8310      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
8311      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Rig Control/flrig"));}
8312      code1 {config_pages.push_back(p);}
8313      code2 {tab_tree->add(_("Rig Control/flrig"));}
8314    } {
8315      Fl_Group {} {
8316        label {"Disable PTT keys modem if multiple instances of fldigi (client)
8317are connected to a single flrig (server).} open
8318        xywh {209 233 580 90} box ENGRAVED_BOX align 17
8319      } {
8320        Fl_Check_Button chk_flrig_keys_modem {
8321          label {Flrig PTT keys modem}
8322          callback {progdefaults.flrig_keys_modem = o->value();
8323progdefaults.changed = true;}
8324          tooltip {" "} xywh {439 281 183 20} down_box DOWN_BOX
8325          code0 {o->value(progdefaults.flrig_keys_modem);}
8326        }
8327      }
8328      Fl_Group {} {
8329        label {flrig xmlrpc server parameters
8330these controls are mirrored on the IO configuration tab} open
8331        xywh {209 148 580 81} box ENGRAVED_FRAME align 21
8332      } {
8333        Fl_Button btnDefault_flrig_ip_mirror {
8334          label Default
8335          callback {set_ip_to_default(FLRIG_IO);
8336txt_flrig_ip_address_mirror->value(progdefaults.flrig_ip_address.c_str());
8337txt_flrig_ip_port_mirror->value(progdefaults.flrig_ip_port.c_str());
8338progdefaults.changed = true;}
8339          tooltip {Returns IP Address and port
8340number to the default value.} xywh {613 194 73 24}
8341        }
8342        Fl_Input txt_flrig_ip_address_mirror {
8343          label Addr
8344          callback {progdefaults.flrig_ip_address = o->value();
8345txt_flrig_ip_address->value(progdefaults.flrig_ip_address.c_str());
8346progdefaults.changed = true;}
8347          tooltip {IP Address for flrig interface
8348IP Address format: nnn.nnn.nnn.nnn
8349or name: i.e. localhost} xywh {244 194 230 24} align 8 when 1
8350          code0 {o->labelsize(FL_NORMAL_SIZE);}
8351          code1 {o->value(progdefaults.flrig_ip_address.c_str());}
8352          class Fl_Input2
8353        }
8354        Fl_Input txt_flrig_ip_port_mirror {
8355          label Port
8356          callback {progdefaults.flrig_ip_port = o->value();
8357txt_flrig_ip_port->value(progdefaults.flrig_ip_port.c_str());
8358progdefaults.changed = true;}
8359          tooltip {IP Address Port Number} xywh {518 194 55 24} align 8 when 1
8360          code0 {o->labelsize(FL_NORMAL_SIZE);}
8361          code1 {o->value(progdefaults.flrig_ip_port.c_str());}
8362          class Fl_Input2
8363        }
8364        Fl_Button btn_reconnect_flrig_server_mirror {
8365          label Reconnect
8366          callback {reconnect_to_flrig();}
8367          tooltip {Press only if you change the address/port} xywh {693 194 82 24}
8368          code0 {\#include "rigsupport.h"}
8369        }
8370      }
8371      Fl_Group {} {
8372        label {flrig is the preferred method of tranceiver control} open
8373        xywh {209 54 580 90} box ENGRAVED_BOX align 17
8374      } {
8375        Fl_Check_Button btn_fldigi_client_to_flrig {
8376          label {Enable flrig xcvr control with fldigi as client}
8377          callback {progdefaults.fldigi_client_to_flrig=o->value();
8378if (o->value()) {
8379  progdefaults.chkUSEHAMLIBis = false;
8380  progdefaults.chkUSERIGCATis = false;
8381  chkUSEHAMLIB->value(0);
8382  chkUSERIGCAT->value(0);
8383}
8384progdefaults.changed=true;}
8385          tooltip {Disable if flrig not used.} xywh {234 81 70 15} down_box DOWN_BOX
8386          code0 {o->value(progdefaults.fldigi_client_to_flrig);}
8387        }
8388        Fl_Check_Button btn_flrig_auto_shutdown {
8389          label {Shutdown flrig with fldigi}
8390          callback {progdefaults.flrig_auto_shutdown=o->value();
8391progdefaults.changed=true;}
8392          tooltip {Disable if flrig not used.} xywh {234 112 70 15} down_box DOWN_BOX
8393          code0 {o->value(progdefaults.flrig_auto_shutdown);}
8394        }
8395      }
8396    }
8397    Fl_Group grpRigCat {
8398      label {Rig Control/CAT (rigcat)}
8399      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
8400      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Rig Control/CAT (rigcat)"));}
8401      code1 {config_pages.push_back(p);}
8402      code2 {tab_tree->add(_("Rig Control/CAT (rigcat)"));}
8403    } {
8404      Fl_Check_Button chkUSERIGCAT {
8405        label {Use RigCAT}
8406        callback {if (o->value() == 1) {
8407  chkUSEHAMLIB->value(0);
8408  btn_fldigi_client_to_flrig->value(0);
8409  progdefaults.chkUSERIGCATis = true;
8410  progdefaults.fldigi_client_to_flrig = false;
8411  btnInitRIGCAT->labelcolor(FL_RED);
8412  btnInitRIGCAT->redraw();
8413} else {
8414  progdefaults.chkUSERIGCATis = false;
8415  progdefaults.initInterface();
8416}
8417progdefaults.changed=true;}
8418        tooltip {RigCAT used for rig control} xywh {434 32 110 20} down_box DOWN_BOX
8419      }
8420      Fl_Group grpRigCAT {open
8421        xywh {244 55 490 279} box ENGRAVED_FRAME align 17
8422      } {
8423        Fl_Output txtXmlRigFilename {
8424          label {Rig description file:}
8425          tooltip {Use Open to select descriptor file} xywh {254 79 130 22} color 52 align 5
8426          code0 {o->value(fl_filename_name(progdefaults.XmlRigFilename.c_str()));}
8427        }
8428        Fl_Button btnSelectRigXmlFile {
8429          label {Open...}
8430          callback {btnInitRIGCAT->labelcolor(FL_RED);
8431btnInitRIGCAT->redraw_label();
8432selectRigXmlFilename();}
8433          tooltip {Select rig descriptor file} xywh {387 79 60 22} align 16
8434        }
8435        Fl_Group inpXmlRigDevice {
8436          label {Device:}
8437          callback {btnInitRIGCAT->labelcolor(FL_RED);
8438btnInitRIGCAT->redraw_label();} open
8439          xywh {580 79 144 22} box DOWN_BOX color 7 align 4
8440          code0 {o->value(progdefaults.XmlRigDevice.c_str());
8441                       o->labelsize(FL_NORMAL_SIZE);}
8442          class Fl_ComboBox
8443        } {}
8444        Fl_Value_Input cntRigCatRetries {
8445          label Retries
8446          callback {btnInitRIGCAT->labelcolor(FL_RED);
8447btnInitRIGCAT->redraw_label();}
8448          tooltip {\# retries before giving up} xywh {269 122 60 22} align 5 maximum 1000 step 1
8449          code0 {o->value(progdefaults.RigCatRetries);}
8450          code1 {o->labelsize(FL_NORMAL_SIZE);}
8451          class Fl_Value_Input2
8452        }
8453        Fl_Value_Input cntRigCatTimeout {
8454          label {Retry interval (ms)}
8455          callback {btnInitRIGCAT->labelcolor(FL_RED);
8456btnInitRIGCAT->redraw_label();}
8457          tooltip {Time between retires in msec} xywh {399 122 60 22} align 5 maximum 10000 step 1
8458          code0 {o->value(progdefaults.RigCatTimeout);}
8459          code1 {o->labelsize(FL_NORMAL_SIZE);}
8460          class Fl_Value_Input2
8461        }
8462        Fl_Value_Input cntRigCatWait {
8463          label {Write delay (ms)}
8464          callback {btnInitRIGCAT->labelcolor(FL_RED);
8465btnInitRIGCAT->redraw_label();}
8466          tooltip {Wait for response to subsequent command} xywh {269 162 60 22} align 5 maximum 10000 step 1
8467          code0 {o->value(progdefaults.RigCatWait);}
8468          code1 {o->labelsize(FL_NORMAL_SIZE);}
8469          class Fl_Value_Input2
8470        }
8471        Fl_Group listbox_xml_rig_baudrate {
8472          label {Baud rate:}
8473          callback {btnInitRIGCAT->labelcolor(FL_RED);
8474btnInitRIGCAT->redraw_label();} open
8475          xywh {625 122 99 22} box DOWN_BOX color 7 align 4
8476          code0 {o->add(szBaudRates);}
8477          code1 {o->index(progdefaults.XmlRigBaudrate);
8478                       o->labelsize(FL_NORMAL_SIZE);}
8479          class Fl_ListBox
8480        } {}
8481        Fl_Counter valRigCatStopbits {
8482          label Stopbits
8483          callback {btnInitRIGCAT->labelcolor(FL_RED);
8484btnInitRIGCAT->redraw();}
8485          xywh {627 156 95 21} type Simple align 4 minimum 1 maximum 2 step 1 value 1
8486          code0 {o->value(progdefaults.RigCatStopbits);}
8487          code1 {o->labelsize(FL_NORMAL_SIZE);}
8488          class Fl_Counter2
8489        }
8490        Fl_Button btnInitRIGCAT {
8491          label Initialize
8492          callback {progdefaults.initInterface();
8493o->labelcolor(FL_FOREGROUND_COLOR);
8494progdefaults.changed = true;}
8495          tooltip {Initialize RigCAT interface} xywh {604 293 113 24} align 16
8496        }
8497        Fl_Check_Button btnRigCatEcho {
8498          label {Commands are echoed}
8499          callback {btnInitRIGCAT->labelcolor(FL_RED);
8500btnInitRIGCAT->redraw_label();
8501progdefaults.changed = true;}
8502          tooltip {Rig or interface echos serial data} xywh {289 188 192 22} down_box DOWN_BOX
8503          code0 {o->value(progdefaults.RigCatECHO);}
8504        }
8505        Fl_Round_Button btnRigCatCMDptt {
8506          label {CAT command for PTT}
8507          callback {if (o->value()== 1) {
8508btnRigCatRTSptt->value(0);
8509btnRigCatDTRptt->value(0);
8510progdefaults.RigCatCMDptt = true;
8511progdefaults.TTYptt =
8512progdefaults.UsePPortPTT =
8513progdefaults.UseUHrouterPTT =
8514progdefaults.RigCatRTSptt =
8515progdefaults.RigCatDTRptt =
8516progdefaults.HamlibCMDptt = false;
8517} else
8518progdefaults.RigCatCMDptt = false;
8519
8520btnInitRIGCAT->labelcolor(FL_RED);
8521btnInitRIGCAT->redraw();}
8522          tooltip {PTT is a CAT command (not hardware)} xywh {495 189 207 20} down_box DOWN_BOX selection_color 1
8523          code0 {o->value(progdefaults.RigCatCMDptt);}
8524        }
8525        Fl_Round_Button btnRigCatRTSptt {
8526          label {Toggle RTS for PTT}
8527          callback {if (o->value() == 1) {
8528btnRigCatCMDptt->value(0);
8529progdefaults.RigCatRTSptt = true;
8530progdefaults.TTYptt =
8531progdefaults.UsePPortPTT =
8532progdefaults.UseUHrouterPTT =
8533progdefaults.RigCatCMDptt =
8534progdefaults.HamlibCMDptt = false;
8535} else
8536progdefaults.RigCatRTSptt = false;
8537
8538btnInitRIGCAT->labelcolor(FL_RED);
8539btnInitRIGCAT->redraw_label();}
8540          tooltip {RTS is ptt line} xywh {289 218 160 20} down_box DOWN_BOX
8541          code0 {o->value(progdefaults.RigCatRTSptt);}
8542        }
8543        Fl_Round_Button btnRigCatDTRptt {
8544          label {Toggle DTR for PTT}
8545          callback {if (o->value() == 1) {
8546btnRigCatCMDptt->value(0);
8547progdefaults.RigCatDTRptt = true;
8548progdefaults.TTYptt =
8549progdefaults.UsePPortPTT =
8550progdefaults.UseUHrouterPTT =
8551progdefaults.RigCatCMDptt =
8552progdefaults.HamlibCMDptt = false;
8553} else
8554progdefaults.RigCatDTRptt = false;
8555
8556btnInitRIGCAT->labelcolor(FL_RED);
8557btnInitRIGCAT->redraw_label();}
8558          tooltip {DTR is ptt line} xywh {495 216 160 20} down_box DOWN_BOX
8559          code0 {o->value(progdefaults.RigCatDTRptt);}
8560        }
8561        Fl_Check_Button btnRigCatRTSplus {
8562          label {RTS +12 v}
8563          callback {btnInitRIGCAT->labelcolor(FL_RED);
8564btnInitRIGCAT->redraw_label();}
8565          tooltip {Initial state of RTS} xywh {289 247 100 20} down_box DOWN_BOX
8566          code0 {o->value(progdefaults.RigCatRTSplus);}
8567        }
8568        Fl_Check_Button btnRigCatDTRplus {
8569          label {DTR +12 v}
8570          callback {btnInitRIGCAT->labelcolor(FL_RED);
8571btnInitRIGCAT->redraw_label();}
8572          tooltip {Initial state of DTR} xywh {495 244 100 20} down_box DOWN_BOX
8573          code0 {o->value(progdefaults.RigCatDTRplus);}
8574        }
8575        Fl_Check_Button chkRigCatRTSCTSflow {
8576          label {RTS/CTS flow control}
8577          callback {btnInitRIGCAT->labelcolor(FL_RED);
8578btnInitRIGCAT->redraw_label();}
8579          tooltip {Rig uses RTS/CTS handshake} xywh {289 275 170 20} down_box DOWN_BOX
8580          code0 {o->value(progdefaults.RigCatRTSCTSflow);}
8581        }
8582        Fl_Check_Button chk_restore_tio {
8583          label {Restore UART Settings on Close}
8584          callback {btnInitRIGCAT->labelcolor(FL_RED);
8585btnInitRIGCAT->redraw_label();}
8586          tooltip {Restore the serial (COM) port settings} xywh {289 304 205 20} down_box DOWN_BOX
8587          code0 {o->value(progdefaults.RigCatRestoreTIO);}
8588        }
8589        Fl_Check_Button chkRigCatVSP {
8590          label {VSP Enable}
8591          callback {btnInitRIGCAT->labelcolor(FL_RED);
8592btnInitRIGCAT->redraw_label();}
8593          tooltip {Virtual Serial Port Emulator - suppress WARNINGS} xywh {495 272 100 25} down_box DOWN_BOX
8594          code0 {o->value(progdefaults.RigCatVSP);}
8595        }
8596        Fl_Value_Input cntRigCatInitDelay {
8597          label {Init delay (ms)}
8598          callback {btnInitRIGCAT->labelcolor(FL_RED);
8599btnInitRIGCAT->redraw_label();}
8600          tooltip {Wait for response to first CAT command} xywh {399 162 75 22} align 5 maximum 10000 step 1
8601          code0 {o->value(progdefaults.RigCatInitDelay);}
8602          code1 {o->labelsize(FL_NORMAL_SIZE);}
8603          class Fl_Value_Input2
8604        }
8605      }
8606    }
8607    Fl_Group grpRigGPIO {
8608      label {Rig Control/GPIO}
8609      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
8610      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Rig Control/GPIO"));}
8611      code1 {config_pages.push_back(p);}
8612      code2 {tab_tree->add(_("Rig Control/GPIO"));}
8613    } {
8614      Fl_Check_Button btn_gpio_ptt2 {
8615        label {Enable GPIO PTT (Pi specific controls)}
8616        callback {btnTTYptt->value(0);
8617btnUsePPortPTT->value(0);
8618btn_gpio_ptt->value(o->value());
8619
8620if (o->value()) {
8621progdefaults.gpio_ptt = true;
8622progdefaults.UseUHrouterPTT =
8623progdefaults.TTYptt =
8624progdefaults.UsePPortPTT =
8625progdefaults.RigCatRTSptt =
8626progdefaults.RigCatDTRptt =
8627progdefaults.RigCatCMDptt =
8628progdefaults.cmedia_ptt =
8629progdefaults.HamlibCMDptt = false;
8630} else
8631progdefaults.gpio_ptt = false;
8632
8633btnInitHWPTT->labelcolor(FL_RED);
8634btnInitHWPTT2->labelcolor(FL_RED);
8635btnInitHWPTT->redraw();
8636btnInitHWPTT2->redraw();
8637progdefaults.changed = true;}
8638        tooltip {Select PTT on state} xywh {256 25 330 15} down_box DOWN_BOX labelfont 4
8639        code0 {o->value(progdefaults.gpio_ptt);}
8640      }
8641      Fl_Button btnInitHWPTT2 {
8642        label Initialize
8643        callback {progdefaults.initInterface();
8644o->labelcolor(FL_FOREGROUND_COLOR);
8645o->redraw();
8646btnInitHWPTT->labelcolor(FL_FOREGROUND_COLOR);
8647btnInitHWPTT2->redraw();
8648progdefaults.changed = true;}
8649        tooltip {Initialize the H/W PTT interface} xywh {640 20 113 24}
8650      }
8651      Fl_Box {} {
8652        label {BCM GPIO  pin    Value}
8653        xywh {265 53 189 17} labelfont 4 align 20
8654      }
8655      Fl_Check_Button {btn_enable_gpio[0]} {
8656        label {17   00   11}
8657        callback {if (o->value()){
8658  progdefaults.enable_gpio |= 1;
8659  export_gpio(0);
8660} else {
8661  progdefaults.enable_gpio &= ~1;
8662  unexport_gpio(0);
8663}
8664progdefaults.changed = true;}
8665        tooltip {Select pin number} xywh {255 78 125 15} down_box DOWN_BOX labelfont 4
8666        code0 {o->value(progdefaults.enable_gpio & 0x01);}
8667      }
8668      Fl_Check_Button {btn_enable_gpio[1]} {
8669        label {18   01   12}
8670        callback {if (o->value()){
8671  progdefaults.enable_gpio |= (1<<1);
8672  export_gpio(1);
8673} else {
8674  progdefaults.enable_gpio &= ~(1<<1);
8675  unexport_gpio(1);
8676}
8677progdefaults.changed = true;}
8678        tooltip {Select pin number} xywh {255 107 125 15} down_box DOWN_BOX labelfont 4
8679        code0 {o->value((progdefaults.enable_gpio >> 1) & 0x01);}
8680      }
8681      Fl_Check_Button {btn_enable_gpio[2]} {
8682        label {27   02   13}
8683        callback {if (o->value()){
8684  progdefaults.enable_gpio |= (1<<2);
8685  export_gpio(2);
8686} else {
8687  progdefaults.enable_gpio &= ~(1<<2);
8688  unexport_gpio(2);
8689}
8690progdefaults.changed = true;}
8691        tooltip {Select pin number} xywh {255 137 125 15} down_box DOWN_BOX labelfont 4
8692        code0 {o->value((progdefaults.enable_gpio >> 2) & 0x01);}
8693      }
8694      Fl_Check_Button {btn_enable_gpio[3]} {
8695        label {22   03   15}
8696        callback {if (o->value()){
8697  progdefaults.enable_gpio |= (1<<3);
8698  export_gpio(3);
8699} else {
8700  progdefaults.enable_gpio &= ~(1<<3);
8701  unexport_gpio(3);
8702}
8703progdefaults.changed = true;}
8704        tooltip {Select pin number} xywh {255 167 125 15} down_box DOWN_BOX labelfont 4
8705        code0 {o->value((progdefaults.enable_gpio >> 3) & 0x01);}
8706      }
8707      Fl_Check_Button {btn_enable_gpio[4]} {
8708        label {23   04   16}
8709        callback {if (o->value()){
8710  progdefaults.enable_gpio |= (1<<4);
8711  export_gpio(4);
8712} else {
8713  progdefaults.enable_gpio &= ~(1<<4);
8714  unexport_gpio(4);
8715}
8716progdefaults.changed = true;}
8717        tooltip {Select pin number} xywh {255 197 125 15} down_box DOWN_BOX labelfont 4
8718        code0 {o->value((progdefaults.enable_gpio >> 4) & 0x01);}
8719      }
8720      Fl_Check_Button {btn_enable_gpio[5]} {
8721        label {24   05   18}
8722        callback {if (o->value()){
8723  progdefaults.enable_gpio |= (1<<5);
8724  export_gpio(5);
8725} else {
8726  progdefaults.enable_gpio &= ~(1<<5);
8727  unexport_gpio(5);
8728}
8729progdefaults.changed = true;}
8730        tooltip {Select pin number} xywh {255 227 125 15} down_box DOWN_BOX labelfont 4
8731        code0 {o->value((progdefaults.enable_gpio >> 5) & 0x01);}
8732      }
8733      Fl_Check_Button {btn_enable_gpio[6]} {
8734        label {25   06   22}
8735        callback {if (o->value()){
8736  progdefaults.enable_gpio |= (1<<6);
8737  export_gpio(6);
8738} else {
8739  progdefaults.enable_gpio &= ~(1<<6);
8740  unexport_gpio(6);
8741}
8742progdefaults.changed = true;}
8743        tooltip {Select pin number} xywh {255 257 125 15} down_box DOWN_BOX labelfont 4
8744        code0 {o->value((progdefaults.enable_gpio >> 6) & 0x01);}
8745      }
8746      Fl_Check_Button {btn_enable_gpio[7]} {
8747        label { 4   07    7}
8748        callback {if (o->value()){
8749  progdefaults.enable_gpio |= (1<<7);
8750  export_gpio(7);
8751} else {
8752  progdefaults.enable_gpio &= ~(1<<7);
8753  unexport_gpio(7);
8754}
8755progdefaults.changed = true;}
8756        tooltip {Select pin number} xywh {255 287 125 15} down_box DOWN_BOX labelfont 4
8757        code0 {o->value((progdefaults.enable_gpio >> 7) & 0x01);}
8758      }
8759      Fl_Check_Button {btn_enable_gpio[8]} {
8760        label { 5   21   29}
8761        callback {if (o->value()){
8762  progdefaults.enable_gpio |= (1<<8);
8763  export_gpio(8);
8764} else {
8765  progdefaults.enable_gpio &= ~(1<<8);
8766  unexport_gpio(8);
8767}
8768progdefaults.changed = true;}
8769        tooltip {Select pin number} xywh {515 78 125 15} down_box DOWN_BOX labelfont 4
8770        code0 {o->value((progdefaults.enable_gpio >> 8) & 0x01);}
8771      }
8772      Fl_Check_Button {btn_enable_gpio[9]} {
8773        label { 6   22   31}
8774        callback {if (o->value()){
8775  progdefaults.enable_gpio |= (1<<9);
8776  export_gpio(9);
8777} else {
8778  progdefaults.enable_gpio &= ~(1<<9);
8779  unexport_gpio(9);
8780}
8781progdefaults.changed = true;}
8782        tooltip {Select pin number} xywh {515 107 125 15} down_box DOWN_BOX labelfont 4
8783        code0 {o->value((progdefaults.enable_gpio >> 9) & 0x01);}
8784      }
8785      Fl_Check_Button {btn_enable_gpio[10]} {
8786        label {13   23   33}
8787        callback {if (o->value()){
8788  progdefaults.enable_gpio |= (1<<10);
8789  export_gpio(10);
8790} else {
8791  progdefaults.enable_gpio &= ~(1<<10);
8792  unexport_gpio(10);
8793}
8794progdefaults.changed = true;}
8795        tooltip {Select pin number} xywh {515 137 125 15} down_box DOWN_BOX labelfont 4
8796        code0 {o->value((progdefaults.enable_gpio >> 10) & 0x01);}
8797      }
8798      Fl_Check_Button {btn_enable_gpio[11]} {
8799        label {19   24   35}
8800        callback {if (o->value()){
8801  progdefaults.enable_gpio |= (1<<11);
8802  export_gpio(11);
8803} else {
8804  progdefaults.enable_gpio &= ~(1<<11);
8805  unexport_gpio(11);
8806}
8807progdefaults.changed = true;}
8808        tooltip {Select pin number} xywh {515 167 125 15} down_box DOWN_BOX labelfont 4
8809        code0 {o->value((progdefaults.enable_gpio >> 11) & 0x01);}
8810      }
8811      Fl_Check_Button {btn_enable_gpio[12]} {
8812        label {26   25   37}
8813        callback {if (o->value()){
8814  progdefaults.enable_gpio |= (1<<12);
8815  export_gpio(12);
8816} else {
8817  progdefaults.enable_gpio &= ~(1<<12);
8818  unexport_gpio(12);
8819}
8820progdefaults.changed = true;}
8821        tooltip {Select pin number} xywh {515 197 125 15} down_box DOWN_BOX labelfont 4
8822        code0 {o->value((progdefaults.enable_gpio >> 12) & 0x01);}
8823      }
8824      Fl_Check_Button {btn_enable_gpio[13]} {
8825        label {12   26   32}
8826        callback {if (o->value()){
8827  progdefaults.enable_gpio |= (1<<13);
8828  export_gpio(13);
8829} else {
8830  progdefaults.enable_gpio &= ~(1<<13);
8831  unexport_gpio(13);
8832}
8833progdefaults.changed = true;}
8834        tooltip {Select pin number} xywh {515 227 125 15} down_box DOWN_BOX labelfont 4
8835        code0 {o->value((progdefaults.enable_gpio >> 13) & 0x01);}
8836      }
8837      Fl_Check_Button {btn_enable_gpio[14]} {
8838        label {16   27   36}
8839        callback {if (o->value()){
8840  progdefaults.enable_gpio |= (1<<14);
8841  export_gpio(14);
8842} else {
8843  progdefaults.enable_gpio &= ~(1<<14);
8844  unexport_gpio(14);
8845}
8846progdefaults.changed = true;}
8847        tooltip {Select pin number} xywh {515 257 125 15} down_box DOWN_BOX labelfont 4
8848        code0 {o->value((progdefaults.enable_gpio >> 14) & 0x01);}
8849      }
8850      Fl_Check_Button {btn_enable_gpio[15]} {
8851        label {20   28   38}
8852        callback {if (o->value()){
8853  progdefaults.enable_gpio |= (1<<15);
8854  export_gpio(15);
8855} else {
8856  progdefaults.enable_gpio &= ~(1<<15);
8857  unexport_gpio(15);
8858}
8859progdefaults.changed = true;}
8860        tooltip {Select pin number} xywh {515 287 125 15} down_box DOWN_BOX labelfont 4
8861        code0 {o->value((progdefaults.enable_gpio >> 15) & 0x01);}
8862      }
8863      Fl_Check_Button {btn_enable_gpio[16]} {
8864        label {21   29   40}
8865        callback {if (o->value()){
8866  progdefaults.enable_gpio |= (1<<16);
8867  export_gpio(16);
8868} else {
8869  progdefaults.enable_gpio &= ~(1<<16);
8870  unexport_gpio(16);
8871}
8872progdefaults.changed = true;}
8873        tooltip {Select pin number} xywh {515 317 125 15} down_box DOWN_BOX labelfont 4
8874        code0 {o->value((progdefaults.enable_gpio >> 16) & 0x01);}
8875      }
8876      Fl_Check_Button {btn_gpio_on[0]} {
8877        label {= 1 (on)}
8878        callback {if (o->value()){
8879  progdefaults.gpio_on |= 1;
8880} else {
8881  progdefaults.gpio_on &= ~1;
8882}
8883wf->xmtrcv->value(0);
8884progdefaults.changed = true;}
8885        tooltip {Select PTT on state} xywh {395 77 84 15} down_box DOWN_BOX labelfont 4
8886        code0 {o->value((progdefaults.gpio_on) & 0x01);}
8887      }
8888      Fl_Check_Button {btn_gpio_on[1]} {
8889        label {= 1 (on)}
8890        callback {if (o->value()){
8891  progdefaults.gpio_on |= (1<<1);
8892} else {
8893  progdefaults.gpio_on &= ~(1<<1);
8894}
8895wf->xmtrcv->value(0);
8896progdefaults.changed = true;}
8897        tooltip {Select PTT on state} xywh {395 107 84 15} down_box DOWN_BOX labelfont 4
8898        code0 {o->value((progdefaults.gpio_on >> 1) & 0x01);}
8899      }
8900      Fl_Check_Button {btn_gpio_on[2]} {
8901        label {= 1 (on)}
8902        callback {if (o->value()){
8903  progdefaults.gpio_on |= (1<<2);
8904} else {
8905  progdefaults.gpio_on &= ~(1<<2);
8906}
8907wf->xmtrcv->value(0);
8908progdefaults.changed = true;}
8909        tooltip {Select PTT on state} xywh {395 137 84 15} down_box DOWN_BOX labelfont 4
8910        code0 {o->value((progdefaults.gpio_on >> 2) & 0x01);}
8911      }
8912      Fl_Check_Button {btn_gpio_on[3]} {
8913        label {= 1 (on)}
8914        callback {if (o->value()){
8915  progdefaults.gpio_on |= (1<<3);
8916} else {
8917  progdefaults.gpio_on &= ~(1<<3);
8918}
8919wf->xmtrcv->value(0);
8920progdefaults.changed = true;}
8921        tooltip {Select PTT on state} xywh {395 167 84 15} down_box DOWN_BOX labelfont 4
8922        code0 {o->value((progdefaults.gpio_on >> 3) & 0x01);}
8923      }
8924      Fl_Check_Button {btn_gpio_on[4]} {
8925        label {= 1 (on)}
8926        callback {if (o->value()){
8927  progdefaults.gpio_on |= (1<<4);
8928} else {
8929  progdefaults.gpio_on &= ~(1<<4);
8930}
8931wf->xmtrcv->value(0);
8932progdefaults.changed = true;}
8933        tooltip {Select PTT on state} xywh {395 197 84 15} down_box DOWN_BOX labelfont 4
8934        code0 {o->value((progdefaults.gpio_on >> 4) & 0x01);}
8935      }
8936      Fl_Check_Button {btn_gpio_on[5]} {
8937        label {= 1 (on)}
8938        callback {if (o->value()){
8939  progdefaults.gpio_on |= (1<<5);
8940} else {
8941  progdefaults.gpio_on &= ~(1<<5);
8942}
8943wf->xmtrcv->value(0);
8944progdefaults.changed = true;}
8945        tooltip {Select PTT on state} xywh {395 227 84 15} down_box DOWN_BOX labelfont 4
8946        code0 {o->value((progdefaults.gpio_on >> 5) & 0x01);}
8947      }
8948      Fl_Check_Button {btn_gpio_on[6]} {
8949        label {= 1 (on)}
8950        callback {if (o->value()){
8951  progdefaults.gpio_on |= (1<<6);
8952} else {
8953  progdefaults.gpio_on &= ~(1<<6);
8954}
8955wf->xmtrcv->value(0);
8956progdefaults.changed = true;}
8957        tooltip {Select PTT on state} xywh {395 257 84 15} down_box DOWN_BOX labelfont 4
8958        code0 {o->value((progdefaults.gpio_on >> 6) & 0x01);}
8959      }
8960      Fl_Check_Button {btn_gpio_on[7]} {
8961        label {= 1 (on)}
8962        callback {if (o->value()){
8963  progdefaults.gpio_on |= (1<<7);
8964} else {
8965  progdefaults.gpio_on &= ~(1<<7);
8966}
8967wf->xmtrcv->value(0);
8968progdefaults.changed = true;}
8969        tooltip {Select PTT on state} xywh {395 287 84 15} down_box DOWN_BOX labelfont 4
8970        code0 {o->value((progdefaults.gpio_on >> 7) & 0x01);}
8971      }
8972      Fl_Check_Button {btn_gpio_on[8]} {
8973        label {= 1 (on)}
8974        callback {if (o->value()){
8975  progdefaults.gpio_on |= (1<<8);
8976} else {
8977  progdefaults.gpio_on &= ~(1<<8);
8978}
8979wf->xmtrcv->value(0);
8980progdefaults.changed = true;}
8981        tooltip {Select PTT on state} xywh {655 78 84 15} down_box DOWN_BOX labelfont 4
8982        code0 {o->value((progdefaults.gpio_on >> 8) & 0x01);}
8983      }
8984      Fl_Check_Button {btn_gpio_on[9]} {
8985        label {= 1 (on)}
8986        callback {if (o->value()){
8987  progdefaults.gpio_on |= (1<<9);
8988} else {
8989  progdefaults.gpio_on &= ~(1<<9);
8990}
8991wf->xmtrcv->value(0);
8992progdefaults.changed = true;}
8993        tooltip {Select PTT on state} xywh {655 107 84 15} down_box DOWN_BOX labelfont 4
8994        code0 {o->value((progdefaults.gpio_on >> 9) & 0x01);}
8995      }
8996      Fl_Check_Button {btn_gpio_on[10]} {
8997        label {= 1 (on)}
8998        callback {if (o->value()){
8999  progdefaults.gpio_on |= (1<<10);
9000} else {
9001  progdefaults.gpio_on &= ~(1<<10);
9002}
9003wf->xmtrcv->value(0);
9004progdefaults.changed = true;}
9005        tooltip {Select PTT on state} xywh {655 137 84 15} down_box DOWN_BOX labelfont 4
9006        code0 {o->value((progdefaults.gpio_on >> 10) & 0x01);}
9007      }
9008      Fl_Check_Button {btn_gpio_on[11]} {
9009        label {= 1 (on)}
9010        callback {if (o->value()){
9011  progdefaults.gpio_on |= (1<<11);
9012} else {
9013  progdefaults.gpio_on &= ~(1<<11);
9014}
9015wf->xmtrcv->value(0);
9016progdefaults.changed = true;}
9017        tooltip {Select PTT on state} xywh {655 167 84 15} down_box DOWN_BOX labelfont 4
9018        code0 {o->value((progdefaults.gpio_on >> 11) & 0x01);}
9019      }
9020      Fl_Check_Button {btn_gpio_on[12]} {
9021        label {= 1 (on)}
9022        callback {if (o->value()){
9023  progdefaults.gpio_on |= (1<<12);
9024} else {
9025  progdefaults.gpio_on &= ~(1<<12);
9026}
9027wf->xmtrcv->value(0);
9028progdefaults.changed = true;}
9029        tooltip {Select PTT on state} xywh {655 197 84 15} down_box DOWN_BOX labelfont 4
9030        code0 {o->value((progdefaults.gpio_on >> 12) & 0x01);}
9031      }
9032      Fl_Check_Button {btn_gpio_on[13]} {
9033        label {= 1 (on)}
9034        callback {if (o->value()){
9035  progdefaults.gpio_on |= (1<<13);
9036} else {
9037  progdefaults.gpio_on &= ~(1<<13);
9038}
9039wf->xmtrcv->value(0);
9040progdefaults.changed = true;}
9041        tooltip {Select PTT on state} xywh {655 227 84 15} down_box DOWN_BOX labelfont 4
9042        code0 {o->value((progdefaults.gpio_on >> 13) & 0x01);}
9043      }
9044      Fl_Check_Button {btn_gpio_on[14]} {
9045        label {= 1 (on)}
9046        callback {if (o->value()){
9047  progdefaults.gpio_on |= (1<<14);
9048} else {
9049  progdefaults.gpio_on &= ~(1<<14);
9050}
9051wf->xmtrcv->value(0);
9052progdefaults.changed = true;}
9053        tooltip {Select PTT on state} xywh {655 257 84 15} down_box DOWN_BOX labelfont 4
9054        code0 {o->value((progdefaults.gpio_on >> 14) & 0x01);}
9055      }
9056      Fl_Check_Button {btn_gpio_on[15]} {
9057        label {= 1 (on)}
9058        callback {if (o->value()){
9059  progdefaults.gpio_on |= (1<<15);
9060} else {
9061  progdefaults.gpio_on &= ~(1<<15);
9062}
9063wf->xmtrcv->value(0);
9064progdefaults.changed = true;}
9065        tooltip {Select PTT on state} xywh {655 287 84 15} down_box DOWN_BOX labelfont 4
9066        code0 {o->value((progdefaults.gpio_on >> 15) & 0x01);}
9067      }
9068      Fl_Check_Button {btn_gpio_on[16]} {
9069        label {= 1 (on)}
9070        callback {if (o->value()){
9071  progdefaults.gpio_on |= (1<<16);
9072} else {
9073  progdefaults.gpio_on &= ~(1<<16);
9074}
9075wf->xmtrcv->value(0);
9076progdefaults.changed = true;}
9077        tooltip {Select PTT on state} xywh {655 317 84 15} down_box DOWN_BOX labelfont 4
9078        code0 {o->value((progdefaults.gpio_on >> 16) & 0x01);}
9079      }
9080      Fl_Box {} {
9081        label {BCM GPIO  pin    Value}
9082        xywh {525 53 194 17} labelfont 4 align 20
9083      }
9084      Fl_Counter cnt_gpio_pulse_width {
9085        label {Pulse width (msec)}
9086        callback {progdefaults.gpio_pulse_width=(int)o->value();
9087progdefaults.changed=true;}
9088        tooltip {Set >0 if pulsed PTT used} xywh {255 314 80 21} type Simple align 8 minimum 0 maximum 50 step 1
9089        code0 {o->value(progdefaults.gpio_pulse_width);}
9090      }
9091    }
9092    Fl_Group grpRigHamlib {
9093      label {Rig Control/Hamlib}
9094      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
9095      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Rig Control/Hamlib"));}
9096      code1 {config_pages.push_back(p);}
9097      code2 {tab_tree->add(_("Rig Control/Hamlib"));}
9098    } {
9099      Fl_Check_Button chkUSEHAMLIB {
9100        label {Use Hamlib}
9101        callback {progdefaults.chkUSEHAMLIBis = o->value();
9102if (o->value() == 1) {
9103  chkUSERIGCAT->value(0);
9104  btn_fldigi_client_to_flrig->value(0);
9105  progdefaults.chkUSERIGCATis = false;
9106  progdefaults.fldigi_client_to_flrig = false;
9107  btnInitHAMLIB->labelcolor(FL_RED);
9108  btnInitHAMLIB->activate();
9109  btnInitHAMLIB->redraw();
9110} else {
9111  progdefaults.initInterface();
9112}
9113
9114progdefaults.changed = true;}
9115        tooltip {Hamlib used for rig control} xywh {451 21 100 20} down_box DOWN_BOX
9116      }
9117      Fl_Group grpHamlib {open
9118        xywh {206 51 585 293} box ENGRAVED_FRAME
9119      } {
9120        Fl_Group cboHamlibRig {
9121          label {Rig:}
9122          callback {btnInitHAMLIB->labelcolor(FL_RED);
9123btnInitHAMLIB->redraw_label();
9124\#if USE_HAMLIB
9125hamlib_get_defaults();
9126\#endif} open
9127          xywh {242 61 250 22} box DOWN_BOX color 7 align 4
9128          code0 {o->labelsize(FL_NORMAL_SIZE);}
9129          class Fl_ListBox
9130        } {}
9131        Fl_Group inpRIGdev {
9132          label {Device:}
9133          callback {btnInitHAMLIB->labelcolor(FL_RED);
9134btnInitHAMLIB->redraw_label();} open
9135          xywh {556 61 220 22} box DOWN_BOX color 7 align 4
9136          code0 {o->value(progdefaults.HamRigDevice.c_str());
9137                       o->labelsize(FL_NORMAL_SIZE);}
9138          class Fl_ComboBox
9139        } {}
9140        Fl_Value_Input cntHamlibRetries {
9141          label Retries
9142          callback {btnInitHAMLIB->labelcolor(FL_RED);
9143btnInitHAMLIB->redraw_label();}
9144          tooltip {\# times to resend command before giving up} xywh {241 101 70 24} align 5 maximum 1000 step 1
9145          code0 {o->value(progdefaults.HamlibRetries);}
9146          code1 {o->labelsize(FL_NORMAL_SIZE);}
9147          class Fl_Value_Input2
9148        }
9149        Fl_Value_Input cntHamlibTimeout {
9150          label {Timeout (msec)}
9151          callback {btnInitHAMLIB->labelcolor(FL_RED);
9152btnInitHAMLIB->redraw_label();}
9153          tooltip {Hamlib read timeout} xywh {381 101 70 24} align 5 maximum 10000 step 1
9154          code0 {o->value(progdefaults.HamlibTimeout);}
9155          code1 {o->labelsize(FL_NORMAL_SIZE);}
9156          class Fl_Value_Input2
9157        }
9158        Fl_Value_Input cntHamlibWriteDelay {
9159          label {Write delay (msec)}
9160          callback {btnInitHAMLIB->labelcolor(FL_RED);
9161btnInitHAMLIB->redraw_label();}
9162          tooltip {Msec's between sequential commands} xywh {241 144 70 24} align 5 maximum 10000 step 1
9163          code0 {o->value(progdefaults.HamlibWriteDelay);}
9164          code1 {o->labelsize(FL_NORMAL_SIZE);}
9165          class Fl_Value_Input2
9166        }
9167        Fl_Value_Input cntHamlibWait {
9168          label {Post write delay (msec)}
9169          callback {btnInitHAMLIB->labelcolor(FL_RED);
9170btnInitHAMLIB->redraw_label();}
9171          tooltip {Wait interval (msecs) before reading response} xywh {381 144 70 24} align 5 maximum 10000 step 1
9172          code0 {o->value(progdefaults.HamlibWait);}
9173          code1 {o->labelsize(FL_NORMAL_SIZE);}
9174          class Fl_Value_Input2
9175        }
9176        Fl_Group listbox_baudrate {
9177          label {Baud rate:}
9178          callback {btnInitHAMLIB->labelcolor(FL_RED);
9179btnInitHAMLIB->redraw_label();} open
9180          xywh {677 89 99 22} box DOWN_BOX color 7 align 4
9181          code0 {o->add(szBaudRates);}
9182          code1 {o->index(progdefaults.HamRigBaudrate);
9183                       o->labelsize(FL_NORMAL_SIZE);}
9184          class Fl_ListBox
9185        } {}
9186        Fl_Counter valHamRigStopbits {
9187          label Stopbits
9188          callback {progdefaults.HamRigStopbits = (int)o->value();
9189progdefaults.changed = true;}
9190          xywh {681 117 95 21} type Simple align 4 minimum 1 maximum 2 step 1 value 1
9191          code0 {o->value(progdefaults.HamRigStopbits);}
9192          code1 {o->labelsize(FL_NORMAL_SIZE);}
9193          class Fl_Counter2
9194        }
9195        Fl_Counter valHamRigPollrate {
9196          label {Polling Interval (msec)}
9197          callback {progdefaults.HamRigPollrate = (int)o->value();
9198progdefaults.changed = true;}
9199          xywh {681 145 95 21} type Simple align 4 minimum 100 maximum 2000 step 50 value 100
9200          code0 {o->value(progdefaults.HamRigPollrate);}
9201          code1 {o->labelsize(FL_NORMAL_SIZE);}
9202          class Fl_Counter2
9203        }
9204        Fl_Check_Button btnHamlibCMDptt {
9205          label {PTT via Hamlib command}
9206          callback {btnInitHAMLIB->labelcolor(FL_RED);
9207btnInitHAMLIB->redraw_label();
9208if (o->value()) {
9209progdefaults.HamlibCMDptt = true;
9210progdefaults.TTYptt =
9211progdefaults.UsePPortPTT =
9212progdefaults.UseUHrouterPTT =
9213progdefaults.RigCatRTSptt =
9214progdefaults.RigCatDTRptt =
9215progdefaults.RigCatCMDptt = false;
9216} else
9217progdefaults.HamlibCMDptt = false;
9218
9219progdefaults.changed = true;}
9220          tooltip {PTT using hamlib command} xywh {256 192 215 20} down_box DOWN_BOX
9221          code0 {o->value(progdefaults.HamlibCMDptt);}
9222        }
9223        Fl_Check_Button btnHamlibPTT_ON_DATA {
9224          label {Audio on Auxiliary Port}
9225          callback {progdefaults.hamlib_ptt_on_data = o->value();}
9226          tooltip {PTT enables auxiliary audio source} xywh {256 217 215 20} down_box DOWN_BOX
9227          code0 {o->value(progdefaults.hamlib_ptt_on_data);}
9228        }
9229        Fl_Check_Button btnHamlibDTRplus {
9230          label {DTR +12}
9231          callback {btnInitHAMLIB->labelcolor(FL_RED);
9232btnInitHAMLIB->redraw_label();}
9233          tooltip {Initial state of DTR} xywh {256 243 90 20} down_box DOWN_BOX
9234          code0 {o->value(progdefaults.HamlibDTRplus);}
9235        }
9236        Fl_Check_Button chkHamlibRTSplus {
9237          label {RTS +12}
9238          callback {if (o->value() == 1)
9239  chkHamlibRTSCTSflow->value(0);
9240btnInitHAMLIB->labelcolor(FL_RED);
9241btnInitHAMLIB->redraw_label();}
9242          tooltip {Initial state of RTS} xywh {446 243 85 20} down_box DOWN_BOX
9243          code0 {o->value(progdefaults.HamlibRTSplus);}
9244        }
9245        Fl_Check_Button chkHamlibRTSCTSflow {
9246          label {RTS/CTS flow control}
9247          callback {if (o->value() == 1) {
9248  chkHamlibXONXOFFflow->value(0);
9249  chkHamlibRTSplus->deactivate();
9250} else
9251  chkHamlibRTSplus->activate();
9252btnInitHAMLIB->labelcolor(FL_RED);
9253btnInitHAMLIB->redraw_label();}
9254          tooltip {Rig requires RTS/CTS flow control} xywh {256 269 170 20} down_box DOWN_BOX
9255          code0 {o->value(progdefaults.HamlibRTSCTSflow);}
9256          code1 {if (o->value()) chkHamlibRTSplus->deactivate();}
9257        }
9258        Fl_Check_Button chkHamlibXONXOFFflow {
9259          label {XON/XOFF flow control}
9260          callback {if (o->value() == 1)
9261  chkHamlibRTSCTSflow->value(0);
9262btnInitHAMLIB->labelcolor(FL_RED);
9263btnInitHAMLIB->redraw_label();}
9264          tooltip {Rig requires Xon/Xoff flow control} xywh {446 269 185 20} down_box DOWN_BOX
9265          code0 {o->value(progdefaults.HamlibXONXOFFflow);}
9266        }
9267        Fl_Check_Button chk_hamlib_cw_is_lsb {
9268          label {CW is LSB mode}
9269          callback {progdefaults.hamlib_cw_islsb = o->value();}
9270          tooltip {Check if xcvr uses LSB for CW} xywh {636 243 142 20} down_box DOWN_BOX
9271          code0 {o->value(progdefaults.hamlib_cw_islsb);}
9272        }
9273        Fl_Check_Button chk_hamlib_rtty_is_usb {
9274          label {RTTY is USB mode}
9275          callback {progdefaults.hamlib_rtty_isusb = o->value();}
9276          tooltip {Check if xcvr uses USB for RTTY} xywh {636 269 152 20} down_box DOWN_BOX
9277          code0 {o->value(progdefaults.hamlib_rtty_isusb);}
9278        }
9279        Fl_Counter val_hamlib_mode_delay {
9280          label {Mode delay (msec)}
9281          callback {progdefaults.hamlib_mode_delay = (int)o->value();
9282progdefaults.changed = true;}
9283          tooltip {Delay NN msec after executing mode change} xywh {681 191 95 21} type Simple align 4 minimum 0 maximum 2000 step 100 value 200
9284          code0 {o->value(progdefaults.hamlib_mode_delay);}
9285          code1 {o->labelsize(FL_NORMAL_SIZE);}
9286          class Fl_Counter2
9287        }
9288        Fl_Group listbox_sideband {
9289          label {Sideband:} open
9290          xywh {632 216 144 22} box DOWN_BOX color 7 align 4
9291          code0 {o->labelsize(FL_NORMAL_SIZE);}
9292          class Fl_ListBox
9293        } {}
9294        Fl_Input inpHamlibConfig {
9295          label {Advanced configuration:}
9296          callback {btnInitHAMLIB->labelcolor(FL_RED);
9297btnInitHAMLIB->redraw_label();}
9298          tooltip {Optional configuration
9299in format: param=val ...} xywh {231 313 460 24} align 5
9300          code0 {inpHamlibConfig->value(progdefaults.HamConfig.c_str());}
9301          code1 {inpHamlibConfig->labelsize(FL_NORMAL_SIZE);}
9302          class Fl_Input2
9303        }
9304        Fl_Button btnInitHAMLIB {
9305          label Initialize
9306          callback {progdefaults.initInterface();
9307o->labelcolor(FL_FOREGROUND_COLOR);
9308progdefaults.changed = true;}
9309          tooltip {Initialize hamlib interface} xywh {696 313 80 24}
9310        }
9311      }
9312      Fl_Button btn_hamlib_get_defaults {
9313        label Defaults
9314        callback {\#if USE_HAMLIB
9315hamlib_get_defaults();
9316\#endif}
9317        xywh {696 19 80 24}
9318      }
9319    }
9320    Fl_Group grpRigHardware {
9321      label {Rig Control/Hardware PTT}
9322      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
9323      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Rig Control/Hardware PTT"));}
9324      code1 {config_pages.push_back(p);}
9325      code2 {tab_tree->add(_("Rig Control/Hardware PTT"));}
9326      code3 {tab_tree->close(_("Rig Control"));}
9327    } {
9328      Fl_Group {} {open
9329        xywh {209 27 580 38} box ENGRAVED_FRAME
9330      } {
9331        Fl_Check_Button btnPTTrightchannel {
9332          label {PTT tone on right audio channel }
9333          callback {progdefaults.PTTrightchannel = o->value();
9334btnPTTrightchannel2->value(o->value());
9335
9336if (o->value()) {
9337progdefaults.QSK = false;
9338btnQSK->value(0);
9339progdefaults.PseudoFSK = false;
9340chkPseudoFSK->value(0);
9341progdefaults.sig_on_right_channel = false;
9342chkAudioStereoOut->value(0);
9343}
9344
9345progdefaults.changed = true;}
9346          tooltip {Can be used in lieu of or in addition to other PTT types} xywh {224 36 250 20} down_box DOWN_BOX
9347          code0 {o->value(progdefaults.PTTrightchannel);}
9348        }
9349      }
9350      Fl_Group {} {
9351        label {h/w ptt device-pin} open
9352        xywh {209 67 580 184} box ENGRAVED_FRAME align 21
9353      } {
9354        Fl_Round_Button btnTTYptt {
9355          label {Use separate serial port PTT}
9356          callback {btnUsePPortPTT->value(0);
9357btnUseUHrouterPTT->value(0);
9358btn_gpio_ptt->value(0);
9359
9360if (o->value()) {
9361progdefaults.TTYptt = true;
9362progdefaults.UsePPortPTT =
9363progdefaults.UseUHrouterPTT =
9364progdefaults.RigCatRTSptt =
9365progdefaults.RigCatDTRptt =
9366progdefaults.RigCatCMDptt =
9367progdefaults.cmedia_ptt =
9368progdefaults.gpio_ptt =
9369progdefaults.HamlibCMDptt = false;
9370} else
9371progdefaults.TTYptt = false;
9372
9373btnInitHWPTT->labelcolor(FL_RED);
9374btnInitHWPTT->redraw();
9375progdefaults.changed = true;}
9376          xywh {224 94 220 20} down_box DOWN_BOX selection_color 1
9377        }
9378        Fl_Group inpTTYdev {
9379          label {Device:}
9380          callback {btnInitHWPTT->labelcolor(FL_RED);
9381btnInitHWPTT->redraw();
9382progdefaults.changed = true;} open
9383          xywh {217 135 350 22} box DOWN_BOX color 7 align 5
9384          code0 {o->labelsize(FL_NORMAL_SIZE);}
9385          class Fl_ComboBox
9386        } {}
9387        Fl_Round_Button btnSCU_17 {
9388          label {Port is second SCU-17 device}
9389          callback {progdefaults.SCU_17=o->value();
9390progdefaults.changed = true;}
9391          tooltip {Driver requires stop bits to be ZERO!} xywh {459 94 236 20} down_box DOWN_BOX selection_color 1
9392          code0 {o->value(progdefaults.SCU_17);}
9393        }
9394        Fl_Round_Button btnUsePPortPTT {
9395          label {Use parallel port PTT}
9396          callback {btnTTYptt->value(0);
9397btnUseUHrouterPTT->value(0);
9398btn_gpio_ptt->value(0);
9399
9400if (o->value()) {
9401progdefaults.UsePPortPTT = true;
9402progdefaults.TTYptt =
9403progdefaults.UseUHrouterPTT =
9404progdefaults.RigCatRTSptt =
9405progdefaults.RigCatDTRptt =
9406progdefaults.RigCatCMDptt =
9407progdefaults.cmedia_ptt =
9408progdefaults.gpio_ptt =
9409progdefaults.HamlibCMDptt = false;
9410} else
9411progdefaults.UsePPortPTT = false;
9412
9413btnInitHWPTT->labelcolor(FL_RED);
9414btnInitHWPTT->redraw();
9415progdefaults.changed = true;}
9416          xywh {224 168 170 20} down_box DOWN_BOX selection_color 1
9417        }
9418        Fl_Round_Button btnUseUHrouterPTT {
9419          label {Use uHRouter PTT}
9420          callback {btnTTYptt->value(0);
9421btnUsePPortPTT->value(0);
9422btn_gpio_ptt->value(0);
9423
9424if (o->value()) {
9425progdefaults.UseUHrouterPTT = true;
9426progdefaults.TTYptt =
9427progdefaults.UsePPortPTT =
9428progdefaults.RigCatRTSptt =
9429progdefaults.RigCatDTRptt =
9430progdefaults.RigCatCMDptt =
9431progdefaults.cmedia_ptt =
9432progdefaults.gpio_ptt =
9433progdefaults.HamlibCMDptt = false;
9434} else
9435progdefaults.UseUHrouterPTT = false;
9436
9437btnInitHWPTT->labelcolor(FL_RED);
9438btnInitHWPTT->redraw();
9439progdefaults.changed = true;}
9440          xywh {224 194 170 20} down_box DOWN_BOX selection_color 1
9441        }
9442        Fl_Round_Button btnRTSptt {
9443          label {Use RTS}
9444          callback {btnInitHWPTT->labelcolor(FL_RED);
9445btnInitHWPTT->redraw();
9446progdefaults.changed = true;}
9447          tooltip {RTS is PTT signal line} xywh {579 123 85 20} down_box DOWN_BOX
9448        }
9449        Fl_Round_Button btnRTSplusV {
9450          label {RTS = +V}
9451          callback {btnInitHWPTT->labelcolor(FL_RED);
9452btnInitHWPTT->redraw();
9453progdefaults.changed = true;}
9454          tooltip {Initial voltage on RTS} xywh {670 123 100 20} down_box DOWN_BOX
9455        }
9456        Fl_Round_Button btnDTRptt {
9457          label {Use DTR}
9458          callback {btnInitHWPTT->labelcolor(FL_RED);
9459btnInitHWPTT->redraw();
9460progdefaults.changed = true;}
9461          tooltip {DTR is PTT signal line} xywh {579 155 85 20} down_box DOWN_BOX
9462        }
9463        Fl_Round_Button btnDTRplusV {
9464          label {DTR = +V}
9465          callback {btnInitHWPTT->labelcolor(FL_RED);
9466btnInitHWPTT->redraw();
9467progdefaults.changed = true;}
9468          tooltip {Initial voltage on DTR} xywh {670 155 100 20} down_box DOWN_BOX
9469        }
9470        Fl_Check_Button btn_gpio_ptt {
9471          label {GPIO PTT (Pi specific controls)}
9472          callback {btnTTYptt->value(0);
9473btnUsePPortPTT->value(0);
9474btn_gpio_ptt2->value(o->value());
9475
9476if (o->value()) {
9477progdefaults.gpio_ptt = true;
9478progdefaults.UseUHrouterPTT =
9479progdefaults.TTYptt =
9480progdefaults.UsePPortPTT =
9481progdefaults.RigCatRTSptt =
9482progdefaults.RigCatDTRptt =
9483progdefaults.RigCatCMDptt =
9484progdefaults.cmedia_ptt =
9485progdefaults.HamlibCMDptt = false;
9486} else
9487progdefaults.gpio_ptt = false;
9488
9489btnInitHWPTT->labelcolor(FL_RED);
9490btnInitHWPTT2->labelcolor(FL_RED);
9491btnInitHWPTT->redraw();
9492btnInitHWPTT2->redraw();
9493progdefaults.changed = true;}
9494          tooltip {Select PTT on state} xywh {224 221 278 15} down_box DOWN_BOX labelfont 4
9495          code0 {o->value(progdefaults.gpio_ptt);}
9496        }
9497        Fl_Button btnInitHWPTT {
9498          label Initialize
9499          callback {progdefaults.initInterface();
9500o->labelcolor(FL_FOREGROUND_COLOR);
9501o->redraw();
9502btnInitHWPTT2->labelcolor(FL_FOREGROUND_COLOR);
9503btnInitHWPTT2->redraw();
9504progdefaults.changed = true;}
9505          tooltip {Initialize the H/W PTT interface} xywh {649 212 113 24}
9506        }
9507      }
9508      Fl_Group grpPTTdelays {
9509        label {PTT delays valid for all CAT/PTT types} open
9510        xywh {210 252 580 91} box ENGRAVED_FRAME align 21
9511      } {
9512        Fl_Counter cntPTT_on_delay {
9513          label {Start of transmit PTT delay}
9514          callback {progdefaults.PTT_on_delay = o->value();
9515progdefaults.changed = true;}
9516          tooltip {Delay NN msec before starting audio} xywh {274 279 100 21} align 8 minimum 0 maximum 5000 step 10
9517          code0 {o->value(progdefaults.PTT_on_delay);}
9518          code1 {o->lstep(100);}
9519        }
9520        Fl_Counter cntPTT_off_delay {
9521          label {PTT end of transmit delay}
9522          callback {progdefaults.PTT_off_delay = o->value();
9523progdefaults.changed = true;}
9524          tooltip {Delay NN msec before releasing PTT} xywh {274 309 100 21} align 8 minimum 0 maximum 5000 step 10
9525          code0 {o->value(progdefaults.PTT_off_delay);}
9526          code1 {o->lstep(100);}
9527        }
9528      }
9529    }
9530    Fl_Group grp_cmedia_ptt {
9531      label {C-Media PTT}
9532      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
9533      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("C-Media PTT"));}
9534      code1 {config_pages.push_back(p);}
9535      code2 {tab_tree->add(_("Rig Control/C-Media PTT"));}
9536      code3 {tab_tree->close(_("Rig Control"));}
9537    } {
9538      Fl_Group {} {
9539        label {C-Media audio codecs used in DRA Series have 8 user controllable GPIO pins. GPIO signal line 3 (pin 13) is used for PTT control.
9540
9541Fldigi accesses the GPIO lines as a Human Interface Device (HID).  Discovered C-Media devices are enumerated in the 'C-Media device' list box.
9542
9543On Linux: add a file named cmedia.rules to /etc/udev/rules.d/
9544The file should contain a single line
9545
9546KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"} open
9547        xywh {205 30 590 173} align 148
9548      } {}
9549      Fl_Round_Button btn_use_cmedia_PTT {
9550        label {Use C-Media PTT}
9551        callback {if (o->value()) {
9552progdefaults.cmedia_ptt = true;
9553progdefaults.UsePPortPTT =
9554progdefaults.UseUHrouterPTT =
9555progdefaults.RigCatRTSptt =
9556progdefaults.RigCatDTRptt =
9557progdefaults.RigCatCMDptt =
9558progdefaults.HamlibCMDptt = false;
9559btn_init_cmedia_PTT->labelcolor(FL_RED);
9560btn_init_cmedia_PTT->redraw();
9561} else {
9562progdefaults.cmedia_ptt = false;
9563close_cmedia();
9564}
9565progdefaults.changed = true;}
9566        xywh {235 218 220 20} down_box DOWN_BOX selection_color 1
9567      }
9568      Fl_Group inp_cmedia_dev {
9569        label {C-Media device}
9570        callback {close_cmedia();
9571progdefaults.cmedia_device = o->value();
9572btn_init_cmedia_PTT->labelcolor(FL_RED);
9573btn_init_cmedia_PTT->redraw();
9574progdefaults.changed = true;} open
9575        xywh {235 261 350 22} box DOWN_BOX color 7 align 5
9576        code0 {o->labelsize(FL_NORMAL_SIZE);}
9577        code1 {o->value(progdefaults.cmedia_device.c_str());}
9578        class Fl_ComboBox
9579      } {}
9580      Fl_Group inp_cmedia_GPIO_line {
9581        label {GPIO line}
9582        callback {progdefaults.cmedia_gpio_line = o->value();} open
9583        xywh {235 304 114 22} box DOWN_BOX color 7 align 5
9584        code0 {o->labelsize(FL_NORMAL_SIZE);}
9585        code1 {o->value(progdefaults.cmedia_gpio_line);}
9586        code2 {o->add("GPIO-1|GPIO-2|GPIO-3|GPIO-4");}
9587        class Fl_ComboBox
9588      } {}
9589      Fl_Button btn_init_cmedia_PTT {
9590        label Select
9591        callback {progdefaults.initInterface();
9592o->labelcolor(FL_FOREGROUND_COLOR);
9593progdefaults.changed = true;}
9594        tooltip {Select device & Initialize the H/W PTT interface} xywh {600 261 70 22}
9595      }
9596      Fl_Button btn_test_cmedia {
9597        label TEST
9598        callback {test_hid_ptt();}
9599        tooltip {Toggles PTT line 20x; check DRA-30 ptt LED} xywh {695 261 70 22}
9600        code0 {\#include "cmedia.h"}
9601      }
9602    }
9603    Fl_Group {} {
9604      label {Soundcard/Alerts}
9605      xywh {200 0 600 350} box ENGRAVED_BOX color 50 selection_color 50 align 21 hide
9606      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Alerts"));}
9607      code1 {config_pages.push_back(p);}
9608      code2 {tab_tree->add(_("Soundcard/Alerts"));}
9609    } {
9610      Fl_Group {} {open
9611        xywh {203 18 590 64} box ENGRAVED_BOX align 17
9612      } {
9613        Fl_File_Input inp_wav_fname_regex {
9614          label {REGEX detected wav}
9615          xywh {208 41 304 35} align 5
9616          code0 {o->value(progdefaults.BWSR_REGEX_MATCH.c_str());}
9617        }
9618        Fl_Button btn_select_regex_wav {
9619          label Select
9620          callback {Fl_Native_File_Chooser fnfc;
9621fnfc.title("Pick a file");
9622fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
9623fnfc.filter("wav files\\t*.{mp3,wav}\\n");
9624fnfc.directory("./");           // default directory to use
9625// Show native chooser
9626switch ( fnfc.show() ) {
9627  case -1: break; // ERROR
9628  case  1: break; // CANCEL
9629  default: {
9630  	progdefaults.BWSR_REGEX_MATCH = fnfc.filename();
9631  	inp_wav_fname_regex->value(progdefaults.BWSR_REGEX_MATCH.c_str());
9632	progdefaults.REGEX_ALERT_MENU = 0;
9633	mnu_regex_alert_menu->value(progdefaults.REGEX_ALERT_MENU);
9634  	break; // FILE CHOSEN
9635  }
9636}}
9637          xywh {514 52 60 24}
9638          code0 {\#include <FL/Fl_Native_File_Chooser.H>}
9639        }
9640        Fl_Choice mnu_regex_alert_menu {
9641          label {Sound:}
9642          callback {if (o->value() > 0) {
9643  switch (o->value()) {
9644    case 1 : progdefaults.BWSR_REGEX_MATCH = "bark"; break;
9645    case 2 : progdefaults.BWSR_REGEX_MATCH = "checkout"; break;
9646    case 3 : progdefaults.BWSR_REGEX_MATCH = "diesel"; break;
9647    case 4 : progdefaults.BWSR_REGEX_MATCH = "steam_train"; break;
9648    case 5 : progdefaults.BWSR_REGEX_MATCH = "doesnot"; break;
9649    case 6 : progdefaults.BWSR_REGEX_MATCH = "beeboo"; break;
9650    case 7 : progdefaults.BWSR_REGEX_MATCH = "phone"; break;
9651    case 8 : progdefaults.BWSR_REGEX_MATCH = "dinner_bell"; break;
9652    case 9 : progdefaults.BWSR_REGEX_MATCH = "rtty_bell"; break;
9653    case 10 : progdefaults.BWSR_REGEX_MATCH = "standard_tone"; break;
9654  }
9655  inp_wav_fname_regex->value(progdefaults.BWSR_REGEX_MATCH.c_str());
9656}
9657progdefaults.REGEX_ALERT_MENU = o->value();} open
9658          xywh {578 52 135 24} box DOWN_BOX down_box BORDER_BOX color 53 align 5
9659          code0 {o->add("wav file|bark|checkout|diesel|steam_train|doesnot|beeboo|phone|dinner_bell|rtty_bell|standard_tone");}
9660          code1 {o->value(progdefaults.REGEX_ALERT_MENU);}
9661        } {}
9662        Fl_Check_Button btn_enable_regex_match_wa {
9663          label Enable
9664          callback {progdefaults.ENABLE_BWSR_REGEX_MATCH=o->value();}
9665          xywh {718 31 70 15} down_box DOWN_BOX
9666          code0 {o->value(progdefaults.ENABLE_BWSR_REGEX_MATCH);}
9667        }
9668        Fl_Button btn_test_regex_wav {
9669          label Test
9670          callback {audio_alert->alert(progdefaults.BWSR_REGEX_MATCH.c_str());}
9671          xywh {718 52 60 24}
9672          code0 {\#include "audio_alert.h"}
9673        }
9674      }
9675      Fl_Group {} {open
9676        xywh {203 81 590 64} box ENGRAVED_BOX align 17
9677      } {
9678        Fl_File_Input inp_wav_fname_mycall {
9679          label {MYCALL detected wav}
9680          xywh {208 103 304 35} align 5
9681          code0 {o->value(progdefaults.BWSR_MYCALL_MATCH.c_str());}
9682        }
9683        Fl_Button btn_select_mycall_wav {
9684          label Select
9685          callback {Fl_Native_File_Chooser fnfc;
9686fnfc.title("Pick a file");
9687fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
9688fnfc.filter("wav files\\t*.{mp3,wav}\\n");
9689fnfc.directory("./");           // default directory to use
9690// Show native chooser
9691switch ( fnfc.show() ) {
9692  case -1: break; // ERROR
9693  case  1: break; // CANCEL
9694  default: {
9695  	progdefaults.BWSR_MYCALL_MATCH = fnfc.filename();
9696  	inp_wav_fname_mycall->value(progdefaults.BWSR_MYCALL_MATCH.c_str());
9697	progdefaults.MYCALL_ALERT_MENU = 0;
9698  	mnu_mycall_alert_menu->value(progdefaults.MYCALL_ALERT_MENU);
9699  	break; // FILE CHOSEN
9700  }
9701}}
9702          xywh {514 114 60 24}
9703        }
9704        Fl_Choice mnu_mycall_alert_menu {
9705          label {Sound:}
9706          callback {if (o->value() > 0) {
9707  switch (o->value()) {
9708    case 1 : progdefaults.BWSR_MYCALL_MATCH = "bark"; break;
9709    case 2 : progdefaults.BWSR_MYCALL_MATCH = "checkout"; break;
9710    case 3 : progdefaults.BWSR_MYCALL_MATCH = "diesel"; break;
9711    case 4 : progdefaults.BWSR_MYCALL_MATCH = "steam_train"; break;
9712    case 5 : progdefaults.BWSR_MYCALL_MATCH = "doesnot"; break;
9713    case 6 : progdefaults.BWSR_MYCALL_MATCH = "beeboo"; break;
9714    case 7 : progdefaults.BWSR_MYCALL_MATCH = "phone"; break;
9715    case 8 : progdefaults.BWSR_MYCALL_MATCH = "dinner_bell"; break;
9716    case 9 : progdefaults.BWSR_MYCALL_MATCH = "rtty_bell"; break;
9717    case 10 : progdefaults.BWSR_MYCALL_MATCH = "standard_tone"; break;
9718  }
9719  inp_wav_fname_mycall->value(progdefaults.BWSR_MYCALL_MATCH.c_str());
9720}
9721progdefaults.MYCALL_ALERT_MENU = o->value();} open
9722          xywh {578 114 135 24} box DOWN_BOX down_box BORDER_BOX color 53 align 5
9723          code0 {o->add("wav file|bark|checkout|diesel|steam_train|doesnot|beeboo|phone|dinner_bell|rtty_bell|standard_tone");}
9724          code1 {o->value(progdefaults.MYCALL_ALERT_MENU);}
9725        } {}
9726        Fl_Check_Button btn_enable_mycall_match_wav {
9727          label Enable
9728          callback {progdefaults.ENABLE_BWSR_MYCALL_MATCH=o->value();}
9729          xywh {718 92 70 15} down_box DOWN_BOX
9730          code0 {o->value(progdefaults.ENABLE_BWSR_MYCALL_MATCH);}
9731        }
9732        Fl_Button btn_test_mycall_wav {
9733          label Test
9734          callback {audio_alert->alert(progdefaults.BWSR_MYCALL_MATCH.c_str());}
9735          xywh {718 114 60 24}
9736        }
9737      }
9738      Fl_Group {} {open
9739        xywh {203 144 590 64} box ENGRAVED_BOX align 17
9740      } {
9741        Fl_File_Input inp_wav_fname_rsid {
9742          label {RsID audio alert wav}
9743          xywh {208 166 304 35} align 5
9744          code0 {o->value(progdefaults.RSID_MATCH.c_str());}
9745        }
9746        Fl_Button btn_select_rsid_wav {
9747          label Select
9748          callback {Fl_Native_File_Chooser fnfc;
9749fnfc.title("Pick a file");
9750fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
9751fnfc.filter("wav files\\t*.{mp3,wav}\\n");
9752fnfc.directory("./");           // default directory to use
9753// Show native chooser
9754switch ( fnfc.show() ) {
9755  case -1: break; // ERROR
9756  case  1: break; // CANCEL
9757  default: {
9758  	progdefaults.RSID_MATCH = fnfc.filename();
9759  	inp_wav_fname_rsid->value(progdefaults.RSID_MATCH.c_str());
9760  	progdefaults.RSID_ALERT_MENU = 0;
9761  	mnu_rsid_alert_menu->value(progdefaults.RSID_ALERT_MENU);
9762  	break; // FILE CHOSEN
9763  }
9764}}
9765          xywh {514 177 60 24}
9766        }
9767        Fl_Choice mnu_rsid_alert_menu {
9768          label {Sound:}
9769          callback {if (o->value() > 0) {
9770  switch (o->value()) {
9771    case 1 : progdefaults.RSID_MATCH = "bark"; break;
9772    case 2 : progdefaults.RSID_MATCH = "checkout"; break;
9773    case 3 : progdefaults.RSID_MATCH = "diesel"; break;
9774    case 4 : progdefaults.RSID_MATCH = "steam_train"; break;
9775    case 5 : progdefaults.RSID_MATCH = "doesnot"; break;
9776    case 6 : progdefaults.RSID_MATCH = "beeboo"; break;
9777    case 7 : progdefaults.RSID_MATCH = "phone"; break;
9778    case 8 : progdefaults.RSID_MATCH = "dinner_bell"; break;
9779    case 9 : progdefaults.RSID_MATCH = "rtty_bell"; break;
9780    case 10 : progdefaults.RSID_MATCH = "standard_tone"; break;
9781  }
9782  inp_wav_fname_rsid->value(progdefaults.RSID_MATCH.c_str());
9783}
9784progdefaults.RSID_ALERT_MENU = o->value();} open
9785          xywh {578 177 135 24} box DOWN_BOX down_box BORDER_BOX color 53 align 5
9786          code0 {o->add("wav file|bark|checkout|diesel|steam_train|doesnot|beeboo|phone|dinner_bell|rtty_bell|standard_tone");}
9787          code1 {o->value(progdefaults.RSID_ALERT_MENU);}
9788        } {}
9789        Fl_Check_Button btn_enable_rsid_match_wav {
9790          label Enable
9791          callback {progdefaults.ENABLE_RSID_MATCH=o->value();}
9792          xywh {718 156 70 15} down_box DOWN_BOX
9793          code0 {o->value(progdefaults.ENABLE_RSID_MATCH);}
9794        }
9795        Fl_Button btn_test_rsid_wav {
9796          label Test
9797          callback {audio_alert->alert(progdefaults.RSID_MATCH.c_str());}
9798          xywh {718 177 60 24}
9799        }
9800      }
9801      Fl_Group {} {open
9802        xywh {203 207 590 114} box ENGRAVED_BOX align 17
9803      } {
9804        Fl_File_Input inp_wav_flmsg_rcvd {
9805          label {flmsg received wav}
9806          xywh {208 227 304 35} align 5
9807          code0 {o->value(progdefaults.RX_EXTRACT_MSG_RCVD.c_str());}
9808        }
9809        Fl_Button btn_select_rx_extract_msg {
9810          label Select
9811          callback {Fl_Native_File_Chooser fnfc;
9812fnfc.title("Pick a file");
9813fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
9814fnfc.filter("wav files\\t*.{mp3,wav}\\n");
9815fnfc.directory("./");           // default directory to use
9816// Show native chooser
9817switch ( fnfc.show() ) {
9818  case -1: break; // ERROR
9819  case  1: break; // CANCEL
9820  default: {
9821  	progdefaults.RX_EXTRACT_MSG_RCVD = fnfc.filename();
9822  	inp_wav_flmsg_rcvd->value(progdefaults.RX_EXTRACT_MSG_RCVD.c_str());
9823  	progdefaults.RX_EXTRACT_ALERT_MENU = 0;
9824  	mnu_rx_extract_alert_menu->value(progdefaults.RX_EXTRACT_ALERT_MENU);
9825  	break; // FILE CHOSEN
9826  }
9827}}
9828          xywh {514 238 60 24}
9829        }
9830        Fl_Choice mnu_rx_extract_alert_menu {
9831          label {Sound:}
9832          callback {if (o->value() > 0) {
9833  switch (o->value()) {
9834    case 1 : progdefaults.RX_EXTRACT_MSG_RCVD = "bark"; break;
9835    case 2 : progdefaults.RX_EXTRACT_MSG_RCVD = "checkout"; break;
9836    case 3 : progdefaults.RX_EXTRACT_MSG_RCVD = "diesel"; break;
9837    case 4 : progdefaults.RX_EXTRACT_MSG_RCVD = "steam_train"; break;
9838    case 5 : progdefaults.RX_EXTRACT_MSG_RCVD = "doesnot"; break;
9839    case 6 : progdefaults.RX_EXTRACT_MSG_RCVD = "beeboo"; break;
9840    case 7 : progdefaults.RX_EXTRACT_MSG_RCVD = "phone"; break;
9841    case 8 : progdefaults.RX_EXTRACT_MSG_RCVD = "dinner_bell"; break;
9842    case 9 : progdefaults.RX_EXTRACT_MSG_RCVD = "rtty_bell"; break;
9843    case 10 : progdefaults.RX_EXTRACT_MSG_RCVD = "standard_tone"; break;
9844  }
9845  inp_wav_flmsg_rcvd->value(progdefaults.RX_EXTRACT_MSG_RCVD.c_str());
9846}
9847progdefaults.RX_EXTRACT_ALERT_MENU = o->value();} open
9848          xywh {578 238 135 24} box DOWN_BOX down_box BORDER_BOX color 53 align 5
9849          code0 {o->add("wav file|bark|checkout|diesel|steam_train|doesnot|beeboo|phone|dinner_bell|rtty_bell|standard_tone");}
9850          code1 {o->value(progdefaults.RX_EXTRACT_ALERT_MENU);}
9851        } {}
9852        Fl_Check_Button btn_enable_flmsg_wav {
9853          label Enable
9854          callback {progdefaults.ENABLE_RX_EXTRACT_MSG_RCVD=o->value();}
9855          xywh {718 216 70 15} down_box DOWN_BOX
9856          code0 {o->value(progdefaults.ENABLE_RX_EXTRACT_MSG_RCVD);}
9857        }
9858        Fl_Button btn_test_flmsg_extract_wav {
9859          label Test
9860          callback {audio_alert->alert(progdefaults.RX_EXTRACT_MSG_RCVD.c_str());}
9861          xywh {718 238 60 24}
9862        }
9863        Fl_File_Input inp_wav_flmsg_timed_out {
9864          label {flmsg timed out wav}
9865          xywh {208 282 304 35} align 5
9866          code0 {o->value(progdefaults.RX_EXTRACT_TIMED_OUT.c_str());}
9867        }
9868        Fl_Button btn_select_rx_extract_timed_out {
9869          label Select
9870          callback {Fl_Native_File_Chooser fnfc;
9871fnfc.title("Pick a file");
9872fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
9873fnfc.filter("wav files\\t*.{mp3,wav}\\n");
9874fnfc.directory("./");           // default directory to use
9875// Show native chooser
9876switch ( fnfc.show() ) {
9877  case -1: break; // ERROR
9878  case  1: break; // CANCEL
9879  default: {
9880  	progdefaults.RX_EXTRACT_TIMED_OUT = fnfc.filename();
9881  	inp_wav_flmsg_timed_out->value(progdefaults.RX_EXTRACT_TIMED_OUT.c_str());
9882  	progdefaults.TIMED_OUT_ALERT_MENU = 0;
9883  	mnu_rx_timed_out_alert_menu->value(progdefaults.TIMED_OUT_ALERT_MENU);
9884  	break; // FILE CHOSEN
9885  }
9886}}
9887          xywh {514 293 60 24}
9888        }
9889        Fl_Choice mnu_rx_timed_out_alert_menu {
9890          label {Sound:}
9891          callback {if (o->value() > 0) {
9892  switch (o->value()) {
9893    case 1 : progdefaults.RX_EXTRACT_TIMED_OUT = "bark"; break;
9894    case 2 : progdefaults.RX_EXTRACT_TIMED_OUT = "checkout"; break;
9895    case 3 : progdefaults.RX_EXTRACT_TIMED_OUT = "diesel"; break;
9896    case 4 : progdefaults.RX_EXTRACT_TIMED_OUT = "steam_train"; break;
9897    case 5 : progdefaults.RX_EXTRACT_TIMED_OUT = "doesnot"; break;
9898    case 6 : progdefaults.RX_EXTRACT_TIMED_OUT = "beeboo"; break;
9899    case 7 : progdefaults.RX_EXTRACT_TIMED_OUT = "phone"; break;
9900    case 8 : progdefaults.RX_EXTRACT_TIMED_OUT = "dinner_bell"; break;
9901    case 9 : progdefaults.RX_EXTRACT_TIMED_OUT = "rtty_bell"; break;
9902    case 10 : progdefaults.RX_EXTRACT_TIMED_OUT = "standard_tone"; break;
9903  }
9904  inp_wav_flmsg_timed_out->value(progdefaults.RX_EXTRACT_TIMED_OUT.c_str());
9905}
9906progdefaults.TIMED_OUT_ALERT_MENU = o->value();} open
9907          xywh {578 293 135 24} box DOWN_BOX down_box BORDER_BOX color 53 align 5
9908          code0 {o->add("wav file|bark|checkout|diesel|steam_train|doesnot|beeboo|phone|dinner_bell|rtty_bell|standard_tone");}
9909          code1 {o->value(progdefaults.TIMED_OUT_ALERT_MENU);}
9910        } {}
9911        Fl_Button btn_test_rx_extract_timed_out {
9912          label Test
9913          callback {audio_alert->alert(progdefaults.RX_EXTRACT_TIMED_OUT.c_str());}
9914          xywh {718 293 60 24}
9915        }
9916        Fl_Check_Button btn_enable_flmsg_time_out_wav {
9917          label Enable
9918          callback {progdefaults.ENABLE_RX_EXTRACT_TIMED_OUT=o->value();}
9919          xywh {718 271 70 15} down_box DOWN_BOX
9920          code0 {o->value(progdefaults.ENABLE_RX_EXTRACT_TIMED_OUT);}
9921        }
9922      }
9923      Fl_Value_Slider sldrAlertVolume {
9924        label {Alert volume}
9925        callback {progdefaults.alert_volume = (int)o->value();
9926progdefaults.changed = true;}
9927        xywh {256 325 403 20} type Horizontal align 8 maximum 100 step 1 value 20 textsize 14
9928        code0 {o->value(progdefaults.alert_volume);}
9929        code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
9930        class Fl_Value_Slider2
9931      }
9932    }
9933    Fl_Group grpSoundDevices {
9934      label {Soundcard/Devices}
9935      xywh {200 -4 600 350} box ENGRAVED_BOX align 21 hide
9936      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Devices"));}
9937      code1 {config_pages.push_back(p);}
9938      code2 {tab_tree->add(_("Soundcard/Devices"));}
9939    } {
9940      Fl_Group AudioOSS {open
9941        xywh {255 20 500 45} box ENGRAVED_FRAME
9942      } {
9943        Fl_Round_Button {btnAudioIO[0]} {
9944          label OSS
9945          callback {sound_update(SND_IDX_OSS);
9946progdefaults.changed = true;
9947resetSoundCard();}
9948          tooltip {Use OSS audio server} xywh {267 30 53 25} down_box DOWN_BOX selection_color 1
9949        }
9950        Fl_Input_Choice menuOSSDev {
9951          label {Device:}
9952          callback {scDevice[0] = scDevice[1] = progdefaults.OSSdevice = o->value();
9953resetSoundCard();
9954progdefaults.changed = true;} open
9955          tooltip {Select device} xywh {572 30 165 25}
9956          code0 {o->value(progdefaults.OSSdevice.c_str());}
9957        } {}
9958      }
9959      Fl_Group AudioPort {open
9960        xywh {255 65 500 79} box ENGRAVED_FRAME
9961      } {
9962        Fl_Round_Button {btnAudioIO[1]} {
9963          label PortAudio
9964          callback {sound_update(SND_IDX_PORT);
9965progdefaults.changed = true;
9966resetSoundCard();}
9967          tooltip {Use Port Audio server} xywh {267 93 95 25} down_box DOWN_BOX selection_color 1
9968        }
9969        Fl_Choice menuPortInDev {
9970          label {Capture:}
9971          callback {scDevice[0] = progdefaults.PortInDevice = o->text();
9972progdefaults.PortInIndex = reinterpret_cast<intptr_t>(o->mvalue()->user_data());
9973resetSoundCard();
9974progdefaults.changed = true;} open
9975          tooltip {Audio input device} xywh {427 76 310 25} down_box BORDER_BOX
9976        } {}
9977        Fl_Choice menuPortOutDev {
9978          label {Playback:}
9979          callback {scDevice[1] = progdefaults.PortOutDevice = o->text();
9980progdefaults.PortOutIndex = reinterpret_cast<intptr_t>(o->mvalue()->user_data());
9981resetSoundCard();
9982progdefaults.changed = true;} open
9983          tooltip {Audio output device} xywh {427 111 310 25} down_box BORDER_BOX
9984        } {}
9985      }
9986      Fl_Group AudioPulse {open
9987        xywh {255 145 500 45} box ENGRAVED_FRAME
9988      } {
9989        Fl_Round_Button {btnAudioIO[2]} {
9990          label PulseAudio
9991          callback {sound_update(SND_IDX_PULSE);
9992progdefaults.changed = true;
9993resetSoundCard();}
9994          tooltip {Use Pulse Audio server} xywh {267 156 100 25} down_box DOWN_BOX selection_color 1
9995        }
9996        Fl_Input inpPulseServer {
9997          label {Server string:}
9998          callback {scDevice[0] = scDevice[1] = progdefaults.PulseServer = o->value();
9999resetSoundCard();
10000progdefaults.changed = true;}
10001          tooltip {Leave this blank or refer to
10002http://www.pulseaudio.org/wiki/ServerStrings} xywh {512 156 225 24}
10003          code0 {o->value(progdefaults.PulseServer.c_str());}
10004          code1 {inpPulseServer->labelsize(FL_NORMAL_SIZE);}
10005          class Fl_Input2
10006        }
10007      }
10008      Fl_Group AudioNull {open
10009        xywh {255 190 135 45} box ENGRAVED_FRAME
10010      } {
10011        Fl_Round_Button {btnAudioIO[3]} {
10012          label {File I/O only}
10013          callback {sound_update(SND_IDX_NULL);
10014progdefaults.changed = true;
10015resetSoundCard();}
10016          tooltip {NO AUDIO DEVICE AVAILABLE (or testing)} xywh {268 200 100 25} down_box DOWN_BOX selection_color 1
10017        }
10018      }
10019      Fl_Group AudioDuplex {open
10020        xywh {390 190 365 45} box ENGRAVED_FRAME
10021      } {
10022        Fl_Round_Button btn_is_full_duplex {
10023          label {Device supports full duplex}
10024          callback {progdefaults.is_full_duplex = o->value();
10025progdefaults.changed = true;
10026resetSoundCard();}
10027          tooltip {Capture/Playback supports full duplex operation} xywh {433 200 225 25} down_box DOWN_BOX value 1 selection_color 1
10028          code0 {o->value(progdefaults.is_full_duplex);}
10029        }
10030      }
10031      Fl_Group AudioAlerts {open
10032        xywh {255 235 500 90} box ENGRAVED_FRAME align 0
10033      } {
10034        Fl_Choice menuAlertsDev {
10035          label {Audio device shared by Audio Alerts and Rx Monitor}
10036          callback {progdefaults.AlertDevice = o->text();
10037progdefaults.AlertIndex = reinterpret_cast<intptr_t>(o->mvalue()->user_data());
10038progdefaults.changed = true;} open
10039          tooltip {Audio output device} xywh {265 260 365 25} down_box BORDER_BOX align 5
10040        } {}
10041        Fl_Round_Button btn_enable_audio_alerts {
10042          label Enable
10043          callback {progdefaults.enable_audio_alerts = o->value();
10044progdefaults.changed = true;
10045reset_audio_alerts();}
10046          tooltip {First select audio alert playback device} xywh {657 260 76 25} down_box DOWN_BOX selection_color 1
10047          code0 {o->value(progdefaults.enable_audio_alerts);}
10048        }
10049        Fl_Box {} {
10050          label {Note: must be selected and enabled for Rx Audio monitoring!}
10051          xywh {265 295 473 22} align 16
10052        }
10053      }
10054    }
10055    Fl_Group {} {
10056      label {Soundcard/Right channel}
10057      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10058      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Right channel"));}
10059      code1 {config_pages.push_back(p);}
10060      code2 {tab_tree->add(_("Soundcard/Right channel"));}
10061    } {
10062      Fl_Group {} {
10063        label {Transmit Usage} open
10064        xywh {236 33 550 246} box ENGRAVED_FRAME align 21
10065      } {
10066        Fl_Check_Button chkAudioStereoOut {
10067          label {Modem signal on left and right channels}
10068          callback {progdefaults.sig_on_right_channel = o->value();
10069progdefaults.changed = true;
10070if (o->value()) {
10071  progdefaults.QSK = false;
10072  btnQSK->value(0);
10073  btnQSK2->value(0);
10074  progdefaults.PseudoFSK = false;
10075  chkPseudoFSK->value(0);
10076  chkPseudoFSK2->value(0);
10077  progdefaults.PTTrightchannel = false;
10078  btnPTTrightchannel->value(0);
10079  btnPTTrightchannel2->value(0);
10080}}
10081          tooltip {Left and right channels both contain modem audio} xywh {376 54 280 20} down_box DOWN_BOX
10082          code0 {chkAudioStereoOut->value(progdefaults.sig_on_right_channel);}
10083        }
10084        Fl_Check_Button chkReverseAudio {
10085          label {Reverse Left/Right channels}
10086          callback {progdefaults.ReverseAudio = o->value();
10087progdefaults.changed = true;}
10088          tooltip {Software reversal of left-right audio channels} xywh {376 84 270 20} down_box DOWN_BOX
10089          code0 {o->value(progdefaults.ReverseAudio);}
10090        }
10091        Fl_Group {} {
10092          label {...
10093These controls are on other tabs.
10094They are replicated here for convenience.
10095You may change the state from either location.
10096...} open
10097          xywh {286 107 454 162} box ENGRAVED_FRAME align 18
10098        } {
10099          Fl_Check_Button btnPTTrightchannel2 {
10100            label {PTT tone on right audio channel }
10101            callback {progdefaults.PTTrightchannel = o->value();
10102btnPTTrightchannel->value(o->value());
10103progdefaults.changed = true;
10104if (o->value()) {
10105  progdefaults.QSK = false;
10106  btnQSK->value(0);
10107  btnQSK2->value(0);
10108  progdefaults.PseudoFSK = false;
10109  chkPseudoFSK->value(0);
10110  chkPseudoFSK2->value(0);
10111  progdefaults.sig_on_right_channel = false;
10112  chkAudioStereoOut->value(0);
10113}}
10114            tooltip {1000 Hz tone when PTT enabled
10115Can be used in lieu of or in addition to other PTT types} xywh {376 114 250 20} down_box DOWN_BOX
10116            code0 {o->value(progdefaults.PTTrightchannel);}
10117          }
10118          Fl_Check_Button btnQSK2 {
10119            label {CW QSK signal on right channel}
10120            callback {progdefaults.QSK = o->value();
10121btnQSK->value(o->value());
10122progdefaults.changed = true;
10123if (o->value()) {
10124  progdefaults.sig_on_right_channel = false;
10125  chkAudioStereoOut->value(0);
10126  progdefaults.PTTrightchannel = false;
10127  btnPTTrightchannel->value(0);
10128  btnPTTrightchannel2->value(0);
10129}}
10130            tooltip {Generate 1000 Hz square wave signal on right channel} xywh {376 144 211 20} down_box DOWN_BOX
10131            code0 {o->value(progdefaults.QSK);}
10132          }
10133          Fl_Check_Button chkPseudoFSK2 {
10134            label {Pseudo-FSK on right audio channel}
10135            callback {progdefaults.PseudoFSK = o->value();
10136chkPseudoFSK->value(o->value());
10137progdefaults.changed = true;
10138if (o->value()) {
10139  progdefaults.sig_on_right_channel = false;
10140  chkAudioStereoOut->value(0);
10141  progdefaults.PTTrightchannel = false;
10142  btnPTTrightchannel->value(0);
10143  btnPTTrightchannel2->value(0);
10144}}
10145            tooltip {Create 1000 Hz square wave on right channel} xywh {376 175 270 20} down_box DOWN_BOX
10146            code0 {o->value(progdefaults.PseudoFSK);}
10147          }
10148        }
10149      }
10150      Fl_Group {} {
10151        label {Receive Usage} open
10152        xywh {236 282 550 60} box ENGRAVED_FRAME align 21
10153      } {
10154        Fl_Check_Button chkReverseRxAudio {
10155          label {Reverse Left/Right channels}
10156          callback {progdefaults.ReverseRxAudio = o->value();
10157progdefaults.changed = true;}
10158          tooltip {Software reversal of left-right audio channels} xywh {376 300 270 20} down_box DOWN_BOX
10159          code0 {o->value(progdefaults.ReverseRxAudio);}
10160        }
10161      }
10162    }
10163    Fl_Group {} {
10164      label {Soundcard/Settings}
10165      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10166      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Settings"));}
10167      code1 {config_pages.push_back(p);}
10168      code2 {tab_tree->add(_("Soundcard/Settings"));}
10169    } {
10170      Fl_Group grpAudioSampleRate {
10171        label {Sample rate} open
10172        xywh {260 48 490 90} box ENGRAVED_FRAME align 21
10173      } {
10174        Fl_Group menuInSampleRate {
10175          label Capture
10176          callback {progdefaults.in_sample_rate = o->index() > 1 ? strtol(o->value(), 0, 10) : o->index();
10177resetSoundCard();
10178progdefaults.changed = true;} open
10179          tooltip {Force a specific sample rate. Select "Native" if "Auto"
10180does not work well with your audio device.} xywh {284 77 100 22} box DOWN_BOX color 7 align 8
10181          code0 {o->clear_changed();}
10182          code1 {o->labelsize(FL_NORMAL_SIZE);}
10183          class Fl_ListBox
10184        } {}
10185        Fl_Group menuOutSampleRate {
10186          label Playback
10187          callback {progdefaults.out_sample_rate = o->index() > 1 ? strtol(o->value(), 0, 10) : o->index();
10188resetSoundCard();
10189progdefaults.changed = true;} open
10190          xywh {284 107 100 22} box DOWN_BOX color 7 align 8
10191          code0 {o->clear_changed();}
10192          code1 {o->tooltip(menuInSampleRate->tooltip());}
10193          code2 {o->labelsize(FL_NORMAL_SIZE);}
10194          class Fl_ListBox
10195        } {}
10196        Fl_Group menuSampleConverter {
10197          label Converter
10198          callback {if ((o->index()) == FLDIGI_SRC_BEST)
10199    fl_alert2("The best quality SINC interpolator has very high CPU overhead");
10200progdefaults.sample_converter = sample_rate_converters[o->index()];
10201resetSoundCard();
10202progdefaults.changed = true;
10203o->tooltip(src_get_description(progdefaults.sample_converter));} open
10204          tooltip {Set the type of resampler used of offset correction} xywh {524 77 216 22} box DOWN_BOX color 7 align 5
10205          code0 {\#include <FL/fl_ask.H>}
10206          code1 {o->labelsize(FL_NORMAL_SIZE);}
10207          class Fl_ListBox
10208        } {}
10209      }
10210      Fl_Group {} {
10211        label Corrections open
10212        xywh {260 138 490 62} box ENGRAVED_FRAME align 21
10213      } {
10214        Fl_Spinner cntRxRateCorr {
10215          label {RX ppm}
10216          callback {progdefaults.RX_corr = (int)o->value();
10217cnt_fmt_rx_ppm->value(progdefaults.RX_corr);
10218progdefaults.changed = true;}
10219          tooltip {RX sound card correction} xywh {284 165 85 20} align 8
10220          code0 {o->step(1);}
10221          code1 {o->minimum(-50000);}
10222          code2 {o->maximum(50000);}
10223          code3 {o->labelsize(FL_NORMAL_SIZE);}
10224          class Fl_Spinner2
10225        }
10226        Fl_Spinner cntTxRateCorr {
10227          label {TX ppm}
10228          callback {progdefaults.TX_corr = (int)o->value();
10229progdefaults.changed = true;}
10230          tooltip {TX sound card correction} xywh {431 165 85 20} align 8
10231          code0 {o->step(1);}
10232          code1 {o->minimum(-50000);}
10233          code2 {o->maximum(50000);}
10234          code3 {o->labelsize(FL_NORMAL_SIZE);}
10235          class Fl_Spinner2
10236        }
10237        Fl_Spinner cntTxOffset {
10238          label {TX offset}
10239          callback {progdefaults.TxOffset = (int)o->value();
10240progdefaults.changed = true;}
10241          tooltip {Difference between Rx & Tx freq (rig offset)} xywh {591 165 85 20} align 8
10242          code0 {o->value(progdefaults.TxOffset);}
10243          code1 {o->step(1);}
10244          code2 {o->minimum(-50); o->maximum(50);}
10245          code3 {o->labelsize(FL_NORMAL_SIZE);}
10246          class Fl_Spinner2
10247        }
10248      }
10249      Fl_Group {} {
10250        label {Frequency Analysis / FMT Rx Correction} open
10251        xywh {260 200 490 76} box ENGRAVED_FRAME align 21
10252      } {
10253        Fl_Button bnt_dec_rit {
10254          label {@|<}
10255          callback {progdefaults.RIT -= 0.1;
10256cntRIT->value(progdefaults.RIT);
10257progdefaults.FMT_freq_corr=o->value();
10258cnt_fmt_freq_corr->value(progdefaults.FMT_freq_corr);
10259progdefaults.changed = true;}
10260          xywh {285 227 18 24} labelsize 10 align 16
10261        }
10262        Fl_Counter cntRIT {
10263          label {Frequency Correction}
10264          callback {progdefaults.RIT=o->value();
10265progdefaults.FMT_freq_corr=o->value();
10266cnt_fmt_freq_corr->value(progdefaults.FMT_freq_corr);}
10267          tooltip {Used ONLY for frequency analysis mode} xywh {303 227 130 24} minimum -5 maximum 5 step 0.001
10268          code0 {o->value(progdefaults.RIT);}
10269          code1 {o->lstep(0.01);}
10270        }
10271        Fl_Button btn_incr_rit {
10272          label {@>|}
10273          callback {progdefaults.RIT += 0.1;
10274cntRIT->value(progdefaults.RIT);
10275progdefaults.FMT_freq_corr=o->value();
10276cnt_fmt_freq_corr->value(progdefaults.FMT_freq_corr);
10277progdefaults.changed = true;}
10278          xywh {433 227 18 24} labelsize 10 align 16
10279        }
10280      }
10281    }
10282    Fl_Group {} {
10283      label {Signal Level}
10284      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10285      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Signal Level"));}
10286      code1 {config_pages.push_back(p);}
10287      code2 {tab_tree->add(_("Soundcard/Signal Level"));}
10288    } {
10289      Fl_Box {} {
10290        label {Signal Levels}
10291        xywh {340 39 316 21}
10292      }
10293      Fl_Box lowcolor2 {
10294        xywh {365 96 21 21} box DIAMOND_DOWN_BOX color 0
10295        code0 {o->color(progdefaults.LowSignal);}
10296      }
10297      Fl_Button btnLowSignal2 {
10298        label Low
10299        callback {progdefaults.LowSignal = fl_show_colormap(progdefaults.LowSignal);
10300lowcolor->color(progdefaults.LowSignal);
10301lowcolor->redraw();
10302lowcolor2->color(progdefaults.LowSignal);
10303lowcolor2->redraw();
10304progdefaults.changed = true;}
10305        xywh {402 96 70 21}
10306      }
10307      Fl_Box normalcolor2 {
10308        xywh {365 142 21 21} box DIAMOND_DOWN_BOX color 2
10309        code0 {o->color(progdefaults.NormSignal);}
10310      }
10311      Fl_Counter cnt_normal_signal_level2 {
10312        label {Transition
10313Level (dB)}
10314        callback {progdefaults.normal_signal_level = o->value();
10315
10316if (progdefaults.normal_signal_level > progdefaults.high_signal_level)
10317  progdefaults.high_signal_level = progdefaults.normal_signal_level + 0.1;
10318
10319if (progdefaults.high_signal_level > progdefaults.over_signal_level)
10320  progdefaults.over_signal_level = progdefaults.high_signal_level + 0.1;
10321
10322if (progdefaults.over_signal_level > 0)
10323  progdefaults.over_signal_level = 0;
10324
10325cnt_normal_signal_level->value(progdefaults.normal_signal_level);
10326cnt_high_signal_level->value(progdefaults.high_signal_level);
10327cnt_over_signal_level->value(progdefaults.over_signal_level);
10328
10329cnt_normal_signal_level2->value(progdefaults.normal_signal_level);
10330cnt_high_signal_level2->value(progdefaults.high_signal_level);
10331cnt_over_signal_level2->value(progdefaults.over_signal_level);}
10332        xywh {480 119 114 21} align 1 minimum -90 maximum 0 hide
10333        code0 {o->value(progdefaults.normal_signal_level);}
10334        code1 {o->lstep(1.0);}
10335      }
10336      Fl_Button btnNormalSignal2 {
10337        label Normal
10338        callback {progdefaults.NormSignal = fl_show_colormap(progdefaults.NormSignal);
10339normalcolor->color(progdefaults.NormSignal);
10340normalcolor->redraw();
10341
10342normalcolor2->color(progdefaults.NormSignal);
10343normalcolor2->redraw();
10344
10345progdefaults.changed = true;}
10346        xywh {402 142 70 21}
10347      }
10348      Fl_Box highcolor2 {
10349        xywh {365 189 21 21} box DIAMOND_DOWN_BOX color 3
10350        code0 {o->color(progdefaults.HighSignal);}
10351      }
10352      Fl_Counter cnt_high_signal_level2 {
10353        callback {progdefaults.high_signal_level = o->value();
10354
10355if (progdefaults.normal_signal_level > progdefaults.high_signal_level)
10356  progdefaults.high_signal_level = progdefaults.normal_signal_level + 0.1;
10357
10358if (progdefaults.high_signal_level > progdefaults.over_signal_level)
10359  progdefaults.over_signal_level = progdefaults.high_signal_level + 0.1;
10360
10361if (progdefaults.over_signal_level > 0)
10362  progdefaults.over_signal_level = 0;
10363
10364cnt_normal_signal_level->value(progdefaults.normal_signal_level);
10365cnt_high_signal_level->value(progdefaults.high_signal_level);
10366cnt_over_signal_level->value(progdefaults.over_signal_level);
10367
10368cnt_normal_signal_level2->value(progdefaults.normal_signal_level);
10369cnt_high_signal_level2->value(progdefaults.high_signal_level);
10370cnt_over_signal_level2->value(progdefaults.over_signal_level);}
10371        xywh {480 165 114 21} minimum -90 maximum 0
10372        code0 {o->value(progdefaults.high_signal_level);}
10373        code1 {o->lstep(1.0);}
10374      }
10375      Fl_Button btnHighSignal2 {
10376        label High
10377        callback {progdefaults.HighSignal = fl_show_colormap(progdefaults.HighSignal);
10378highcolor->color(progdefaults.HighSignal);
10379highcolor->redraw();
10380
10381highcolor2->color(progdefaults.HighSignal);
10382highcolor2->redraw();
10383
10384progdefaults.changed = true;}
10385        xywh {402 189 70 21}
10386      }
10387      Fl_Box overcolor2 {
10388        xywh {365 236 21 21} box DIAMOND_DOWN_BOX color 1
10389        code0 {o->color(progdefaults.OverSignal);}
10390      }
10391      Fl_Counter cnt_over_signal_level2 {
10392        callback {progdefaults.over_signal_level = o->value();
10393
10394if (progdefaults.normal_signal_level > progdefaults.high_signal_level)
10395  progdefaults.high_signal_level = progdefaults.normal_signal_level + 0.1;
10396
10397if (progdefaults.high_signal_level > progdefaults.over_signal_level)
10398  progdefaults.over_signal_level = progdefaults.high_signal_level + 0.1;
10399
10400if (progdefaults.over_signal_level > 0)
10401  progdefaults.over_signal_level = 0;
10402
10403cnt_normal_signal_level->value(progdefaults.normal_signal_level);
10404cnt_high_signal_level->value(progdefaults.high_signal_level);
10405cnt_over_signal_level->value(progdefaults.over_signal_level);
10406
10407cnt_normal_signal_level2->value(progdefaults.normal_signal_level);
10408cnt_high_signal_level2->value(progdefaults.high_signal_level);
10409cnt_over_signal_level2->value(progdefaults.over_signal_level);}
10410        xywh {480 212 114 21} minimum -90 maximum 0
10411        code0 {o->value(progdefaults.over_signal_level);}
10412        code1 {o->lstep(1.0);}
10413      }
10414      Fl_Button btnOverSignal2 {
10415        label Over
10416        callback {progdefaults.OverSignal = fl_show_colormap(progdefaults.OverSignal);
10417overcolor->color(progdefaults.OverSignal);
10418overcolor->redraw();
10419
10420overcolor2->color(progdefaults.OverSignal);
10421overcolor2->redraw();
10422
10423progdefaults.changed = true;}
10424        xywh {402 236 70 21}
10425      }
10426      Fl_Progress {} {
10427        label label
10428        xywh {295 289 416 25} hide
10429      }
10430      Fl_Progress sig_vumeter2 {
10431        label label
10432        xywh {322 280 360 24}
10433        code0 {\#include "vumeter.h"}
10434        class vumeter
10435      }
10436      Fl_Box {} {
10437        label {Input signal level}
10438        xywh {383 307 237 17}
10439      }
10440      Fl_Button btn_default_signal_levels2 {
10441        label Default
10442        callback {cnt_normal_signal_level->value(
10443  progdefaults.normal_signal_level = -60.0);
10444cnt_high_signal_level->value(
10445  progdefaults.high_signal_level = -6.0);
10446cnt_over_signal_level->value(
10447  progdefaults.over_signal_level = -3.0);
10448
10449cnt_normal_signal_level2->value(progdefaults.normal_signal_level);
10450cnt_high_signal_level2->value(progdefaults.high_signal_level);
10451cnt_over_signal_level2->value(progdefaults.over_signal_level);}
10452        xywh {618 166 70 20}
10453      }
10454    }
10455    Fl_Group {} {
10456      label {Soundcard/Wav file recording}
10457      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10458      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Wav file recording"));}
10459      code1 {config_pages.push_back(p);}
10460      code2 {tab_tree->add(_("Soundcard/Wav file recording"));}
10461      code3 {tab_tree->close(_("Soundcard"));}
10462    } {
10463      Fl_Group listbox_wav_samplerate {
10464        label {Wav write sample rate}
10465        callback {progdefaults.wavSampleRate = o->index();
10466progdefaults.changed = true;} open
10467        tooltip {Pick baud rate from list} xywh {399 91 150 24} box DOWN_BOX color 7 align 5
10468        code0 {o->add("8000|11025|16000|22050|24000|44100|48000");}
10469        code1 {o->index(progdefaults.wavSampleRate);}
10470        code2 {o->labelsize(FL_NORMAL_SIZE);}
10471        class Fl_ListBox
10472      } {}
10473      Fl_Check_Button btn_record_both {
10474        label {Record both channels}
10475        callback {progdefaults.record_both_channels=o->value();
10476progdefaults.changed=true;}
10477        xywh {399 140 176 15} down_box DOWN_BOX
10478        code0 {o->value(progdefaults.record_both_channels);}
10479      }
10480    }
10481    Fl_Group {} {
10482      label {UI/Browser/Channels}
10483      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10484      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/Browser/Channels"));}
10485      code1 {config_pages.push_back(p);}
10486      code2 {tab_tree->add(_("UI/Browser/Channels"));}
10487    } {
10488      Fl_Spinner cntChannels {
10489        label {Channels, first channel starts at waterfall lower limit}
10490        callback {progdefaults.VIEWERchannels = (int)(o->value());
10491initViewer();}
10492        tooltip {Change \# of psk viewer channels} xywh {278 54 50 24} align 8 maximum 30 value 30
10493        code0 {o->minimum(5); o->maximum(30); o->step(1);}
10494        code1 {o->value(progdefaults.VIEWERchannels);}
10495        code2 {o->labelsize(FL_NORMAL_SIZE);}
10496        class Fl_Spinner2
10497      }
10498      Fl_Spinner cntTimeout {
10499        label {Inactivity timeout}
10500        callback {progdefaults.VIEWERtimeout = (int)(o->value());
10501progdefaults.changed = true;}
10502        tooltip {Clear channel text after
10503\# seconds of inactivity} xywh {278 90 50 24} align 8 value 10
10504        code0 {o->minimum(1); o->maximum(180); o->step(1);}
10505        code1 {o->value(progdefaults.VIEWERtimeout);}
10506        code2 {o->labelsize(FL_NORMAL_SIZE);}
10507        class Fl_Spinner2
10508      }
10509      Fl_Group listboxViewerLabel {
10510        label {Channel label}
10511        callback {progdefaults.VIEWERlabeltype = o->index();
10512initViewer();
10513progdefaults.changed = true;} open
10514        tooltip {Appearance of label on each channel} xywh {278 130 150 24} box DOWN_BOX color 7 align 8
10515        code0 {listboxViewerLabel->add(_("None")); listboxViewerLabel->add(_("Audio frequency"));}
10516        code1 {listboxViewerLabel->add(_("Radio frequency")); listboxViewerLabel->add(_("Channel number"));}
10517        code3 {listboxViewerLabel->index(progdefaults.VIEWERlabeltype);
10518                       o->labelsize(FL_NORMAL_SIZE);}
10519        class Fl_ListBox
10520      } {}
10521      Fl_Button btnViewerFont {
10522        label {Font...}
10523        callback {font_browser->fontNumber(progdefaults.ViewerFontnbr);
10524font_browser->fontSize(progdefaults.ViewerFontsize);
10525font_browser->fontColor(FL_FOREGROUND_COLOR);
10526font_browser->fontFilter(Font_Browser::FIXED_WIDTH);
10527font_browser->callback(cbViewerFontBrowser);
10528font_browser->show();}
10529        tooltip {select browser font} xywh {563 130 70 24}
10530      }
10531      Fl_Check_Button btnFixedIntervals {
10532        label {Fixed Intervals}
10533        callback {progdefaults.VIEWERfixed = o->value();
10534progdefaults.changed = true;
10535initViewer();}
10536        tooltip {Force channel spacing to even 100 Hz increments} xywh {468 92 165 20} down_box DOWN_BOX value 1
10537        code0 {o->value(progdefaults.VIEWERfixed);}
10538      }
10539      Fl_Check_Button btnMarquee {
10540        label {Continuous scrolling}
10541        callback {progdefaults.VIEWERmarquee = o->value();
10542progdefaults.changed = true;
10543initViewer();}
10544        tooltip {ON - Marquee style
10545OFF - Clear & restart} xywh {278 168 165 20} down_box DOWN_BOX
10546        code0 {o->value(progdefaults.VIEWERmarquee);}
10547      }
10548      Fl_Check_Button btnAscend {
10549        label {Lowest freq on bottom of viewer}
10550        callback {progdefaults.VIEWERascend = o->value();
10551progdefaults.changed = true;
10552initViewer();}
10553        tooltip {Change positions of low to high channels} xywh {278 192 253 20} down_box DOWN_BOX
10554        code0 {o->value(progdefaults.VIEWERascend);}
10555      }
10556      Fl_Check_Button btnBrowserHistory {
10557        label {Play back history when active channel selected}
10558        callback {progdefaults.VIEWERhistory = o->value();
10559progdefaults.changed = true;}
10560        tooltip {Audio stream history decoded on selected signal} xywh {278 217 356 20} down_box DOWN_BOX
10561        code0 {o->value(progdefaults.VIEWERhistory);}
10562      }
10563    }
10564    Fl_Group {} {
10565      label {UI/Browser/Colors}
10566      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10567      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/Browser/Colors"));}
10568      code1 {config_pages.push_back(p);}
10569      code2 {tab_tree->add(_("UI/Browser/Colors"));}
10570    } {
10571      Fl_Button bwsrHiLite_1_color {
10572        label {HiLite 1}
10573        callback {progdefaults.bwsrHiLight1 = fl_show_colormap((Fl_Color)progdefaults.bwsrHiLight1);
10574bwsrHiLite_1_color->color((Fl_Color)progdefaults.bwsrHiLight1);
10575viewer_redraw();
10576progdefaults.changed = true;}
10577        tooltip {PSK/RTTY Viewer HiLite Color 1} xywh {259 113 62 22} align 1
10578        code0 {bwsrHiLite_1_color->color((Fl_Color)progdefaults.bwsrHiLight1);}
10579        code1 {\#include "Viewer.h"}
10580      }
10581      Fl_Button bwsrHiLite_2_color {
10582        label {HiLite 2}
10583        callback {progdefaults.bwsrHiLight2 = fl_show_colormap((Fl_Color)progdefaults.bwsrHiLight2);
10584bwsrHiLite_2_color->color((Fl_Color)progdefaults.bwsrHiLight2);
10585viewer_redraw();
10586progdefaults.changed = true;}
10587        tooltip {PSK/RTTY Viewer HiLite Color 2} xywh {361 113 62 22} align 1
10588        code0 {bwsrHiLite_2_color->color((Fl_Color)progdefaults.bwsrHiLight2);}
10589      }
10590      Fl_Button bwsrHiLite_even_lines {
10591        label Even
10592        callback {progdefaults.bwsrBackgnd2 = fl_show_colormap((Fl_Color)progdefaults.bwsrBackgnd2);
10593bwsrHiLite_even_lines->color((Fl_Color)progdefaults.bwsrBackgnd2);
10594viewer_redraw();
10595progdefaults.changed = true;;}
10596        tooltip {Even lines} xywh {464 113 62 22} align 1
10597        code0 {bwsrHiLite_even_lines->color((Fl_Color)progdefaults.bwsrBackgnd2);}
10598      }
10599      Fl_Button bwsrHiLite_odd_lines {
10600        label Odd
10601        callback {progdefaults.bwsrBackgnd1 = fl_show_colormap((Fl_Color)progdefaults.bwsrBackgnd1);
10602bwsrHiLite_odd_lines->color((Fl_Color)progdefaults.bwsrBackgnd1);
10603viewer_redraw();
10604progdefaults.changed = true;}
10605        tooltip {Odd lines} xywh {567 113 62 22} align 1
10606        code0 {bwsrHiLite_odd_lines->color((Fl_Color)progdefaults.bwsrBackgnd1);}
10607      }
10608      Fl_Button bwsrHiLite_select {
10609        label Select
10610        callback {progdefaults.bwsrSelect = fl_show_colormap((Fl_Color)progdefaults.bwsrSelect);
10611bwsrHiLite_select->color((Fl_Color)progdefaults.bwsrSelect);
10612viewer_redraw();
10613progdefaults.changed = true;}
10614        tooltip {Select line} xywh {671 113 62 22} align 1
10615        code0 {bwsrHiLite_select->color((Fl_Color)progdefaults.bwsrSelect);}
10616      }
10617    }
10618    Fl_Group {} {
10619      label {UI/Browser/Detection Level}
10620      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10621      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/Browser/Detection Level"));}
10622      code1 {config_pages.push_back(p);}
10623      code2 {tab_tree->add(_("UI/Browser/Detection Level"));}
10624    } {
10625      Fl_Button bwsrSliderColor {
10626        label Backgnd
10627        callback {uchar r, g, b;
10628    r = progdefaults.bwsrSliderColor.R;
10629    g = progdefaults.bwsrSliderColor.G;
10630    b = progdefaults.bwsrSliderColor.B;
10631
10632    if (fl_color_chooser("Slider Color", r, g, b) == 0)
10633        return;
10634    progdefaults.bwsrSliderColor.R = r;
10635    progdefaults.bwsrSliderColor.G = g;
10636    progdefaults.bwsrSliderColor.B = b;
10637    o->color(fl_rgb_color(r,g,b));
10638    o->redraw();
10639    sldrViewerSquelch->color(fl_rgb_color(r,g,b));
10640    sldrViewerSquelch->redraw();
10641    mvsquelch->color(fl_rgb_color(r,g,b));
10642    mvsquelch->redraw();
10643
10644    progdefaults.changed = true;}
10645        tooltip {Background color of signal viewer squelch control} xywh {294 118 112 24} align 1
10646        code0 {bwsrSliderColor->color(fl_rgb_color(progdefaults.bwsrSliderColor.R, progdefaults.bwsrSliderColor.G,progdefaults.bwsrSliderColor.B));}
10647      }
10648      Fl_Button bwsrSldrSelColor {
10649        label Button
10650        callback {uchar r, g, b;
10651    r = progdefaults.bwsrSldrSelColor.R;
10652    g = progdefaults.bwsrSldrSelColor.G;
10653    b = progdefaults.bwsrSldrSelColor.B;
10654
10655    if (fl_color_chooser("Button Color", r, g, b) == 0)
10656        return;
10657    progdefaults.bwsrSldrSelColor.R = r;
10658    progdefaults.bwsrSldrSelColor.G = g;
10659    progdefaults.bwsrSldrSelColor.B = b;
10660    o->color(fl_rgb_color(r,g,b));
10661    o->redraw();
10662    sldrViewerSquelch->selection_color(fl_rgb_color(r,g,b));
10663    sldrViewerSquelch->redraw();
10664    mvsquelch->selection_color(fl_rgb_color(r,g,b));
10665    mvsquelch->redraw();
10666
10667    progdefaults.changed = true;}
10668        tooltip {Slider hilite color of signal viewer squelch control} xywh {545 118 112 24} align 1
10669        code0 {bwsrSldrSelColor->color(fl_rgb_color(progdefaults.bwsrSldrSelColor.R, progdefaults.bwsrSldrSelColor.G,progdefaults.bwsrSliderColor.B));}
10670      }
10671    }
10672    Fl_Group {} {
10673      label {UI/General} open selected
10674      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10675      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/General"));}
10676      code1 {config_pages.push_back(p);}
10677      code2 {tab_tree->add(_("UI/General"));}
10678    } {
10679      Fl_Group {} {open
10680        xywh {206 21 590 76} box ENGRAVED_FRAME
10681      } {
10682        Fl_Check_Button btnShowTooltips {
10683          label {Show tooltips}
10684          callback {progdefaults.tooltips = o->value();
10685Fl_Tooltip::enable(progdefaults.tooltips);
10686progdefaults.changed = true;}
10687          tooltip {Enable / disable tooltips} xywh {276 34 120 20} down_box DOWN_BOX value 1
10688          code0 {o->value(progdefaults.tooltips);}
10689        }
10690        Fl_Check_Button chkMenuIcons {
10691          label {Show menu icons}
10692          callback {progdefaults.menuicons = o->value();
10693icons::toggle_icon_labels();
10694progdefaults.changed = true;}
10695          tooltip {Enable / disable icons on menus} xywh {420 34 150 20} down_box DOWN_BOX
10696          code0 {o->value(progdefaults.menuicons);}
10697        }
10698        Fl_Group listboxScheme {
10699          label {UI scheme}
10700          callback {progdefaults.ui_scheme = o->value();
10701    Fl::scheme(progdefaults.ui_scheme.c_str());
10702
10703    progdefaults.changed = true;} open
10704          tooltip {Change application look and feel} xywh {394 63 80 20} box DOWN_BOX color 7 align 8
10705          code0 {listboxScheme->add("base");}
10706          code1 {listboxScheme->add("gtk+");}
10707          code2 {listboxScheme->add("plastic"); listboxScheme->add("gleam");}
10708          code3 {listboxScheme->value(progdefaults.ui_scheme.c_str());
10709                       o->labelsize(FL_NORMAL_SIZE);}
10710          class Fl_ListBox
10711        } {}
10712        Fl_Button bVisibleModes {
10713          label {Visible modes}
10714          callback {mode_browser->label(o->label());
10715mode_browser->callback(toggle_visible_modes);
10716mode_browser->show_(&progdefaults.visible_modes);
10717progdefaults.changed = true;}
10718          tooltip {Select modes for menu access} xywh {259 63 110 20}
10719        }
10720        Fl_Group listbox_language {
10721          label {UI language}
10722          callback {progdefaults.ui_language = o->index();
10723progdefaults.changed = true;} open
10724          tooltip {Changes take effect on next program startup} xywh {576 63 170 20} box DOWN_BOX color 7 labelsize 12 align 5
10725          code0 {o->labelsize(FL_NORMAL_SIZE);}
10726          class Fl_ListBox
10727        } {}
10728      }
10729      Fl_Group {} {open
10730        xywh {206 103 590 34} box ENGRAVED_FRAME align 21
10731      } {
10732        Fl_Check_Button btn_rx_lowercase {
10733          label {Print CW / RTTY / THROB / CONTESTIA in lowercase}
10734          callback {progdefaults.rx_lowercase = o->value();
10735progdefaults.changed = true;}
10736          xywh {246 110 441 20} down_box DOWN_BOX
10737          code0 {o->value(progdefaults.rx_lowercase);}
10738        }
10739      }
10740      Fl_Group {} {open
10741        xywh {206 139 294 65} box ENGRAVED_FRAME align 21
10742      } {
10743        Fl_Check_Button btn_tx_lowercase {
10744          label {Transmit lower case text}
10745          callback {progdefaults.tx_lowercase = o->value();
10746progdefaults.changed = true;}
10747          xywh {241 148 199 20} down_box DOWN_BOX
10748          code0 {o->value(progdefaults.tx_lowercase);}
10749        }
10750      }
10751      Fl_Group {} {
10752        label {Exit prompts}
10753        xywh {206 206 590 76} box ENGRAVED_FRAME align 21
10754      } {
10755        Fl_Check_Button btn_save_config_on_exit {
10756          label {Prompt to save Configuration}
10757          callback {progdefaults.SaveConfig = o->value();
10758progdefaults.changed = true;}
10759          xywh {246 230 264 20} down_box DOWN_BOX
10760          code0 {o->value(progdefaults.SaveConfig);}
10761        }
10762        Fl_Check_Button btn2_save_macros_on_exit {
10763          label {Prompt to save macro file}
10764          callback {btn_save_macros_on_exit->value(o->value());
10765progdefaults.SaveMacros = o->value();
10766progdefaults.changed = true;}
10767          tooltip {Write current macro set on program exit} xywh {246 252 264 20} down_box DOWN_BOX
10768          code0 {o->value(progdefaults.SaveMacros);}
10769        }
10770        Fl_Check_Button btn2NagMe {
10771          label {Prompt to save log}
10772          callback {btnNagMe->value(o->value());
10773progdefaults.NagMe=o->value();
10774progdefaults.changed = true;}
10775          tooltip {Bug me about saving log entries} xywh {523 230 188 20} down_box DOWN_BOX
10776          code0 {o->value(progdefaults.NagMe);}
10777        }
10778        Fl_Check_Button btn2_confirm_exit {
10779          label {Confirm exit}
10780          callback {btn2_confirm_exit->value(o->value());
10781progdefaults.confirmExit=o->value();
10782progdefaults.changed = true;}
10783          xywh {523 252 226 20} down_box DOWN_BOX
10784          code0 {o->value(progdefaults.confirmExit);}
10785        }
10786      }
10787      Fl_Group {} {
10788        label {Check for updates} open
10789        xywh {206 285 590 60} box ENGRAVED_FRAME align 21
10790      } {
10791        Fl_Check_Button btn_check_for_updates {
10792          label {Check for updates when starting program}
10793          callback {progdefaults.check_for_updates = o->value();
10794progdefaults.changed = true;}
10795          xywh {246 308 367 20} down_box DOWN_BOX
10796          code0 {o->value(progdefaults.check_for_updates);}
10797        }
10798      }
10799      Fl_Group {} {open
10800        xywh {501 139 295 65} box ENGRAVED_FRAME align 21
10801      } {
10802        Fl_Check_Button btn_tx_show_timer {
10803          label {Show TX timer}
10804          callback {progdefaults.show_tx_timer = o->value();
10805progdefaults.changed = true;}
10806          xywh {520 148 219 20} down_box DOWN_BOX
10807          code0 {o->value(progdefaults.show_tx_timer);}
10808        }
10809        Fl_Spinner val_tx_timeout {
10810          label {TX deadmen timeout (mins)}
10811          callback {progdefaults.tx_timeout=o->value();
10812progdefaults.changed = true;}
10813          xywh {521 173 45 24} align 8 minimum 0 maximum 60 value 10
10814          code0 {o->value(progdefaults.tx_timeout);}
10815        }
10816      }
10817    }
10818    Fl_Group {} {
10819      label {UI/Macro buttons}
10820      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
10821      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/Macro buttons"));}
10822      code1 {config_pages.push_back(p);}
10823      code2 {tab_tree->add(_("UI/Macro buttons"));}
10824    } {
10825      Fl_Group {} {open
10826        xywh {205 205 590 35} box ENGRAVED_FRAME
10827      } {
10828        Fl_Check_Button btnMacroMouseWheel {
10829          label {Mouse wheel active on macro buttons}
10830          callback {progdefaults.macro_wheel = o->value();
10831progdefaults.changed = true;}
10832          tooltip {enable mouse wheel control of macro bar} xywh {262 213 296 20} down_box DOWN_BOX
10833          code0 {o->value(progdefaults.macro_wheel);}
10834        }
10835      }
10836      Fl_Group {} {
10837        label {Number and position of macro bars} open
10838        xywh {205 25 590 180} box ENGRAVED_FRAME align 21
10839      } {
10840        Fl_Counter cnt_macro_height {
10841          label {Button Height}
10842          callback {progdefaults.macro_height = (int)o->value();
10843progdefaults.changed = true;
10844set_macroLabels();
10845UI_select();}
10846          tooltip {Height of macro bar} xywh {415 50 89 22} type Simple align 8 minimum 18 maximum 30 step 1 value 20
10847          code0 {o->value(progdefaults.macro_height);}
10848        }
10849        Fl_Round_Button btn_scheme_0 {
10850          label {One above Rx/Tx}
10851          callback {progdefaults.mbar_scheme = 0;
10852set_macroLabels();
10853UI_select();
10854progdefaults.changed = true;}
10855          tooltip {Single macro bar below logging panel
10856variable height} xywh {261 78 144 22} type Radio down_box ROUND_DOWN_BOX
10857        }
10858        Fl_Round_Button btn_scheme_1 {
10859          label {One above waterfall}
10860          callback {progdefaults.mbar_scheme = 1;
10861set_macroLabels();
10862UI_select();
10863progdefaults.changed = true;}
10864          xywh {261 103 144 22} type Radio down_box ROUND_DOWN_BOX
10865        }
10866        Fl_Round_Button btn_scheme_2 {
10867          label {One below waterfall}
10868          callback {progdefaults.mbar_scheme = 2;
10869set_macroLabels();
10870UI_select();
10871progdefaults.changed = true;}
10872          xywh {261 128 144 22} type Radio down_box ROUND_DOWN_BOX
10873        }
10874        Fl_Round_Button btn_scheme_3 {
10875          label {Two scheme 1}
10876          callback {progdefaults.mbar_scheme = 3;
10877progdefaults.changed = true;
10878set_macroLabels();
10879UI_select();}
10880          xywh {428 78 144 22} type Radio down_box ROUND_DOWN_BOX
10881        }
10882        Fl_Round_Button btn_scheme_4 {
10883          label {Two scheme 2}
10884          callback {progdefaults.mbar_scheme = 4;
10885progdefaults.changed = true;
10886set_macroLabels();
10887UI_select();}
10888          xywh {596 78 144 22} type Radio down_box ROUND_DOWN_BOX
10889        }
10890        Fl_Round_Button btn_scheme_5 {
10891          label {Two scheme 3}
10892          callback {progdefaults.mbar_scheme = 5;
10893progdefaults.changed = true;
10894set_macroLabels();
10895UI_select();}
10896          xywh {428 103 144 22} type Radio down_box ROUND_DOWN_BOX
10897        }
10898        Fl_Round_Button btn_scheme_6 {
10899          label {Two scheme 4}
10900          callback {progdefaults.mbar_scheme = 6;
10901progdefaults.changed = true;
10902set_macroLabels();
10903UI_select();}
10904          xywh {596 103 144 22} type Radio down_box ROUND_DOWN_BOX
10905        }
10906        Fl_Round_Button btn_scheme_7 {
10907          label {Two scheme 5}
10908          callback {progdefaults.mbar_scheme = 7;
10909progdefaults.changed = true;
10910set_macroLabels();
10911UI_select();}
10912          xywh {428 128 144 22} type Radio down_box ROUND_DOWN_BOX
10913        }
10914        Fl_Round_Button btn_scheme_8 {
10915          label {Two scheme 6}
10916          callback {progdefaults.mbar_scheme = 8;
10917progdefaults.changed = true;
10918set_macroLabels();
10919UI_select();}
10920          xywh {596 128 144 22} type Radio down_box ROUND_DOWN_BOX
10921        }
10922        Fl_Round_Button btn_scheme_9 {
10923          label {Two scheme 7}
10924          callback {progdefaults.mbar_scheme = 9;
10925progdefaults.changed = true;
10926set_macroLabels();
10927UI_select();}
10928          xywh {428 153 144 22} type Radio down_box ROUND_DOWN_BOX
10929        }
10930        Fl_Round_Button btn_scheme_10 {
10931          label {Two scheme 8}
10932          callback {progdefaults.mbar_scheme = 10;
10933progdefaults.changed = true;
10934set_macroLabels();
10935UI_select();}
10936          xywh {596 153 144 22} type Radio down_box ROUND_DOWN_BOX
10937        }
10938        Fl_Round_Button btn_scheme_11 {
10939          label {Two scheme 9}
10940          callback {progdefaults.mbar_scheme = 11;
10941progdefaults.changed = true;
10942set_macroLabels();
10943UI_select();}
10944          xywh {428 178 144 22} type Radio down_box ROUND_DOWN_BOX
10945        }
10946        Fl_Round_Button btn_scheme_12 {
10947          label {Two scheme 10}
10948          callback {progdefaults.mbar_scheme = 12;
10949progdefaults.changed = true;
10950set_macroLabels();
10951UI_select();}
10952          xywh {596 178 144 22} type Radio down_box ROUND_DOWN_BOX
10953        }
10954      }
10955      Fl_Group {} {open
10956        xywh {205 240 590 55} box ENGRAVED_FRAME
10957      } {
10958        Fl_Check_Button btnUseLastMacro {
10959          label {Load last used macro file at start}
10960          callback {progdefaults.UseLastMacro = o->value();
10961update_main_title();
10962progdefaults.changed = true;}
10963          tooltip {ON - use last set of macros
10964OFF - use default set} xywh {262 245 277 20} down_box DOWN_BOX
10965          code0 {o->value(progdefaults.UseLastMacro);}
10966        }
10967        Fl_Check_Button btnDisplayMacroFilename {
10968          label {Display macro filename at start}
10969          callback {progdefaults.DisplayMacroFilename = o->value();
10970progdefaults.changed = true;}
10971          tooltip {The filename is written to the RX text area} xywh {262 267 277 20} down_box DOWN_BOX
10972          code0 {o->value(progdefaults.DisplayMacroFilename);}
10973        }
10974        Fl_Check_Button btn_save_macros_on_exit {
10975          label {Prompt to save macro file}
10976          callback {btn2_save_macros_on_exit->value(o->value());
10977progdefaults.SaveMacros = o->value();
10978progdefaults.changed = true;}
10979          tooltip {Write current macro set on program exit} xywh {545 245 216 20} down_box DOWN_BOX
10980          code0 {o->value(progdefaults.SaveMacros);}
10981        }
10982      }
10983      Fl_Group {} {open
10984        xywh {205 295 295 45} box ENGRAVED_FRAME
10985      } {
10986        Fl_Check_Button btn_macro_post {
10987          label {Show macro control codes}
10988          callback {progdefaults.macro_post = o->value();
10989progdefaults.changed = true;}
10990          tooltip {print ^! execution codes in Rx panel} xywh {265 307 216 20} down_box DOWN_BOX
10991          code0 {o->value(progdefaults.macro_post);}
10992        }
10993      }
10994      Fl_Group {} {open
10995        xywh {500 295 295 45} box ENGRAVED_FRAME
10996      } {
10997        Fl_Check_Button btn_4bar_position {
10998          label {4 bar macro set below Tx}
10999          callback {progdefaults.four_bar_position = o->value();
11000UI_select();
11001progdefaults.changed = true;}
11002          tooltip {Position the 4 bar macro set below Tx panel
11003Default above Rx panel} xywh {532 307 216 20} down_box DOWN_BOX
11004          code0 {o->value(progdefaults.four_bar_position);}
11005        }
11006      }
11007    }
11008    Fl_Group {} {
11009      label {UI/Rx Text}
11010      xywh {200 2 600 350} box ENGRAVED_BOX align 21 hide
11011      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/Rx Text"));}
11012      code1 {config_pages.push_back(p);}
11013      code2 {tab_tree->add(_("UI/Rx Text"));}
11014    } {
11015      Fl_Check_Button btnRXClicks {
11016        label {Single-click to capture}
11017        callback {progdefaults.rxtext_clicks_qso_data = o->value();
11018progdefaults.changed = true;}
11019        tooltip {Enable for single click capure of text in Rx panel} xywh {242 118 191 20} down_box DOWN_BOX
11020        code0 {o->value(progdefaults.rxtext_clicks_qso_data);}
11021      }
11022      Fl_Check_Button btnRXTooltips {
11023        label {callsign tooltips in received text}
11024        callback {progdefaults.rxtext_tooltips = o->value();
11025progdefaults.changed = true;}
11026        tooltip {Popup info after a 2 second hover on a callsign} xywh {484 118 254 20} down_box DOWN_BOX
11027        code0 {o->value(progdefaults.rxtext_tooltips);}
11028      }
11029      Fl_Input inpNonword {
11030        label {Word delimiters}
11031        callback {progdefaults.nonwordchars = o->value();
11032progdefaults.changed = true;}
11033        tooltip {RX text QSO data entry is bounded by the non-word characters
11034defined here. Tab and newline are automatically included.} xywh {384 84 279 24} textfont 4
11035        code0 {o->value(progdefaults.nonwordchars.c_str());}
11036        code1 {o->labelsize(FL_NORMAL_SIZE);}
11037        class Fl_Input2
11038      }
11039      Fl_Check_Button btnUSunits {
11040        label {US units of distance (QRB)}
11041        callback {progdefaults.us_units = o->value();
11042progdefaults.changed = true;}
11043        tooltip {Enable for single click capure of text in Rx panel} xywh {484 147 220 20} down_box DOWN_BOX
11044        code0 {o->value(progdefaults.us_units);}
11045      }
11046      Fl_Check_Button btn_clear_fields {
11047        label {Clear log fields - new CALL}
11048        callback {progdefaults.clear_fields=o->value();
11049progdefaults.changed = true;}
11050        xywh {242 147 198 20} down_box DOWN_BOX
11051        code0 {o->value(progdefaults.clear_fields);}
11052      }
11053    }
11054    Fl_Group {} {
11055      label {UI/Touch}
11056      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11057      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("UI/Touch"));}
11058      code1 {config_pages.push_back(p);}
11059      code2 {tab_tree->add(_("UI/Touch"));}
11060      code3 {tab_tree->close(_("UI"));}
11061    } {
11062      Fl_Box {} {
11063        label {Note:
11064These configuration items are useful for but not unique to using fldigi on a
11065touch screen device such as a tablet.}
11066        xywh {216 44 570 52} align 20
11067      }
11068      Fl_Group {} {
11069        label {Arrow Key Control of Frequency Entry} open
11070        xywh {216 110 570 102} box ENGRAVED_BOX align 21
11071      } {
11072        Fl_Box {} {
11073          label {Right/Left = 1 x LSD
11074Up/Dn= 10 x LSD
11075Shift - Right/Left = 100 x LSD
11076Shift - Up/Dn = 1000 x LSD}
11077          xywh {231 135 290 74} align 16
11078        }
11079        Fl_Choice sel_lsd {
11080          label {Right/Left
11081Select Least Signficant Digit}
11082          callback {progdefaults.sel_lsd = o->value();
11083set_freq_control_lsd();
11084progdefaults.changed = true;} open
11085          xywh {621 171 90 24} down_box BORDER_BOX align 1
11086          code0 {o->add("1 Hz|10 Hz|100 Hz|1 kHz");}
11087          code1 {o->value(progdefaults.sel_lsd);}
11088        } {}
11089      }
11090      Fl_Group {} {
11091        label {Rx / Tx Panels} open
11092        xywh {216 221 570 64} box ENGRAVED_BOX align 21
11093      } {
11094        Fl_Check_Button btn_rxtx_swap {
11095          label {Tx above Rx}
11096          callback {progdefaults.rxtx_swap = o->value();
11097progdefaults.changed = true;
11098UI_select();}
11099          tooltip {Enable to put Tx panel above Rx panel} xywh {336 225 116 30} down_box DOWN_BOX
11100          code0 {o->value(progdefaults.rxtx_swap);}
11101        }
11102      }
11103    }
11104    Fl_Group {} {
11105      label {Waterfall/Buttons & Controls}
11106      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11107      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Waterfall/Buttons & Controls"));}
11108      code1 {config_pages.push_back(p);}
11109      code2 {tab_tree->add(_("Waterfall/Buttons & Controls"));}
11110    } {
11111      Fl_Box {} {
11112        label {Enable check box to show each respective operator control}
11113        xywh {285 70 446 25} box FLAT_BOX align 16
11114      }
11115      Fl_Check_Button btnWF_UIrev {
11116        label Reverse
11117        callback {progdefaults.WF_UIrev = o->value();
11118progdefaults.changed = true;
11119WF_UI();}
11120        xywh {312 103 150 20} down_box DOWN_BOX value 1
11121        code0 {o->value(progdefaults.WF_UIrev);}
11122      }
11123      Fl_Check_Button btnWF_UIx1 {
11124        label {WF Magnification}
11125        callback {progdefaults.WF_UIx1 = o->value();
11126progdefaults.changed = true;
11127WF_UI();}
11128        xywh {531 103 162 20} down_box DOWN_BOX value 1
11129        code0 {o->value(progdefaults.WF_UIx1);}
11130      }
11131      Fl_Check_Button btnWF_UIwfcarrier {
11132        label {WF carrier}
11133        callback {progdefaults.WF_UIwfcarrier = o->value();
11134progdefaults.changed = true;
11135WF_UI();}
11136        xywh {312 134 150 20} down_box DOWN_BOX value 1
11137        code0 {o->value(progdefaults.WF_UIwfcarrier);}
11138      }
11139      Fl_Check_Button btnWF_UIwfshift {
11140        label {WF Shift Controls}
11141        callback {progdefaults.WF_UIwfshift = o->value();
11142progdefaults.changed = true;
11143WF_UI();}
11144        xywh {531 134 150 20} down_box DOWN_BOX value 1
11145        code0 {o->value(progdefaults.WF_UIwfshift);}
11146      }
11147      Fl_Check_Button btnWF_UIwfreflevel {
11148        label {WF ref level}
11149        callback {progdefaults.WF_UIwfreflevel = o->value();
11150progdefaults.changed = true;
11151WF_UI();}
11152        xywh {312 166 150 20} down_box DOWN_BOX value 1
11153        code0 {o->value(progdefaults.WF_UIwfreflevel);}
11154      }
11155      Fl_Check_Button btnWF_UIwfdrop {
11156        label {WF drop rate}
11157        callback {progdefaults.WF_UIwfdrop = o->value();
11158progdefaults.changed = true;
11159WF_UI();}
11160        xywh {531 166 150 20} down_box DOWN_BOX value 1
11161        code0 {o->value(progdefaults.WF_UIwfdrop);}
11162      }
11163      Fl_Check_Button btnWF_UIwfampspan {
11164        label {WF amp span}
11165        callback {progdefaults.WF_UIwfampspan = o->value();
11166progdefaults.changed = true;
11167WF_UI();}
11168        xywh {312 198 150 20} down_box DOWN_BOX value 1
11169        code0 {o->value(progdefaults.WF_UIwfampspan);}
11170      }
11171      Fl_Check_Button btnWF_UIwfstore {
11172        label {WF Store}
11173        callback {progdefaults.WF_UIwfstore = o->value();
11174progdefaults.changed = true;
11175WF_UI();}
11176        xywh {531 198 150 20} down_box DOWN_BOX value 1
11177        code0 {o->value(progdefaults.WF_UIwfstore);}
11178      }
11179      Fl_Check_Button btnWF_UIwfmode {
11180        label {WF mode}
11181        callback {progdefaults.WF_UIwfmode = o->value();
11182progdefaults.changed = true;
11183WF_UI();}
11184        xywh {312 230 150 20} down_box DOWN_BOX value 1
11185        code0 {o->value(progdefaults.WF_UIwfmode);}
11186      }
11187      Fl_Check_Button btnWF_UIqsy {
11188        label QSY
11189        callback {progdefaults.WF_UIqsy = o->value();
11190progdefaults.changed = true;
11191WF_UI();}
11192        xywh {531 230 150 20} down_box DOWN_BOX value 1
11193        code0 {o->value(progdefaults.WF_UIqsy);}
11194      }
11195      Fl_Check_Button btnWF_UIxmtlock {
11196        label {XMT lock}
11197        callback {progdefaults.WF_UIxmtlock = o->value();
11198progdefaults.changed = true;
11199WF_UI();}
11200        xywh {531 262 150 20} down_box DOWN_BOX value 1
11201        code0 {o->value(progdefaults.WF_UIxmtlock);}
11202      }
11203      Fl_Button btn_wf_enable_all {
11204        label {Enable all}
11205        callback {btnWF_UIrev->value(progdefaults.WF_UIrev = 1);
11206btnWF_UIwfcarrier->value(progdefaults.WF_UIwfcarrier = 1);
11207btnWF_UIwfreflevel->value(progdefaults.WF_UIwfreflevel = 1);
11208btnWF_UIwfampspan->value(progdefaults.WF_UIwfampspan = 1);
11209btnWF_UIwfmode->value(progdefaults.WF_UIwfmode = 1);
11210
11211btnWF_UIx1->value(progdefaults.WF_UIx1 = 1);
11212btnWF_UIwfshift->value(progdefaults.WF_UIwfshift = 1);
11213btnWF_UIwfdrop->value(progdefaults.WF_UIwfdrop = 1);
11214btnWF_UIwfstore->value(progdefaults.WF_UIwfstore = 1);
11215btnWF_UIqsy->value(progdefaults.WF_UIqsy = 1);
11216btnWF_UIxmtlock->value(progdefaults.WF_UIxmtlock = 1);
11217
11218progdefaults.changed = true;
11219WF_UI();}
11220        xywh {356 285 88 20}
11221      }
11222      Fl_Button btn_wf_disable_all {
11223        label {Disable all}
11224        callback {btnWF_UIrev->value(progdefaults.WF_UIrev = 0);
11225btnWF_UIwfcarrier->value(progdefaults.WF_UIwfcarrier = 0);
11226btnWF_UIwfreflevel->value(progdefaults.WF_UIwfreflevel = 0);
11227btnWF_UIwfampspan->value(progdefaults.WF_UIwfampspan = 0);
11228btnWF_UIwfmode->value(progdefaults.WF_UIwfmode = 0);
11229
11230btnWF_UIx1->value(progdefaults.WF_UIx1 = 0);
11231btnWF_UIwfshift->value(progdefaults.WF_UIwfshift = 0);
11232btnWF_UIwfdrop->value(progdefaults.WF_UIwfdrop = 0);
11233btnWF_UIwfstore->value(progdefaults.WF_UIwfstore = 0);
11234btnWF_UIqsy->value(progdefaults.WF_UIqsy = 0);
11235btnWF_UIxmtlock->value(progdefaults.WF_UIxmtlock = 0);
11236
11237progdefaults.changed = true;
11238WF_UI();}
11239        xywh {555 285 88 20}
11240      }
11241    }
11242    Fl_Group {} {
11243      label {Waterfall/Display}
11244      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11245      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Waterfall/Display"));}
11246      code1 {config_pages.push_back(p);}
11247      code2 {tab_tree->add(_("Waterfall/Display"));}
11248    } {
11249      Fl_Group {} {
11250        label {Colors and cursors} open
11251        xywh {249 32 496 190} box ENGRAVED_FRAME align 21
11252      } {
11253        Fl_Button WF_Palette {
11254          label aa
11255          callback {progdefaults.changed = true;}
11256          xywh {259 68 380 24} box DOWN_BOX color 0 labelsize 12 align 5
11257          code0 {\#include "colorbox.h"}
11258          code1 {o->label(progdefaults.PaletteName.c_str());}
11259          code2 {o->labelsize(FL_NORMAL_SIZE);}
11260          class colorbox
11261        }
11262        Fl_Button {btnColor[0]} {
11263          callback {selectColor(0);
11264progdefaults.changed = true;}
11265          tooltip {Change color} xywh {259 94 20 24}
11266        }
11267        Fl_Button {btnColor[1]} {
11268          callback {selectColor(1);
11269progdefaults.changed = true;}
11270          tooltip {Change color} xywh {304 94 20 24}
11271        }
11272        Fl_Button {btnColor[2]} {
11273          callback {selectColor(2);
11274progdefaults.changed = true;}
11275          tooltip {Change color} xywh {349 94 20 24}
11276        }
11277        Fl_Button {btnColor[3]} {
11278          callback {selectColor(3);
11279progdefaults.changed = true;}
11280          tooltip {Change color} xywh {394 94 20 24}
11281        }
11282        Fl_Button {btnColor[4]} {
11283          callback {selectColor(4);
11284progdefaults.changed = true;}
11285          tooltip {Change color} xywh {439 94 20 24}
11286        }
11287        Fl_Button {btnColor[5]} {
11288          callback {selectColor(5);
11289progdefaults.changed = true;}
11290          tooltip {Change color} xywh {484 94 20 24}
11291        }
11292        Fl_Button {btnColor[6]} {
11293          callback {selectColor(6);
11294progdefaults.changed = true;}
11295          tooltip {Change color} xywh {529 94 20 24}
11296        }
11297        Fl_Button {btnColor[7]} {
11298          callback {selectColor(7);
11299progdefaults.changed = true;}
11300          tooltip {Change color} xywh {574 94 20 24}
11301        }
11302        Fl_Button {btnColor[8]} {
11303          callback {selectColor(8);
11304progdefaults.changed = true;}
11305          tooltip {Change color} xywh {619 94 20 24}
11306        }
11307        Fl_Button btnLoadPalette {
11308          label {Load...}
11309          callback {loadPalette();
11310progdefaults.changed = true;}
11311          tooltip {Load a new palette} xywh {649 68 70 24}
11312          code0 {\#include "colorbox.h"}
11313        }
11314        Fl_Button btnSavePalette {
11315          label {Save...}
11316          callback {savePalette();}
11317          tooltip {Save this palette} xywh {649 94 70 24}
11318          code0 {\#include "colorbox.h"}
11319        }
11320        Fl_Group {} {
11321          label Bandwidth open
11322          xywh {258 122 113 96} box ENGRAVED_FRAME align 21
11323        } {
11324          Fl_Check_Button btnUseCursorLines {
11325            label ON
11326            callback {progdefaults.UseCursorLines = o->value();
11327if (o->value())
11328    btnCursorBWcolor->activate();
11329else
11330    btnCursorBWcolor->deactivate();
11331progdefaults.changed = true;}
11332            tooltip {Show cursor with bandwidth lines} xywh {260 142 56 20} down_box DOWN_BOX
11333            code0 {o->value(progdefaults.UseCursorLines);}
11334          }
11335          Fl_Button btnCursorBWcolor {
11336            label Color
11337            callback {if (fl_color_chooser("Cursor BW Lines",
11338  progdefaults.cursorLineRGBI.R,
11339  progdefaults.cursorLineRGBI.G,
11340  progdefaults.cursorLineRGBI.B) ) {
11341o->color(fl_rgb_color(progdefaults.cursorLineRGBI.R,progdefaults.cursorLineRGBI.G,progdefaults.cursorLineRGBI.B));
11342o->redraw();
11343progdefaults.changed = true;
11344}}
11345            tooltip {Change color} xywh {260 165 20 20} color 3 align 8
11346            code0 {\#include <FL/Fl_Color_Chooser.H>}
11347            code1 {o->color(fl_rgb_color(progdefaults.cursorLineRGBI.R,progdefaults.cursorLineRGBI.G,progdefaults.cursorLineRGBI.B));}
11348          }
11349          Fl_Check_Button btnUseWideCursor {
11350            label Wide
11351            callback {progdefaults.UseWideCursor = o->value();
11352progdefaults.changed = true;}
11353            tooltip {Show bandwidth tracks on waterfall} xywh {260 188 62 20} down_box DOWN_BOX
11354            code0 {o->value(progdefaults.UseWideCursor);}
11355          }
11356        }
11357        Fl_Group {} {
11358          label {Center line} open
11359          xywh {382 122 113 96} box ENGRAVED_FRAME align 21
11360        } {
11361          Fl_Check_Button btnUseCursorCenterLine {
11362            label ON
11363            callback {progdefaults.UseCursorCenterLine = o->value();
11364progdefaults.changed = true;}
11365            tooltip {Show cursor with center line} xywh {388 142 48 20} down_box DOWN_BOX
11366            code0 {o->value(progdefaults.UseCursorCenterLine);}
11367          }
11368          Fl_Button btnCursorCenterLineColor {
11369            label Color
11370            callback {if (fl_color_chooser("Cursor Center Line",
11371  progdefaults.cursorCenterRGBI.R,
11372  progdefaults.cursorCenterRGBI.G,
11373  progdefaults.cursorCenterRGBI.B) ) {
11374o->color(fl_rgb_color(progdefaults.cursorCenterRGBI.R,progdefaults.cursorCenterRGBI.G,progdefaults.cursorCenterRGBI.B));
11375o->redraw();
11376progdefaults.changed = true;
11377}}
11378            tooltip {Change color} xywh {388 165 20 20} color 7 align 8
11379            code0 {o->color(fl_rgb_color(progdefaults.cursorCenterRGBI.R,progdefaults.cursorCenterRGBI.G,progdefaults.cursorCenterRGBI.B));}
11380          }
11381          Fl_Check_Button btnUseWideCenter {
11382            label Wide
11383            callback {progdefaults.UseWideCenter = o->value();
11384progdefaults.changed = true;}
11385            tooltip {Show bandwidth tracks on waterfall} xywh {388 190 69 20} down_box DOWN_BOX
11386            code0 {o->value(progdefaults.UseWideCenter);}
11387          }
11388        }
11389        Fl_Group {} {
11390          label {Signal tracks} open
11391          xywh {505 122 113 96} box ENGRAVED_FRAME align 21
11392        } {
11393          Fl_Check_Button btnUseBWTracks {
11394            label ON
11395            callback {progdefaults.UseBWTracks = o->value();
11396progdefaults.changed = true;}
11397            tooltip {Show bandwidth tracks on waterfall} xywh {507 141 56 20} down_box DOWN_BOX
11398            code0 {o->value(progdefaults.UseBWTracks);}
11399          }
11400          Fl_Button btnBwTracksColor {
11401            label Color
11402            callback {if (fl_color_chooser("Track Lines",
11403  progdefaults.bwTrackRGBI.R,
11404  progdefaults.bwTrackRGBI.G,
11405  progdefaults.bwTrackRGBI.B) ) {
11406o->color(fl_rgb_color(progdefaults.bwTrackRGBI.R,progdefaults.bwTrackRGBI.G,progdefaults.bwTrackRGBI.B));
11407o->redraw();
11408wf->redraw_marker();
11409progdefaults.changed = true;
11410}}
11411            tooltip {Change color} xywh {507 164 20 20} color 1 align 8
11412            code0 {o->color(fl_rgb_color(progdefaults.bwTrackRGBI.R,progdefaults.bwTrackRGBI.G,progdefaults.bwTrackRGBI.B));}
11413          }
11414          Fl_Check_Button btnUseWideTracks {
11415            label Wide
11416            callback {progdefaults.UseWideTracks = o->value();
11417progdefaults.changed = true;}
11418            tooltip {Show bandwidth tracks on waterfall} xywh {507 188 74 20} down_box DOWN_BOX
11419            code0 {o->value(progdefaults.UseWideTracks);}
11420          }
11421        }
11422        Fl_Group {} {
11423          label Notch open
11424          xywh {625 122 113 96} box ENGRAVED_FRAME align 21
11425        } {
11426          Fl_Button btnNotchColor {
11427            label Color
11428            callback {if (fl_color_chooser("Notch Indicator",
11429  progdefaults.notchRGBI.R,
11430  progdefaults.notchRGBI.G,
11431  progdefaults.notchRGBI.B) ) {
11432o->color(fl_rgb_color(progdefaults.notchRGBI.R,progdefaults.notchRGBI.G,progdefaults.notchRGBI.B));
11433o->redraw();
11434wf->redraw_marker();
11435progdefaults.changed = true;
11436}}
11437            tooltip {Change color} xywh {627 164 20 20} color 1 align 8
11438            code0 {o->color(fl_rgb_color(progdefaults.notchRGBI.R,progdefaults.notchRGBI.G,progdefaults.notchRGBI.B));}
11439          }
11440        }
11441      }
11442      Fl_Group {} {
11443        label {Frequency scale} open
11444        xywh {249 223 496 55} box ENGRAVED_FRAME align 21
11445      } {
11446        Fl_Check_Button chkShowAudioScale {
11447          label {Always show audio frequencies}
11448          callback {progdefaults.wf_audioscale = o->value();
11449progdefaults.changed = true;}
11450          tooltip {Audio or RF frequencies on waterfall scale} xywh {259 246 241 20} down_box DOWN_BOX
11451          code0 {o->value(progdefaults.wf_audioscale);}
11452        }
11453        Fl_Button btnWaterfallFont {
11454          label {Font...}
11455          callback {font_browser->fontNumber(progdefaults.WaterfallFontnbr);
11456font_browser->fontSize(progdefaults.WaterfallFontsize);
11457font_browser->fontColor(FL_FOREGROUND_COLOR);
11458font_browser->fontFilter(Font_Browser::ALL_TYPES);
11459font_browser->callback((Fl_Callback*)cbWaterfallFontBrowser);
11460font_browser->show();}
11461          tooltip {Select waterfall scale font} xywh {559 246 71 24}
11462        }
11463      }
11464      Fl_Group {} {
11465        label {Transmit signal} open
11466        xywh {249 279 496 65} box ENGRAVED_FRAME align 21
11467      } {
11468        Fl_Check_Button btnViewXmtSignal {
11469          label {Monitor transmitted signal}
11470          callback {progdefaults.viewXmtSignal=o->value();
11471progdefaults.changed = true;}
11472          tooltip {Show transmit signal on waterfall} xywh {259 305 208 20} down_box DOWN_BOX
11473          code0 {o->value(progdefaults.viewXmtSignal);}
11474        }
11475        Fl_Counter valTxMonitorLevel {
11476          label {Signal Level (dB)}
11477          callback {progdefaults.TxMonitorLevel = pow(10.0, o->value()/20);
11478progdefaults.changed = true;}
11479          tooltip {Set level for good viewing} xywh {537 304 114 21} align 1 minimum -80 maximum 0 step 1 value -20
11480          code0 {o->value(20*log10(progdefaults.TxMonitorLevel));}
11481          code1 {o->lstep(10);}
11482        }
11483      }
11484    }
11485    Fl_Group {} {
11486      label {Waterfall/FFT Processing}
11487      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11488      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Waterfall/FFT Processing"));}
11489      code1 {config_pages.push_back(p);}
11490      code2 {tab_tree->add(_("Waterfall/FFT Processing"));}
11491    } {
11492      Fl_Group {} {open
11493        xywh {251 25 490 135} box ENGRAVED_FRAME
11494      } {
11495        Fl_Counter cntLowFreqCutoff {
11496          label {Lower limit}
11497          callback {progdefaults.LowFreqCutoff=(int)(o->value());
11498progdefaults.changed = true;
11499setwfrange();}
11500          tooltip {Low frequency limit in Hz} xywh {296 43 70 22} type Simple align 8 minimum 0 maximum 500 step 50 value 300
11501          code0 {o->value(progdefaults.LowFreqCutoff);}
11502          code1 {o->labelsize(FL_NORMAL_SIZE);}
11503          class Fl_Counter2
11504        }
11505        Fl_Check_Button btnWFaveraging {
11506          label {FFT averaging}
11507          callback {progdefaults.WFaveraging = o->value();
11508progdefaults.changed = true;}
11509          tooltip {Use averaging to decrease waterfall noise} xywh {296 79 120 20} down_box DOWN_BOX
11510          code0 {o->value(progdefaults.WFaveraging);}
11511        }
11512        Fl_Group listboxFFTPrefilter {
11513          label {FFT prefilter window function}
11514          callback {progdefaults.wfPreFilter = o->index();
11515progdefaults.changed = true;} open
11516          tooltip {Select the type of FFT prefilter} xywh {296 109 120 24} box DOWN_BOX color 7 align 8
11517          code0 {listboxFFTPrefilter->add(_("Rectangular")); listboxFFTPrefilter->add("Blackman");}
11518          code1 {listboxFFTPrefilter->add("Hamming"); listboxFFTPrefilter->add("Hanning");}
11519          code2 {listboxFFTPrefilter->add(_("Triangular"));}
11520          code3 {listboxFFTPrefilter->index(progdefaults.wfPreFilter);
11521                       o->labelsize(FL_NORMAL_SIZE);}
11522          class Fl_ListBox
11523        } {}
11524        Fl_Counter cntrWfwidth {
11525          label {Upper limit}
11526          callback {progdefaults.HighFreqCutoff = (int)o->value();
11527progdefaults.changed = true;
11528setwfrange();}
11529          tooltip {High frequency limit in Hz} xywh {519 43 95 22} type Simple align 8 minimum 2000 maximum 4000 step 100 value 3000
11530          code0 {o->value(progdefaults.HighFreqCutoff);}
11531          code1 {o->labelsize(FL_NORMAL_SIZE);}
11532          class Fl_Counter2
11533        }
11534        Fl_Counter wf_latency {
11535          label Latency
11536          callback {progdefaults.wf_latency = (int)o->value();
11537progdefaults.changed = true;}
11538          tooltip {Signal averaging over time
115390 - least
115404 - greatest} xywh {519 78 95 22} type Simple align 8 minimum 1 maximum 16 step 1 value 8
11541          code0 {o->value(progdefaults.wf_latency);}
11542          code1 {o->labelsize(FL_NORMAL_SIZE);}
11543          class Fl_Counter2
11544        }
11545      }
11546      Fl_Group {} {open
11547        tooltip {Show me more or less waterfall} xywh {251 166 490 73} box ENGRAVED_FRAME align 17
11548      } {
11549        Fl_Counter cntr_drop_speed {
11550          label {Slow drop rate}
11551          callback {progdefaults.drop_speed=(int)o->value();
11552progdefaults.changed=true;}
11553          tooltip {Normal drop speed / value} xywh {296 188 95 22} type Simple align 11 minimum 4 maximum 32 step 2 value 4
11554          code0 {o->value(progdefaults.drop_speed);}
11555        }
11556      }
11557      Fl_Group {} {
11558        label {Changes take effect on next program startup} open
11559        tooltip {Show me more or less waterfall} xywh {251 246 490 73} box ENGRAVED_FRAME align 17
11560      } {
11561        Fl_Counter cntrWfheight {
11562          label {Waterfall height in pixels}
11563          callback {progdefaults.wfheight = (int)o->value();
11564progdefaults.changed = true;}
11565          tooltip {CPU usage increases with waterfall height} xywh {296 276 120 22} align 8 minimum 100 maximum 500 step 5 value 120
11566          code0 {o->value(progdefaults.wfheight);}
11567          code1 {o->labelsize(FL_NORMAL_SIZE);}
11568          code2 {o->lstep(50);}
11569          class Fl_Counter2
11570        }
11571      }
11572    }
11573    Fl_Group {} {
11574      label {Waterfall/Mouse usage}
11575      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11576      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Waterfall/Mouse usage"));}
11577      code1 {config_pages.push_back(p);}
11578      code2 {tab_tree->add(_("Waterfall/Mouse usage"));}
11579    } {
11580      Fl_Group {} {open
11581        xywh {211 50 580 170} box ENGRAVED_FRAME
11582      } {
11583        Fl_Check_Button btnWaterfallHistoryDefault {
11584          label {Left or right click always replays audio history}
11585          callback {progdefaults.WaterfallHistoryDefault = o->value();
11586progdefaults.changed = true;}
11587          tooltip {Replay trackline audio} xywh {266 65 340 20} down_box DOWN_BOX
11588          code0 {o->value(progdefaults.WaterfallHistoryDefault);}
11589        }
11590        Fl_Check_Button btnWaterfallQSY {
11591          label {Dragging on the waterfall scale changes frequency}
11592          callback {progdefaults.WaterfallQSY = o->value();
11593progdefaults.changed = true;}
11594          tooltip {Enable drag cursor on waterfall scale} xywh {266 95 380 20} down_box DOWN_BOX
11595          code0 {o->value(progdefaults.WaterfallQSY);}
11596        }
11597        Fl_Check_Button btnWaterfallClickInsert {
11598          label {Insert text on single left click}
11599          callback {progdefaults.WaterfallClickInsert = o->value();
11600if (progdefaults.WaterfallClickInsert)
11601    inpWaterfallClickText->activate();
11602else
11603    inpWaterfallClickText->deactivate();
11604progdefaults.changed = true;}
11605          tooltip {Insert special text in Rx panel
11606when waterfall clicked} xywh {266 137 225 20} down_box DOWN_BOX
11607          code0 {o->value(progdefaults.WaterfallClickInsert);}
11608        }
11609        Fl_Input inpWaterfallClickText {
11610          callback {progdefaults.WaterfallClickText = o->value();
11611progdefaults.changed = true;}
11612          tooltip {The string <FREQ> is replaced with
11613the current modem and frequency} xywh {552 125 180 50} align 8
11614          class Fl_Input2
11615        }
11616        Fl_Group listboxWaterfallWheelAction {
11617          label {Wheel action}
11618          callback {progdefaults.WaterfallWheelAction = o->index();
11619progdefaults.changed = true;} open
11620          tooltip {Select how the mouse wheel
11621behaves inside the waterfall} xywh {266 178 150 22} box DOWN_BOX color 7 align 8
11622          code0 {o->labelsize(FL_NORMAL_SIZE);}
11623          class Fl_ListBox
11624        } {}
11625      }
11626    }
11627    Fl_Group {} {
11628      label {Waterfall/Spectrum}
11629      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11630      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Waterfall/Spectrum"));}
11631      code1 {config_pages.push_back(p);}
11632      code2 {tab_tree->add(_("Waterfall/Spectrum"));}
11633      code3 {tab_tree->close(_("Waterfall"));}
11634    } {
11635      Fl_Group {} {
11636        label {Spectrum Scope / Waterfall interaction} open
11637        xywh {210 50 580 150} box ENGRAVED_BOX align 17
11638      } {
11639        Fl_Check_Button btnWFspectrum_center {
11640          label {left click transfers frequency to scope center frequency}
11641          callback {progdefaults.wf_spectrum_center = o->value();
11642progdefaults.changed = true;}
11643          tooltip {left click on WF recenters spectrum scope} xywh {275 92 365 20} down_box DOWN_BOX
11644          code0 {o->value(progdefaults.wf_spectrum_center);}
11645        }
11646        Fl_Check_Button btnWFspectrum_dbvals {
11647          label {use waterfall range/limit values}
11648          callback {progdefaults.wf_spectrum_dbvals = o->value();
11649progdefaults.changed = true;}
11650          tooltip {values left/below waterfall} xywh {275 123 221 20} down_box DOWN_BOX
11651          code0 {o->value(progdefaults.wf_spectrum_dbvals);}
11652        }
11653        Fl_Counter cntr_spectrum_freq_scale {
11654          label {freq scale = N * modem bandwidth}
11655          callback {progdefaults.wf_spectrum_scale_factor = o->value();
11656progdefaults.changed = true;}
11657          xywh {275 155 75 20} type Simple align 8 minimum 1 maximum 10 step 1 value 5
11658          code0 {o->value(progdefaults.wf_spectrum_scale_factor);}
11659        }
11660        Fl_Check_Button btn_spectrum_modem_scale {
11661          label use
11662          callback {progdefaults.wf_spectrum_modem_scale = o->value();
11663progdefaults.changed = true;}
11664          tooltip {scale spectrum display linked to modem bandwidth} xywh {585 155 55 20} down_box DOWN_BOX
11665          code0 {o->value(progdefaults.wf_spectrum_modem_scale);}
11666        }
11667      }
11668    }
11669    Fl_Group {} {
11670      label {Web/Pskmail}
11671      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11672      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Web/Pskmail"));}
11673      code1 {config_pages.push_back(p);}
11674      code2 {tab_tree->add(_("Web/Pskmail"));}
11675    } {
11676      Fl_Group {} {
11677        label {Mail Server Attributes} open
11678        xywh {256 52 490 174} box ENGRAVED_FRAME align 21
11679      } {
11680        Fl_Counter cntServerCarrier {
11681          label {Carrier frequency (Hz)}
11682          callback {progdefaults.ServerCarrier = (int)o->value();
11683wf->redraw_marker();
11684progdefaults.changed = true;}
11685          tooltip {Default listen / transmit frequency} xywh {307 80 80 20} type Simple align 8 minimum 500 maximum 2500 step 25 value 1500
11686          code0 {o->value(progdefaults.ServerCarrier);}
11687          code1 {o->labelsize(FL_NORMAL_SIZE);}
11688          class Fl_Counter2
11689        }
11690        Fl_Counter cntServerOffset {
11691          label {Search range (Hz)}
11692          callback {progdefaults.ServerOffset = (int)o->value();
11693wf->redraw_marker();
11694progdefaults.changed = true;}
11695          tooltip {Listen for signals within this range} xywh {307 117 80 20} type Simple align 8 minimum 10 maximum 500 step 10 value 100
11696          code0 {o->value(progdefaults.SearchRange);}
11697          code1 {o->labelsize(FL_NORMAL_SIZE);}
11698          class Fl_Counter2
11699        }
11700        Fl_Counter cntServerACQsn {
11701          label {Acquisition S/N (dB)}
11702          callback {progdefaults.ServerACQsn = o->value();
11703progdefaults.changed = true;}
11704          tooltip {Capture signals over this threshold} xywh {307 154 80 20} type Simple align 8 minimum 3 maximum 20 step 1 value 6
11705          code0 {o->value(progdefaults.ServerACQsn);}
11706          code1 {o->labelsize(FL_NORMAL_SIZE);}
11707          class Fl_Counter2
11708        }
11709        Fl_Counter cntServerAFCrange {
11710          label {AFC range (Hz)}
11711          callback {progdefaults.ServerAFCrange = (int)o->value();
11712wf->redraw_marker();
11713progdefaults.changed = true;}
11714          tooltip {Limit AFC movement to this range} xywh {307 191 80 20} type Simple align 8 minimum 10 maximum 500 step 10 value 25
11715          code0 {o->value(progdefaults.SearchRange);}
11716          code1 {o->labelsize(FL_NORMAL_SIZE);}
11717          class Fl_Counter2
11718        }
11719        Fl_Check_Button btnPSKmailSweetSpot {
11720          label {Reset to Carrier}
11721          callback {progdefaults.PSKmailSweetSpot = o->value();
11722progdefaults.changed = true;}
11723          tooltip {When no signal present} xywh {562 80 142 20} down_box DOWN_BOX value 1
11724          code0 {o->value(progdefaults.PSKmailSweetSpot);}
11725        }
11726      }
11727      Fl_Group {} {
11728        label General open
11729        xywh {256 228 490 72} box ENGRAVED_FRAME align 21
11730      } {
11731        Fl_Check_Button btn_arq_s2n_report {
11732          label {Report ARQ frames average S/N}
11733          callback {progdefaults.Pskmails2nreport=o->value();}
11734          xywh {281 253 250 20} down_box DOWN_BOX
11735          code0 {o->value(progdefaults.Pskmails2nreport);}
11736        }
11737      }
11738    }
11739    Fl_Group {} {
11740      label {Web/WX}
11741      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
11742      code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Web/WX"));}
11743      code1 {config_pages.push_back(p);}
11744      code2 {tab_tree->add(_("Web/WX"));}
11745      code3 {tab_tree->close(_("Web"));}
11746    } {
11747      Fl_Input txt_wx_url {
11748        label {Access URL}
11749        callback {progdefaults.wx_url = o->value();
11750progdefaults.changed = true;}
11751        tooltip {Enter METAR data internet URL} xywh {295 63 430 25} when 1
11752        code0 {o->value(progdefaults.wx_url.c_str());}
11753      }
11754      Fl_Button btn_default_wx_url {
11755        label Default
11756        callback {txt_wx_url->value(
11757"https://tgftp.nws.noaa.gov/data/observations/metar/decoded");
11758progdefaults.wx_url=txt_wx_url->value();
11759progdefaults.changed=true;}
11760        tooltip {Default URL} xywh {727 63 60 25}
11761      }
11762      Fl_Input inpWXsta {
11763        label {METAR station ID code}
11764        callback {progdefaults.wx_sta = o->value();
11765progdefaults.changed = true;}
11766        tooltip {for example KMDQ for
11767Huntsville-Madison Executive Airport, AL} xywh {295 99 50 24} align 8
11768        code0 {o->value(progdefaults.wx_sta.c_str());}
11769      }
11770      Fl_Button btn_metar_search {
11771        label {Search on  web}
11772        callback {get_METAR_station();}
11773        xywh {528 99 130 24}
11774        code0 {\#include "weather.h"}
11775      }
11776      Fl_Check_Button btn_wx_full {
11777        label {Full report}
11778        callback {progdefaults.wx_full=o->value();
11779progdefaults.changed = true;}
11780        tooltip {Insert full METAR report} xywh {303 138 70 15} down_box DOWN_BOX
11781        code0 {o->value(progdefaults.wx_full);}
11782      }
11783      Fl_Check_Button btn_wx_station_name {
11784        label {METAR station location}
11785        callback {progdefaults.wx_station_name = o->value();
11786progdefaults.changed = true;}
11787        tooltip {Add geopolitical name of METAR station} xywh {303 162 70 15} down_box DOWN_BOX
11788        code0 {o->value(progdefaults.wx_station_name);}
11789      }
11790      Fl_Check_Button btn_wx_condx {
11791        label Conditions
11792        callback {progdefaults.wx_condx=o->value();
11793progdefaults.changed = true;}
11794        tooltip {current wx conditions} xywh {303 188 70 15} down_box DOWN_BOX
11795        code0 {o->value(progdefaults.wx_condx);}
11796      }
11797      Fl_Check_Button btn_wx_fahrenheit {
11798        label Fahrenheit
11799        callback {progdefaults.wx_fahrenheit=o->value();
11800progdefaults.changed = true;}
11801        tooltip {report Fahrenheit} xywh {303 227 70 15} down_box DOWN_BOX
11802        code0 {o->value(progdefaults.wx_fahrenheit);}
11803      }
11804      Fl_Check_Button btn_wx_celsius {
11805        label Celsius
11806        callback {progdefaults.wx_celsius=o->value();
11807progdefaults.changed = true;}
11808        tooltip {report Celsius} xywh {522 227 70 15} down_box DOWN_BOX
11809        code0 {o->value(progdefaults.wx_celsius);}
11810      }
11811      Fl_Check_Button btn_wx_mph {
11812        label {Miles / Hour}
11813        callback {progdefaults.wx_mph=o->value();
11814progdefaults.changed = true;}
11815        tooltip {report miles per hour} xywh {303 253 70 15} down_box DOWN_BOX
11816        code0 {o->value(progdefaults.wx_mph);}
11817      }
11818      Fl_Check_Button btn_wx_kph {
11819        label {kilometers / hour}
11820        callback {progdefaults.wx_kph=o->value();
11821progdefaults.changed = true;}
11822        tooltip {report kilometers per hour} xywh {521 253 70 15} down_box DOWN_BOX
11823        code0 {o->value(progdefaults.wx_kph);}
11824      }
11825      Fl_Check_Button btn_wx_inches {
11826        label {Inches Hg.}
11827        callback {progdefaults.wx_inches=o->value();
11828progdefaults.changed = true;}
11829        tooltip {report inches mercury} xywh {303 280 70 15} down_box DOWN_BOX
11830        code0 {o->value(progdefaults.wx_inches);}
11831      }
11832      Fl_Check_Button btn_wx_mbars {
11833        label mbars
11834        callback {progdefaults.wx_mbars=o->value();
11835progdefaults.changed = true;}
11836        tooltip {report millibars} xywh {522 280 70 15} down_box DOWN_BOX
11837        code0 {o->value(progdefaults.wx_mbars);}
11838      }
11839    }
11840    Fl_Button btnSaveConfig {
11841      label Save
11842      callback {progdefaults.saveDefaults();}
11843      xywh {492 355 130 22}
11844    }
11845    Fl_Return_Button btnCloseConfig {
11846      label Close
11847      callback {closeDialog();}
11848      xywh {665 355 130 22}
11849    }
11850    Fl_Button btnResetConfig {
11851      label {Restore defaults}
11852      callback {if (fl_choice2("This will effect every configuration item!\\nConfirm", "Yes", "No", NULL)) {
11853	progdefaults.resetDefaults();
11854	progdefaults.changed = false;
11855}}
11856      tooltip {WARNING - this will over write ALL settings} xywh {238 355 130 22}
11857    }
11858  }
11859}
11860
11861Function {openConfig()} {return_type void
11862} {
11863  code {if (!dlgConfig) createConfig();
11864progdefaults.loadDefaults();} {}
11865}
11866
11867Function {closeDialog()} {return_type void
11868} {
11869  code {if (dlgConfig) dlgConfig->hide();} {}
11870}
11871
11872Function {WefaxDestDirSet(Fl_File_Chooser *w, void *userdata)} {return_type void
11873} {
11874  code {/* http://www.fltk.org/documentation.php/doc-1.1/Fl_File_Chooser.html */
11875if( ( w->value() != NULL ) && ( ! w->shown() ) ) {
11876	btnWefaxSaveDir->value( w->value() );
11877	btnWefaxSaveDir->redraw();
11878	cb_btnWefaxSaveDir( btnWefaxSaveDir, NULL );
11879}} {}
11880}
11881
11882Function {KmlDestDirSet(Fl_File_Chooser *w, void *userdata)} {return_type void
11883} {
11884  code {/* http://www.fltk.org/documentation.php/doc-1.1/Fl_File_Chooser.html */
11885if( ( w->value() != NULL ) && ( ! w->shown() ) ) {
11886	btnKmlSaveDir->value( w->value() );
11887	btnKmlSaveDir->redraw();
11888	cb_btnKmlSaveDir( btnKmlSaveDir, NULL );
11889}} {}
11890}
11891