mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-16 00:51:56 -05:00
ee2badb86f
The UDP decode and reply message have been augmented with a boolean flag denoting a low confidence decode when set. Existing clients can safely use the reply message without passing the flag as the default value will still action messages that have high confidence. If low confidence decodes are to be passed back via the reply message then the low confidence flag must be included and correctly set to match the original decode. See NetworkMessage.hpp for message fields and meanings. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7957 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
142 lines
4.8 KiB
C++
142 lines
4.8 KiB
C++
#include "DecodesModel.hpp"
|
|
|
|
#include <QStandardItem>
|
|
#include <QModelIndex>
|
|
#include <QTime>
|
|
#include <QString>
|
|
#include <QFont>
|
|
#include <QList>
|
|
|
|
namespace
|
|
{
|
|
char const * const headings[] = {
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "Client"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "Time"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "Snr"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "DT"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "DF"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "Md"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "Message"),
|
|
QT_TRANSLATE_NOOP ("DecodesModel", "Confidence"),
|
|
};
|
|
|
|
QString confidence_string (bool low_confidence)
|
|
{
|
|
return low_confidence ? QT_TRANSLATE_NOOP ("DecodesModel", "low") : QT_TRANSLATE_NOOP ("DecodesModel", "high");
|
|
}
|
|
|
|
QFont text_font {"Courier", 10};
|
|
|
|
QList<QStandardItem *> make_row (QString const& client_id, QTime time, qint32 snr, float delta_time
|
|
, quint32 delta_frequency, QString const& mode, QString const& message
|
|
, bool low_confidence, bool is_fast)
|
|
{
|
|
auto time_item = new QStandardItem {time.toString (is_fast || "~" == mode ? "hh:mm:ss" : "hh:mm")};
|
|
time_item->setData (time);
|
|
time_item->setTextAlignment (Qt::AlignRight);
|
|
|
|
auto snr_item = new QStandardItem {QString::number (snr)};
|
|
snr_item->setData (snr);
|
|
snr_item->setTextAlignment (Qt::AlignRight);
|
|
|
|
auto dt = new QStandardItem {QString::number (delta_time)};
|
|
dt->setData (delta_time);
|
|
dt->setTextAlignment (Qt::AlignRight);
|
|
|
|
auto df = new QStandardItem {QString::number (delta_frequency)};
|
|
df->setData (delta_frequency);
|
|
df->setTextAlignment (Qt::AlignRight);
|
|
|
|
auto md = new QStandardItem {mode};
|
|
md->setTextAlignment (Qt::AlignHCenter);
|
|
|
|
auto confidence = new QStandardItem {confidence_string (low_confidence)};
|
|
confidence->setTextAlignment (Qt::AlignHCenter);
|
|
|
|
QList<QStandardItem *> row {
|
|
new QStandardItem {client_id}, time_item, snr_item, dt, df, md, new QStandardItem {message}, confidence};
|
|
Q_FOREACH (auto& item, row)
|
|
{
|
|
item->setEditable (false);
|
|
item->setFont (text_font);
|
|
item->setTextAlignment (item->textAlignment () | Qt::AlignVCenter);
|
|
}
|
|
return row;
|
|
}
|
|
}
|
|
|
|
DecodesModel::DecodesModel (QObject * parent)
|
|
: QStandardItemModel {0, sizeof (headings) / sizeof (headings[0]), parent}
|
|
{
|
|
int column {0};
|
|
for (auto const& heading : headings)
|
|
{
|
|
setHeaderData (column++, Qt::Horizontal, tr (heading));
|
|
}
|
|
}
|
|
|
|
void DecodesModel::add_decode (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time
|
|
, quint32 delta_frequency, QString const& mode, QString const& message
|
|
, bool low_confidence, bool is_fast)
|
|
{
|
|
if (!is_new)
|
|
{
|
|
int target_row {-1};
|
|
for (auto row = 0; row < rowCount (); ++row)
|
|
{
|
|
if (data (index (row, 0)).toString () == client_id)
|
|
{
|
|
auto row_time = item (row, 1)->data ().toTime ();
|
|
if (row_time == time
|
|
&& item (row, 2)->data ().toInt () == snr
|
|
&& item (row, 3)->data ().toFloat () == delta_time
|
|
&& item (row, 4)->data ().toUInt () == delta_frequency
|
|
&& data (index (row, 5)).toString () == mode
|
|
&& data (index (row, 6)).toString () == message
|
|
&& data (index (row, 7)).toString () == confidence_string (low_confidence))
|
|
{
|
|
return;
|
|
}
|
|
if (time <= row_time)
|
|
{
|
|
target_row = row; // last row with same time
|
|
}
|
|
}
|
|
}
|
|
if (target_row >= 0)
|
|
{
|
|
insertRow (target_row + 1, make_row (client_id, time, snr, delta_time, delta_frequency, mode
|
|
, message, low_confidence, is_fast));
|
|
return;
|
|
}
|
|
}
|
|
|
|
appendRow (make_row (client_id, time, snr, delta_time, delta_frequency, mode, message, low_confidence, is_fast));
|
|
}
|
|
|
|
void DecodesModel::clear_decodes (QString const& client_id)
|
|
{
|
|
for (auto row = rowCount () - 1; row >= 0; --row)
|
|
{
|
|
if (data (index (row, 0)).toString () == client_id)
|
|
{
|
|
removeRow (row);
|
|
}
|
|
}
|
|
}
|
|
|
|
void DecodesModel::do_reply (QModelIndex const& source)
|
|
{
|
|
auto row = source.row ();
|
|
Q_EMIT reply (data (index (row, 0)).toString ()
|
|
, item (row, 1)->data ().toTime ()
|
|
, item (row, 2)->data ().toInt ()
|
|
, item (row, 3)->data ().toFloat ()
|
|
, item (row, 4)->data ().toInt ()
|
|
, data (index (row, 5)).toString ()
|
|
, data (index (row, 6)).toString ()
|
|
, confidence_string (true) == data (index (row, 7)).toString ());
|
|
}
|
|
|
|
#include "moc_DecodesModel.cpp"
|