From d1ccbc599b0d14ef423cc1ad44810a26b9a8df2b Mon Sep 17 00:00:00 2001 From: Jordan Sherer Date: Wed, 27 Mar 2019 11:42:43 -0400 Subject: [PATCH] Fixed #160: HB ACKs not stopped during QSO with the new checkmark setting --- mainwindow.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 23c6d05..7a55f5a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -7062,8 +7062,17 @@ void MainWindow::buildFrequencyMenu(QMenu *menu){ } void MainWindow::buildHeartbeatMenu(QMenu *menu){ - auto autoAckHB = menu->addAction(ui->autoReplyButton->isChecked() ? "Send Heartbeat Acknowledgments (ACK)" : "Send Heartbeat Acknowledgments (ACK) (AUTO disabled)"); - autoAckHB->setEnabled(ui->autoReplyButton->isChecked()); + auto selectedCallsign = callsignSelected(); + bool enabled = ui->autoReplyButton->isChecked() && selectedCallsign.isEmpty(); + auto text = "Send Heartbeat Acknowledgments (ACK)"; + if(!ui->autoReplyButton->isChecked()){ + text = "Send Heartbeat Acknowledgments (ACK) (AUTO disabled)"; + } + if(!selectedCallsign.isEmpty()){ + text = "Send Heartbeat Acknowledgments (ACK) (Currently in QSO)"; + } + auto autoAckHB = menu->addAction(text); + autoAckHB->setEnabled(enabled); autoAckHB->setCheckable(true); autoAckHB->setChecked(m_hbAutoAck); connect(autoAckHB, &QAction::triggered, this, [this, autoAckHB](){ @@ -8087,6 +8096,8 @@ void MainWindow::on_tableWidgetRXAll_selectionChanged(const QItemSelection &/*se // TODO: jsherer - move this to a generic "callsign changed" signal if(m_config.heartbeat_qso_pause()){ + + // TODO: jsherer - HB issue // don't hb if we select a callsign... (but we should keep track so if we deselect, we restore our hb) if(ui->hbMacroButton->isChecked()){ ui->hbMacroButton->setChecked(false); @@ -9187,7 +9198,8 @@ void MainWindow::updateButtonDisplay(){ } void MainWindow::updateRepeatButtonDisplay(){ - auto hbBase = m_hbAutoAck && ui->autoReplyButton->isChecked() ? "HB + ACK" : "HB"; + auto selectedCallsign = callsignSelected(); + auto hbBase = m_hbAutoAck && ui->autoReplyButton->isChecked() && selectedCallsign.isEmpty() ? "HB + ACK" : "HB"; if(ui->hbMacroButton->isChecked() && m_hbInterval > 0 && m_nextHeartbeat.isValid()){ auto secs = DriftingDateTime::currentDateTimeUtc().secsTo(m_nextHeartbeat); if(secs > 0){ @@ -9913,6 +9925,7 @@ void MainWindow::processCommandActivity() { while (!m_rxCommandQueue.isEmpty()) { auto d = m_rxCommandQueue.dequeue(); + auto selectedCallsign = callsignSelected(); bool isAllCall = isAllCallIncluded(d.to); bool isGroupCall = isGroupCallIncluded(d.to); @@ -10338,8 +10351,8 @@ void MainWindow::processCommandActivity() { } // PROCESS ACTIVE HEARTBEAT - // if we have auto reply enabled and we are heartbeating and selcall is not enabled - else if (d.cmd == " HB" && ui->autoReplyButton->isChecked() && m_hbAutoAck){ + // if we have auto reply enabled and auto ack enabled and no callsign is selected + else if (d.cmd == " HB" && ui->autoReplyButton->isChecked() && m_hbAutoAck && selectedCallsign.isEmpty()){ // check to see if we have a message for a station who is heartbeating QString extra; @@ -10575,6 +10588,7 @@ void MainWindow::processCommandActivity() { continue; } + // TODO: jsherer - HB issue here // do not queue a reply if it's a HB and HB is not active if((!ui->hbMacroButton->isChecked() || m_hbInterval <= 0) && d.cmd.contains("HB")){ continue;