~ubuntu-branches/ubuntu/wily/flrig/wily

« back to all changes in this revision

Viewing changes to src/support/dialogs.cxx

  • Committer: Package Import Robot
  • Author(s): Kamal Mostafa
  • Date: 2014-10-25 11:17:10 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20141025111710-n32skgya3l9u1brw
Tags: 1.3.17-1
* New upstream release (Closes: #761839)
* Debian Standards-Version: 3.9.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// ----------------------------------------------------------------------------
 
2
// Copyright (C) 2014
 
3
//              David Freese, W1HKJ
 
4
//
 
5
// This file is part of flrig.
 
6
//
 
7
// flrig is free software; you can redistribute it and/or modify
 
8
// it under the terms of the GNU General Public License as published by
 
9
// the Free Software Foundation; either version 3 of the License, or
 
10
// (at your option) any later version.
 
11
//
 
12
// flrig is distributed in the hope that it will be useful,
 
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
// GNU General Public License for more details.
 
16
//
 
17
// You should have received a copy of the GNU General Public License
 
18
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
// ----------------------------------------------------------------------------
 
20
 
 
21
#include <FL/Fl.H>
 
22
#include <FL/x.H>
 
23
#include <FL/fl_draw.H>
 
24
#include <string>
 
25
 
 
26
#include "dialogs.h"
 
27
#include "util.h"
 
28
#include "debug.h"
 
29
#include "serial.h"
 
30
#include "support.h"
 
31
#include "rigpanel.h"
 
32
#include "xml_io.h"
 
33
#include "rigbase.h"
 
34
#include "font_browser.h"
 
35
 
 
36
#include <string>
 
37
 
 
38
#include <iostream>
 
39
 
 
40
using namespace std;
 
41
 
 
42
#include <stdio.h>
 
43
#include <unistd.h>
 
44
#include <sys/types.h>
 
45
#include <sys/stat.h>
 
46
#ifndef __WIN32__
 
47
#include <fcntl.h>
 
48
#include <sys/ioctl.h>
 
49
#include <sys/time.h>
 
50
#include <termios.h>
 
51
#include <glob.h>
 
52
#endif
 
53
 
 
54
#include "rig.h"
 
55
#include "socket_io.h"
 
56
 
 
57
Fl_Double_Window *dlgDisplayConfig = NULL;
 
58
Fl_Double_Window *dlgXcvrConfig = NULL;
 
59
Fl_Double_Window *dlgMemoryDialog = NULL;
 
60
Fl_Double_Window *dlgControls = NULL;
 
61
 
 
62
Font_Browser     *fntbrowser = NULL;
 
63
 
 
64
Fl_Color flrig_def_color(int);
 
65
 
 
66
//======================================================================
 
67
// test comm ports
 
68
//======================================================================
 
69
 
 
70
void clear_combos()
 
71
{
 
72
        selectCommPort->clear();
 
73
        selectAuxPort->clear();
 
74
        selectSepPTTPort->clear();
 
75
        selectCommPort->add("NONE");
 
76
        selectAuxPort->add("NONE");
 
77
        selectSepPTTPort->add("NONE");
 
78
}
 
79
 
 
80
void add_combos(char *port)
 
81
{
 
82
        selectCommPort->add(port);
 
83
        selectAuxPort->add(port);
 
84
        selectSepPTTPort->add(port);
 
85
}
 
86
 
 
87
//======================================================================
 
88
// WIN32 init_port_combos
 
89
//======================================================================
 
90
 
 
91
#ifdef __WIN32__
 
92
static bool open_serial(const char* dev)
 
93
{
 
94
        bool ret = false;
 
95
        HANDLE fd = CreateFile(dev, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
 
96
        if (fd != INVALID_HANDLE_VALUE) {
 
97
                CloseHandle(fd);
 
98
                ret = true;
 
99
        }
 
100
        return ret;
 
101
}
 
102
 
 
103
#  define TTY_MAX 255
 
104
void init_port_combos()
 
105
{
 
106
        clear_combos();
 
107
 
 
108
        char ttyname[21];
 
109
        const char tty_fmt[] = "//./COM%u";
 
110
 
 
111
        for (unsigned j = 0; j < TTY_MAX; j++) {
 
112
                snprintf(ttyname, sizeof(ttyname), tty_fmt, j);
 
113
                if (!open_serial(ttyname))
 
114
                        continue;
 
115
                snprintf(ttyname, sizeof(ttyname), "COM%u", j);
 
116
                LOG_WARN("Found serial port %s", ttyname);
 
117
                add_combos(ttyname);
 
118
        }
 
119
}
 
120
#endif //__WIN32__
 
121
 
 
122
//======================================================================
 
123
// Linux init_port_combos
 
124
//======================================================================
 
125
 
 
126
#ifdef __linux__
 
127
#ifndef PATH_MAX
 
128
#  define PATH_MAX 1024
 
129
#endif
 
130
#  define TTY_MAX 8
 
131
 
 
132
void init_port_combos()
 
133
{
 
134
        struct stat st;
 
135
        char ttyname[PATH_MAX + 1];
 
136
        bool ret = false;
 
137
 
 
138
        DIR* sys = NULL;
 
139
        char cwd[PATH_MAX] = { '.', '\0' };
 
140
 
 
141
        clear_combos();
 
142
 
 
143
        LOG_QUIET("%s","Search for serial ports");
 
144
 
 
145
        glob_t gbuf;
 
146
        glob("/dev/serial/by-id/*", 0, NULL, &gbuf);
 
147
        for (size_t j = 0; j < gbuf.gl_pathc; j++) {
 
148
                if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) ||
 
149
                     strstr(gbuf.gl_pathv[j], "modem") )
 
150
                        continue;
 
151
                LOG_QUIET("Found serial port %s", gbuf.gl_pathv[j]);
 
152
                        add_combos(gbuf.gl_pathv[j]);
 
153
        }
 
154
        globfree(&gbuf);
 
155
 
 
156
        if (getcwd(cwd, sizeof(cwd)) == NULL) goto out;
 
157
 
 
158
        if (chdir("/sys/class/tty") == -1) goto check_cuse;
 
159
        if ((sys = opendir(".")) == NULL) goto check_cuse;
 
160
 
 
161
        ssize_t len;
 
162
        struct dirent* dp;
 
163
 
 
164
        LOG_QUIET("%s", "Searching /sys/class/tty/");
 
165
 
 
166
        while ((dp = readdir(sys))) {
 
167
#  ifdef _DIRENT_HAVE_D_TYPE
 
168
                if (dp->d_type != DT_LNK)
 
169
                        continue;
 
170
#  endif
 
171
                if ((len = readlink(dp->d_name, ttyname, sizeof(ttyname)-1)) == -1)
 
172
                        continue;
 
173
                ttyname[len] = '\0';
 
174
                if (!strstr(ttyname, "/devices/virtual/")) {
 
175
                        snprintf(ttyname, sizeof(ttyname), "/dev/%s", dp->d_name);
 
176
                        if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode))
 
177
                                continue;
 
178
                        LOG_QUIET("Found serial port %s", ttyname);
 
179
                        add_combos(ttyname);
 
180
                        ret = true;
 
181
                }
 
182
        }
 
183
 
 
184
check_cuse:
 
185
        if (sys) {
 
186
                closedir(sys);
 
187
                sys = NULL;
 
188
        }
 
189
        if (chdir("/sys/class/cuse") == -1) goto out;
 
190
        if ((sys = opendir(".")) == NULL) goto out;
 
191
 
 
192
        LOG_QUIET("%s", "Searching /sys/class/cuse/");
 
193
 
 
194
        while ((dp = readdir(sys))) {
 
195
#  ifdef _DIRENT_HAVE_D_TYPE
 
196
                if (dp->d_type != DT_LNK)
 
197
                        continue;
 
198
#  endif
 
199
                if ((len = readlink(dp->d_name, ttyname, sizeof(ttyname)-1)) == -1)
 
200
                        continue;
 
201
                ttyname[len] = '\0';
 
202
                if (strstr(ttyname, "/devices/virtual/") && !strncmp(dp->d_name, "mhuxd", 5)) {
 
203
                        char *name = strdup(dp->d_name);
 
204
                        if(!name)
 
205
                                continue;
 
206
                        char *p = strchr(name, '!');
 
207
                        if(p)
 
208
                                *p = '/';
 
209
                        snprintf(ttyname, sizeof(ttyname), "/dev/%s", name);
 
210
                        free(name);
 
211
                        if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode))
 
212
                                continue;
 
213
                        LOG_QUIET("Found serial port %s", ttyname);
 
214
                        add_combos(ttyname);
 
215
                        ret = true;
 
216
                }
 
217
        }
 
218
 
 
219
out:
 
220
        std::string tty_virtual = HomeDir;
 
221
        tty_virtual.append("vdev");
 
222
 
 
223
        LOG_QUIET("Searching %s", tty_virtual.c_str());
 
224
 
 
225
        tty_virtual.append("/ttyS%u");
 
226
        for (unsigned j = 0; j < TTY_MAX; j++) {
 
227
                snprintf(ttyname, sizeof(ttyname), tty_virtual.c_str(), j);
 
228
                if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) )
 
229
                        continue;
 
230
                LOG_QUIET("Found serial port %s", ttyname);
 
231
                add_combos(ttyname);
 
232
        }
 
233
 
 
234
        if (sys) closedir(sys);
 
235
        if (chdir(cwd) == -1) return;
 
236
        if (ret) // do we need to fall back to the probe code below?
 
237
                return;
 
238
 
 
239
        const char* tty_fmt[] = {
 
240
                "/dev/ttyS%u",
 
241
                "/dev/ttyUSB%u",
 
242
                "/dev/usb/ttyUSB%u"
 
243
        };
 
244
        LOG_QUIET("%s", "Serial port discovery via 'stat'");
 
245
        for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) {
 
246
                for (unsigned j = 0; j < TTY_MAX; j++) {
 
247
                        snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j);
 
248
                        if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) )
 
249
                                continue;
 
250
 
 
251
                        LOG_WARN("Found serial port %s", ttyname);
 
252
                        add_combos(ttyname);
 
253
                }
 
254
        }
 
255
 
 
256
}
 
257
#endif // __linux__
 
258
 
 
259
//======================================================================
 
260
// APPLE init_port_combos
 
261
//======================================================================
 
262
 
 
263
#ifdef __APPLE__
 
264
#ifndef PATH_MAX
 
265
#  define PATH_MAX 1024
 
266
#endif
 
267
 
 
268
void init_port_combos()
 
269
{
 
270
        clear_combos();
 
271
 
 
272
        struct stat st;
 
273
 
 
274
        const char* tty_fmt[] = {
 
275
                "/dev/cu.*",
 
276
                "/dev/tty.*"
 
277
        };
 
278
 
 
279
        glob_t gbuf;
 
280
 
 
281
        for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) {
 
282
                glob(tty_fmt[i], 0, NULL, &gbuf);
 
283
                for (size_t j = 0; j < gbuf.gl_pathc; j++) {
 
284
                        if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) ||
 
285
                             strstr(gbuf.gl_pathv[j], "modem") )
 
286
                                continue;
 
287
                        LOG_WARN("Found serial port %s", gbuf.gl_pathv[j]);
 
288
                        add_combos(gbuf.gl_pathv[j]);
 
289
                }
 
290
                globfree(&gbuf);
 
291
        }
 
292
}
 
293
#endif //__APPLE__
 
294
 
 
295
//======================================================================
 
296
// FreeBSD init_port_combos
 
297
//======================================================================
 
298
 
 
299
#ifdef __FreeBSD__
 
300
#ifndef PATH_MAX
 
301
#  define PATH_MAX 1024
 
302
#endif
 
303
#  define TTY_MAX 8
 
304
 
 
305
void init_port_combos()
 
306
{
 
307
        int retval;
 
308
        struct stat st;
 
309
        char ttyname[PATH_MAX + 1];
 
310
        const char* tty_fmt[] = {
 
311
                "/dev/ttyd%u"
 
312
        };
 
313
 
 
314
        clear_combos();
 
315
 
 
316
        for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) {
 
317
                for (unsigned j = 0; j < TTY_MAX; j++) {
 
318
                        snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j);
 
319
                        if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) )
 
320
                                continue;
 
321
                        LOG_WARN("Found serial port %s", ttyname);
 
322
                        add_combos(ttyname);
 
323
                }
 
324
        }
 
325
}
 
326
#endif //__FreeBSD__
 
327
 
 
328
void cbCIVdefault()
 
329
{
 
330
        char hexstr[8];
 
331
        int picked = selectRig->index();
 
332
        rigbase *srig = rigs[picked];
 
333
        snprintf(hexstr, sizeof(hexstr), "0x%2X", srig->defaultCIV);
 
334
        txtCIV->value(hexstr);
 
335
        progStatus.CIV = srig->defaultCIV;
 
336
        srig->adjustCIV(progStatus.CIV);
 
337
}
 
338
 
 
339
void cbCIV()
 
340
{
 
341
        int picked = selectRig->index();
 
342
        int adr = 0;
 
343
        rigbase *srig = rigs[picked];
 
344
        sscanf(txtCIV->value(), "0x%2X", &adr);
 
345
        progStatus.CIV = adr;
 
346
        srig->adjustCIV(progStatus.CIV);
 
347
}
 
348
 
 
349
void cbUSBaudio()
 
350
{
 
351
        progStatus.USBaudio = btnUSBaudio->value();
 
352
}
 
353
 
 
354
void cbCancelXcvrDialog()
 
355
{
 
356
        btnOkXcvrDialog->labelcolor(FL_BLACK);
 
357
        dlgXcvrConfig->hide();
 
358
}
 
359
 
 
360
void cbOkXcvrDialog()
 
361
{
 
362
        if (progStatus.UIsize == wide_ui) {
 
363
                btn_show_controls->label("@-22->");
 
364
                btn_show_controls->redraw_label();
 
365
                grpTABS->hide();
 
366
                mainwindow->resizable(grpTABS);
 
367
                mainwindow->size(mainwindow->w(), 150);
 
368
                mainwindow->size_range(735, 150, 0, 150);
 
369
        }
 
370
 
 
371
        // close the current rig control
 
372
        closeRig();               // local serial comm connection
 
373
        close_rig_xmlrpc();       // fldigi connection
 
374
//      disconnect_from_remote(); // remote tcpip connection
 
375
 
 
376
        { guard_lock gl_serial(&mutex_serial, 200);
 
377
                RigSerial.ClosePort();
 
378
                AuxSerial.ClosePort();
 
379
                SepSerial.ClosePort();
 
380
                bypass_serial_thread_loop = true;
 
381
        }
 
382
 
 
383
        string p1 = selectCommPort->value();
 
384
        string p2 = selectAuxPort->value();
 
385
        string p3 = selectSepPTTPort->value();
 
386
 
 
387
        if (p1.compare("NONE") != 0)
 
388
                if (p1 == p2 || p1 == p3) {
 
389
                        fl_message("Select separate ports");
 
390
                        return;
 
391
                }
 
392
 
 
393
        if (p2.compare("NONE") != 0)
 
394
                if (p2 == p3) {
 
395
                        fl_message("Select separate ports");
 
396
                        return;
 
397
                }
 
398
 
 
399
        if (rig_nbr != selectRig->index()) {
 
400
                clearList();
 
401
                saveFreqList();
 
402
                rig_nbr = selectRig->index();
 
403
                selrig = rigs[rig_nbr];
 
404
        }
 
405
 
 
406
        progStatus.rig_nbr = rig_nbr;
 
407
 
 
408
        progStatus.xcvr_serial_port = selectCommPort->value();
 
409
        progStatus.aux_serial_port = selectAuxPort->value();
 
410
        progStatus.sep_serial_port = selectSepPTTPort->value();
 
411
 
 
412
        progStatus.comm_baudrate = mnuBaudrate->index();
 
413
        progStatus.stopbits = btnOneStopBit->value() ? 1 : 2;
 
414
        progStatus.comm_retries = (int)cntRigCatRetries->value();
 
415
        progStatus.comm_timeout = (int)cntRigCatTimeout->value();
 
416
        progStatus.comm_wait = (int)cntRigCatWait->value();
 
417
        progStatus.comm_echo = btnRigCatEcho->value();
 
418
        progStatus.comm_rtsptt = btnrtsptt->value();
 
419
        progStatus.comm_catptt = btncatptt->value();
 
420
        progStatus.comm_dtrptt = btndtrptt->value();
 
421
        progStatus.comm_rtscts = chkrtscts->value();
 
422
        progStatus.comm_rtsplus = btnrtsplus->value();
 
423
        progStatus.comm_dtrplus = btndtrplus->value();
 
424
 
 
425
        progStatus.sep_dtrplus = btnSepDTRplus->value();
 
426
        progStatus.sep_dtrptt = btnSepDTRptt->value();
 
427
        progStatus.sep_rtsplus = btnSepRTSplus->value();
 
428
        progStatus.sep_rtsptt = btnSepRTSptt->value();
 
429
 
 
430
        progStatus.imode_B  = progStatus.imode_A  = selrig->def_mode;
 
431
        progStatus.iBW_B    = progStatus.iBW_A    = selrig->def_bw;
 
432
        progStatus.freq_B   = progStatus.freq_A   = selrig->def_freq;
 
433
 
 
434
        init_title();
 
435
 
 
436
        if (!startXcvrSerial()) {
 
437
                if (progStatus.xcvr_serial_port.compare("NONE") == 0) {
 
438
                        LOG_WARN("No comm port ... test mode");
 
439
                } else {
 
440
                        progStatus.xcvr_serial_port = "NONE";
 
441
                        selectCommPort->value(progStatus.xcvr_serial_port.c_str());
 
442
                }
 
443
        }
 
444
        if (!startAuxSerial()) {
 
445
                if (progStatus.aux_serial_port.compare("NONE") != 0) {
 
446
                        progStatus.aux_serial_port = "NONE";
 
447
                        selectAuxPort->value(progStatus.aux_serial_port.c_str());
 
448
                }
 
449
        }
 
450
        if (!startSepSerial()) {
 
451
                if (progStatus.sep_serial_port.compare("NONE") != 0) {
 
452
                        progStatus.sep_serial_port = "NONE";
 
453
                        selectSepPTTPort->value(progStatus.sep_serial_port.c_str());
 
454
                }
 
455
        }
 
456
 
 
457
        open_rig_xmlrpc();
 
458
 
 
459
        initRig();
 
460
 
 
461
        mainwindow->redraw();
 
462
 
 
463
        btnOkXcvrDialog->labelcolor(FL_BLACK);
 
464
}
 
465
 
 
466
void configXcvr()
 
467
{
 
468
 
 
469
        selectCommPort->value(progStatus.xcvr_serial_port.c_str());
 
470
        selectAuxPort->value(progStatus.aux_serial_port.c_str());
 
471
        selectSepPTTPort->value(progStatus.sep_serial_port.c_str());
 
472
 
 
473
        if (rig_nbr >= IC703 && rig_nbr <= IC910H) {
 
474
                char hexstr[8];
 
475
                snprintf(hexstr, sizeof(hexstr), "0x%2X", selrig->CIV);
 
476
                txtCIV->value(hexstr);
 
477
                txtCIV->activate();
 
478
                btnCIVdefault->activate();
 
479
                if (rig_nbr == IC7200 || rig_nbr == IC7600) {
 
480
                        btnUSBaudio->value(progStatus.USBaudio);
 
481
                        btnUSBaudio->activate();
 
482
                } else
 
483
                        btnUSBaudio->deactivate();
 
484
        } else {
 
485
                txtCIV->value("");
 
486
                txtCIV->deactivate();
 
487
                btnCIVdefault->deactivate();
 
488
                btnUSBaudio->value(0);
 
489
                btnUSBaudio->deactivate();
 
490
        }
 
491
 
 
492
        dlgXcvrConfig->show();
 
493
        tabsConfig->value(tabPrimary);
 
494
}
 
495
 
 
496
void open_poll_tab()
 
497
{
 
498
        dlgXcvrConfig->show();
 
499
        tabsConfig->value(tabPolling);
 
500
}
 
501
 
 
502
void open_send_command_tab()
 
503
{
 
504
        dlgXcvrConfig->show();
 
505
        tabsConfig->value(tabSndCmd);
 
506
}
 
507
 
 
508
void open_tcpip_tab()
 
509
{
 
510
        dlgXcvrConfig->show();
 
511
        tabsConfig->value(tabTCPIP);
 
512
}
 
513
 
 
514
void open_ptt_tab()
 
515
{
 
516
        dlgXcvrConfig->show();
 
517
        tabsConfig->value(tabPTT);
 
518
}
 
519
 
 
520
void open_aux_tab()
 
521
{
 
522
        dlgXcvrConfig->show();
 
523
        tabsConfig->value(tabAux);
 
524
}
 
525
 
 
526
void createXcvrDialog()
 
527
{
 
528
        dlgXcvrConfig = XcvrDialog();
 
529
 
 
530
        init_port_combos();
 
531
 
 
532
        mnuBaudrate->clear();
 
533
        for (int i = 0; szBaudRates[i] != NULL; i++)
 
534
                mnuBaudrate->add(szBaudRates[i]);
 
535
 
 
536
        cbo_agc_level->clear();
 
537
        cbo_agc_level->add("slow");
 
538
        cbo_agc_level->add("med");
 
539
        cbo_agc_level->add("fast");
 
540
        cbo_agc_level->index(progStatus.agc_level);
 
541
 
 
542
        cbo_tt550_agc_level->add("slow");
 
543
        cbo_tt550_agc_level->add("med");
 
544
        cbo_tt550_agc_level->add("fast");
 
545
        cbo_tt550_agc_level->index(progStatus.tt550_agc_level);
 
546
 
 
547
        cbo_tt550_nb_level->add("NONE");
 
548
        cbo_tt550_nb_level->add("1");
 
549
        cbo_tt550_nb_level->add("2");
 
550
        cbo_tt550_nb_level->add("3");
 
551
        cbo_tt550_nb_level->add("4");
 
552
        cbo_tt550_nb_level->add("5");
 
553
        cbo_tt550_nb_level->add("6");
 
554
        cbo_tt550_nb_level->add("7");
 
555
        cbo_tt550_nb_level->index(progStatus.tt550_nb_level);
 
556
 
 
557
        initRigCombo();
 
558
}
 
559
 
 
560
// Frequency display font / colors
 
561
Fl_Font selfont;
 
562
 
 
563
void cbFreqControlFontBrowser(Fl_Widget*, void*) {
 
564
        selfont = fntbrowser->fontNumber();
 
565
        lblTest->labelfont(selfont);
 
566
        dlgDisplayConfig->redraw();
 
567
        fntbrowser->hide();
 
568
}
 
569
 
 
570
void cbPrefFont()
 
571
{
 
572
        fntbrowser->fontNumber(progStatus.fontnbr);
 
573
        fntbrowser->fontFilter(Font_Browser::FIXED_WIDTH);
 
574
        fntbrowser->fontFilter(Font_Browser::ALL_TYPES);
 
575
        fntbrowser->callback(cbFreqControlFontBrowser);
 
576
        fntbrowser->show();
 
577
}
 
578
 
 
579
uchar fg_red, fg_green, fg_blue;
 
580
uchar bg_red, bg_green, bg_blue;
 
581
uchar smeterRed, smeterGreen, smeterBlue;
 
582
uchar peakRed, peakGreen, peakBlue;
 
583
uchar pwrRed, pwrGreen, pwrBlue;
 
584
uchar swrRed, swrGreen, swrBlue;
 
585
 
 
586
Fl_Color bgclr;
 
587
Fl_Color fgclr;
 
588
 
 
589
Fl_Color fgsys;
 
590
static uchar fg_sys_red, fg_sys_green, fg_sys_blue;
 
591
 
 
592
Fl_Color bgsys;
 
593
static uchar bg_sys_red, bg_sys_green, bg_sys_blue;
 
594
 
 
595
Fl_Color bg2sys;
 
596
static uchar bg2_sys_red, bg2_sys_green, bg2_sys_blue;
 
597
 
 
598
Fl_Color bg_slider;
 
599
static uchar bg_slider_red, bg_slider_green, bg_slider_blue;
 
600
 
 
601
Fl_Color btn_slider;
 
602
static uchar btn_slider_red, btn_slider_green, btn_slider_blue;
 
603
 
 
604
Fl_Color btn_lt_color;
 
605
static uchar btn_lt_color_red, btn_lt_color_green, btn_lt_color_blue;
 
606
 
 
607
void cb_lighted_button()
 
608
{
 
609
        uchar r = btn_lt_color_red, g = btn_lt_color_green, b = btn_lt_color_blue;
 
610
        if (fl_color_chooser("Foreground color", r, g, b)) {
 
611
                btn_lt_color_red = r; btn_lt_color_green = g; btn_lt_color_blue = b;
 
612
                btn_lt_color = fl_rgb_color(r, g, b);
 
613
                btn_lighted->selection_color(btn_lt_color);
 
614
                btn_lighted->value(1);
 
615
                btn_lighted->redraw();
 
616
        }
 
617
}
 
618
 
 
619
void cb_lighted_default()
 
620
{
 
621
        btn_lt_color = flrig_def_color(FL_YELLOW);
 
622
        btn_lt_color_red = ((btn_lt_color >> 24) & 0xFF);
 
623
        btn_lt_color_green = ((btn_lt_color >> 16) & 0xFF);
 
624
        btn_lt_color_blue = ((btn_lt_color >> 8) & 0xFF);
 
625
        btn_lighted->selection_color(btn_lt_color);
 
626
        btn_lighted->value(1);
 
627
        btn_lighted->redraw();
 
628
}
 
629
 
 
630
void cb_change_hrd_button()
 
631
{
 
632
        progStatus.hrd_buttons = !progStatus.hrd_buttons;
 
633
        FreqDispA->set_hrd(progStatus.hrd_buttons);
 
634
        FreqDispB->set_hrd(progStatus.hrd_buttons);
 
635
}
 
636
 
 
637
void cb_slider_defaults()
 
638
{
 
639
        bg_slider_red = 232;
 
640
        bg_slider_green = 255;
 
641
        bg_slider_blue = 232;
 
642
 
 
643
        btn_slider_red = 0;
 
644
        btn_slider_green = 0;
 
645
        btn_slider_blue = 128;
 
646
 
 
647
        bg_slider = fl_rgb_color( 232, 255, 232);
 
648
        btn_slider = fl_rgb_color( 0, 0, 128);
 
649
 
 
650
        sldrColors->color(bg_slider);
 
651
        sldrColors->selection_color(btn_slider);
 
652
        sldrColors->redraw();
 
653
}
 
654
 
 
655
void cb_slider_background()
 
656
{
 
657
        uchar r = bg_slider_red, g = bg_slider_green, b = bg_slider_blue;
 
658
        if (fl_color_chooser("Foreground color", r, g, b)) {
 
659
                bg_slider_red = r; bg_slider_green = g; bg_slider_blue = b;
 
660
                bg_slider = fl_rgb_color(r, g, b);
 
661
                sldrColors->color(bg_slider);
 
662
                sldrColors->selection_color(btn_slider);
 
663
                sldrColors->redraw();
 
664
        }
 
665
}
 
666
 
 
667
void cb_slider_select()
 
668
{
 
669
        uchar r = btn_slider_red, g = btn_slider_green, b = btn_slider_blue;
 
670
        if (fl_color_chooser("Foreground color", r, g, b)) {
 
671
                btn_slider_red = r; btn_slider_green = g; btn_slider_blue = b;
 
672
                btn_slider = fl_rgb_color(r, g, b);
 
673
                sldrColors->color(bg_slider);
 
674
                sldrColors->selection_color(btn_slider);
 
675
                sldrColors->redraw();
 
676
        }
 
677
}
 
678
 
 
679
void cb_sys_defaults()
 
680
{
 
681
        bgsys = flrig_def_color(FL_BACKGROUND_COLOR);
 
682
        bg_sys_red = ((bgsys >> 24) & 0xFF);
 
683
        bg_sys_green = ((bgsys >> 16) & 0xFF);
 
684
        bg_sys_blue = ((bgsys >> 8) & 0xFF);
 
685
 
 
686
        bg2sys = flrig_def_color(FL_BACKGROUND2_COLOR);
 
687
        bg2_sys_red = ((bg2sys) >> 24 & 0xFF);
 
688
        bg2_sys_green = ((bg2sys) >> 16 & 0xFF);
 
689
        bg2_sys_blue = ((bg2sys) >> 8 & 0xFF);
 
690
 
 
691
        fgsys = flrig_def_color(FL_FOREGROUND_COLOR);
 
692
        fg_sys_red = (fgsys >> 24) & 0xFF;
 
693
        fg_sys_green = (fgsys >> 16) & 0xFF;
 
694
        fg_sys_blue = (fgsys >> 8) & 0xFF;
 
695
 
 
696
        Fl::background(bg_sys_red, bg_sys_green, bg_sys_blue);
 
697
        Fl::background2(bg2_sys_red, bg2_sys_green, bg2_sys_blue);
 
698
        Fl::foreground(fg_sys_red, fg_sys_green, fg_sys_blue);
 
699
 
 
700
        dlgDisplayConfig->redraw();
 
701
        mainwindow->redraw();
 
702
}
 
703
 
 
704
void cb_sys_foreground()
 
705
{
 
706
        uchar r = fg_sys_red, g = fg_sys_green, b = fg_sys_blue;
 
707
        if (fl_color_chooser("Foreground color", r, g, b)) {
 
708
                fg_sys_red = r; fg_sys_green = g; fg_sys_blue = b;
 
709
                fgsys = fl_rgb_color(r, g, b);
 
710
                Fl::foreground(r, g, b);
 
711
                dlgDisplayConfig->redraw();
 
712
                mainwindow->redraw();
 
713
        }
 
714
}
 
715
 
 
716
void cb_sys_background()
 
717
{
 
718
        uchar r = bg_sys_red, g = bg_sys_green, b = bg_sys_blue;
 
719
        if (fl_color_chooser("Background color", r, g, b)) {
 
720
                bg_sys_red = r; bg_sys_green = g; bg_sys_blue = b;
 
721
                bgsys = fl_rgb_color(r, g, b);
 
722
                Fl::background(r, g, b);
 
723
                dlgDisplayConfig->redraw();
 
724
                mainwindow->redraw();
 
725
        }
 
726
}
 
727
 
 
728
void cb_sys_background2()
 
729
{
 
730
        uchar r = bg2_sys_red, g = bg2_sys_green, b = bg2_sys_blue;
 
731
        if (fl_color_chooser("Background2 color", r, g, b)) {
 
732
                bg2_sys_red = r; bg2_sys_green = g; bg2_sys_blue = b;
 
733
                bg2sys = fl_rgb_color(r, g, b);
 
734
                Fl::background2(r, g, b);
 
735
                dlgDisplayConfig->redraw();
 
736
                mainwindow->redraw();
 
737
        }
 
738
}
 
739
 
 
740
void cbBacklightColor()
 
741
{
 
742
        uchar r = bg_red, g = bg_green, b = bg_blue;
 
743
        if (fl_color_chooser("Background color", r, g, b)) {
 
744
                bg_red = r; bg_green = g; bg_blue = b;
 
745
                bgclr = fl_rgb_color(r, g, b);
 
746
                lblTest->color(bgclr);
 
747
                sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr );
 
748
                sldrPWRcolor->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr);
 
749
                sldrSWRcolor->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
 
750
                scaleSmeterColor->color(bgclr);
 
751
                scalePWRcolor->color(bgclr);
 
752
                scaleSWRcolor->color(bgclr);
 
753
                grpMeterColor->color(bgclr);
 
754
                dlgDisplayConfig->redraw();
 
755
        }
 
756
}
 
757
 
 
758
void cbPrefForeground()
 
759
{
 
760
        uchar r = fg_red, g = fg_green, b = fg_blue;
 
761
        if (fl_color_chooser("Foreground color", r, g, b)) {
 
762
                fg_red = r; fg_green = g; fg_blue = b;
 
763
                fgclr = fl_rgb_color(r, g, b);
 
764
                lblTest->labelcolor(fgclr);
 
765
                scaleSmeterColor->labelcolor(fgclr);
 
766
                scalePWRcolor->labelcolor(fgclr);
 
767
                scaleSWRcolor->labelcolor(fgclr);
 
768
                grpMeterColor->labelcolor(fgclr);
 
769
                dlgDisplayConfig->redraw();
 
770
        }
 
771
}
 
772
 
 
773
void default_meters()
 
774
{
 
775
        Fl_Color c;
 
776
        bg_red = 232; bg_green = 255; bg_blue = 232;
 
777
        bgclr = fl_rgb_color( bg_red, bg_green, bg_blue);
 
778
                lblTest->color(bgclr);
 
779
                sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr );
 
780
                sldrPWRcolor->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr);
 
781
                sldrSWRcolor->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
 
782
                scaleSmeterColor->color(bgclr);
 
783
                scalePWRcolor->color(bgclr);
 
784
                scaleSWRcolor->color(bgclr);
 
785
                grpMeterColor->color(bgclr);
 
786
        fg_red = 0; fg_green = 0; fg_blue = 0;
 
787
        fgclr = (Fl_Color)0;
 
788
                lblTest->labelcolor(fgclr);
 
789
                scaleSmeterColor->labelcolor(fgclr);
 
790
                scalePWRcolor->labelcolor(fgclr);
 
791
                scaleSWRcolor->labelcolor(fgclr);
 
792
                grpMeterColor->labelcolor(fgclr);
 
793
        smeterRed = 0; smeterGreen = 180; smeterBlue = 0;
 
794
                c = fl_rgb_color (smeterRed, smeterGreen, smeterBlue);
 
795
                sldrRcvSignalColor->color(c, bgclr );
 
796
        peakRed = 255; peakGreen = 0; peakBlue = 0;
 
797
                c = fl_rgb_color( peakRed, peakGreen, peakBlue );
 
798
                sldrRcvSignalColor->PeakColor(c);
 
799
                sldrPWRcolor->PeakColor(c);
 
800
                sldrSWRcolor->PeakColor(c);
 
801
        pwrRed = 180; pwrGreen = 0; pwrBlue = 0;
 
802
                c = fl_rgb_color( pwrRed, pwrGreen, pwrBlue );
 
803
                sldrPWRcolor->color(c, bgclr);
 
804
        swrRed = 148; swrGreen = 0; swrBlue = 148;
 
805
                c = fl_rgb_color(swrRed, swrGreen, swrBlue);
 
806
                sldrSWRcolor->color(c, bgclr);
 
807
        dlgDisplayConfig->redraw();
 
808
}
 
809
 
 
810
void cbSMeterColor()
 
811
{
 
812
        uchar r = smeterRed, g = smeterGreen, b = smeterBlue;
 
813
        if (fl_color_chooser("S Meter color", r, g, b)) {
 
814
                smeterRed = r; smeterGreen = g; smeterBlue = b;
 
815
                sldrRcvSignalColor->color(
 
816
                        fl_rgb_color (r, g, b),
 
817
                        bgclr );
 
818
                dlgDisplayConfig->redraw();
 
819
        }
 
820
}
 
821
 
 
822
void cbPeakMeterColor()
 
823
{
 
824
        uchar r = peakRed, g = peakGreen, b = peakBlue;
 
825
        if (fl_color_chooser("Peak value color", r, g, b)) {
 
826
                peakRed = r; peakGreen = g; peakBlue = b;
 
827
                sldrRcvSignalColor->PeakColor(fl_rgb_color (r, g, b));
 
828
                sldrPWRcolor->PeakColor(fl_rgb_color (r, g, b));
 
829
                sldrSWRcolor->PeakColor(fl_rgb_color (r, g, b));
 
830
                dlgDisplayConfig->redraw();
 
831
        }
 
832
}
 
833
 
 
834
void cbPwrMeterColor()
 
835
{
 
836
        uchar r = pwrRed, g = pwrGreen, b = pwrBlue;
 
837
        if (fl_color_chooser("Power color", r, g, b)) {
 
838
                pwrRed = r; pwrGreen = g; pwrBlue = b;
 
839
                sldrPWRcolor->color(
 
840
                        fl_rgb_color (r, g, b),
 
841
                        bgclr );
 
842
                dlgDisplayConfig->redraw();
 
843
        }
 
844
}
 
845
 
 
846
void cbSWRMeterColor()
 
847
{
 
848
        uchar r = swrRed, g = swrGreen, b = swrBlue;
 
849
        if (fl_color_chooser("Power color", r, g, b)) {
 
850
                swrRed = r; swrGreen = g; swrBlue = b;
 
851
                sldrSWRcolor->color(
 
852
                        fl_rgb_color (swrRed, swrGreen, swrBlue),
 
853
                        bgclr );
 
854
                dlgDisplayConfig->redraw();
 
855
        }
 
856
}
 
857
 
 
858
void setColors()
 
859
{
 
860
        progStatus.swrRed = swrRed;
 
861
        progStatus.swrGreen = swrGreen;
 
862
        progStatus.swrBlue = swrBlue;
 
863
 
 
864
        progStatus.pwrRed = pwrRed;
 
865
        progStatus.pwrGreen = pwrGreen;
 
866
        progStatus.pwrBlue = pwrBlue;
 
867
 
 
868
        progStatus.smeterRed = smeterRed;
 
869
        progStatus.smeterGreen = smeterGreen;
 
870
        progStatus.smeterBlue = smeterBlue;
 
871
 
 
872
        progStatus.peakRed = peakRed;
 
873
        progStatus.peakGreen = peakGreen;
 
874
        progStatus.peakBlue = peakBlue;
 
875
 
 
876
        progStatus.fg_red = fg_red;
 
877
        progStatus.fg_green = fg_green;
 
878
        progStatus.fg_blue = fg_blue;
 
879
 
 
880
        progStatus.bg_red = bg_red;
 
881
        progStatus.bg_green = bg_green;
 
882
        progStatus.bg_blue = bg_blue;
 
883
 
 
884
        progStatus.fontnbr = selfont;
 
885
        FreqDispA->font(selfont);
 
886
        FreqDispB->font(selfont);
 
887
 
 
888
        progStatus.fg_sys_red = fg_sys_red;
 
889
        progStatus.fg_sys_green = fg_sys_green;
 
890
        progStatus.fg_sys_blue = fg_sys_blue;
 
891
 
 
892
        progStatus.bg_sys_red = bg_sys_red;
 
893
        progStatus.bg_sys_green = bg_sys_green;
 
894
        progStatus.bg_sys_blue = bg_sys_blue;
 
895
 
 
896
        progStatus.bg2_sys_red = bg2_sys_red;
 
897
        progStatus.bg2_sys_green = bg2_sys_green;
 
898
        progStatus.bg2_sys_blue = bg2_sys_blue;
 
899
 
 
900
        progStatus.slider_red = bg_slider_red;
 
901
        progStatus.slider_green = bg_slider_green;
 
902
        progStatus.slider_blue = bg_slider_blue;
 
903
 
 
904
        progStatus.slider_btn_red = btn_slider_red;
 
905
        progStatus.slider_btn_green = btn_slider_green;
 
906
        progStatus.slider_btn_blue = btn_slider_blue;
 
907
 
 
908
        progStatus.lighted_btn_red = btn_lt_color_red;
 
909
        progStatus.lighted_btn_green = btn_lt_color_green;
 
910
        progStatus.lighted_btn_blue = btn_lt_color_blue;
 
911
 
 
912
        if (useB) {
 
913
                FreqDispB->SetONOFFCOLOR( fl_rgb_color(fg_red, fg_green, fg_blue), bgclr);
 
914
                FreqDispA->SetONOFFCOLOR(
 
915
                        fl_rgb_color(fg_red, fg_green, fg_blue),
 
916
                        fl_color_average(bgclr, FL_BLACK, 0.87));
 
917
        } else {
 
918
                FreqDispA->SetONOFFCOLOR( fl_rgb_color(fg_red, fg_green, fg_blue), bgclr);
 
919
                FreqDispB->SetONOFFCOLOR(
 
920
                        fl_rgb_color(fg_red, fg_green, fg_blue),
 
921
                        fl_color_average(bgclr, FL_BLACK, 0.87));
 
922
        }
 
923
 
 
924
        grpMeters->color(bgclr);
 
925
 
 
926
        meter_fill_box->color(bgclr);
 
927
 
 
928
        scaleSmeter->color(bgclr);
 
929
        scaleSmeter->labelcolor(fgclr);
 
930
 
 
931
        scalePower->color(bgclr);
 
932
        scalePower->labelcolor(fgclr);
 
933
 
 
934
        btnALC_SWR->color(bgclr);
 
935
        btnALC_SWR->labelcolor(fgclr);
 
936
        btnALC_SWR->redraw();
 
937
 
 
938
        sldrFwdPwr->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr);
 
939
        sldrFwdPwr->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
 
940
 
 
941
        sldrRcvSignal->color(fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr);
 
942
        sldrRcvSignal->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
 
943
 
 
944
        sldrALC->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
 
945
        sldrALC->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
 
946
 
 
947
        sldrSWR->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
 
948
        sldrSWR->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
 
949
 
 
950
        grpMeters->redraw();
 
951
 
 
952
        if (btnVol)                             btnVol->selection_color(btn_lt_color);
 
953
        if (btnNR)                              btnNR->selection_color(btn_lt_color);
 
954
        if (btnIFsh)                    btnIFsh->selection_color(btn_lt_color);
 
955
        if (btnNotch)                   btnNotch->selection_color(btn_lt_color);
 
956
        if (btnA)                               btnA->selection_color(btn_lt_color);
 
957
        if (btnB)                               btnB->selection_color(btn_lt_color);
 
958
        if (btnSplit)                   btnSplit->selection_color(btn_lt_color);
 
959
        if (btnAttenuator)              btnAttenuator->selection_color(btn_lt_color);
 
960
        if (btnPreamp)                  btnPreamp->selection_color(btn_lt_color);
 
961
        if (btnNOISE)                   btnNOISE->selection_color(btn_lt_color);
 
962
        if (btnAutoNotch)               btnAutoNotch->selection_color(btn_lt_color);
 
963
        if (btnTune)                    btnTune->selection_color(btn_lt_color);
 
964
        if (btnPTT)                             btnPTT->selection_color(btn_lt_color);
 
965
        if (btnAuxRTS)                  btnAuxRTS->selection_color(btn_lt_color);
 
966
        if (btnAuxDTR)                  btnAuxDTR->selection_color(btn_lt_color);
 
967
        if (btnSpot)                    btnSpot->selection_color(btn_lt_color);
 
968
        if (btn_vox)                    btn_vox->selection_color(btn_lt_color);
 
969
        if (btnCompON)                  btnCompON->selection_color(btn_lt_color);
 
970
//      if (btnSpecial)                 btnSpecial->selection_color(btn_lt_color);
 
971
        if (btn_tt550_vox)              btn_tt550_vox->selection_color(btn_lt_color);
 
972
        if (btn_tt550_CompON)   btn_tt550_CompON->selection_color(btn_lt_color);
 
973
 
 
974
        if (sldrVOLUME)                 sldrVOLUME->color(bg_slider);
 
975
        if (sldrVOLUME)                 sldrVOLUME->selection_color(btn_slider);
 
976
        if (sldrRFGAIN)                 sldrRFGAIN->color(bg_slider);
 
977
        if (sldrRFGAIN)                 sldrRFGAIN->selection_color(btn_slider);
 
978
        if (sldrSQUELCH)                sldrSQUELCH->color(bg_slider);
 
979
        if (sldrSQUELCH)                sldrSQUELCH->selection_color(btn_slider);
 
980
        if (sldrNR)                             sldrNR->color(bg_slider);
 
981
        if (sldrNR)                             sldrNR->selection_color(btn_slider);
 
982
        if (sldrIFSHIFT)                sldrIFSHIFT->color(bg_slider);
 
983
        if (sldrIFSHIFT)                sldrIFSHIFT->selection_color(btn_slider);
 
984
        if (sldrNOTCH)                  sldrNOTCH->color(bg_slider);
 
985
        if (sldrNOTCH)                  sldrNOTCH->selection_color(btn_slider);
 
986
        if (sldrMICGAIN)                sldrMICGAIN->color(bg_slider);
 
987
        if (sldrMICGAIN)                sldrMICGAIN->selection_color(btn_slider);
 
988
        if (sldrPOWER)                  sldrPOWER->color(bg_slider);
 
989
        if (sldrPOWER)                  sldrPOWER->selection_color(btn_slider);
 
990
 
 
991
        if (spnrPOWER)                  spnrPOWER->color(bg_slider);
 
992
        if (spnrVOLUME)                 spnrVOLUME->color(bg_slider);
 
993
//      if (spnrPOWER)                  spnrPOWER->selection_color(btn_slider);
 
994
 
 
995
        mainwindow->redraw();
 
996
}
 
997
 
 
998
void cb_reset_display_dialog()
 
999
{
 
1000
        cb_sys_defaults();
 
1001
        cb_lighted_default();
 
1002
        cb_slider_defaults();
 
1003
        default_meters();
 
1004
        setColors();
 
1005
}
 
1006
 
 
1007
void cbOkDisplayDialog()
 
1008
{
 
1009
        setColors();
 
1010
        dlgDisplayConfig->hide();
 
1011
}
 
1012
 
 
1013
void cbCancelDisplayDialog()
 
1014
{
 
1015
        dlgDisplayConfig->hide();
 
1016
}
 
1017
 
 
1018
void setDisplayColors()
 
1019
{
 
1020
        if (dlgDisplayConfig == NULL)
 
1021
                return;
 
1022
 
 
1023
        swrRed = progStatus.swrRed;
 
1024
        swrGreen = progStatus.swrGreen;
 
1025
        swrBlue = progStatus.swrBlue;
 
1026
 
 
1027
        pwrRed = progStatus.pwrRed;
 
1028
        pwrGreen = progStatus.pwrGreen;
 
1029
        pwrBlue = progStatus.pwrBlue;
 
1030
 
 
1031
        smeterRed = progStatus.smeterRed;
 
1032
        smeterGreen = progStatus.smeterGreen;
 
1033
        smeterBlue = progStatus.smeterBlue;
 
1034
 
 
1035
        peakRed = progStatus.peakRed;
 
1036
        peakGreen = progStatus.peakGreen;
 
1037
        peakBlue = progStatus.peakBlue;
 
1038
 
 
1039
        fg_red = progStatus.fg_red;
 
1040
        fg_green = progStatus.fg_green;
 
1041
        fg_blue = progStatus.fg_blue;
 
1042
 
 
1043
        bg_red = progStatus.bg_red;
 
1044
        bg_green = progStatus.bg_green;
 
1045
        bg_blue = progStatus.bg_blue;
 
1046
 
 
1047
        bgclr = fl_rgb_color(bg_red, bg_green, bg_blue);
 
1048
        fgclr = fl_rgb_color(fg_red, fg_green, fg_blue);
 
1049
 
 
1050
        fg_sys_red = progStatus.fg_sys_red;
 
1051
        fg_sys_green = progStatus.fg_sys_green;
 
1052
        fg_sys_blue = progStatus.fg_sys_blue;
 
1053
 
 
1054
        bg_sys_red = progStatus.bg_sys_red;
 
1055
        bg_sys_green = progStatus.bg_sys_green;
 
1056
        bg_sys_blue = progStatus.bg_sys_blue;
 
1057
 
 
1058
        bg2_sys_red = progStatus.bg2_sys_red;
 
1059
        bg2_sys_green = progStatus.bg2_sys_green;
 
1060
        bg2_sys_blue = progStatus.bg2_sys_blue;
 
1061
 
 
1062
        bg_slider_red = progStatus.slider_red;
 
1063
        bg_slider_green = progStatus.slider_green;
 
1064
        bg_slider_blue = progStatus.slider_blue;
 
1065
 
 
1066
        btn_slider_red = progStatus.slider_btn_red;
 
1067
        btn_slider_green = progStatus.slider_btn_green;
 
1068
        btn_slider_blue = progStatus.slider_btn_blue;
 
1069
 
 
1070
        sldrColors->color(fl_rgb_color(bg_slider_red, bg_slider_green, bg_slider_blue));
 
1071
        sldrColors->selection_color(fl_rgb_color(btn_slider_red, btn_slider_green, btn_slider_blue));
 
1072
 
 
1073
        btn_lt_color_red = progStatus.lighted_btn_red;
 
1074
        btn_lt_color_green = progStatus.lighted_btn_green;
 
1075
        btn_lt_color_blue = progStatus.lighted_btn_blue;
 
1076
 
 
1077
        lblTest->labelcolor(fl_rgb_color(fg_red, fg_green, fg_blue));
 
1078
        lblTest->color(bgclr);
 
1079
 
 
1080
        scaleSmeterColor->color(bgclr);
 
1081
        scaleSmeterColor->labelcolor(fgclr);
 
1082
        scalePWRcolor->color(bgclr);
 
1083
        scalePWRcolor->labelcolor(fgclr);
 
1084
        scaleSWRcolor->color(bgclr);
 
1085
        scaleSWRcolor->labelcolor(fgclr);
 
1086
        grpMeterColor->color(bgclr);
 
1087
        grpMeterColor->labelcolor(fgclr);
 
1088
 
 
1089
        sldrRcvSignalColor->color(
 
1090
                fl_rgb_color (smeterRed, smeterGreen, smeterBlue),
 
1091
                bgclr );
 
1092
        sldrPWRcolor->color(
 
1093
                fl_rgb_color (pwrRed, pwrGreen, pwrBlue),
 
1094
                bgclr );
 
1095
        sldrSWRcolor->color(
 
1096
                fl_rgb_color (swrRed, swrGreen, swrBlue),
 
1097
                bgclr );
 
1098
 
 
1099
        sldrRcvSignalColor->minimum(0);
 
1100
        sldrRcvSignalColor->maximum(100);
 
1101
        sldrRcvSignalColor->value(25);
 
1102
 
 
1103
        sldrPWRcolor->minimum(0);
 
1104
        sldrPWRcolor->maximum(100);
 
1105
        sldrPWRcolor->value(25);
 
1106
 
 
1107
        sldrSWRcolor->minimum(0);
 
1108
        sldrSWRcolor->maximum(100);
 
1109
        sldrSWRcolor->value(25);
 
1110
 
 
1111
        btn_lt_color = fl_rgb_color( btn_lt_color_red, btn_lt_color_green, btn_lt_color_blue);
 
1112
        btn_slider = fl_rgb_color( btn_slider_red, btn_slider_green, btn_slider_blue);
 
1113
        bg_slider = fl_rgb_color(bg_slider_red, bg_slider_green, bg_slider_blue);
 
1114
 
 
1115
        btn_lighted->value(1);
 
1116
        btn_lighted->selection_color(btn_lt_color);
 
1117
 
 
1118
        sldrColors->color(bg_slider);
 
1119
        sldrColors->selection_color(btn_slider);
 
1120
 
 
1121
        mnuScheme->value(mnuScheme->find_item(progStatus.ui_scheme.c_str()));
 
1122
 
 
1123
        dlgDisplayConfig->show();
 
1124
}
 
1125
 
 
1126
void cbCloseMemory()
 
1127
{
 
1128
        dlgMemoryDialog->hide();
 
1129
}
 
1130
 
 
1131
void openMemoryDialog()
 
1132
{
 
1133
        if (dlgMemoryDialog == NULL)
 
1134
                return;
 
1135
        dlgMemoryDialog->show();
 
1136
}
 
1137
 
 
1138
void show_controls()
 
1139
{
 
1140
        if (!(selrig->has_extras || rig_nbr == TT550) && progStatus.aux_serial_port == "NONE")
 
1141
                return;
 
1142
        switch (progStatus.UIsize) {
 
1143
                case wide_ui :
 
1144
                        if (mainwindow->h() > 150) {
 
1145
                                btn_show_controls->label("@-22->");
 
1146
                                btn_show_controls->redraw_label();
 
1147
                                grpTABS->hide();
 
1148
                                mainwindow->resizable(grpTABS);
 
1149
                                mainwindow->size(mainwindow->w(), 150);
 
1150
                                mainwindow->size_range(735, 150, 0, 150);
 
1151
                        } else {
 
1152
                                btn_show_controls->label("@-28->");
 
1153
                                btn_show_controls->redraw_label();
 
1154
                                mainwindow->resizable(grpTABS);
 
1155
                                mainwindow->size(mainwindow->w(), 218);
 
1156
                                mainwindow->size_range(735, 218, 0, 218);
 
1157
                                grpTABS->show();
 
1158
                        }
 
1159
                        mainwindow->redraw();
 
1160
                        break;
 
1161
                case touch_ui : 
 
1162
                        if (rig_nbr == TT550) {
 
1163
                                tabs550->show();
 
1164
                                tabsGeneric->hide();
 
1165
                        } else {
 
1166
                                tabs550->hide();
 
1167
                                tabsGeneric->show();
 
1168
                        }
 
1169
                        tabs550->redraw();
 
1170
                        tabsGeneric->redraw();
 
1171
                        mainwindow->redraw();
 
1172
                        return;
 
1173
                case small_ui :
 
1174
                        if (rig_nbr == TT550) {
 
1175
                                tabsGeneric->hide();
 
1176
                                if (tabs550->visible()) {
 
1177
                                        tabs550->hide();
 
1178
                                        btn_show_controls->label("@-22->");
 
1179
                                        btn_show_controls->redraw_label();
 
1180
                                        mainwindow->size( mainwindow->w(), mainwindow->h() - 70);
 
1181
                                } else {
 
1182
                                        tabs550->show();
 
1183
                                        btn_show_controls->label("@-28->");
 
1184
                                        btn_show_controls->redraw_label();
 
1185
                                        mainwindow->size( mainwindow->w(), mainwindow->h() + 70);
 
1186
                                }
 
1187
                                mainwindow->redraw();
 
1188
                        } else {
 
1189
                                tabs550->hide();
 
1190
                                if (tabsGeneric->visible()) {
 
1191
                                        tabsGeneric->hide();
 
1192
                                        btn_show_controls->label("@-22->");
 
1193
                                        btn_show_controls->redraw_label();
 
1194
                                        mainwindow->size( mainwindow->w(), mainwindow->h() - 70);
 
1195
                                } else {
 
1196
                                        tabsGeneric->show();
 
1197
                                        btn_show_controls->label("@-28->");
 
1198
                                        btn_show_controls->redraw_label();
 
1199
                                        mainwindow->size( mainwindow->w(), mainwindow->h() + 70);
 
1200
                                }
 
1201
                                mainwindow->redraw();
 
1202
                        }
 
1203
                        break;
 
1204
                default :
 
1205
                        break;
 
1206
        }
 
1207
}
 
1208
 
 
1209
// a replica of the default color map used by Fltk
 
1210
 
 
1211
static unsigned flrig_cmap[256] = {
 
1212
        0x00000000,
 
1213
        0xff000000,
 
1214
        0x00ff0000,
 
1215
        0xffff0000,
 
1216
        0x0000ff00,
 
1217
        0xff00ff00,
 
1218
        0x00ffff00,
 
1219
        0xffffff00,
 
1220
        0x55555500,
 
1221
        0xc6717100,
 
1222
        0x71c67100,
 
1223
        0x8e8e3800,
 
1224
        0x7171c600,
 
1225
        0x8e388e00,
 
1226
        0x388e8e00,
 
1227
        0x00008000,
 
1228
        0xa8a89800,
 
1229
        0xe8e8d800,
 
1230
        0x68685800,
 
1231
        0x98a8a800,
 
1232
        0xd8e8e800,
 
1233
        0x58686800,
 
1234
        0x9c9ca800,
 
1235
        0xdcdce800,
 
1236
        0x5c5c6800,
 
1237
        0x9ca89c00,
 
1238
        0xdce8dc00,
 
1239
        0x5c685c00,
 
1240
        0x90909000,
 
1241
        0xc0c0c000,
 
1242
        0x50505000,
 
1243
        0xa0a0a000,
 
1244
        0x00000000,
 
1245
        0x0d0d0d00,
 
1246
        0x1a1a1a00,
 
1247
        0x26262600,
 
1248
        0x31313100,
 
1249
        0x3d3d3d00,
 
1250
        0x48484800,
 
1251
        0x55555500,
 
1252
        0x5f5f5f00,
 
1253
        0x6a6a6a00,
 
1254
        0x75757500,
 
1255
        0x80808000,
 
1256
        0x8a8a8a00,
 
1257
        0x95959500,
 
1258
        0xa0a0a000,
 
1259
        0xaaaaaa00,
 
1260
        0xb5b5b500,
 
1261
        0xc0c0c000,
 
1262
        0xcbcbcb00,
 
1263
        0xd5d5d500,
 
1264
        0xe0e0e000,
 
1265
        0xeaeaea00,
 
1266
        0xf5f5f500,
 
1267
        0xffffff00,
 
1268
        0x00000000,
 
1269
        0x00240000,
 
1270
        0x00480000,
 
1271
        0x006d0000,
 
1272
        0x00910000,
 
1273
        0x00b60000,
 
1274
        0x00da0000,
 
1275
        0x00ff0000,
 
1276
        0x3f000000,
 
1277
        0x3f240000,
 
1278
        0x3f480000,
 
1279
        0x3f6d0000,
 
1280
        0x3f910000,
 
1281
        0x3fb60000,
 
1282
        0x3fda0000,
 
1283
        0x3fff0000,
 
1284
        0x7f000000,
 
1285
        0x7f240000,
 
1286
        0x7f480000,
 
1287
        0x7f6d0000,
 
1288
        0x7f910000,
 
1289
        0x7fb60000,
 
1290
        0x7fda0000,
 
1291
        0x7fff0000,
 
1292
        0xbf000000,
 
1293
        0xbf240000,
 
1294
        0xbf480000,
 
1295
        0xbf6d0000,
 
1296
        0xbf910000,
 
1297
        0xbfb60000,
 
1298
        0xbfda0000,
 
1299
        0xbfff0000,
 
1300
        0xff000000,
 
1301
        0xff240000,
 
1302
        0xff480000,
 
1303
        0xff6d0000,
 
1304
        0xff910000,
 
1305
        0xffb60000,
 
1306
        0xffda0000,
 
1307
        0xffff0000,
 
1308
        0x00003f00,
 
1309
        0x00243f00,
 
1310
        0x00483f00,
 
1311
        0x006d3f00,
 
1312
        0x00913f00,
 
1313
        0x00b63f00,
 
1314
        0x00da3f00,
 
1315
        0x00ff3f00,
 
1316
        0x3f003f00,
 
1317
        0x3f243f00,
 
1318
        0x3f483f00,
 
1319
        0x3f6d3f00,
 
1320
        0x3f913f00,
 
1321
        0x3fb63f00,
 
1322
        0x3fda3f00,
 
1323
        0x3fff3f00,
 
1324
        0x7f003f00,
 
1325
        0x7f243f00,
 
1326
        0x7f483f00,
 
1327
        0x7f6d3f00,
 
1328
        0x7f913f00,
 
1329
        0x7fb63f00,
 
1330
        0x7fda3f00,
 
1331
        0x7fff3f00,
 
1332
        0xbf003f00,
 
1333
        0xbf243f00,
 
1334
        0xbf483f00,
 
1335
        0xbf6d3f00,
 
1336
        0xbf913f00,
 
1337
        0xbfb63f00,
 
1338
        0xbfda3f00,
 
1339
        0xbfff3f00,
 
1340
        0xff003f00,
 
1341
        0xff243f00,
 
1342
        0xff483f00,
 
1343
        0xff6d3f00,
 
1344
        0xff913f00,
 
1345
        0xffb63f00,
 
1346
        0xffda3f00,
 
1347
        0xffff3f00,
 
1348
        0x00007f00,
 
1349
        0x00247f00,
 
1350
        0x00487f00,
 
1351
        0x006d7f00,
 
1352
        0x00917f00,
 
1353
        0x00b67f00,
 
1354
        0x00da7f00,
 
1355
        0x00ff7f00,
 
1356
        0x3f007f00,
 
1357
        0x3f247f00,
 
1358
        0x3f487f00,
 
1359
        0x3f6d7f00,
 
1360
        0x3f917f00,
 
1361
        0x3fb67f00,
 
1362
        0x3fda7f00,
 
1363
        0x3fff7f00,
 
1364
        0x7f007f00,
 
1365
        0x7f247f00,
 
1366
        0x7f487f00,
 
1367
        0x7f6d7f00,
 
1368
        0x7f917f00,
 
1369
        0x7fb67f00,
 
1370
        0x7fda7f00,
 
1371
        0x7fff7f00,
 
1372
        0xbf007f00,
 
1373
        0xbf247f00,
 
1374
        0xbf487f00,
 
1375
        0xbf6d7f00,
 
1376
        0xbf917f00,
 
1377
        0xbfb67f00,
 
1378
        0xbfda7f00,
 
1379
        0xbfff7f00,
 
1380
        0xff007f00,
 
1381
        0xff247f00,
 
1382
        0xff487f00,
 
1383
        0xff6d7f00,
 
1384
        0xff917f00,
 
1385
        0xffb67f00,
 
1386
        0xffda7f00,
 
1387
        0xffff7f00,
 
1388
        0x0000bf00,
 
1389
        0x0024bf00,
 
1390
        0x0048bf00,
 
1391
        0x006dbf00,
 
1392
        0x0091bf00,
 
1393
        0x00b6bf00,
 
1394
        0x00dabf00,
 
1395
        0x00ffbf00,
 
1396
        0x3f00bf00,
 
1397
        0x3f24bf00,
 
1398
        0x3f48bf00,
 
1399
        0x3f6dbf00,
 
1400
        0x3f91bf00,
 
1401
        0x3fb6bf00,
 
1402
        0x3fdabf00,
 
1403
        0x3fffbf00,
 
1404
        0x7f00bf00,
 
1405
        0x7f24bf00,
 
1406
        0x7f48bf00,
 
1407
        0x7f6dbf00,
 
1408
        0x7f91bf00,
 
1409
        0x7fb6bf00,
 
1410
        0x7fdabf00,
 
1411
        0x7fffbf00,
 
1412
        0xbf00bf00,
 
1413
        0xbf24bf00,
 
1414
        0xbf48bf00,
 
1415
        0xbf6dbf00,
 
1416
        0xbf91bf00,
 
1417
        0xbfb6bf00,
 
1418
        0xbfdabf00,
 
1419
        0xbfffbf00,
 
1420
        0xff00bf00,
 
1421
        0xff24bf00,
 
1422
        0xff48bf00,
 
1423
        0xff6dbf00,
 
1424
        0xff91bf00,
 
1425
        0xffb6bf00,
 
1426
        0xffdabf00,
 
1427
        0xffffbf00,
 
1428
        0x0000ff00,
 
1429
        0x0024ff00,
 
1430
        0x0048ff00,
 
1431
        0x006dff00,
 
1432
        0x0091ff00,
 
1433
        0x00b6ff00,
 
1434
        0x00daff00,
 
1435
        0x00ffff00,
 
1436
        0x3f00ff00,
 
1437
        0x3f24ff00,
 
1438
        0x3f48ff00,
 
1439
        0x3f6dff00,
 
1440
        0x3f91ff00,
 
1441
        0x3fb6ff00,
 
1442
        0x3fdaff00,
 
1443
        0x3fffff00,
 
1444
        0x7f00ff00,
 
1445
        0x7f24ff00,
 
1446
        0x7f48ff00,
 
1447
        0x7f6dff00,
 
1448
        0x7f91ff00,
 
1449
        0x7fb6ff00,
 
1450
        0x7fdaff00,
 
1451
        0x7fffff00,
 
1452
        0xbf00ff00,
 
1453
        0xbf24ff00,
 
1454
        0xbf48ff00,
 
1455
        0xbf6dff00,
 
1456
        0xbf91ff00,
 
1457
        0xbfb6ff00,
 
1458
        0xbfdaff00,
 
1459
        0xbfffff00,
 
1460
        0xff00ff00,
 
1461
        0xff24ff00,
 
1462
        0xff48ff00,
 
1463
        0xff6dff00,
 
1464
        0xff91ff00,
 
1465
        0xffb6ff00,
 
1466
        0xffdaff00,
 
1467
        0xffffff00
 
1468
};
 
1469
 
 
1470
Fl_Color flrig_def_color(int n)
 
1471
{
 
1472
        if ( n > 255 ) n = 255;
 
1473
        if (n < 0) n = 0;
 
1474
        return (Fl_Color)flrig_cmap[n];
 
1475
}
 
1476
 
 
1477
 
 
1478
void cb_send_command()
 
1479
{
 
1480
        bool usehex = false;
 
1481
        string command = txt_command->value();
 
1482
        if (command.empty()) return;
 
1483
        string cmd = "";
 
1484
        if (command.find("x") != string::npos) { // hex strings
 
1485
                size_t p = 0;
 
1486
                usehex = true;
 
1487
                unsigned int val;
 
1488
                while (( p = command.find("x", p)) != string::npos) {
 
1489
                        sscanf(&command[p+1], "%x", &val);
 
1490
                        cmd += (unsigned char) val;
 
1491
                        p += 3;
 
1492
                }
 
1493
        } else
 
1494
                cmd = command;
 
1495
// lock out polling loops until done
 
1496
        guard_lock gl_serial(&mutex_serial, 201);
 
1497
        guard_lock gl_xml(&mutex_xmlrpc, 202);
 
1498
 
 
1499
        sendCommand(cmd, 0);
 
1500
 
 
1501
        int timeout = 1000;
 
1502
        while (timeout > 0) {
 
1503
                if (timeout > 10) MilliSleep(10);
 
1504
                else MilliSleep(timeout);
 
1505
                timeout -= 10;
 
1506
                Fl::awake();
 
1507
        }
 
1508
 
 
1509
        readResponse();
 
1510
        txt_response->value(
 
1511
                usehex ? str2hex(replystr.c_str(), replystr.length()) :
 
1512
                replystr.c_str());
 
1513
}