diff --git a/ChangeLog b/ChangeLog
index a6032dca..66439e1c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,66 @@
-2010-03-26 Stelios Bounanos
+2010-05-02 David Freese
+ ff47cc4: XCVR Freq
+ 5186a74: FLARQ 4.3.1
+
+
+=Version 3.20.1=
+
+ 55eec2a: MAP macro update
+ e17ccfb: LOCK macro
+ 917b5bd: Freq Browser Select
+ 4474bd4: MAP macro
+ 2da1e55: ARQ auto file
+ 54a0569: Freq Control Font
+
+2010-04-22 Stelios Bounanos
+
+ 5b7e839: Disable sprintf re-declaration
+ c5f34c6: Fix compiler warnings
+ 1733f1f: Add preliminary support for FLTK-1.3
+
+2010-04-16 David Freese
+
+ ab092a6: psk reporter mode
+ 6c15ddd: Psk Viewer Min Width
+ 2bc6105: Revert "SC Time Out"
+
+2010-04-12 Stelios Bounanos
+
+ 5da5ba6: Update NEWS
+
+2010-04-12 David Freese
+
+ aaaec18: WARNINGS
+ 8df121a: SC Time Out
+ 45654ea: PSKR fec metrics
+ faf5e6c: Pause-Break
+ 975f4a9: RX lowercase option
+
+2010-04-12 Stelios Bounanos
+
+ d551f2e: Disable Czech l10n
+ f1762d7: Fix more widget labels
+ 4f80565: Update QSO frequency
+
+2010-04-08 David Freese
+
+ 3754c63: Tx Pane Min Height
+ 717c151: Modem Init
+ 0469895: Contest Menu
+ 8f76576: AFC-SQL check buttons
+ 5dcf5cb: ADIF Export
+ 1b5f56f: Olivia-Contestia bandwidth
+ 0d77c1b: SSB modem
+ 586e3d5: QPSK dcd postamble
+ 1aae11e: RX_ONLY Modem type
+ d29495f: QSY Lock disable
+ 02767b0: Contestia
+ c10ee73: Freq Analysis Init
+
+2010-04-04 Stelios Bounanos
+
+ 391167c: Add time functions
80572f5: Improve monitoring of transmitted signal
2010-03-25 David Freese
@@ -513,3 +574,161 @@
4fff116: Add missing include
d1c206b: Restore MT-63 options
dfab290: Initialise pthreads/win32 in flarq
+ ecf1f10: Restore two channel capture
+ a8a734c: Fix millisleep function
+
+2009-07-23 David Freese
+
+ cf4c671: MT63 transmit bug fix
+
+
+=Version 3.12=
+
+
+2009-07-13 Stelios Bounanos
+
+ 3537f62: Add RSID notifications
+ 2a4cd68: Improve frequency display kb entry
+
+2009-07-11 David Freese
+
+ 9c291a8: Enable XMLRPC QSY capability
+
+2009-07-06 Stelios Bounanos
+
+ deea0f6: Add ITU zone to countries list
+ d54a2ca: Fix compilation on glibc 2.10
+
+2009-07-02 David Freese
+
+ 9de9eb5: Xmlrpc mods
+ 07a01b1: Logbook bug fix
+
+2009-07-01 Stelios Bounanos
+
+ 42b638d: Fix socket fd leak
+ 58c2f8b: Fix compilation error and warnings on 64bit archs
+ c07ec21: Add generic notifier
+ 88bedac: Add dragging to table widget
+ 757a8f8: Simplify RE classes
+ cbf0d87: Extend macro editor
+ 53a2820: Improve dxcc, spot, pskrep performance
+ 9648c30: Remove handling for REs without backref support
+ 1b474a2: Fix config input field labels
+ d6d5974: Add Fl_Input2 mouse wheel handling
+ bf4cea4: Add automatic FText text_area resizing
+ e803fcd: Improve FText drag and drop
+ ec26eb6: Add band to RX text tooltip
+ 8283833: Add string join and split functions
+ d70ea69: Print build info in crash handler
+ f25b5d1: Fix azimuth_long_path
+ d11f6fe: Add frequency display text paste support
+
+2009-06-30 David Freese
+
+ 3bad2d4: xmlrpc mods
+
+2009-06-12 Stelios Bounanos
+
+ 419123c: Fix text echo functions
+ 2a83da3: Remove FText text colour adjustment
+ 7a87b0b: Always set the FText cursor colour
+
+2009-06-12 David Freese
+
+ a8dfa58: Logbook bug fix
+ 9b7786f: RigCAT mods
+
+2009-06-01 Stelios Bounanos
+
+ 9f7b002: Fix Contest Country Files callsign lookup
+
+2009-06-01 David Freese
+
+ b539c1c: ADIF_2.2.3 compliance
+ 8fc582e: Cut number mod for CW
+
+2009-05-26 dave
+
+ 7690a1c: FLARQ
+
+2009-05-26 Stelios Bounanos
+
+ d4b1a03: Merge flarq
+ 91a1425: Move setup_nls function
+ 9543fa7: Move make_pixmap function
+ ada43f4: Add new FText classes
+ bf6a2c3: Add thread id logging
+ 8207c62: Prefer ALSA default devices
+ d04b780: Fix initial window sizes
+ 4f90ecf: Fix format strings
+
+2009-05-16 David Freese
+
+ 6b6cad9: PSK search algorithm
+
+2009-05-12 Stelios Bounanos
+
+ b95b8e1: Add win32 installer support
+ d626273: Fix VPATH builds
+
+2009-05-05 David Freese
+
+ b4112de: Added , macro tags
+ 7ae826f: RTTY pseudo output, corrected stop bit inversion
+
+2009-05-02 Stelios Bounanos
+
+ ae5b9ca: Add more PNG text comments
+ 974e1ec: Remove JPEG write support
+ 44eceae: Fix xmlrpc-c m4 macro
+
+2009-05-02 David Freese
+
+ b030b4b: Fix OS dependent compile error
+ abc11f7: Updated memory mapped rig contol
+
+2009-04-26 Stelios Bounanos
+
+ 31e1902: Add missing includes
+ 6b2260c: Macro changes
+ 8f37399: Fix possible trx_startup deadlock
+ edca452: Fix Makefile DEBUG flag
+
+2009-04-25 David Freese
+
+ affae09: CW default WPM (numeric keypad *) bug fix
+
+2009-04-23 Stelios Bounanos
+
+ f7309ef: Make the combo box popup modal
+ ed0ae5c: Fix OS X native file selector
+ 88b3fd7: Fix uHRouter and parport PTT
+ 9c63531: Fix format string
+
+2009-04-23 David Freese
+
+ 8944198: CW replay bug
+ fc50717: CW Farnsworth timing addition
+ 63ccc2f: MinGW serial i/o, hamlib, rigcat mods
+
+2009-04-18 Stelios Bounanos
+
+ 206f815: Fix build without hamlib
+
+2009-04-18 David Freese
+
+ a9c21e5: Escape key bug fix
+ d2674d5: Macro parse error fix
+
+2009-04-17 Stelios Bounanos
+
+ 9e060b8: Update version output
+ 77bc966: Use band functions in logbook
+ 2124791: Add functions to set the socket buffer size
+ 4b1292c: Improve logging and error notification
+ d73c8fd: Add OS X and MinGW stack tracing
+ e192d1d: Add preliminary support for MinGW
+ 01fd3d9: Change set_log macro
+ 9d56656: Clean up headers
+ b4bf47f: Distribute cr.sh test script
diff --git a/NEWS b/NEWS
index b8a0bf3d..d1a91f7b 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@
* Added new PSK-500 mode
* Added "robust PSK" modes: PSK-125R, PSK-250R, PSK-500R
* Added PSK63F mode, compatible with MultiPsk PSK63FEC
+ * Added Contestia support
+ * Added SSB "modem" to simplify logging of SSB QSOs
* Added MT63 modem preamble tones to aid signal acquisition
* Added selectable filter widths for Hellschreiber modes
* Added AGC and S/N detector for FM-HELL modes
@@ -28,6 +30,11 @@
* Added , , , macros to search for a
signal up and down in frequency, go to the "sweet spot frequency", and
set the current modem frequency to ''nnnn''
+ * The macro syntax is now . The older str syntax is
+ still supported. Modem parameters may be specified when using the new
+ syntax; currently for RTTY (shift, baud, bits), Olivia (bw, tones) and
+ Contestia (bw, tones), e.g.: , ,
+ .
== User interface ==
@@ -35,13 +42,14 @@
* The QSO toolbar can now be set to Contest mode, Minimal mode, Full mode,
and some combinations thereof
* The docked digiscope can be hidden and shown without a restart
- * Is is now possible to select the modes for which to transmit RSID, VideoID
+ * It is now possible to select the modes for which to transmit RSID, VideoID
and CWID
* The Op Modes menu can now be customised
* Removed the floating rig control window
* Removed various Alt- shortcuts
* Added a simple "wizard" for first-time users
- * Added a waterfall-only mode; enabled with --wf-only
+ * Added a waterfall-only mode; enabled with --wfall-only
+ * Removed option to use check buttons for AFC and SQL toggles
== Other changes ==
diff --git a/configure.ac b/configure.ac
index 5a034763..0e588f29 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,10 +9,10 @@ dnl major and minor must be integers; patch may
dnl contain other characters or be empty
m4_define(FLDIGI_MAJOR, [3])
m4_define(FLDIGI_MINOR, [20])
-m4_define(FLDIGI_PATCH, [.0b9])
+m4_define(FLDIGI_PATCH, [.1])
m4_define(FLARQ_MAJOR, [4])
m4_define(FLARQ_MINOR, [3])
-m4_define(FLARQ_PATCH, [.0b1])
+m4_define(FLARQ_PATCH, [.1])
AC_INIT([dl-fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[]FLDIGI_PATCH, [fldigi-devel@lists.berlios.de])
diff --git a/m4/fltk.m4 b/m4/fltk.m4
index 3a5ec0b7..89526581 100644
--- a/m4/fltk.m4
+++ b/m4/fltk.m4
@@ -22,15 +22,20 @@ AC_DEFUN([AC_FLDIGI_FLTK], [
if test $? -ne 0; then
AC_MSG_ERROR([$FLTK_CONFIG failed])
fi
- if test "x$FLTK_API_VERSION" = "x1.1"; then
+ if test -n "$(expr $FLTK_API_VERSION : '1\.1[3]')"; then
HAVE_FLTK_API_VERSION=yes
fi
+ FLDIGI_FLTK_API_MAJOR=${FLTK_API_VERSION%%.*}
+ FLDIGI_FLTK_API_MINOR=${FLTK_API_VERSION#*.}; FLDIGI_FLTK_API_MINOR=${FLDIGI_FLTK_API_MINOR%%.*}
if test "${HAVE_FLTK_API_VERSION}" = "no"; then
AC_MSG_ERROR([
*** The version of FLTK found on your system provides API version $FLTK_API_VERSION.
- *** To build $PACKAGE you need a FLTK version that provides API 1.1.
+ *** To build $PACKAGE you need a FLTK version that provides API 1.1, 1.2 or 1.3.
])
fi
+ if test $FLDIGI_FLTK_API_MINOR -gt 1; then
+ AC_MSG_WARN([$PACKAGE_TARNAME may not work with FLTK $FLTK_API_VERSION])
+ fi
FLTK_CFLAGS=`$FLTK_CONFIG --cxxflags`
if test "x$ac_cv_static" != "xyes"; then
FLTK_LIBS=`$FLTK_CONFIG --ldflags --use-images`
@@ -43,6 +48,8 @@ AC_DEFUN([AC_FLDIGI_FLTK], [
AC_SUBST([FLTK_CFLAGS])
AC_SUBST([FLTK_LIBS])
AC_DEFINE_UNQUOTED([FLTK_BUILD_VERSION], ["`$FLTK_CONFIG --version`"], [FLTK version])
+ AC_DEFINE_UNQUOTED([FLDIGI_FLTK_API_MAJOR], [$FLDIGI_FLTK_API_MAJOR], [FLTK API major version])
+ AC_DEFINE_UNQUOTED([FLDIGI_FLTK_API_MINOR], [$FLDIGI_FLTK_API_MINOR], [FLTK API minor version])
AC_ARG_VAR([FLUID], [Fast Light User-Interface Designer])
AC_CHECK_PROG([FLUID], [fluid], [fluid])
diff --git a/po/LINGUAS b/po/LINGUAS
index 0c5c8cf0..527e861b 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1 +1 @@
-cs fr
+fr
diff --git a/src/Makefile.am b/src/Makefile.am
index f36d24f6..8143773a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -244,6 +244,7 @@ dl_fldigi_SOURCES += \
cw_rtty/cw.cxx \
cw_rtty/morse.cxx \
cw_rtty/rtty.cxx \
+ contestia/contestia.cxx \
dialogs/colorsfonts.cxx \
dialogs/confdialog.cxx \
dialogs/fl_digi.cxx \
@@ -271,6 +272,7 @@ dl_fldigi_SOURCES += \
include/FTextView.h \
include/FTextRXTX.h \
include/fileselect.h \
+ include/Fl_Text_Buffer_mod.H \
include/Fl_Text_Display_mod.H \
include/Fl_Text_Editor_mod.H \
include/Fl_Tile_Check.h \
@@ -282,6 +284,7 @@ dl_fldigi_SOURCES += \
include/combo.h \
include/complex.h \
include/configuration.h \
+ include/contestia.h \
include/cw.h \
include/debug.h \
include/digiscope.h \
@@ -370,6 +373,7 @@ dl_fldigi_SOURCES += \
include/soundconf.h \
include/spot.h \
include/ssdv_rx.h \
+ include/ssb.h \
include/stacktrace.h \
include/status.h \
include/strutil.h \
@@ -471,6 +475,7 @@ dl_fldigi_SOURCES += \
spot/spot.cxx \
ssdv/ssdv_rx.cxx \
ssdv/rs8decode.c \
+ ssb/ssb.cxx \
throb/throb.cxx \
trx/modem.cxx \
trx/trx.cxx \
@@ -480,6 +485,7 @@ dl_fldigi_SOURCES += \
waterfall/waterfall.cxx \
widgets/FTextView.cxx \
widgets/FTextRXTX.cxx \
+ widgets/Fl_Text_Buffer_mod.cxx \
widgets/Fl_Text_Display_mod.cxx \
widgets/Fl_Text_Editor_mod.cxx \
widgets/Fl_Tile_Check.cxx \
@@ -517,6 +523,12 @@ EXTRA_dl_fldigi_SOURCES += \
feld/FeldStyl-14.cxx \
feld/FeldVert-14.cxx \
feld/FeldWide-14.cxx \
+ include/Fl_Text_Buffer_mod_1_1.H \
+ include/Fl_Text_Buffer_mod_1_3.H \
+ include/Fl_Text_Display_mod_1_1.H \
+ include/Fl_Text_Display_mod_1_3.H \
+ include/Fl_Text_Editor_mod_1_1.H \
+ include/Fl_Text_Editor_mod_1_3.H \
mfsk/mfsk-pic.cxx \
mt63/alias_1k.dat \
mt63/alias_2k.dat \
@@ -525,7 +537,14 @@ EXTRA_dl_fldigi_SOURCES += \
mt63/alias_k5.dat \
mt63/mt63intl.dat \
trx/tune.cxx \
- dialogs/guide.cxx
+ dialogs/guide.cxx \
+ widgets/Fl_Text_Buffer_mod_1_1.cxx \
+ widgets/Fl_Text_Buffer_mod_1_3.cxx \
+ widgets/Fl_Text_Display_mod_1_1.cxx \
+ widgets/Fl_Text_Display_mod_1_3.cxx \
+ widgets/Fl_Text_Editor_mod_1_1.cxx \
+ widgets/Fl_Text_Editor_mod_1_3.cxx
+
flarq_SOURCES += \
dialogs/font_browser.cxx \
@@ -575,6 +594,7 @@ flarq_SOURCES += \
misc/re.cxx \
misc/socket.cxx \
misc/util.cxx \
+ widgets/Fl_Text_Buffer_mod.cxx \
widgets/Fl_Text_Display_mod.cxx \
widgets/Fl_Text_Editor_mod.cxx \
widgets/FTextView.cxx
diff --git a/src/contestia/contestia.cxx b/src/contestia/contestia.cxx
new file mode 100644
index 00000000..12ed45ec
--- /dev/null
+++ b/src/contestia/contestia.cxx
@@ -0,0 +1,371 @@
+// ----------------------------------------------------------------------------
+// contestia.cxx -- CONTESTIA modem
+//
+// Copyright (C) 2006-2010
+// Dave Freese, W1HKJ
+//
+// This file is part of fldigi. Adapted from code contained in gmfsk source code
+// distribution.
+// Copyright (C) 2005
+// Tomi Manninen (oh2bns@sral.fi)
+//
+// This file is part of fldigi.
+//
+// Fldigi is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Fldigi is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with fldigi. If not, see .
+// ----------------------------------------------------------------------------
+
+#include
+
+#include
+
+#include "contestia.h"
+#include "modem.h"
+#include "fl_digi.h"
+
+#include "misc.h"
+#include "confdialog.h"
+#include "status.h"
+#include "debug.h"
+
+LOG_FILE_SOURCE(debug::LOG_MODEM);
+
+using namespace std;
+
+double contestia::nco(double freq)
+{
+ preamblephase += 2.0 * M_PI * freq / samplerate;
+
+ if (preamblephase > M_PI)
+ preamblephase -= 2.0 * M_PI;
+
+ return cos(preamblephase);
+}
+
+void contestia::tx_init(SoundBase *sc)
+{
+ unsigned char c;
+
+ scard = sc;
+ phaseacc = 0;
+ prevsymbol = complex (1.0, 0.0);
+ preamble = 32;
+ shreg = 0;
+
+ preamblesent = 0;
+ postamblesent = 0;
+ txbasefreq = get_txfreq_woffset();
+
+ Rx->Flush();
+
+ while (Rx->GetChar(c) > 0)
+ put_rx_char(c);
+
+ if (reverse) {
+ Tx->FirstCarrierMultiplier = (txbasefreq + (Tx->Bandwidth / 2)) / 500;
+ Tx->Reverse = 1;
+ } else {
+ Tx->FirstCarrierMultiplier = (txbasefreq - (Tx->Bandwidth / 2)) / 500;
+ Tx->Reverse = 0;
+ }
+
+ videoText();
+
+ Tx->Preset();
+ Tx->Start();
+ escape = 0;
+}
+
+void contestia::send_tones()
+{
+ if (tone_midfreq != txbasefreq || tone_bw != bandwidth) {
+ double freqa, freqb;
+ tone_bw = bandwidth;
+ tone_midfreq = txbasefreq;
+ if (reverse) {
+ freqa = tone_midfreq + (tone_bw / 2.0);
+ freqb = tone_midfreq - (tone_bw / 2.0);
+ } else {
+ freqa = tone_midfreq - (tone_bw / 2.0);
+ freqb = tone_midfreq + (tone_bw / 2.0);
+ }
+ preamblephase = 0;
+ for (int i = 0; i < SR4; i++)
+ tonebuff[2*SR4 + i] = tonebuff[i] = nco(freqa) * ampshape[i];
+
+ preamblephase = 0;
+ for (int i = 0; i < SR4; i++)
+ tonebuff[3*SR4 + i] = tonebuff[SR4 + i] = nco(freqb) * ampshape[i];
+ }
+ for (int j = 0; j < TONE_DURATION; j += SCBLOCKSIZE)
+ ModulateXmtr(&tonebuff[j], SCBLOCKSIZE);
+
+}
+
+void contestia::rx_init()
+{
+ Rx->Reset();
+ escape = 0;
+}
+
+int contestia::unescape(int c)
+{
+ if (progdefaults.contestia8bit == 0)
+ return c;
+
+ if (escape) {
+ escape = 0;
+ return c + 128;
+ }
+
+ if (c == 127) {
+ escape = 1;
+ return -1;
+ }
+
+ return c;
+}
+
+int contestia::tx_process()
+{
+ int c, len;//, i;
+ unsigned char ch;
+
+ if (tones != progdefaults.contestiatones ||
+ bw != progdefaults.contestiabw ||
+ smargin != progdefaults.contestiasmargin ||
+ sinteg != progdefaults.contestiasinteg )
+ restart();
+
+ if (preamblesent != 1) {
+ send_tones();
+ preamblesent = 1;
+ // Olivia Transmitter class requires at least character
+ Tx->PutChar(0);
+ }
+
+// The encoder works with BitsPerSymbol length blocks. If the
+// modem already has that many characters buffered, don't try
+// to read any more. If stopflag is set, we will always read
+// whatever there is.
+ if (stopflag || (Tx->GetReadReady() < Tx->BitsPerSymbol)) {
+ if (!stopflag && (c = get_tx_char()) == 0x03)
+ stopflag = true;
+ if (stopflag)
+ Tx->Stop();
+ else {
+ /* Replace un-representable characters with a dot */
+ if (c == -1)
+ c = 0;
+ if (c > (progdefaults.contestia8bit ? 255 : 127))
+ c = '.';
+ if (c > 127) {
+ c &= 127;
+ Tx->PutChar(127);
+ }
+ Tx->PutChar(c);
+ }
+ }
+
+ if (Tx->GetChar(ch) > 0)
+ if ((c = unescape(ch)) != -1)
+ put_echo_char(progdefaults.rx_lowercase ? tolower(c) : toupper(c));
+
+ if ((len = Tx->Output(txfbuffer)) > 0)
+ ModulateXmtr(txfbuffer, len);
+
+ if (stopflag && Tx->DoPostambleYet() == 1 && postamblesent != 1) {
+ postamblesent = 1;
+ send_tones();
+ }
+
+ if (!Tx->Running()) {
+ cwid();
+ stopflag = false;
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int contestia::rx_process(const double *buf, int len)
+{
+ int c;
+ unsigned char ch = 0;
+ static double snr = 1e-3;
+ static char msg1[20];
+ static char msg2[20];
+
+ if (tones != progdefaults.contestiatones ||
+ bw != progdefaults.contestiabw ||
+ smargin != progdefaults.contestiasmargin ||
+ sinteg != progdefaults.contestiasinteg )
+ restart();
+
+ if ((lastfreq != frequency || Rx->Reverse) && !reverse) {
+ Rx->FirstCarrierMultiplier = (frequency - (Rx->Bandwidth / 2)) / 500;
+ Rx->Reverse = 0;
+ lastfreq = frequency;
+ Rx->Preset();
+ }
+ else if ((lastfreq != frequency || !Rx->Reverse) && reverse) {
+ Rx->FirstCarrierMultiplier = (frequency + (Rx->Bandwidth / 2)) / 500;
+ Rx->Reverse = 1;
+ lastfreq = frequency;
+ Rx->Preset();
+ }
+
+ Rx->SyncThreshold = progStatus.sqlonoff ?
+ clamp(progStatus.sldrSquelchValue / 5.0 + 3.0, 3.0, 90.0) : 3.0;
+
+ Rx->Process(buf, len);
+ sp = 0;
+ for (int i = frequency - Rx->Bandwidth/2; i < frequency - 1 + Rx->Bandwidth/2; i++)
+ if (wf->Pwr(i) > sp)
+ sp = wf->Pwr(i);
+ np = wf->Pwr(frequency + Rx->Bandwidth/2 + 2*Rx->Bandwidth/Rx->Tones);
+ if (np == 0) np = sp + 1e-8;
+ sigpwr = decayavg( sigpwr, sp, 10);
+ noisepwr = decayavg( noisepwr, np, 50);
+ snr = CLAMP(sigpwr / noisepwr, 0.001, 100000);
+
+ metric = clamp( 5.0 * (Rx->SignalToNoiseRatio() - 3.0), 0, 100);
+ display_metric(metric);
+
+ bool gotchar = false;
+ while (Rx->GetChar(ch) > 0) {
+ if ((c = unescape(ch)) != -1 && c > 7) {
+ put_rx_char(progdefaults.rx_lowercase ? tolower(c) : c);
+ gotchar = true;
+ }
+ }
+ if (gotchar) {
+ snprintf(msg1, sizeof(msg1), "s/n: %4.1f dB", 10*log10(snr) - 20);
+ put_Status1(msg1, 5, STATUS_CLEAR);
+ snprintf(msg2, sizeof(msg2), "f/o %+4.1f Hz", Rx->FrequencyOffset());
+ put_Status2(msg2, 5, STATUS_CLEAR);
+ }
+
+ return 0;
+}
+
+void contestia::restart()
+{
+ tones = progdefaults.contestiatones;
+ bw = progdefaults.contestiabw;
+ smargin = progdefaults.contestiasmargin;
+ sinteg = progdefaults.contestiasinteg;
+
+ samplerate = 8000;
+ bandwidth = 125 * (1 << bw);
+
+ Tx->Tones = 2 * (1 << tones);
+ Tx->Bandwidth = bandwidth;
+ Tx->SampleRate = samplerate;
+ Tx->OutputSampleRate = samplerate;
+ txbasefreq = get_txfreq_woffset();
+ Tx->bContestia = true;
+
+ if (reverse) {
+ Tx->FirstCarrierMultiplier = (txbasefreq + (Tx->Bandwidth / 2)) / 500;
+ Tx->Reverse = 1;
+ } else {
+ Tx->FirstCarrierMultiplier = (txbasefreq - (Tx->Bandwidth / 2)) / 500;
+ Tx->Reverse = 0;
+ }
+
+ if (Tx->Preset() < 0) {
+ LOG_ERROR("contestia: transmitter preset failed!");
+ return;
+ }
+
+ txbufferlen = Tx->MaxOutputLen;
+
+ if (txfbuffer) delete [] txfbuffer;
+ txfbuffer = new double[txbufferlen];
+
+ Rx->Tones = Tx->Tones;
+ Rx->Bandwidth = bandwidth;
+ Rx->SyncMargin = smargin;
+ Rx->SyncIntegLen = sinteg;
+ Rx->SyncThreshold = progStatus.sqlonoff ?
+ clamp(progStatus.sldrSquelchValue / 5.0 + 3.0, 0, 90.0) : 0.0;
+
+ Rx->SampleRate = samplerate;
+ Rx->InputSampleRate = samplerate;
+ Rx->bContestia = true;
+
+ if (reverse) {
+ Rx->FirstCarrierMultiplier = (frequency + (Rx->Bandwidth / 2)) / 500;
+ Rx->Reverse = 1;
+ } else {
+ Rx->FirstCarrierMultiplier = (frequency - (Rx->Bandwidth /2)) / 500;
+ Rx->Reverse = 0;
+ }
+
+ if (Rx->Preset() < 0) {
+ LOG_ERROR("contestia: receiver preset failed!");
+ return;
+ }
+ fragmentsize = 1024;
+ set_bandwidth(Tx->Bandwidth - Tx->Bandwidth / Tx->Tones);
+
+ put_MODEstatus("%s %" PRIuSZ "/%" PRIuSZ "", get_mode_name(), Tx->Tones, Tx->Bandwidth);
+ metric = 0;
+
+ sigpwr = 1e-10; noisepwr = 1e-8;
+ LOG_INFO("\nContestia Rx parameters:\n%s", Rx->PrintParameters());
+}
+
+void contestia::init()
+{
+ restart();
+ modem::init();
+ set_scope_mode(Digiscope::BLANK);
+}
+
+contestia::contestia()
+{
+ cap |= CAP_REV;
+
+ txfbuffer = 0;
+ samplerate = 8000;
+
+ Tx = new MFSK_Transmitter< double >;
+ Rx = new MFSK_Receiver< double >;
+
+ Tx->bContestia = true;
+ Rx->bContestia = true;
+
+ mode = MODE_CONTESTIA;
+
+ lastfreq = 0;
+
+ for (int i = 0; i < SR4; i++) ampshape[i] = 1.0;
+ for (int i = 0; i < SR4 / 8; i++)
+ ampshape[i] = ampshape[SR4 - 1 - i] = 0.5 * (1.0 - cos(M_PI * i / (SR4/8)));
+
+ for (int i = 0; i < TONE_DURATION; i++) tonebuff[i] = 0;
+
+ tone_bw = -1;
+ tone_midfreq = -1;
+}
+
+contestia::~contestia()
+{
+ if (Tx) delete Tx;
+ if (Rx) delete Rx;
+ if (txfbuffer) delete [] txfbuffer;
+}
+
diff --git a/src/cw_rtty/cw.cxx b/src/cw_rtty/cw.cxx
index 8e1f5ec1..8fe2173c 100644
--- a/src/cw_rtty/cw.cxx
+++ b/src/cw_rtty/cw.cxx
@@ -66,7 +66,20 @@ void cw::rx_init()
void cw::init()
{
- modem::init();
+ bool wfrev = wf->Reverse();
+ bool wfsb = wf->USB();
+ reverse = wfrev ^ !wfsb;
+
+ if (progdefaults.StartAtSweetSpot)
+ set_freq(progdefaults.CWsweetspot);
+ else if (progStatus.carrier != 0) {
+ set_freq(progStatus.carrier);
+#if !BENCHMARK_MODE
+ progStatus.carrier = 0;
+#endif
+ } else
+ set_freq(wf->Carrier());
+
trackingfilter->reset();
cw_adaptive_receive_threshold = (long int)trackingfilter->run(2 * cw_send_dot_length);
put_cwRcvWPM(cw_send_speed);
@@ -347,7 +360,7 @@ int cw::rx_process(const double *buf, int len)
}
if (handle_event(CW_QUERY_EVENT, &c) == CW_SUCCESS) {
while (*c)
- put_rx_char(*c++);
+ put_rx_char(progdefaults.rx_lowercase ? tolower(*c++) : *c++);
update_syncscope();
// display_metric(metric);
}
@@ -782,7 +795,7 @@ void cw::send_ch(int ch)
flen -= symbollen;
}
if (flen) send_symbol(0, flen);
- put_echo_char(ch);
+ put_echo_char(progdefaults.rx_lowercase ? tolower(ch) : ch);
return;
}
diff --git a/src/cw_rtty/rtty.cxx b/src/cw_rtty/rtty.cxx
index a8a0230f..c5080c7d 100644
--- a/src/cw_rtty/rtty.cxx
+++ b/src/cw_rtty/rtty.cxx
@@ -116,7 +116,20 @@ void rtty::rx_init()
void rtty::init()
{
- modem::init();
+ bool wfrev = wf->Reverse();
+ bool wfsb = wf->USB();
+ reverse = wfrev ^ !wfsb;
+
+ if (progdefaults.StartAtSweetSpot)
+ set_freq(progdefaults.RTTYsweetspot);
+ else if (progStatus.carrier != 0) {
+ set_freq(progStatus.carrier);
+#if !BENCHMARK_MODE
+ progStatus.carrier = 0;
+#endif
+ } else
+ set_freq(wf->Carrier());
+
rx_init();
put_MODEstatus(mode);
snprintf(msg1, sizeof(msg1), "%-4.1f / %-4.0f", rtty_baud, rtty_shift);
@@ -215,7 +228,7 @@ void rtty::restart()
rtty::rtty(trx_mode tty_mode)
{
- cap = CAP_AFC | CAP_REV;
+ cap |= CAP_AFC | CAP_REV;
mode = tty_mode;
@@ -389,11 +402,13 @@ bool rtty::rx(bool bit)
if (bit) {
if ((metric >= progStatus.sldrSquelchValue && progStatus.sqlonoff)|| !progStatus.sqlonoff) {
c = decode_char();
- if ( c != 0 ) put_rx_char(c);
/* lb = estimated bytes lost */
lb = (lost - bytelen / 2) / bytelen;
put_rx_ssdv(c, lb);
+
+ if ( c != 0 )
+ put_rx_char(progdefaults.rx_lowercase ? tolower(c) : c);
}
flag = true;
lost = 0;
@@ -711,7 +726,7 @@ void rtty::send_char(int c)
else
c = figures[c];
if (c)
- put_echo_char(c);
+ put_echo_char(progdefaults.rx_lowercase ? tolower(c) : c);
}
}
diff --git a/src/dialogs/Viewer.cxx b/src/dialogs/Viewer.cxx
index fb8213b6..a36a80be 100644
--- a/src/dialogs/Viewer.cxx
+++ b/src/dialogs/Viewer.cxx
@@ -293,6 +293,7 @@ Fl_Double_Window* createViewer(void)
cols[0] = labelwidth[progdefaults.VIEWERlabeltype];
int viewerwidth = (progStatus.VIEWERnchars * cwidth) + cols[0] + sbarwidth + border;
+ int minwidth = (30 * cwidth) + cols[0] + sbarwidth + border;
int viewerheight = 40 + cheight * progdefaults.VIEWERchannels;
int pad = border/2;
@@ -305,7 +306,7 @@ Fl_Double_Window* createViewer(void)
// search field
const char* label = _("Find: ");
fl_font(FL_HELVETICA, FL_NORMAL_SIZE);
- inpSeek = new Fl_Input2(2 * border + fl_width(label), border, 200, g->h(), label);
+ inpSeek = new Fl_Input2(static_cast(2 * border + fl_width(label)), border, 200, g->h(), label);
inpSeek->callback((Fl_Callback*)cb_Seek);
inpSeek->when(FL_WHEN_CHANGED);
inpSeek->textfont(FL_COURIER);
@@ -356,7 +357,7 @@ Fl_Double_Window* createViewer(void)
w->end();
w->callback((Fl_Callback*)cb_btnCloseViewer);
w->resizable(brwsViewer);
- w->size_range(w->w(), w->h() - brwsViewer->h() + 20);
+ w->size_range(minwidth, w->h() - brwsViewer->h() + 20);
w->xclass(PACKAGE_NAME);
return w;
@@ -384,12 +385,12 @@ void viewer_redraw()
brwsViewer->column_widths(cols);
}
-void viewaddchr(int ch, int freq, char c)
+void viewaddchr(int ch, int freq, char c, int md)
{
if (!dlgViewer) return;
if (progStatus.spot_recv)
- spot_recv(c, ch, freq);
+ spot_recv(c, ch, freq, md);
if (rfc != wf->rfcarrier() || usb != wf->USB()) viewer_redraw();
diff --git a/src/dialogs/colorsfonts.cxx b/src/dialogs/colorsfonts.cxx
index dd147601..d58f49ff 100644
--- a/src/dialogs/colorsfonts.cxx
+++ b/src/dialogs/colorsfonts.cxx
@@ -92,6 +92,23 @@ void cbViewerFontBrowser(Fl_Widget*, void*) {
font_browser->hide();
}
+void cbFreqControlFontBrowser(Fl_Widget*, void*) {
+ Fl_Font fnt = font_browser->fontNumber();
+ progdefaults.FreqControlFontnbr = fnt;
+ progdefaults.changed = true;
+
+ FDdisplay->labelfont(progdefaults.FreqControlFontnbr);
+ FDdisplay->redraw();
+ qsoFreqDisp1->font(progdefaults.FreqControlFontnbr);
+ qsoFreqDisp2->font(progdefaults.FreqControlFontnbr);
+ qsoFreqDisp3->font(progdefaults.FreqControlFontnbr);
+ qsoFreqDisp1->redraw();
+ qsoFreqDisp2->redraw();
+ qsoFreqDisp3->redraw();
+
+ font_browser->hide();
+}
+
Fl_Double_Window *dlgColorFont=(Fl_Double_Window *)0;
Fl_Button *btnClrFntClose=(Fl_Button *)0;
@@ -104,6 +121,18 @@ Fl_Tabs *tabsColors=(Fl_Tabs *)0;
Fl_Box *FDdisplay=(Fl_Box *)0;
+Fl_Button *btn_freq_control_font=(Fl_Button *)0;
+
+static void cb_btn_freq_control_font(Fl_Button*, void*) {
+ font_browser->fontNumber(progdefaults.FreqControlFontnbr);
+ font_browser->fontSize(14);
+ font_browser->fontColor(FL_FOREGROUND_COLOR);
+ font_browser->fontFilter(Font_Browser::FIXED_WIDTH);
+ font_browser->fontFilter(Font_Browser::ALL_TYPES);
+ font_browser->callback(cbFreqControlFontBrowser);
+font_browser->show();
+}
+
Fl_Button *btnBackgroundColor=(Fl_Button *)0;
static void cb_btnBackgroundColor(Fl_Button*, void*) {
@@ -723,21 +752,25 @@ Fl_Double_Window* make_colorsfonts() {
} // Fl_Button* btnClrFntClose
{ tabsColors = new Fl_Tabs(0, 5, 375, 185);
{ Fl_Group* o = new Fl_Group(5, 30, 365, 150, _("Freq Disp"));
- { Fl_Box* o = FDdisplay = new Fl_Box(100, 45, 45, 67, _("8"));
+ { Fl_Box* o = FDdisplay = new Fl_Box(65, 43, 235, 45, _("14070.150"));
FDdisplay->box(FL_DOWN_BOX);
FDdisplay->color((Fl_Color)55);
FDdisplay->labelfont(4);
- FDdisplay->labelsize(48);
+ FDdisplay->labelsize(40);
o->color(fl_rgb_color(progdefaults.FDbackground.R,progdefaults.FDbackground.G,progdefaults.FDbackground.B));
o->labelcolor(fl_rgb_color(progdefaults.FDforeground.R,progdefaults.FDforeground.G,progdefaults.FDforeground.B));
+ o->labelfont(progdefaults.FreqControlFontnbr);
} // Fl_Box* FDdisplay
- { btnBackgroundColor = new Fl_Button(165, 45, 100, 30, _("Background"));
+ { btn_freq_control_font = new Fl_Button(144, 96, 87, 24, _("Font"));
+ btn_freq_control_font->callback((Fl_Callback*)cb_btn_freq_control_font);
+ } // Fl_Button* btn_freq_control_font
+ { btnBackgroundColor = new Fl_Button(35, 131, 87, 24, _("Bg Color"));
btnBackgroundColor->callback((Fl_Callback*)cb_btnBackgroundColor);
} // Fl_Button* btnBackgroundColor
- { btnForegroundColor = new Fl_Button(165, 85, 100, 30, _("Foreground"));
+ { btnForegroundColor = new Fl_Button(144, 131, 87, 24, _("Digit Color"));
btnForegroundColor->callback((Fl_Callback*)cb_btnForegroundColor);
} // Fl_Button* btnForegroundColor
- { btnFD_SystemColor = new Fl_Button(165, 125, 100, 30, _("System"));
+ { btnFD_SystemColor = new Fl_Button(259, 131, 87, 24, _("Sys Colors"));
btnFD_SystemColor->callback((Fl_Callback*)cb_btnFD_SystemColor);
} // Fl_Button* btnFD_SystemColor
o->end();
diff --git a/src/dialogs/colorsfonts.fl b/src/dialogs/colorsfonts.fl
index f25944da..daf62870 100644
--- a/src/dialogs/colorsfonts.fl
+++ b/src/dialogs/colorsfonts.fl
@@ -114,11 +114,29 @@ Function {cbViewerFontBrowser(Fl_Widget*, void*)} {open return_type void
font_browser->hide();} {}
}
+Function {cbFreqControlFontBrowser(Fl_Widget*, void*)} {open return_type void
+} {
+ code {Fl_Font fnt = font_browser->fontNumber();
+ progdefaults.FreqControlFontnbr = fnt;
+ progdefaults.changed = true;
+
+ FDdisplay->labelfont(progdefaults.FreqControlFontnbr);
+ FDdisplay->redraw();
+ qsoFreqDisp1->font(progdefaults.FreqControlFontnbr);
+ qsoFreqDisp2->font(progdefaults.FreqControlFontnbr);
+ qsoFreqDisp3->font(progdefaults.FreqControlFontnbr);
+ qsoFreqDisp1->redraw();
+ qsoFreqDisp2->redraw();
+ qsoFreqDisp3->redraw();
+
+ font_browser->hide();} {}
+}
+
Function {make_colorsfonts()} {open
} {
code {font_browser = new Font_Browser;} {}
Fl_Window dlgColorFont {
- label {Colors and Fonts} open selected
+ label {Colors and Fonts} open
xywh {496 125 375 220} type Double
code0 {dlgColorFont->xclass(PACKAGE_TARNAME);} visible
} {
@@ -135,13 +153,25 @@ Function {make_colorsfonts()} {open
xywh {5 30 365 150}
} {
Fl_Box FDdisplay {
- label 8
- xywh {100 45 45 67} box DOWN_BOX color 55 labelfont 4 labelsize 48
+ label {14070.150} selected
+ xywh {65 43 235 45} box DOWN_BOX color 55 labelfont 4 labelsize 40
code0 {o->color(fl_rgb_color(progdefaults.FDbackground.R,progdefaults.FDbackground.G,progdefaults.FDbackground.B));}
code1 {o->labelcolor(fl_rgb_color(progdefaults.FDforeground.R,progdefaults.FDforeground.G,progdefaults.FDforeground.B));}
+ code2 {o->labelfont(progdefaults.FreqControlFontnbr);}
+ }
+ Fl_Button btn_freq_control_font {
+ label Font
+ callback {font_browser->fontNumber(progdefaults.FreqControlFontnbr);
+ font_browser->fontSize(14);
+ font_browser->fontColor(FL_FOREGROUND_COLOR);
+ font_browser->fontFilter(Font_Browser::FIXED_WIDTH);
+ font_browser->fontFilter(Font_Browser::ALL_TYPES);
+ font_browser->callback(cbFreqControlFontBrowser);
+font_browser->show();}
+ xywh {144 96 87 24}
}
Fl_Button btnBackgroundColor {
- label Background
+ label {Bg Color}
callback {uchar r, g, b;
r = progdefaults.FDbackground.R;
g = progdefaults.FDbackground.G;
@@ -169,10 +199,10 @@ Function {make_colorsfonts()} {open
}
progdefaults.changed = true;}
- xywh {165 45 100 30}
+ xywh {35 131 87 24}
}
Fl_Button btnForegroundColor {
- label Foreground
+ label {Digit Color}
callback {uchar r, g, b;
r = progdefaults.FDforeground.R;
g = progdefaults.FDforeground.G;
@@ -200,10 +230,10 @@ Function {make_colorsfonts()} {open
}
progdefaults.changed = true;}
- xywh {165 85 100 30}
+ xywh {144 131 87 24}
}
Fl_Button btnFD_SystemColor {
- label System
+ label {Sys Colors}
callback {uchar r, g, b;
Fl_Color clr = FL_BACKGROUND2_COLOR;
@@ -237,7 +267,7 @@ Function {make_colorsfonts()} {open
}
progdefaults.changed = true;}
- xywh {165 125 100 30}
+ xywh {259 131 87 24}
}
}
Fl_Group {} {
diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx
index 81b4bee3..cc41e132 100644
--- a/src/dialogs/confdialog.cxx
+++ b/src/dialogs/confdialog.cxx
@@ -466,12 +466,10 @@ progdefaults.changed = true;
WF_UI();
}
-Fl_Group *tabWfallRestart=(Fl_Group *)0;
+Fl_Check_Button *btn_rx_lowercase=(Fl_Check_Button *)0;
-Fl_Check_Button *btnCheckButtons=(Fl_Check_Button *)0;
-
-static void cb_btnCheckButtons(Fl_Check_Button* o, void*) {
- progdefaults.useCheckButtons = o->value();
+static void cb_btn_rx_lowercase(Fl_Check_Button* o, void*) {
+ progdefaults.rx_lowercase = o->value();
progdefaults.changed = true;
}
@@ -1091,6 +1089,49 @@ static void cb_btnOlivia_8bit(Fl_Check_Button* o, void*) {
progdefaults.changed = true;
}
+Fl_Group *tabContestia=(Fl_Group *)0;
+
+Fl_Choice *mnuContestia_Bandwidth=(Fl_Choice *)0;
+
+static void cb_mnuContestia_Bandwidth(Fl_Choice* o, void*) {
+ progdefaults.contestiabw = o->value();
+set_contestia_default_integ();
+resetOLIVIA();
+progdefaults.changed = true;
+}
+
+Fl_Choice *mnuContestia_Tones=(Fl_Choice *)0;
+
+static void cb_mnuContestia_Tones(Fl_Choice* o, void*) {
+ progdefaults.contestiatones = o->value();
+set_contestia_default_integ();
+resetCONTESTIA();
+progdefaults.changed = true;
+}
+
+Fl_Counter2 *cntContestia_smargin=(Fl_Counter2 *)0;
+
+static void cb_cntContestia_smargin(Fl_Counter2* o, void*) {
+ progdefaults.contestiasmargin = (int)(o->value());
+resetCONTESTIA();
+progdefaults.changed = true;
+}
+
+Fl_Counter2 *cntContestia_sinteg=(Fl_Counter2 *)0;
+
+static void cb_cntContestia_sinteg(Fl_Counter2* o, void*) {
+ progdefaults.contestiasinteg = (int)(o->value());
+resetCONTESTIA();
+progdefaults.changed = true;
+}
+
+Fl_Check_Button *btnContestia_8bit=(Fl_Check_Button *)0;
+
+static void cb_btnContestia_8bit(Fl_Check_Button* o, void*) {
+ progdefaults.contestia8bit = o->value();
+progdefaults.changed = true;
+}
+
Fl_Group *tabPSK=(Fl_Group *)0;
Fl_Tabs *tabsPSK=(Fl_Tabs *)0;
@@ -2583,6 +2624,8 @@ static const char szParity[] = "none|even|odd|zero|one";
static const char szStopBits[] = "1|1.5|2";
static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
+static const char szContestiaTones[] = "2|4|8|16|32|64|128|256";
+static const char szContestiaBandwidth[] = "125|250|500|1000|2000";
static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";
{ Fl_Double_Window* o = new Fl_Double_Window(500, 400, _("Fldigi configuration"));
w = o;
@@ -2590,9 +2633,9 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
o->selection_color((Fl_Color)51);
o->labelsize(18);
o->align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE);
- { tabsConfigure = new Fl_Tabs(-3, 0, 503, 375);
- tabsConfigure->color(FL_LIGHT1);
- tabsConfigure->selection_color(FL_LIGHT1);
+ { tabsConfigure = new Fl_Tabs(-3, 0, 500, 372);
+ tabsConfigure->color((Fl_Color)FL_LIGHT1);
+ tabsConfigure->selection_color((Fl_Color)FL_LIGHT1);
{ tabOperator = new Fl_Group(0, 25, 500, 345, _("Operator"));
tabOperator->tooltip(_("Operator information"));
tabOperator->labelsize(12);
@@ -2717,13 +2760,11 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
} // Fl_Input* MyRadio
tabOperator->end();
} // Fl_Group* tabOperator
- { tabUI = new Fl_Group(-3, 25, 503, 345, _("UI"));
- tabUI->labelsize(12);
+ { tabUI = new Fl_Group(0, 25, 500, 345, _("UI"));
tabUI->hide();
{ tabsUI = new Fl_Tabs(-3, 25, 503, 345);
tabsUI->selection_color(FL_LIGHT1);
{ tabUserInterface = new Fl_Group(0, 50, 500, 320, _("General"));
- tabUserInterface->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 301);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Check_Button* o = btnShowTooltips = new Fl_Check_Button(15, 70, 120, 20, _("Show tooltips"));
@@ -2986,7 +3027,8 @@ ab and newline are automatically included."));
} // Fl_Group* o
tabContest->end();
} // Fl_Group* tabContest
- { tabWF_UI = new Fl_Group(0, 50, 500, 320, _("Oper\' Controls"));
+ { tabWF_UI = new Fl_Group(0, 50, 500, 320, _("Operator Controls"));
+ tabWF_UI->hide();
{ Fl_Box* o = new Fl_Box(31, 65, 446, 25, _("Enable check box to show each respective operator control"));
o->box(FL_FLAT_BOX);
o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
@@ -3065,22 +3107,15 @@ ab and newline are automatically included."));
} // Fl_Button* btn_wf_disable_all
tabWF_UI->end();
} // Fl_Group* tabWF_UI
- { tabWfallRestart = new Fl_Group(0, 50, 500, 320, _("Restart"));
- tabWfallRestart->hide();
- { Fl_Group* o = new Fl_Group(5, 63, 490, 70, _("Changes take effect on next program startup"));
- o->tooltip(_("Show me more or less waterfall"));
- o->box(FL_ENGRAVED_FRAME);
- o->align(FL_ALIGN_TOP|FL_ALIGN_INSIDE);
- { Fl_Check_Button* o = btnCheckButtons = new Fl_Check_Button(52, 93, 275, 20, _("Use check buttons for AFC and SQL"));
- btnCheckButtons->tooltip(_("Check buttons or default lighted switch"));
- btnCheckButtons->down_box(FL_DOWN_BOX);
- btnCheckButtons->callback((Fl_Callback*)cb_btnCheckButtons);
- o->value(progdefaults.useCheckButtons);
- } // Fl_Check_Button* btnCheckButtons
- o->end();
- } // Fl_Group* o
- tabWfallRestart->end();
- } // Fl_Group* tabWfallRestart
+ { Fl_Group* o = new Fl_Group(0, 50, 500, 320, _("Rx Text"));
+ o->hide();
+ { Fl_Check_Button* o = btn_rx_lowercase = new Fl_Check_Button(25, 75, 389, 15, _("print CW / RTTY / THROB / CONTESTIA in lowercase"));
+ btn_rx_lowercase->down_box(FL_DOWN_BOX);
+ btn_rx_lowercase->callback((Fl_Callback*)cb_btn_rx_lowercase);
+ o->value(progdefaults.rx_lowercase);
+ } // Fl_Check_Button* btn_rx_lowercase
+ o->end();
+ } // Fl_Group* o
tabsUI->end();
} // Fl_Tabs* tabsUI
tabUI->end();
@@ -3092,6 +3127,7 @@ ab and newline are automatically included."));
tabsWaterfall->color(FL_LIGHT1);
tabsWaterfall->selection_color(FL_LIGHT1);
{ Fl_Group* o = new Fl_Group(0, 50, 500, 320, _("Display"));
+ o->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 162, _("Colors and cursors"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
@@ -3107,6 +3143,7 @@ ab and newline are automatically included."));
WF_Palette->align(FL_ALIGN_TOP_LEFT);
WF_Palette->when(FL_WHEN_RELEASE);
o->label(progdefaults.PaletteName.c_str());
+ o->labelsize(FL_NORMAL_SIZE);
} // colorbox* WF_Palette
{ btnColor[0] = new Fl_Button(15, 128, 20, 24);
btnColor[0]->tooltip(_("Change color"));
@@ -3234,7 +3271,7 @@ ab and newline are automatically included."));
valTxMonitorLevel->align(FL_ALIGN_TOP);
valTxMonitorLevel->when(FL_WHEN_CHANGED);
o->value(progdefaults.TxMonitorLevel);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* valTxMonitorLevel
o->end();
} // Fl_Group* o
@@ -3352,7 +3389,6 @@ an merging"));
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(0, 50, 500, 320, _("Mouse"));
- o->hide();
{ Fl_Group* o = new Fl_Group(5, 62, 490, 170);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Check_Button* o = btnWaterfallHistoryDefault = new Fl_Check_Button(15, 76, 340, 20, _("Left or right click always replays audio history"));
@@ -3401,10 +3437,9 @@ an merging"));
tabWaterfall->end();
} // Fl_Group* tabWaterfall
{ tabModems = new Fl_Group(0, 25, 500, 345, _("Modems"));
- tabModems->labelsize(12);
tabModems->hide();
- { tabsModems = new Fl_Tabs(0, 25, 500, 345);
- tabsModems->selection_color(FL_LIGHT1);
+ { tabsModems = new Fl_Tabs(0, 25, 501, 345);
+ tabsModems->selection_color((Fl_Color)FL_LIGHT1);
tabsModems->align(FL_ALIGN_TOP_RIGHT);
{ tabCW = new Fl_Group(0, 50, 500, 320, _("CW"));
tabCW->hide();
@@ -3434,7 +3469,7 @@ an merging"));
sldrCWbandwidth->align(FL_ALIGN_RIGHT);
sldrCWbandwidth->when(FL_WHEN_CHANGED);
o->value(progdefaults.CWbandwidth);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrCWbandwidth
{ Fl_Check_Button* o = btnCWrcvTrack = new Fl_Check_Button(40, 150, 80, 20, _("Tracking"));
btnCWrcvTrack->tooltip(_("Automatic Rx speed tracking"));
@@ -3500,7 +3535,7 @@ an merging"));
sldrCWxmtWPM->align(FL_ALIGN_RIGHT);
sldrCWxmtWPM->when(FL_WHEN_CHANGED);
o->value(progdefaults.CWspeed);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrCWxmtWPM
{ Fl_Counter2* o = cntCWdefWPM = new Fl_Counter2(40, 281, 64, 20, _("Default"));
cntCWdefWPM->tooltip(_("The default CW speed"));
@@ -3565,7 +3600,7 @@ an merging"));
sldrCWfarnsworth->align(FL_ALIGN_RIGHT);
sldrCWfarnsworth->when(FL_WHEN_CHANGED);
o->value(progdefaults.CWfarnsworth);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrCWfarnsworth
{ Fl_Check_Button* o = btnCWusefarnsworth = new Fl_Check_Button(40, 312, 180, 15, _("Use Farnsworth timing"));
btnCWusefarnsworth->down_box(FL_DOWN_BOX);
@@ -3726,7 +3761,7 @@ an merging"));
} // Fl_Tabs* tabsCW
tabCW->end();
} // Fl_Group* tabCW
- { tabDomEX = new Fl_Group(0, 50, 500, 320, _("DominoEX"));
+ { tabDomEX = new Fl_Group(0, 50, 500, 320, _("DomEX"));
tabDomEX->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 180);
o->box(FL_ENGRAVED_FRAME);
@@ -3792,7 +3827,7 @@ an merging"));
valDomCWI->align(FL_ALIGN_TOP);
valDomCWI->when(FL_WHEN_CHANGED);
o->value(progdefaults.DomCWI);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* valDomCWI
{ Fl_Counter2* o = valDominoEX_PATHS = new Fl_Counter2(339, 194, 63, 20, _("Paths (hidden)"));
valDominoEX_PATHS->type(1);
@@ -3887,7 +3922,7 @@ an merging"));
sldrHellBW->align(FL_ALIGN_TOP_LEFT);
sldrHellBW->when(FL_WHEN_CHANGED);
o->value(progdefaults.HELL_BW);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrHellBW
{ Fl_Check_Button* o = btnFeldHellIdle = new Fl_Check_Button(15, 177, 230, 20, _("Transmit periods (.) when idle"));
btnFeldHellIdle->tooltip(_("Transmits a diddle dot when no keyboard activity"));
@@ -4035,7 +4070,80 @@ an merging"));
} // Fl_Group* o
tabOlivia->end();
} // Fl_Group* tabOlivia
- { tabPSK = new Fl_Group(0, 50, 500, 320, _("PSK"));
+ { tabContestia = new Fl_Group(0, 50, 500, 320, _("Contestia"));
+ tabContestia->hide();
+ { Fl_Group* o = new Fl_Group(5, 60, 490, 200);
+ o->box(FL_ENGRAVED_FRAME);
+ { Fl_Choice* o = mnuContestia_Bandwidth = new Fl_Choice(60, 80, 85, 20, _("Bandwidth"));
+ mnuContestia_Bandwidth->tooltip(_("Select bandwidth"));
+ mnuContestia_Bandwidth->down_box(FL_BORDER_BOX);
+ mnuContestia_Bandwidth->callback((Fl_Callback*)cb_mnuContestia_Bandwidth);
+ mnuContestia_Bandwidth->align(FL_ALIGN_RIGHT);
+ o->add(szContestiaBandwidth);
+ o->value(2);
+ } // Fl_Choice* mnuContestia_Bandwidth
+ { Fl_Choice* o = mnuContestia_Tones = new Fl_Choice(321, 80, 70, 20, _("Tones"));
+ mnuContestia_Tones->tooltip(_("Select number of tones"));
+ mnuContestia_Tones->down_box(FL_BORDER_BOX);
+ mnuContestia_Tones->callback((Fl_Callback*)cb_mnuContestia_Tones);
+ mnuContestia_Tones->align(FL_ALIGN_RIGHT);
+ o->add(szContestiaTones);
+ o->value(2);
+ } // Fl_Choice* mnuContestia_Tones
+ { Fl_Group* o = new Fl_Group(60, 119, 379, 100, _("Receive synchronizer"));
+ o->box(FL_ENGRAVED_FRAME);
+ o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
+ { Fl_Counter2* o = cntContestia_smargin = new Fl_Counter2(80, 150, 70, 20, _("Tune margin (tone frequency spacing)"));
+ cntContestia_smargin->tooltip(_("Change ONLY to experiment"));
+ cntContestia_smargin->type(1);
+ cntContestia_smargin->box(FL_UP_BOX);
+ cntContestia_smargin->color((Fl_Color)FL_BACKGROUND_COLOR);
+ cntContestia_smargin->selection_color((Fl_Color)FL_INACTIVE_COLOR);
+ cntContestia_smargin->labeltype(FL_NORMAL_LABEL);
+ cntContestia_smargin->labelfont(0);
+ cntContestia_smargin->labelsize(14);
+ cntContestia_smargin->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
+ cntContestia_smargin->minimum(2);
+ cntContestia_smargin->maximum(128);
+ cntContestia_smargin->step(1);
+ cntContestia_smargin->value(8);
+ cntContestia_smargin->callback((Fl_Callback*)cb_cntContestia_smargin);
+ cntContestia_smargin->align(FL_ALIGN_RIGHT);
+ cntContestia_smargin->when(FL_WHEN_CHANGED);
+ o->labelsize(FL_NORMAL_SIZE);
+ } // Fl_Counter2* cntContestia_smargin
+ { Fl_Counter2* o = cntContestia_sinteg = new Fl_Counter2(80, 180, 70, 20, _("Integration period (FEC blocks)"));
+ cntContestia_sinteg->tooltip(_("Change ONLY to experiment"));
+ cntContestia_sinteg->type(1);
+ cntContestia_sinteg->box(FL_UP_BOX);
+ cntContestia_sinteg->color((Fl_Color)FL_BACKGROUND_COLOR);
+ cntContestia_sinteg->selection_color((Fl_Color)FL_INACTIVE_COLOR);
+ cntContestia_sinteg->labeltype(FL_NORMAL_LABEL);
+ cntContestia_sinteg->labelfont(0);
+ cntContestia_sinteg->labelsize(14);
+ cntContestia_sinteg->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
+ cntContestia_sinteg->minimum(2);
+ cntContestia_sinteg->maximum(128);
+ cntContestia_sinteg->step(1);
+ cntContestia_sinteg->value(4);
+ cntContestia_sinteg->callback((Fl_Callback*)cb_cntContestia_sinteg);
+ cntContestia_sinteg->align(FL_ALIGN_RIGHT);
+ cntContestia_sinteg->when(FL_WHEN_CHANGED);
+ o->labelsize(FL_NORMAL_SIZE);
+ } // Fl_Counter2* cntContestia_sinteg
+ o->end();
+ } // Fl_Group* o
+ { btnContestia_8bit = new Fl_Check_Button(60, 229, 200, 20, _("8-bit extended characters"));
+ btnContestia_8bit->tooltip(_("Enable this for Latin-1 accented characters"));
+ btnContestia_8bit->down_box(FL_DOWN_BOX);
+ btnContestia_8bit->callback((Fl_Callback*)cb_btnContestia_8bit);
+ btnContestia_8bit->hide();
+ } // Fl_Check_Button* btnContestia_8bit
+ o->end();
+ } // Fl_Group* o
+ tabContestia->end();
+ } // Fl_Group* tabContestia
+ { tabPSK = new Fl_Group(0, 50, 517, 320, _("PSK"));
tabPSK->hide();
{ tabsPSK = new Fl_Tabs(0, 50, 500, 320);
tabsPSK->selection_color(FL_LIGHT1);
@@ -4262,7 +4370,7 @@ an merging"));
btnCRCRLF->when(FL_WHEN_RELEASE_ALWAYS);
o->value(progdefaults.rtty_crcrlf);
} // Fl_Check_Button* btnCRCRLF
- { cntrAUTOCRLF = new Fl_Counter2(335, 118, 65, 20, _("characters"));
+ { Fl_Counter2* o = cntrAUTOCRLF = new Fl_Counter2(335, 118, 65, 20, _("characters"));
cntrAUTOCRLF->tooltip(_("Set page width"));
cntrAUTOCRLF->type(1);
cntrAUTOCRLF->box(FL_UP_BOX);
@@ -4279,6 +4387,7 @@ an merging"));
cntrAUTOCRLF->callback((Fl_Callback*)cb_cntrAUTOCRLF);
cntrAUTOCRLF->align(FL_ALIGN_RIGHT);
cntrAUTOCRLF->when(FL_WHEN_CHANGED);
+ o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* cntrAUTOCRLF
{ Fl_Box* o = new Fl_Box(265, 118, 60, 20, _("after:"));
o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
@@ -4347,7 +4456,7 @@ an merging"));
sldrRTTYbandwidth->align(FL_ALIGN_TOP_LEFT);
sldrRTTYbandwidth->when(FL_WHEN_CHANGED);
o->value(progdefaults.RTTY_BW);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrRTTYbandwidth
{ Fl_Counter2* o = selCustomShift = new Fl_Counter2(15, 100, 100, 20, _("Custom shift"));
selCustomShift->tooltip(_("Input carrier shift"));
@@ -4432,7 +4541,7 @@ an merging"));
valThorCWI->align(FL_ALIGN_TOP);
valThorCWI->when(FL_WHEN_CHANGED);
o->value(progdefaults.ThorCWI);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* valThorCWI
{ Fl_Counter2* o = valTHOR_PATHS = new Fl_Counter2(353, 193, 75, 21, _("Paths (hidden)"));
valTHOR_PATHS->type(1);
@@ -5167,7 +5276,7 @@ ll with your audio device."));
valPCMvolume->callback((Fl_Callback*)cb_valPCMvolume);
valPCMvolume->align(FL_ALIGN_RIGHT);
valPCMvolume->when(FL_WHEN_CHANGED);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* valPCMvolume
o->end();
} // Fl_Group* o
@@ -5236,7 +5345,7 @@ ll with your audio device."));
sldrVideowidth->when(FL_WHEN_CHANGED);
o->value(progdefaults.videowidth);
if (progdefaults.ID_SMALL) o->deactivate();
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrVideowidth
{ bVideoIDModes = new Fl_Button(365, 67, 120, 20, _("Video ID modes"));
bVideoIDModes->callback((Fl_Callback*)cb_bVideoIDModes);
@@ -5271,7 +5380,7 @@ ll with your audio device."));
sldrCWIDwpm->align(FL_ALIGN_TOP);
sldrCWIDwpm->when(FL_WHEN_CHANGED);
o->value(progdefaults.CWIDwpm);
- o->labelsize(FL_NORMAL_SIZE);
+ o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);
} // Fl_Value_Slider2* sldrCWIDwpm
{ bCWIDModes = new Fl_Button(365, 185, 120, 20, _("CW ID modes"));
bCWIDModes->callback((Fl_Callback*)cb_bCWIDModes);
diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl
index 6707c815..23d74948 100644
--- a/src/dialogs/confdialog.fl
+++ b/src/dialogs/confdialog.fl
@@ -89,6 +89,8 @@ static const char szParity[] = "none|even|odd|zero|one";
static const char szStopBits[] = "1|1.5|2";
static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
+static const char szContestiaTones[] = "2|4|8|16|32|64|128|256";
+static const char szContestiaBandwidth[] = "125|250|500|1000|2000";
static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";} {}
code {} {}
Fl_Window {} {
@@ -96,12 +98,12 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
xywh {832 622 500 400} type Double color 45 selection_color 51 labelsize 18 align 80 visible
} {
Fl_Tabs tabsConfigure {open
- xywh {-3 0 503 375} color 50 selection_color 50
+ xywh {-3 0 500 372} color 50 selection_color 50
} {
Fl_Group tabOperator {
label Operator
- callback {progdefaults.changed = true;} open
- tooltip {Operator information} xywh {0 25 500 345} labelsize 12 when 1 hide
+ callback {progdefaults.changed = true;} selected
+ tooltip {Operator information} xywh {0 25 500 345} when 1
} {
Fl_Group {} {
label Station open
@@ -202,14 +204,14 @@ progdefaults.changed = true;}
}
Fl_Group tabUI {
label UI open
- xywh {-3 25 503 345} labelsize 12 hide
+ xywh {0 25 500 345} hide
} {
Fl_Tabs tabsUI {open
xywh {-3 25 503 345} selection_color 50
} {
Fl_Group tabUserInterface {
- label General open
- xywh {0 50 500 320} hide
+ label General
+ xywh {0 50 500 320}
} {
Fl_Group {} {open
xywh {5 60 490 301} box ENGRAVED_FRAME
@@ -324,7 +326,7 @@ progdefaults.changed = true;}
}
}
Fl_Group tabContest {
- label Contest open
+ label Contest
xywh {0 50 500 320} hide
} {
Fl_Group {} {
@@ -464,8 +466,8 @@ progdefaults.changed = true;}
}
}
Fl_Group tabWF_UI {
- label {Oper' Controls} open
- xywh {0 50 500 320}
+ label {Operator Controls}
+ xywh {0 50 500 320} hide
} {
Fl_Box {} {
label {Enable check box to show each respective operator control}
@@ -598,35 +600,30 @@ WF_UI();}
xywh {301 321 88 20}
}
}
- Fl_Group tabWfallRestart {
- label Restart open
+ Fl_Group {} {
+ label {Rx Text} open
xywh {0 50 500 320} hide
} {
- Fl_Group {} {
- label {Changes take effect on next program startup} open
- tooltip {Show me more or less waterfall} xywh {5 63 490 70} box ENGRAVED_FRAME align 17
- } {
- Fl_Check_Button btnCheckButtons {
- label {Use check buttons for AFC and SQL}
- callback {progdefaults.useCheckButtons = o->value();
+ Fl_Check_Button btn_rx_lowercase {
+ label {print CW / RTTY / THROB / CONTESTIA in lowercase}
+ callback {progdefaults.rx_lowercase = o->value();
progdefaults.changed = true;}
- tooltip {Check buttons or default lighted switch} xywh {52 93 275 20} down_box DOWN_BOX
- code0 {o->value(progdefaults.useCheckButtons);}
- }
+ xywh {25 75 389 15} down_box DOWN_BOX
+ code0 {o->value(progdefaults.rx_lowercase);}
}
}
}
}
Fl_Group tabWaterfall {
- label Waterfall open
- xywh {0 25 500 347} labelsize 12 hide
+ label Waterfall
+ xywh {0 25 500 347} hide
} {
Fl_Tabs tabsWaterfall {open
xywh {0 25 500 347} color 50 selection_color 50
} {
Fl_Group {} {
label Display open
- xywh {0 50 500 320}
+ xywh {0 50 500 320} hide
} {
Fl_Group {} {
label {Colors and cursors} open
@@ -637,6 +634,7 @@ progdefaults.changed = true;}
xywh {15 98 260 24} box DOWN_BOX color 0 labelsize 12 align 5
code0 {\#include "colorbox.h"}
code1 {o->label(progdefaults.PaletteName.c_str());}
+ code2 {o->labelsize(FL_NORMAL_SIZE);}
class colorbox
}
Fl_Button {btnColor[0]} {
@@ -803,7 +801,7 @@ progdefaults.changed = true;}
progdefaults.changed = true;}
tooltip {Set level for good viewing} xywh {270 315 200 20} type Horizontal align 1 step 0.05 value 0.5 textsize 14
code0 {o->value(progdefaults.TxMonitorLevel);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
}
@@ -880,7 +878,7 @@ progdefaults.changed = true;}
}
Fl_Group {} {
label Mouse open
- xywh {0 50 500 320} hide
+ xywh {0 50 500 320}
} {
Fl_Group {} {open
xywh {5 62 490 170} box ENGRAVED_FRAME
@@ -930,11 +928,11 @@ behaves inside the waterfall} xywh {15 196 150 22} down_box BORDER_BOX align 8
}
}
Fl_Group tabModems {
- label Modems open
- xywh {0 25 500 345} labelsize 12 hide
+ label Modems
+ xywh {0 25 500 345} hide
} {
Fl_Tabs tabsModems {open
- xywh {0 25 500 345} selection_color 50 align 9
+ xywh {0 25 501 345} selection_color 50 align 9
} {
Fl_Group tabCW {
label CW open
@@ -957,7 +955,7 @@ behaves inside the waterfall} xywh {15 196 150 22} down_box BORDER_BOX align 8
progdefaults.changed = true;}
tooltip {CW dsp filter bandwidth} xywh {40 115 290 20} type Horizontal align 8 minimum 10 maximum 500 step 10 value 150 textsize 14
code0 {o->value(progdefaults.CWbandwidth);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Check_Button btnCWrcvTrack {
@@ -1003,7 +1001,7 @@ progdefaults.changed = true;
sync_cw_parameters();}
tooltip {My transmit CW WPM} xywh {20 240 400 20} type Horizontal align 8 minimum 5 maximum 100 step 1 value 20 textsize 14
code0 {o->value(progdefaults.CWspeed);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Counter cntCWdefWPM {
@@ -1047,7 +1045,7 @@ cntCW_WPM->maximum(progdefaults.CWupperlimit);}
progdefaults.changed = true;}
tooltip {My transmit CW WPM} xywh {20 335 400 20} type Horizontal align 8 minimum 5 maximum 100 step 1 value 20 textsize 14
code0 {o->value(progdefaults.CWfarnsworth);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Check_Button btnCWusefarnsworth {
@@ -1163,7 +1161,7 @@ progdefaults.changed = true;}
}
}
Fl_Group tabDomEX {
- label DominoEX open
+ label DomEX open
xywh {0 50 500 320} hide
} {
Fl_Group {} {open
@@ -1208,7 +1206,7 @@ progdefaults.changed = true;}
progdefaults.changed = true;}
tooltip {CWI detection and suppression} xywh {15 207 260 20} type Horizontal align 1 textsize 14
code0 {o->value(progdefaults.DomCWI);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Counter valDominoEX_PATHS {
@@ -1276,7 +1274,7 @@ progdefaults.changed = true;} open
callback {progdefaults.HELL_BW = sldrHellBW->value();}
tooltip {Adjust the DSP bandwidth} xywh {206 147 246 20} type Horizontal align 5 minimum 10 maximum 2400 step 5 value 400 textsize 14
code0 {o->value(progdefaults.HELL_BW);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Check_Button btnFeldHellIdle {
@@ -1422,6 +1420,64 @@ progdefaults.changed = true;}
}
}
}
+ Fl_Group tabContestia {
+ label Contestia open
+ xywh {0 50 500 320} hide
+ } {
+ Fl_Group {} {open
+ xywh {5 60 490 200} box ENGRAVED_FRAME
+ } {
+ Fl_Choice mnuContestia_Bandwidth {
+ label Bandwidth
+ callback {progdefaults.contestiabw = o->value();
+set_contestia_default_integ();
+resetOLIVIA();
+progdefaults.changed = true;} open
+ tooltip {Select bandwidth} xywh {60 80 85 20} down_box BORDER_BOX align 8
+ code0 {o->add(szContestiaBandwidth);}
+ code1 {o->value(2);}
+ } {}
+ Fl_Choice mnuContestia_Tones {
+ label Tones
+ callback {progdefaults.contestiatones = o->value();
+set_contestia_default_integ();
+resetCONTESTIA();
+progdefaults.changed = true;} open
+ tooltip {Select number of tones} xywh {321 80 70 20} down_box BORDER_BOX align 8
+ code0 {o->add(szContestiaTones);}
+ code1 {o->value(2);}
+ } {}
+ Fl_Group {} {
+ label {Receive synchronizer} open
+ xywh {60 119 379 100} box ENGRAVED_FRAME align 21
+ } {
+ Fl_Counter cntContestia_smargin {
+ label {Tune margin (tone frequency spacing)}
+ callback {progdefaults.contestiasmargin = (int)(o->value());
+resetCONTESTIA();
+progdefaults.changed = true;}
+ tooltip {Change ONLY to experiment} xywh {80 150 70 20} type Simple align 8 minimum 2 maximum 128 step 1 value 8
+ code0 {o->labelsize(FL_NORMAL_SIZE);}
+ class Fl_Counter2
+ }
+ Fl_Counter cntContestia_sinteg {
+ label {Integration period (FEC blocks)}
+ callback {progdefaults.contestiasinteg = (int)(o->value());
+resetCONTESTIA();
+progdefaults.changed = true;}
+ tooltip {Change ONLY to experiment} xywh {80 180 70 20} type Simple align 8 minimum 2 maximum 128 step 1 value 4
+ code0 {o->labelsize(FL_NORMAL_SIZE);}
+ class Fl_Counter2
+ }
+ }
+ Fl_Check_Button btnContestia_8bit {
+ label {8-bit extended characters}
+ callback {progdefaults.contestia8bit = o->value();
+progdefaults.changed = true;}
+ tooltip {Enable this for Latin-1 accented characters} xywh {60 229 200 20} down_box DOWN_BOX hide
+ }
+ }
+ }
Fl_Group tabPSK {
label PSK open
xywh {0 50 500 320} hide
@@ -1630,6 +1686,7 @@ progdefaults.changed = true;}
callback {progdefaults.rtty_autocount = (int)o->value();
progdefaults.changed = true;}
tooltip {Set page width} xywh {335 118 65 20} type Simple align 8 minimum 68 maximum 80 step 1 value 72
+ code0 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Box {} {
@@ -1695,7 +1752,7 @@ progdefaults.changed = true;}
callback {progdefaults.RTTY_BW = o->value();}
tooltip {Adjust the DSP bandwidth} xywh {100 325 300 20} type Horizontal align 5 minimum 5 maximum 200 step 1 value 25 textsize 14
code0 {o->value(progdefaults.RTTY_BW);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Counter selCustomShift {
@@ -1749,7 +1806,7 @@ progdefaults.changed = true;}
progdefaults.changed = true;}
tooltip {CWI detection and suppression} xywh {15 194 260 20} type Horizontal align 1 textsize 14
code0 {o->value(progdefaults.ThorCWI);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Counter valTHOR_PATHS {
@@ -1767,8 +1824,8 @@ progdefaults.changed = true;}
}
}
Fl_Group tabRig {
- label Rig open
- tooltip {Transceiver control} xywh {0 25 500 345} labelsize 12 hide
+ label Rig
+ tooltip {Transceiver control} xywh {0 25 500 345} hide
} {
Fl_Tabs tabsRig {open
xywh {0 25 500 345} selection_color 50
@@ -2346,8 +2403,8 @@ progdefaults.changed = true;}
}
}
Fl_Group tabSoundCard {
- label Audio open
- tooltip {Audio devices} xywh {0 25 500 345} labelsize 12 hide
+ label Audio
+ tooltip {Audio devices} xywh {0 25 500 345} hide
} {
Fl_Tabs tabsSoundCard {open
xywh {0 25 500 345} selection_color 50
@@ -2588,7 +2645,7 @@ progdefaults.changed = true;}
progdefaults.changed = true;}
tooltip {Set the sound card PCM level} xywh {15 167 340 20} type Horizontal selection_color 15 align 8 value 0.8 textsize 14
code0 {extern void setPCMvolume(double);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
}
@@ -2596,8 +2653,8 @@ progdefaults.changed = true;}
}
}
Fl_Group tabID {
- label ID open
- xywh {0 25 500 345} labelsize 12 hide
+ label ID
+ xywh {0 25 500 345} hide
} {
Fl_Group {} {
label {Video Preamble ID} open
@@ -2645,7 +2702,7 @@ progdefaults.changed = true;}
tooltip {Set the number of characters per row} xywh {365 127 120 20} type Horizontal align 4 minimum 1 maximum 4 step 1 value 1 textsize 14
code0 {o->value(progdefaults.videowidth);}
code1 {if (progdefaults.ID_SMALL) o->deactivate();}
- code2 {o->labelsize(FL_NORMAL_SIZE);}
+ code2 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Button bVideoIDModes {
@@ -2674,7 +2731,7 @@ progdefaults.changed = true;}
progdefaults.changed = true;}
tooltip {Send at this WPM} xywh {165 185 180 20} type Horizontal align 1 minimum 15 maximum 40 step 1 value 18 textsize 14
code0 {o->value(progdefaults.CWIDwpm);}
- code1 {o->labelsize(FL_NORMAL_SIZE);}
+ code1 {o->labelsize(FL_NORMAL_SIZE); o->textsize(FL_NORMAL_SIZE);}
class Fl_Value_Slider2
}
Fl_Button bCWIDModes {
@@ -2761,8 +2818,8 @@ progdefaults.changed = true;}
}
}
Fl_Group tabMisc {
- label Misc open
- xywh {0 25 500 345} labelsize 12 hide
+ label Misc
+ xywh {0 25 500 345} hide
} {
Fl_Tabs tabsMisc {open
xywh {0 25 500 345} selection_color 50
@@ -3058,8 +3115,8 @@ progdefaults.changed = true;}
}
}
Fl_Group tabQRZ {
- label {Callsign DB} open
- tooltip {Callsign database} xywh {0 25 500 345} labelsize 12 hide
+ label {Callsign DB}
+ tooltip {Callsign database} xywh {0 25 500 345} hide
} {
Fl_Group {} {
label CDROM open
diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx
index 6eaefc95..2d8c9c2a 100644
--- a/src/dialogs/fl_digi.cxx
+++ b/src/dialogs/fl_digi.cxx
@@ -38,6 +38,7 @@
#include
#include
#include
+#include
#include
#include
\n\