diff --git a/.svn/wc.db b/.svn/wc.db
index a7714a3..568158b 100644
Binary files a/.svn/wc.db and b/.svn/wc.db differ
diff --git a/Release_Notes.txt b/Release_Notes.txt
index 19a1ae6..c593592 100644
--- a/Release_Notes.txt
+++ b/Release_Notes.txt
@@ -13,6 +13,42 @@
Copyright 2001 - 2018 by Joe Taylor, K1JT.
+ Release: WSJT-X Version 1.9.0-rc3
+ March 18, 2018
+ ---------------------------------
+
+Changes from WSJT-X Version 1.9.0-rc2 include the following:
+
+- Corrected a number of flaws in Fox behavior, FT8 DXpedition Mode
+
+- Allow Hounds to use compound callsigns
+
+- Write debugging information to FoxQSO.txt.
+
+- Fix the "Blue Decode Button" bug
+
+- Allow partial processing of incoming UDP Reply messages so that
+ non-CQ/QRZ decodes can be processed. The processing is the same as
+ double-clicking the same decoded message within WSJT-X except that
+ "Enable Tx" will not be enabled.
+
+- Send DX grid locator to wsjt_status.txt, for use by applications like
+ PstRotatorAZ
+
+- Correct the display of DXCC status of KG4 calls
+
+- Updated copy of cty.dat
+
+- Updates to documentation
+
+- Other minor bug fixes
+
+- This release contains updated Hamlib functionality including changes
+ to the Yaesu FT-817 back end that allows the uBITx kit transceiver
+ to be CAT controlled by WSJT-X.
+
+
+
Release: WSJT-X Version 1.9.0-rc2
February 26, 2018
---------------------------------
diff --git a/Versions.cmake b/Versions.cmake
index 95a7fbb..65fc385 100644
--- a/Versions.cmake
+++ b/Versions.cmake
@@ -2,5 +2,5 @@
set (WSJTX_VERSION_MAJOR 1)
set (WSJTX_VERSION_MINOR 9)
set (WSJTX_VERSION_PATCH 0)
-set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions
+set (WSJTX_RC 3) # release candidate number, comment out or zero for development versions
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 3c75865..573b98e 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -4020,21 +4020,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
return;
}
- if(m_bFastMode or m_mode=="FT8") {
- auto i1=message.string ().indexOf(" CQ ");
- if(i1>10) {
- bool ok;
- Frequency kHz {message.string ().mid (i1+4,3).toUInt (&ok)};
- if(ok && kHz >= 10 && kHz <= 999) {
- if (m_config.is_transceiver_online ()) {
- //QSY Freq for answering CQ nnn
- setRig (m_freqNominal / 1000000 * 1000000 + 1000 * kHz);
- ui->decodedTextBrowser2->displayQSY (QString {"QSY %1"}.arg (m_freqNominal / 1e6, 7, 'f', 3));
- }
- }
- }
- }
-
//Skip the rest if no decoded text extracted
int frequency = message.frequencyOffset();
if (message.isTX()) {
@@ -4047,6 +4032,20 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
return;
}
+ // check for CQ with listening frequency
+ if (parts.size () >= 7
+ && (m_bFastMode || m_mode=="FT8")
+ && "CQ" == parts[5]
+ && m_config.is_transceiver_online ()) {
+ bool ok;
+ auto kHz = parts[6].toUInt (&ok);
+ if (ok && kHz >= 10 && 3 == parts[6].size ()) {
+ // QSY Freq for answering CQ nnn
+ setRig (m_freqNominal / 1000000 * 1000000 + 1000 * kHz);
+ ui->decodedTextBrowser2->displayQSY (QString {"QSY %1"}.arg (m_freqNominal / 1e6, 7, 'f', 3));
+ }
+ }
+
int nmod = message.timeInSeconds () % (2*m_TRperiod);
m_txFirst=(nmod!=0);
ui->txFirstCheckBox->setChecked(m_txFirst);
@@ -4921,9 +4920,10 @@ void MainWindow::displayWidgets(qint64 n)
if(i==4) ui->rptSpinBox->setVisible(b);
if(i==5) ui->sbTR->setVisible(b);
if(i==6) {
- ui->sbCQTxFreq->setVisible(b);
- ui->cbCQTx->setVisible(b);
- ui->cbCQTx->setEnabled(b);
+ ui->sbCQTxFreq->setVisible (b);
+ ui->cbCQTx->setVisible (b);
+ auto is_compound = m_config.my_callsign () != m_baseCall;
+ ui->cbCQTx->setEnabled (b && (!is_compound || shortList (m_config.my_callsign ())));
}
if(i==7) ui->cbShMsgs->setVisible(b);
if(i==8) ui->cbFast9->setVisible(b);
@@ -6529,63 +6529,58 @@ void MainWindow::replyToCQ (QTime time, qint32 snr, float delta_time, quint32 de
return;
}
- if (message_text.contains (QRegularExpression {R"(^(CQ |CQDX |QRZ ))"}))
+ QString format_string {"%1 %2 %3 %4 %5 %6"};
+ auto const& time_string = time.toString ("~" == mode || "&" == mode ? "hhmmss" : "hhmm");
+ auto cqtext = format_string
+ .arg (time_string)
+ .arg (snr, 3)
+ .arg (delta_time, 4, 'f', 1)
+ .arg (delta_frequency, 4)
+ .arg (mode, -2)
+ .arg (message_text);
+ auto messages = ui->decodedTextBrowser->toPlainText ();
+ auto position = messages.lastIndexOf (cqtext);
+ if (position < 0)
{
- // a message we are willing to accept
- QString format_string {"%1 %2 %3 %4 %5 %6"};
- auto const& time_string = time.toString ("~" == mode || "&" == mode ? "hhmmss" : "hhmm");
- auto cqtext = format_string
- .arg (time_string)
- .arg (snr, 3)
- .arg (delta_time, 4, 'f', 1)
- .arg (delta_frequency, 4)
- .arg (mode, -2)
- .arg (message_text);
- auto messages = ui->decodedTextBrowser->toPlainText ();
- auto position = messages.lastIndexOf (cqtext);
- if (position < 0)
+ // try again with with -0.0 delta time
+ position = messages.lastIndexOf (format_string
+ .arg (time_string)
+ .arg (snr, 3)
+ .arg ('-' + QString::number (delta_time, 'f', 1), 4)
+ .arg (delta_frequency, 4)
+ .arg (mode, -2)
+ .arg (message_text));
+ }
+ if (position >= 0)
+ {
+ if (m_config.udpWindowToFront ())
{
- // try again with with -0.0 delta time
- position = messages.lastIndexOf (format_string
- .arg (time_string)
- .arg (snr, 3)
- .arg ('-' + QString::number (delta_time, 'f', 1), 4)
- .arg (delta_frequency, 4)
- .arg (mode, -2)
- .arg (message_text));
+ show ();
+ raise ();
+ activateWindow ();
}
- if (position >= 0)
+ if (m_config.udpWindowRestore () && isMinimized ())
{
- if (m_config.udpWindowToFront ())
- {
- show ();
- raise ();
- activateWindow ();
- }
- if (m_config.udpWindowRestore () && isMinimized ())
- {
- showNormal ();
- raise ();
- }
- // find the linefeed at the end of the line
- position = ui->decodedTextBrowser->toPlainText().indexOf(QChar::LineFeed,position);
- m_bDoubleClicked = true;
- auto start = messages.left (position).lastIndexOf (QChar::LineFeed) + 1;
- DecodedText message {messages.mid (start, position - start), ("MSK144" == m_mode || "FT8" == m_mode) &&
- ui->cbVHFcontest->isChecked(), m_config.my_grid ()};
- Qt::KeyboardModifiers kbmod {modifiers << 24};
- processMessage (message, kbmod);
- tx_watchdog (false);
- QApplication::alert (this);
- }
- else
- {
- qDebug () << "reply to CQ request ignored, decode not found:" << cqtext;
+ showNormal ();
+ raise ();
}
+ // find the linefeed at the end of the line
+ position = ui->decodedTextBrowser->toPlainText().indexOf(QChar::LineFeed,position);
+ if (message_text.contains (QRegularExpression {R"(^(CQ |CQDX |QRZ ))"})) {
+ // a message we are willing to accept and auto reply to
+ m_bDoubleClicked = true;
+ }
+ auto start = messages.left (position).lastIndexOf (QChar::LineFeed) + 1;
+ DecodedText message {messages.mid (start, position - start), ("MSK144" == m_mode || "FT8" == m_mode) &&
+ ui->cbVHFcontest->isChecked(), m_config.my_grid ()};
+ Qt::KeyboardModifiers kbmod {modifiers << 24};
+ processMessage (message, kbmod);
+ tx_watchdog (false);
+ QApplication::alert (this);
}
else
{
- qDebug () << "rejecting UDP request to reply as decode is not a CQ or QRZ";
+ qDebug () << "process reply message ignored, decode not found:" << cqtext;
}
}
diff --git a/mainwindow.ui b/mainwindow.ui
index 735b382..a4e4bb7 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -792,7 +792,7 @@ QLabel[oob="true"] {
false
- <html><head/><body><p>Check this to call CQ on the "Tx CQ" frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.</p></body></html>
+ <html><head/><body><p>Check this to call CQ on the "Tx CQ" frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.</p><p>Not available to type 2 compound callsign holders.</p></body></html>