Merge branch 'develop' into feat-wspr-user-hardware

This commit is contained in:
Bill Somerville 2020-06-27 00:40:04 +01:00
commit 4ee9ba6dba
No known key found for this signature in database
GPG Key ID: D864B06D1E81618F
16 changed files with 159 additions and 29 deletions

View File

@ -568,7 +568,7 @@ void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QStr
, QString const& comments, QString const& name, QDateTime time_on
, QString const& operator_call, QString const& my_call
, QString const& my_grid, QString const& exchange_sent
, QString const& exchange_rcvd)
, QString const& exchange_rcvd, QString const& propmode)
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
@ -577,8 +577,8 @@ void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QStr
out << time_off << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 ()
<< report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 ()
<< name.toUtf8 () << time_on << operator_call.toUtf8 () << my_call.toUtf8 () << my_grid.toUtf8 ()
<< exchange_sent.toUtf8 () << exchange_rcvd.toUtf8 ();
TRACE_UDP ("time off:" << time_off << "DX:" << dx_call << "DX grid:" << dx_grid << "dial:" << dial_frequency << "mode:" << mode << "sent:" << report_sent << "rcvd:" << report_received << "pwr:" << tx_power << "comments:" << comments << "name:" << name << "time on:" << time_on << "op:" << operator_call << "DE:" << my_call << "DE grid:" << my_grid << "exch sent:" << exchange_sent << "exch rcvd:" << exchange_rcvd);
<< exchange_sent.toUtf8 () << exchange_rcvd.toUtf8 () << propmode.toUtf8 ();
TRACE_UDP ("time off:" << time_off << "DX:" << dx_call << "DX grid:" << dx_grid << "dial:" << dial_frequency << "mode:" << mode << "sent:" << report_sent << "rcvd:" << report_received << "pwr:" << tx_power << "comments:" << comments << "name:" << name << "time on:" << time_on << "op:" << operator_call << "DE:" << my_call << "DE grid:" << my_grid << "exch sent:" << exchange_sent << "exch rcvd:" << exchange_rcvd << "prop_mode:" << propmode);
m_->send_message (out, message);
}
}

View File

@ -69,7 +69,8 @@ public:
, QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd);
, QString const& exchange_sent, QString const& exchange_rcvd
, QString const& propmode);
// ADIF_record argument should be valid ADIF excluding any <EOR> end
// of record marker

View File

@ -308,6 +308,7 @@
* My grid utf8
* Exchange sent utf8
* Exchange received utf8
* ADIF Propagation mode utf8
*
* The QSO logged message is sent to the server(s) when the
* WSJT-X user accepts the "Log QSO" dialog by clicking the "OK"

View File

@ -25,8 +25,9 @@ namespace
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Operator"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Call"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Grid"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exchange Sent"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exchange Rcvd"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exch Sent"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exch Rcvd"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Prop"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Comments"),
};
}
@ -212,7 +213,8 @@ void MessageAggregatorMainWindow::log_qso (QString const& /*id*/, QDateTime time
, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd)
, QString const& exchange_sent, QString const& exchange_rcvd
, QString const& prop_mode)
{
QList<QStandardItem *> row;
row << new QStandardItem {time_on.toString ("dd-MMM-yyyy hh:mm:ss")}
@ -230,6 +232,7 @@ void MessageAggregatorMainWindow::log_qso (QString const& /*id*/, QDateTime time
<< new QStandardItem {my_grid}
<< new QStandardItem {exchange_sent}
<< new QStandardItem {exchange_rcvd}
<< new QStandardItem {prop_mode}
<< new QStandardItem {comments};
log_->appendRow (row);
log_table_view_->resizeColumnsToContents ();

View File

@ -33,7 +33,7 @@ public:
, QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd);
, QString const& exchange_sent, QString const& exchange_rcvd, QString const& prop_mode);
private:
void add_client (QString const& id, QString const& version, QString const& revision);

View File

@ -345,9 +345,10 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s
QByteArray my_grid;
QByteArray exchange_sent;
QByteArray exchange_rcvd;
QByteArray prop_mode;
in >> time_off >> dx_call >> dx_grid >> dial_frequency >> mode >> report_sent >> report_received
>> tx_power >> comments >> name >> time_on >> operator_call >> my_call >> my_grid
>> exchange_sent >> exchange_rcvd;
>> exchange_sent >> exchange_rcvd >> prop_mode;
if (check_status (in) != Fail)
{
Q_EMIT self_->qso_logged (id, time_off, QString::fromUtf8 (dx_call), QString::fromUtf8 (dx_grid)
@ -356,7 +357,7 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s
, QString::fromUtf8 (comments), QString::fromUtf8 (name), time_on
, QString::fromUtf8 (operator_call), QString::fromUtf8 (my_call)
, QString::fromUtf8 (my_grid), QString::fromUtf8 (exchange_sent)
, QString::fromUtf8 (exchange_rcvd));
, QString::fromUtf8 (exchange_rcvd), QString::fromUtf8 (prop_mode));
}
}
break;

View File

@ -106,7 +106,7 @@ public:
, QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd);
, QString const& exchange_sent, QString const& exchange_rcvd, QString const& prop_mode);
Q_SIGNAL void decodes_cleared (QString const& id);
Q_SIGNAL void logged_ADIF (QString const& id, QByteArray const& ADIF);

View File

@ -102,7 +102,7 @@ public:
, QString const& report_received, QString const& tx_power
, QString const& comments, QString const& name, QDateTime time_on
, QString const& operator_call, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd)
, QString const& exchange_sent, QString const& exchange_rcvd, QString const& prop_mode)
{
if (client_id == id_)
{
@ -111,12 +111,13 @@ public:
<< "rpt_rcvd:" << report_received << "Tx_pwr:" << tx_power << "comments:" << comments
<< "name:" << name << "operator_call:" << operator_call << "my_call:" << my_call
<< "my_grid:" << my_grid << "exchange_sent:" << exchange_sent
<< "exchange_rcvd:" << exchange_rcvd;
<< "exchange_rcvd:" << exchange_rcvd << "prop_mode:" << prop_mode;
std::cout << QByteArray {80, '-'}.data () << '\n';
std::cout << tr ("%1: Logged %2 grid: %3 power: %4 sent: %5 recd: %6 freq: %7 time_off: %8 op: %9 my_call: %10 my_grid: %11")
std::cout << tr ("%1: Logged %2 grid: %3 power: %4 sent: %5 recd: %6 freq: %7 time_off: %8 op: %9 my_call: %10 my_grid: %11 exchange_sent: %12 exchange_rcvd: %13 comments: %14 prop_mode: %15")
.arg (id_).arg (dx_call).arg (dx_grid).arg (tx_power).arg (report_sent).arg (report_received)
.arg (dial_frequency).arg (time_off.toString("yyyy-MM-dd hh:mm:ss.z")).arg (operator_call)
.arg (my_call).arg (my_grid).toStdString ()
.arg (my_call).arg (my_grid).arg (exchange_sent).arg (exchange_rcvd)
.arg (comments).arg (prop_mode).toStdString ()
<< std::endl;
}
}

View File

@ -74,7 +74,7 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q
QDateTime const& dateTimeOff, QString const& band, QString const& comments,
QString const& name, QString const& strDialFreq, QString const& myCall,
QString const& myGrid, QString const& txPower, QString const& operator_call,
QString const& xSent, QString const& xRcvd)
QString const& xSent, QString const& xRcvd, QString const& propmode)
{
QString t;
t = "<call:" + QString::number(hisCall.size()) + ">" + hisCall;
@ -101,6 +101,7 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q
if(comments!="") t += " <comment:" + QString::number(comments.size()) + ">" + comments;
if(name!="") t += " <name:" + QString::number(name.size()) + ">" + name;
if(operator_call!="") t+=" <operator:" + QString::number(operator_call.size()) + ">" + operator_call;
if(propmode!="") t += " <prop_mode:" + QString::number(propmode.size()) + ">" + propmode;
if (xSent.size ())
{
auto words = xSent.split (' '

View File

@ -44,7 +44,7 @@ public:
QDateTime const& dateTimeOff, QString const& band, QString const& comments,
QString const& name, QString const& strDialFreq, QString const& myCall,
QString const& m_myGrid, QString const& m_txPower, QString const& operator_call,
QString const& xSent, QString const& xRcvd);
QString const& xSent, QString const& xRcvd, QString const& propmode);
Q_SIGNAL void finished_loading (int worked_before_record_count, QString const& error) const;

View File

@ -20,10 +20,10 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
"weak-signal Amateur Radio communication. <br /><br />"
"&copy; 2001-2020 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
"and Steve Franke, K9AN. <br /><br />"
"We gratefully acknowledge contributions from AC6SL, AE4JY, DJ0OT, <br />"
"G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL, KA9Q, KB1ZMX,<br />"
"KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ,<br />"
"VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
"We gratefully acknowledge contributions from AC6SL, AE4JY,<br />"
"DF2ET, DJ0OT, G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL,<br />"
"KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY,<br />"
"VK3ACF, VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
"WSJT-X is licensed under the terms of Version 3 <br />"
"of the GNU General Public License (GPL) <br /><br />"
"<a href=" WSJTX_STRINGIZE (PROJECT_HOMEPAGE) ">"

View File

@ -15,6 +15,37 @@
#include "ui_logqso.h"
#include "moc_logqso.cpp"
namespace
{
struct PropMode
{
char const * id_;
char const * name_;
};
constexpr PropMode prop_modes[] =
{
{"", ""}
, {"AS", QT_TRANSLATE_NOOP ("LogQSO", "Aircraft scatter")}
, {"AUE", QT_TRANSLATE_NOOP ("LogQSO", "Aurora-E")}
, {"AUR", QT_TRANSLATE_NOOP ("LogQSO", "Aurora")}
, {"BS", QT_TRANSLATE_NOOP ("LogQSO", "Back scatter")}
, {"ECH", QT_TRANSLATE_NOOP ("LogQSO", "Echolink")}
, {"EME", QT_TRANSLATE_NOOP ("LogQSO", "Earth-moon-earth")}
, {"ES", QT_TRANSLATE_NOOP ("LogQSO", "Sporadic E")}
, {"F2", QT_TRANSLATE_NOOP ("LogQSO", "F2 Reflection")}
, {"FAI", QT_TRANSLATE_NOOP ("LogQSO", "Field aligned irregularities")}
, {"INTERNET", QT_TRANSLATE_NOOP ("LogQSO", "Internet-assisted")}
, {"ION", QT_TRANSLATE_NOOP ("LogQSO", "Ionoscatter")}
, {"IRL", QT_TRANSLATE_NOOP ("LogQSO", "IRLP")}
, {"MS", QT_TRANSLATE_NOOP ("LogQSO", "Meteor scatter")}
, {"RPT", QT_TRANSLATE_NOOP ("LogQSO", "Non-satellite repeater or transponder")}
, {"RS", QT_TRANSLATE_NOOP ("LogQSO", "Rain scatter")}
, {"SAT", QT_TRANSLATE_NOOP ("LogQSO", "Satellite")}
, {"TEP", QT_TRANSLATE_NOOP ("LogQSO", "Trans-equatorial")}
, {"TR", QT_TRANSLATE_NOOP ("LogQSO", "Troposheric ducting")}
};
}
LogQSO::LogQSO(QString const& programTitle, QSettings * settings
, Configuration const * config, LogBook * log, QWidget *parent)
: QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint}
@ -25,6 +56,10 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings
{
ui->setupUi(this);
setWindowTitle(programTitle + " - Log QSO");
for (auto const& prop_mode : prop_modes)
{
ui->comboBoxPropMode->addItem (prop_mode.name_, prop_mode.id_);
}
loadSettings ();
ui->grid->setValidator (new MaidenheadLocatorValidator {this});
}
@ -39,8 +74,15 @@ void LogQSO::loadSettings ()
restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ());
ui->cbTxPower->setChecked (m_settings->value ("SaveTxPower", false).toBool ());
ui->cbComments->setChecked (m_settings->value ("SaveComments", false).toBool ());
ui->cbPropMode->setChecked (m_settings->value ("SavePropMode", false).toBool ());
m_txPower = m_settings->value ("TxPower", "").toString ();
m_comments = m_settings->value ("LogComments", "").toString();
int prop_index {0};
if (ui->cbPropMode->isChecked ())
{
prop_index = ui->comboBoxPropMode->findData (m_settings->value ("PropMode", "").toString());
}
ui->comboBoxPropMode->setCurrentIndex (prop_index);
m_settings->endGroup ();
}
@ -50,8 +92,10 @@ void LogQSO::storeSettings () const
m_settings->setValue ("geometry", saveGeometry ());
m_settings->setValue ("SaveTxPower", ui->cbTxPower->isChecked ());
m_settings->setValue ("SaveComments", ui->cbComments->isChecked ());
m_settings->setValue ("SavePropMode", ui->cbPropMode->isChecked ());
m_settings->setValue ("TxPower", m_txPower);
m_settings->setValue ("LogComments", m_comments);
m_settings->setValue ("PropMode", ui->comboBoxPropMode->currentData ());
m_settings->endGroup ();
}
@ -100,6 +144,10 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString
ui->loggedOperator->setText(m_config->opCall());
ui->exchSent->setText (xSent);
ui->exchRcvd->setText (xRcvd);
if (!ui->cbPropMode->isChecked ())
{
ui->comboBoxPropMode->setCurrentIndex (-1);
}
using SpOp = Configuration::SpecialOperatingActivity;
auto special_op = m_config->special_op_id ();
@ -178,6 +226,7 @@ void LogQSO::accept()
}
}
auto const& prop_mode = ui->comboBoxPropMode->currentData ().toString ();
//Log this QSO to file "wsjtx.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")};
if(!f.open(QIODevice::Text | QIODevice::Append)) {
@ -191,7 +240,7 @@ void LogQSO::accept()
dateTimeOff.time().toString("hh:mm:ss,") + hisCall + "," +
hisGrid + "," + strDialFreq + "," + mode +
"," + rptSent + "," + rptRcvd + "," + m_txPower +
"," + m_comments + "," + name;
"," + m_comments + "," + name + "," + prop_mode;
QTextStream out(&f);
out << logEntry <<
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
@ -220,6 +269,7 @@ void LogQSO::accept()
, m_myGrid
, xsent
, xrcvd
, prop_mode
, m_log->QSOToADIF (hisCall
, hisGrid
, mode
@ -236,7 +286,8 @@ void LogQSO::accept()
, m_txPower
, operator_call
, xsent
, xrcvd));
, xrcvd
, prop_mode));
QDialog::accept();
}

View File

@ -42,7 +42,7 @@ signals:
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd
, QByteArray const& ADIF);
, QString const& propmode, QByteArray const& ADIF);
protected:
void hideEvent (QHideEvent *);

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>377</width>
<height>287</height>
<width>440</width>
<height>322</height>
</rect>
</property>
<property name="sizePolicy">
@ -46,6 +46,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>call</cstring>
</property>
</widget>
</item>
<item>
@ -68,6 +71,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>start_date_time</cstring>
</property>
</widget>
</item>
<item>
@ -103,6 +109,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>end_date_time</cstring>
</property>
</widget>
</item>
<item>
@ -142,6 +151,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>mode</cstring>
</property>
</widget>
</item>
<item>
@ -171,6 +183,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>band</cstring>
</property>
</widget>
</item>
<item>
@ -200,6 +215,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>sent</cstring>
</property>
</widget>
</item>
<item>
@ -229,6 +247,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>rcvd</cstring>
</property>
</widget>
</item>
<item>
@ -258,6 +279,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>grid</cstring>
</property>
</widget>
</item>
<item>
@ -290,6 +314,9 @@
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buddy">
<cstring>name</cstring>
</property>
</widget>
</item>
<item>
@ -310,6 +337,9 @@
<property name="text">
<string>Tx power</string>
</property>
<property name="buddy">
<cstring>txPower</cstring>
</property>
</widget>
</item>
<item>
@ -339,6 +369,9 @@
<property name="text">
<string>Comments</string>
</property>
<property name="buddy">
<cstring>comments</cstring>
</property>
</widget>
</item>
<item>
@ -369,6 +402,9 @@
<property name="text">
<string>Operator</string>
</property>
<property name="buddy">
<cstring>loggedOperator</cstring>
</property>
</widget>
</item>
<item>
@ -403,6 +439,9 @@
<property name="text">
<string>Exch sent</string>
</property>
<property name="buddy">
<cstring>exchSent</cstring>
</property>
</widget>
</item>
<item>
@ -433,6 +472,9 @@
<property name="text">
<string>Rcvd</string>
</property>
<property name="buddy">
<cstring>exchRcvd</cstring>
</property>
</widget>
</item>
<item>
@ -447,6 +489,30 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0,0">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Prop Mode</string>
</property>
<property name="buddy">
<cstring>comboBoxPropMode</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxPropMode"/>
</item>
<item>
<widget class="QCheckBox" name="cbPropMode">
<property name="text">
<string>Retain</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
@ -486,6 +552,11 @@
<tabstop>cbTxPower</tabstop>
<tabstop>comments</tabstop>
<tabstop>cbComments</tabstop>
<tabstop>loggedOperator</tabstop>
<tabstop>exchSent</tabstop>
<tabstop>exchRcvd</tabstop>
<tabstop>comboBoxPropMode</tabstop>
<tabstop>cbPropMode</tabstop>
</tabstops>
<resources/>
<connections>

View File

@ -5722,7 +5722,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd
, QByteArray const& ADIF)
, QString const& propmode, QByteArray const& ADIF)
{
QString date = QSO_date_on.toString("yyyyMMdd");
if (!m_logBook.add (call, grid, m_config.bands()->find(dial_freq), mode, ADIF))
@ -5733,7 +5733,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
m_messageClient->qso_logged (QSO_date_off, call, grid, dial_freq, mode, rpt_sent, rpt_received
, tx_power, comments, name, QSO_date_on, operator_call, my_call, my_grid
, exchange_sent, exchange_rcvd);
, exchange_sent, exchange_rcvd, propmode);
m_messageClient->logged_ADIF (ADIF);
// Log to N1MM Logger

View File

@ -241,7 +241,7 @@ private slots:
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd
, QByteArray const& ADIF);
, QString const& propmode, QByteArray const& ADIF);
void on_bandComboBox_currentIndexChanged (int index);
void on_bandComboBox_activated (int index);
void on_readFreq_clicked();