Fixed #160: HB ACKs not stopped during QSO with the new checkmark setting

This commit is contained in:
Jordan Sherer 2019-03-27 11:42:43 -04:00
parent 6e036b7d58
commit d1ccbc599b

View File

@ -7062,8 +7062,17 @@ void MainWindow::buildFrequencyMenu(QMenu *menu){
} }
void MainWindow::buildHeartbeatMenu(QMenu *menu){ void MainWindow::buildHeartbeatMenu(QMenu *menu){
auto autoAckHB = menu->addAction(ui->autoReplyButton->isChecked() ? "Send Heartbeat Acknowledgments (ACK)" : "Send Heartbeat Acknowledgments (ACK) (AUTO disabled)"); auto selectedCallsign = callsignSelected();
autoAckHB->setEnabled(ui->autoReplyButton->isChecked()); 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->setCheckable(true);
autoAckHB->setChecked(m_hbAutoAck); autoAckHB->setChecked(m_hbAutoAck);
connect(autoAckHB, &QAction::triggered, this, [this, autoAckHB](){ 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 // TODO: jsherer - move this to a generic "callsign changed" signal
if(m_config.heartbeat_qso_pause()){ 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) // 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()){ if(ui->hbMacroButton->isChecked()){
ui->hbMacroButton->setChecked(false); ui->hbMacroButton->setChecked(false);
@ -9187,7 +9198,8 @@ void MainWindow::updateButtonDisplay(){
} }
void MainWindow::updateRepeatButtonDisplay(){ 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()){ if(ui->hbMacroButton->isChecked() && m_hbInterval > 0 && m_nextHeartbeat.isValid()){
auto secs = DriftingDateTime::currentDateTimeUtc().secsTo(m_nextHeartbeat); auto secs = DriftingDateTime::currentDateTimeUtc().secsTo(m_nextHeartbeat);
if(secs > 0){ if(secs > 0){
@ -9913,6 +9925,7 @@ void MainWindow::processCommandActivity() {
while (!m_rxCommandQueue.isEmpty()) { while (!m_rxCommandQueue.isEmpty()) {
auto d = m_rxCommandQueue.dequeue(); auto d = m_rxCommandQueue.dequeue();
auto selectedCallsign = callsignSelected();
bool isAllCall = isAllCallIncluded(d.to); bool isAllCall = isAllCallIncluded(d.to);
bool isGroupCall = isGroupCallIncluded(d.to); bool isGroupCall = isGroupCallIncluded(d.to);
@ -10338,8 +10351,8 @@ void MainWindow::processCommandActivity() {
} }
// PROCESS ACTIVE HEARTBEAT // PROCESS ACTIVE HEARTBEAT
// if we have auto reply enabled and we are heartbeating and selcall is not enabled // 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){ 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 // check to see if we have a message for a station who is heartbeating
QString extra; QString extra;
@ -10575,6 +10588,7 @@ void MainWindow::processCommandActivity() {
continue; continue;
} }
// TODO: jsherer - HB issue here
// do not queue a reply if it's a HB and HB is not active // 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")){ if((!ui->hbMacroButton->isChecked() || m_hbInterval <= 0) && d.cmd.contains("HB")){
continue; continue;