Time drift columns and show column labels

This commit is contained in:
Jordan Sherer 2018-10-28 17:54:10 -04:00
parent 9f7fd2e7e2
commit 4321bd5e75
3 changed files with 66 additions and 13 deletions

View File

@ -3611,6 +3611,7 @@ void MainWindow::readFromStdout() //readFromStdout
d.utcTimestamp = DriftingDateTime::currentDateTimeUtc(); d.utcTimestamp = DriftingDateTime::currentDateTimeUtc();
d.snr = decodedtext.snr(); d.snr = decodedtext.snr();
d.isBuffered = false; d.isBuffered = false;
d.tdrift = decodedtext.dt();
// if we have any "first" frame, and a buffer is already established, clear it... // if we have any "first" frame, and a buffer is already established, clear it...
int prevBufferOffset = -1; int prevBufferOffset = -1;
@ -3646,6 +3647,7 @@ void MainWindow::readFromStdout() //readFromStdout
cd.freq = decodedtext.frequencyOffset(); cd.freq = decodedtext.frequencyOffset();
cd.utcTimestamp = DriftingDateTime::currentDateTimeUtc(); cd.utcTimestamp = DriftingDateTime::currentDateTimeUtc();
cd.bits = decodedtext.bits(); cd.bits = decodedtext.bits();
cd.tdrift = decodedtext.dt();
// Only respond to HEARTBEATS...remember that CQ messages are "Alt" pings // Only respond to HEARTBEATS...remember that CQ messages are "Alt" pings
if(decodedtext.isHeartbeat()){ if(decodedtext.isHeartbeat()){
@ -3692,6 +3694,7 @@ void MainWindow::readFromStdout() //readFromStdout
cmd.utcTimestamp = DriftingDateTime::currentDateTimeUtc(); cmd.utcTimestamp = DriftingDateTime::currentDateTimeUtc();
cmd.bits = decodedtext.bits(); cmd.bits = decodedtext.bits();
cmd.extra = parts.length() > 2 ? parts.mid(3).join(" ") : ""; cmd.extra = parts.length() > 2 ? parts.mid(3).join(" ") : "";
cmd.tdrift = decodedtext.dt();
// if the command is a buffered command and its not the last frame OR we have from or to in a separate message (compound call) // if the command is a buffered command and its not the last frame OR we have from or to in a separate message (compound call)
if((Varicode::isCommandBuffered(cmd.cmd) && (cmd.bits & Varicode::JS8CallLast) != Varicode::JS8CallLast) || cmd.from == "<....>" || cmd.to == "<....>"){ if((Varicode::isCommandBuffered(cmd.cmd) && (cmd.bits & Varicode::JS8CallLast) != Varicode::JS8CallLast) || cmd.from == "<....>" || cmd.to == "<....>"){
@ -4104,7 +4107,7 @@ void MainWindow::guiUpdate()
// TODO: stop // TODO: stop
if(msgLength==0 and !m_tune) on_stopTxButton_clicked(); if(msgLength==0 and !m_tune) on_stopTxButton_clicked();
float lateThreshold=(12.6/4.0)/15.0; //0.75; float lateThreshold=((12.6/4.0)-0.5)/15.0; //0.75;
if(g_iptt==0 and ((m_bTxTime and fTR<lateThreshold and msgLength>0) or m_tune)) { if(g_iptt==0 and ((m_bTxTime and fTR<lateThreshold and msgLength>0) or m_tune)) {
//### Allow late starts //### Allow late starts
icw[0]=m_ncw; icw[0]=m_ncw;
@ -6329,6 +6332,7 @@ void MainWindow::buildShowColumnsMenu(QMenu *menu, QString tableKey){
{"Frequency Offset", "offset"}, {"Frequency Offset", "offset"},
{"Last heard timestamp", "timestamp"}, {"Last heard timestamp", "timestamp"},
{"SNR", "snr"}, {"SNR", "snr"},
{"Time delta", "tdrift"},
}; };
if(tableKey == "call"){ if(tableKey == "call"){
@ -6339,6 +6343,9 @@ void MainWindow::buildShowColumnsMenu(QMenu *menu, QString tableKey){
}); });
} }
columnKeys.prepend({"Show Column Labels", "labels"});
bool first = true;
foreach(auto p, columnKeys){ foreach(auto p, columnKeys){
auto columnLabel = p.first; auto columnLabel = p.first;
auto columnKey = p.second; auto columnKey = p.second;
@ -6350,6 +6357,11 @@ void MainWindow::buildShowColumnsMenu(QMenu *menu, QString tableKey){
connect(a, &QAction::triggered, this, [this, a, tableKey, columnKey](){ connect(a, &QAction::triggered, this, [this, a, tableKey, columnKey](){
setShowColumn(tableKey, columnKey, a->isChecked()); setShowColumn(tableKey, columnKey, a->isChecked());
}); });
if(first){
menu->addSeparator();
first = false;
}
} }
} }
@ -9204,6 +9216,7 @@ void MainWindow::displayBandActivity() {
QStringList text; QStringList text;
QString age; QString age;
int snr = 0; int snr = 0;
float tdrift = 0;
int activityAging = m_config.activity_aging(); int activityAging = m_config.activity_aging();
foreach(ActivityDetail item, items) { foreach(ActivityDetail item, items) {
@ -9233,6 +9246,7 @@ void MainWindow::displayBandActivity() {
text.append(item.text); text.append(item.text);
snr = item.snr; snr = item.snr;
age = since(item.utcTimestamp); age = since(item.utcTimestamp);
tdrift = item.tdrift;
} }
auto joined = text.join(""); auto joined = text.join("");
@ -9242,18 +9256,23 @@ void MainWindow::displayBandActivity() {
ui->tableWidgetRXAll->insertRow(ui->tableWidgetRXAll->rowCount()); ui->tableWidgetRXAll->insertRow(ui->tableWidgetRXAll->rowCount());
int row = ui->tableWidgetRXAll->rowCount() - 1; int row = ui->tableWidgetRXAll->rowCount() - 1;
int col = 0;
auto offsetItem = new QTableWidgetItem(QString("%1").arg(offset)); auto offsetItem = new QTableWidgetItem(QString("%1").arg(offset));
offsetItem->setData(Qt::UserRole, QVariant(offset)); offsetItem->setData(Qt::UserRole, QVariant(offset));
ui->tableWidgetRXAll->setItem(row, 0, offsetItem); ui->tableWidgetRXAll->setItem(row, col++, offsetItem);
auto ageItem = new QTableWidgetItem(QString("(%1)").arg(age)); auto ageItem = new QTableWidgetItem(QString("(%1)").arg(age));
ageItem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter); ageItem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
ui->tableWidgetRXAll->setItem(row, 1, ageItem); ui->tableWidgetRXAll->setItem(row, col++, ageItem);
auto snrItem = new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(snr))); auto snrItem = new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(snr)));
snrItem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter); snrItem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
ui->tableWidgetRXAll->setItem(row, 2, snrItem); ui->tableWidgetRXAll->setItem(row, col++, snrItem);
auto tdriftItem = new QTableWidgetItem(QString::number(tdrift, 'f', 2));
tdriftItem->setData(Qt::UserRole, QVariant(tdrift));
ui->tableWidgetRXAll->setItem(row, col++, tdriftItem);
// align right if eliding... // align right if eliding...
int colWidth = ui->tableWidgetRXAll->columnWidth(3); int colWidth = ui->tableWidgetRXAll->columnWidth(3);
@ -9272,6 +9291,7 @@ void MainWindow::displayBandActivity() {
text.last().contains(QRegularExpression {"\\b(CQCQCQ|CQ)\\b"}) text.last().contains(QRegularExpression {"\\b(CQCQCQ|CQ)\\b"})
){ ){
offsetItem->setBackground(QBrush(m_config.color_CQ())); offsetItem->setBackground(QBrush(m_config.color_CQ()));
tdriftItem->setBackground(QBrush(m_config.color_CQ()));
ageItem->setBackground(QBrush(m_config.color_CQ())); ageItem->setBackground(QBrush(m_config.color_CQ()));
snrItem->setBackground(QBrush(m_config.color_CQ())); snrItem->setBackground(QBrush(m_config.color_CQ()));
textItem->setBackground(QBrush(m_config.color_CQ())); textItem->setBackground(QBrush(m_config.color_CQ()));
@ -9285,12 +9305,13 @@ void MainWindow::displayBandActivity() {
(text.last().contains(Radio::base_callsign(m_config.my_callsign()))) (text.last().contains(Radio::base_callsign(m_config.my_callsign())))
) { ) {
offsetItem->setBackground(QBrush(m_config.color_MyCall())); offsetItem->setBackground(QBrush(m_config.color_MyCall()));
tdriftItem->setBackground(QBrush(m_config.color_MyCall()));
ageItem->setBackground(QBrush(m_config.color_MyCall())); ageItem->setBackground(QBrush(m_config.color_MyCall()));
snrItem->setBackground(QBrush(m_config.color_MyCall())); snrItem->setBackground(QBrush(m_config.color_MyCall()));
textItem->setBackground(QBrush(m_config.color_MyCall())); textItem->setBackground(QBrush(m_config.color_MyCall()));
} }
ui->tableWidgetRXAll->setItem(row, 3, textItem); ui->tableWidgetRXAll->setItem(row, col++, textItem);
if (isOffsetSelected) { if (isOffsetSelected) {
for(int i = 0; i < ui->tableWidgetRXAll->columnCount(); i++){ for(int i = 0; i < ui->tableWidgetRXAll->columnCount(); i++){
@ -9317,15 +9338,20 @@ void MainWindow::displayBandActivity() {
} }
} }
// Column labels
ui->tableWidgetRXAll->horizontalHeader()->setVisible(showColumn("band", "labels"));
// Hide columns // Hide columns
ui->tableWidgetRXAll->setColumnHidden(0, !showColumn("band", "offset")); ui->tableWidgetRXAll->setColumnHidden(0, !showColumn("band", "offset"));
ui->tableWidgetRXAll->setColumnHidden(1, !showColumn("band", "timestamp")); ui->tableWidgetRXAll->setColumnHidden(1, !showColumn("band", "timestamp"));
ui->tableWidgetRXAll->setColumnHidden(2, !showColumn("band", "snr")); ui->tableWidgetRXAll->setColumnHidden(2, !showColumn("band", "snr"));
ui->tableWidgetRXAll->setColumnHidden(3, !showColumn("band", "tdrift"));
// Resize the table columns // Resize the table columns
ui->tableWidgetRXAll->resizeColumnToContents(0); ui->tableWidgetRXAll->resizeColumnToContents(0);
ui->tableWidgetRXAll->resizeColumnToContents(1); ui->tableWidgetRXAll->resizeColumnToContents(1);
ui->tableWidgetRXAll->resizeColumnToContents(2); ui->tableWidgetRXAll->resizeColumnToContents(2);
ui->tableWidgetRXAll->resizeColumnToContents(3);
// Reset the scroll position // Reset the scroll position
ui->tableWidgetRXAll->verticalScrollBar()->setValue(currentScrollPos); ui->tableWidgetRXAll->verticalScrollBar()->setValue(currentScrollPos);
@ -9441,6 +9467,7 @@ void MainWindow::displayCallActivity() {
ui->tableWidgetCalls->insertRow(ui->tableWidgetCalls->rowCount()); ui->tableWidgetCalls->insertRow(ui->tableWidgetCalls->rowCount());
int row = ui->tableWidgetCalls->rowCount() - 1; int row = ui->tableWidgetCalls->rowCount() - 1;
int col = 0;
#if SHOW_THROUGH_CALLS #if SHOW_THROUGH_CALLS
QString displayCall = d.through.isEmpty() ? d.call : QString("%1>%2").arg(d.through).arg(d.call); QString displayCall = d.through.isEmpty() ? d.call : QString("%1>%2").arg(d.through).arg(d.call);
@ -9449,17 +9476,19 @@ void MainWindow::displayCallActivity() {
#endif #endif
auto displayItem = new QTableWidgetItem(displayCall); auto displayItem = new QTableWidgetItem(displayCall);
displayItem->setData(Qt::UserRole, QVariant((d.call))); displayItem->setData(Qt::UserRole, QVariant((d.call)));
ui->tableWidgetCalls->setItem(row, 0, displayItem); ui->tableWidgetCalls->setItem(row, col++, displayItem);
ui->tableWidgetCalls->setItem(row, 1, new QTableWidgetItem(QString("(%1)").arg(since(d.utcTimestamp)))); ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("(%1)").arg(since(d.utcTimestamp))));
ui->tableWidgetCalls->setItem(row, 2, new QTableWidgetItem(QString("%1").arg(d.freq))); ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(d.snr))));
ui->tableWidgetCalls->setItem(row, 3, new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(d.snr)))); ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("%1").arg(d.freq)));
ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString::number(d.tdrift, 'f', 2)));
auto gridItem = new QTableWidgetItem(QString("%1").arg(d.grid.trimmed().left(4))); auto gridItem = new QTableWidgetItem(QString("%1").arg(d.grid.trimmed().left(4)));
gridItem->setToolTip(d.grid.trimmed()); gridItem->setToolTip(d.grid.trimmed());
ui->tableWidgetCalls->setItem(row, 4, gridItem); ui->tableWidgetCalls->setItem(row, col++, gridItem);
auto distanceItem = new QTableWidgetItem(calculateDistance(d.grid)); auto distanceItem = new QTableWidgetItem(calculateDistance(d.grid));
distanceItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); distanceItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 5, distanceItem); ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, col++, distanceItem);
if (isCallSelected) { if (isCallSelected) {
for(int i = 0; i < ui->tableWidgetCalls->columnCount(); i++){ for(int i = 0; i < ui->tableWidgetCalls->columnCount(); i++){
@ -9485,13 +9514,17 @@ void MainWindow::displayCallActivity() {
} }
} }
// Column labels
ui->tableWidgetCalls->horizontalHeader()->setVisible(showColumn("call", "labels"));
// Hide columns // Hide columns
ui->tableWidgetCalls->setColumnHidden(0, !showColumn("call", "callsign")); ui->tableWidgetCalls->setColumnHidden(0, !showColumn("call", "callsign"));
ui->tableWidgetCalls->setColumnHidden(1, !showColumn("call", "timestamp")); ui->tableWidgetCalls->setColumnHidden(1, !showColumn("call", "timestamp"));
ui->tableWidgetCalls->setColumnHidden(2, !showColumn("call", "offset")); ui->tableWidgetCalls->setColumnHidden(2, !showColumn("call", "offset"));
ui->tableWidgetCalls->setColumnHidden(3, !showColumn("call", "snr")); ui->tableWidgetCalls->setColumnHidden(3, !showColumn("call", "snr"));
ui->tableWidgetCalls->setColumnHidden(4, !showColumn("call", "grid")); ui->tableWidgetCalls->setColumnHidden(4, !showColumn("call", "tdrift"));
ui->tableWidgetCalls->setColumnHidden(5, !showColumn("call", "distance")); ui->tableWidgetCalls->setColumnHidden(5, !showColumn("call", "grid"));
ui->tableWidgetCalls->setColumnHidden(6, !showColumn("call", "distance"));
// Resize the table columns // Resize the table columns
ui->tableWidgetCalls->resizeColumnToContents(0); ui->tableWidgetCalls->resizeColumnToContents(0);
@ -9499,6 +9532,7 @@ void MainWindow::displayCallActivity() {
ui->tableWidgetCalls->resizeColumnToContents(2); ui->tableWidgetCalls->resizeColumnToContents(2);
ui->tableWidgetCalls->resizeColumnToContents(3); ui->tableWidgetCalls->resizeColumnToContents(3);
ui->tableWidgetCalls->resizeColumnToContents(4); ui->tableWidgetCalls->resizeColumnToContents(4);
ui->tableWidgetCalls->resizeColumnToContents(5);
// Reset the scroll position // Reset the scroll position
ui->tableWidgetCalls->verticalScrollBar()->setValue(currentScrollPos); ui->tableWidgetCalls->verticalScrollBar()->setValue(currentScrollPos);

View File

@ -688,6 +688,7 @@ private:
QDateTime utcTimestamp; QDateTime utcTimestamp;
int snr; int snr;
int bits; int bits;
float tdrift;
}; };
struct CommandDetail struct CommandDetail
@ -704,6 +705,7 @@ private:
QString grid; QString grid;
QString text; QString text;
QString extra; QString extra;
float tdrift;
}; };
struct ActivityDetail struct ActivityDetail
@ -719,6 +721,7 @@ private:
QDateTime utcTimestamp; QDateTime utcTimestamp;
int snr; int snr;
bool shouldDisplay; bool shouldDisplay;
float tdrift;
}; };
struct MessageBuffer { struct MessageBuffer {

View File

@ -1248,6 +1248,9 @@ background-color: #00ff00;
<attribute name="horizontalHeaderDefaultSectionSize"> <attribute name="horizontalHeaderDefaultSectionSize">
<number>30</number> <number>30</number>
</attribute> </attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize"> <attribute name="horizontalHeaderMinimumSectionSize">
<number>20</number> <number>20</number>
</attribute> </attribute>
@ -1272,6 +1275,11 @@ background-color: #00ff00;
<string>SNR</string> <string>SNR</string>
</property> </property>
</column> </column>
<column>
<property name="text">
<string>Time Drift</string>
</property>
</column>
<column> <column>
<property name="text"> <property name="text">
<string>Text</string> <string>Text</string>
@ -1395,6 +1403,9 @@ QTextEdit[transmitting=&quot;true&quot;] {
<attribute name="horizontalHeaderDefaultSectionSize"> <attribute name="horizontalHeaderDefaultSectionSize">
<number>30</number> <number>30</number>
</attribute> </attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize"> <attribute name="horizontalHeaderMinimumSectionSize">
<number>20</number> <number>20</number>
</attribute> </attribute>
@ -1424,6 +1435,11 @@ QTextEdit[transmitting=&quot;true&quot;] {
<string>SNR</string> <string>SNR</string>
</property> </property>
</column> </column>
<column>
<property name="text">
<string>Time Drift</string>
</property>
</column>
<column> <column>
<property name="text"> <property name="text">
<string>Grid</string> <string>Grid</string>