diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d66b98788..cbca7272b 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -285,7 +285,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_idleMinutes {0}, m_nSubMode {0}, m_nclearave {1}, - m_pctx {0}, m_nseq {0}, m_nWSPRdecodes {0}, m_k0 {9999999}, @@ -311,7 +310,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_bShMsgs {false}, m_bSWL {false}, m_uploading {false}, - m_txNext {false}, m_grid6 {false}, m_tuneup {false}, m_bTxTime {false}, @@ -996,7 +994,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, } m_saveDecoded=ui->actionSave_decoded->isChecked(); m_saveAll=ui->actionSave_all->isChecked(); - ui->sbTxPercent->setValue(m_pctx); ui->TxPowerComboBox->setCurrentIndex(int(.3 * m_dBm + .2)); ui->cbUploadWSPR_Spots->setChecked(m_uploadWSPRSpots); if((m_ndepth&7)==1) ui->actionQuickDecode->setChecked(true); @@ -1019,12 +1016,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_isort=-3; m_max_dB=70; m_CQtype="CQ"; - - if(m_mode=="WSPR" and m_pctx>0) { - QPalette palette {ui->sbTxPercent->palette ()}; - palette.setColor(QPalette::Base,Qt::yellow); - ui->sbTxPercent->setPalette(palette); - } fixStop(); VHF_features_enabled(m_config.enable_VHF_features()); m_wideGraph->setVHF(m_config.enable_VHF_features()); @@ -1168,7 +1159,7 @@ void MainWindow::writeSettings() m_settings->setValue("GUItab",ui->tabWidget->currentIndex()); m_settings->setValue("OutBufSize",outBufSize); m_settings->setValue ("HoldTxFreq", ui->cbHoldTxFreq->isChecked ()); - m_settings->setValue("PctTx",m_pctx); + m_settings->setValue("PctTx", ui->sbTxPercent->value ()); m_settings->setValue("dBm",m_dBm); m_settings->setValue("RR73",m_send_RR73); m_settings->setValue ("WSPRPreferType1", ui->WSPR_prefer_type_1_check_box->isChecked ()); @@ -1259,7 +1250,8 @@ void MainWindow::readSettings() ui->TxFreqSpinBox->setValue(0); // ensure a change is signaled ui->TxFreqSpinBox->setValue(m_settings->value("TxFreq",1500).toInt()); m_ndepth=m_settings->value("NDepth",3).toInt(); - m_pctx=m_settings->value("PctTx",20).toInt(); + ui->sbTxPercent->setValue (m_settings->value ("PctTx", 20).toInt ()); + on_sbTxPercent_valueChanged (ui->sbTxPercent->value ()); m_dBm=m_settings->value("dBm",37).toInt(); m_send_RR73=m_settings->value("RR73",false).toBool(); if(m_send_RR73) { @@ -1268,7 +1260,6 @@ void MainWindow::readSettings() } ui->WSPR_prefer_type_1_check_box->setChecked (m_settings->value ("WSPRPreferType1", true).toBool ()); m_uploadWSPRSpots=m_settings->value("UploadSpots",false).toBool(); - if(!m_uploadWSPRSpots) ui->cbUploadWSPR_Spots->setStyleSheet("QCheckBox{color: #000000; background-color: yellow}"); ui->cbNoOwnCall->setChecked(m_settings->value("NoOwnCall",false).toBool()); ui->band_hopping_group_box->setChecked (m_settings->value ("BandHopping", false).toBool()); // setup initial value of tx attenuator @@ -1937,18 +1928,14 @@ void MainWindow::on_autoButton_clicked (bool checked) m_nclearave=1; echocom_.nsum=0; } - if(m_mode=="WSPR" or m_mode=="FST4W") { - QPalette palette {ui->sbTxPercent->palette ()}; - if(m_auto or m_pctx==0) { - palette.setColor(QPalette::Base,Qt::white); - } else { - palette.setColor(QPalette::Base,Qt::yellow); - } - ui->sbTxPercent->setPalette(palette); - } m_tAutoOn=QDateTime::currentMSecsSinceEpoch()/1000; } +void MainWindow::on_sbTxPercent_valueChanged (int n) +{ + update_dynamic_property (ui->sbTxPercent, "notx", !n); +} + void MainWindow::auto_tx_mode (bool state) { ui->autoButton->setChecked (state); @@ -3753,16 +3740,11 @@ void MainWindow::guiUpdate() if(m_mode=="WSPR" or m_mode=="FST4W") { if(m_nseq==0 and m_ntr==0) { //Decide whether to Tx or Rx m_tuneup=false; //This is not an ATU tuneup - if(ui->sbTxPercent->isEnabled () && m_pctx==0) m_WSPR_tx_next = false; //Don't transmit if m_pctx=0 bool btx = m_auto && m_WSPR_tx_next; // To Tx, we need m_auto and // scheduled transmit - if(m_auto and m_txNext) btx=true; //TxNext button overrides - if(m_auto && ui->sbTxPercent->isEnabled () && m_pctx==100) btx=true; //Always transmit - if(btx) { m_ntr=-1; //This says we will have transmitted - m_txNext=false; - ui->pbTxNext->setChecked(false); + ui->pbTxNext->setChecked (false); m_bTxTime=true; //Start a WSPR or FST4W Tx sequence } else { // This will be a WSPR or FST4W Rx sequence. @@ -7210,14 +7192,15 @@ void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const& { Transceiver::TransceiverState old_state {m_rigState}; //transmitDisplay (s.ptt ()); - if (s.ptt () && !m_rigState.ptt ()) { // safe to start audio + if (s.ptt () // && !m_rigState.ptt () + ) { // safe to start audio // (caveat - DX Lab Suite Commander) if (m_tx_when_ready && g_iptt) { // waiting to Tx and still needed int ms_delay=1000*m_config.txDelay(); if(m_mode=="FT4") ms_delay=20; ptt1Timer.start(ms_delay); //Start-of-transmission sequencer delay + m_tx_when_ready = false; } - m_tx_when_ready = false; } m_rigState = s; auto old_freqNominal = m_freqNominal; @@ -8104,17 +8087,18 @@ void MainWindow::uploadWSPRSpots (bool direct_post, QString const& decode_text) QString rfreq = QString("%1").arg((m_dialFreqRxWSPR + 1500) / 1e6, 0, 'f', 6); QString tfreq = QString("%1").arg((m_dialFreqRxWSPR + ui->TxFreqSpinBox->value()) / 1e6, 0, 'f', 6); + auto pct = QString::number (ui->autoButton->isChecked () ? ui->sbTxPercent->value () : 0); if (!direct_post) { wsprNet->upload (m_config.my_callsign (), m_config.my_grid (), rfreq, tfreq, - m_mode, m_TRperiod, QString::number (ui->autoButton->isChecked () ? m_pctx : 0), + m_mode, m_TRperiod, pct, QString::number (m_dBm), version (), m_config.writeable_data_dir ().absoluteFilePath ("wspr_spots.txt")); } else { wsprNet->post (m_config.my_callsign (), m_config.my_grid (), rfreq, tfreq, - m_mode, m_TRperiod, QString::number (ui->autoButton->isChecked () ? m_pctx : 0), + m_mode, m_TRperiod, pct, QString::number (m_dBm), version (), decode_text); } if (!decode_text.size ()) @@ -8140,24 +8124,9 @@ void MainWindow::on_TxPowerComboBox_currentIndexChanged(int index) m_dBm = ui->TxPowerComboBox->itemData (index).toInt (); } -void MainWindow::on_sbTxPercent_valueChanged(int n) -{ - m_pctx=n; - if(m_pctx>0) { - ui->pbTxNext->setEnabled(true); - } else { - m_txNext=false; - ui->pbTxNext->setChecked(false); - ui->pbTxNext->setEnabled(false); - } -} - void MainWindow::on_cbUploadWSPR_Spots_toggled(bool b) { m_uploadWSPRSpots=b; - if(m_uploadWSPRSpots) ui->cbUploadWSPR_Spots->setStyleSheet(""); - if(!m_uploadWSPRSpots) ui->cbUploadWSPR_Spots->setStyleSheet( - "QCheckBox{color: #000000; background-color: yellow}"); } void MainWindow::on_WSPRfreqSpinBox_valueChanged(int n) @@ -8167,11 +8136,21 @@ void MainWindow::on_WSPRfreqSpinBox_valueChanged(int n) void MainWindow::on_pbTxNext_clicked(bool b) { - m_txNext=b; + if (b && !ui->autoButton->isChecked ()) + { + m_WSPR_tx_next = false; // cancel any pending start from schedule + ui->autoButton->click (); // make sure Tx is possible + } } void MainWindow::WSPR_scheduling () { + if (ui->pbTxNext->isEnabled () && ui->pbTxNext->isChecked ()) + { + // Tx Next button overrides all scheduling + m_WSPR_tx_next = true; + return; + } QString t=ui->RoundRobin->currentText(); if(m_mode=="FST4W" and t != tr ("Random")) { bool ok; @@ -8184,10 +8163,14 @@ void MainWindow::WSPR_scheduling () int nsec=ms/1000; int ntr=m_TRperiod; int j=((nsec+ntr-1) % (n*ntr))/ntr; - m_WSPR_tx_next=(i==j); + m_WSPR_tx_next = i == j; return; } m_WSPR_tx_next = false; + if (!ui->sbTxPercent->isEnabled () || !ui->sbTxPercent->value ()) + { + return; // don't schedule if %age disabled or zero + } if (m_config.is_transceiver_online () // need working rig control for hopping && !m_config.is_dummy_rig () && ui->band_hopping_group_box->isChecked ()) { diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index a1673ec71..48cdf0c01 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -446,7 +446,6 @@ private: qint32 m_nclearave; qint32 m_minSync; qint32 m_dBm; - qint32 m_pctx; qint32 m_nseq; qint32 m_nWSPRdecodes; qint32 m_k0; @@ -505,7 +504,6 @@ private: bool m_bSWL; bool m_uploadWSPRSpots; bool m_uploading; - bool m_txNext; bool m_grid6; bool m_tuneup; bool m_bTxTime; diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index ece61762c..f16f26c42 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -2163,6 +2163,12 @@ list. The list can be maintained in Settings (F2). Percentage of minute sequences devoted to transmitting. + + QSpinBox:enabled[notx="true"] { + color: rgb(0, 0, 0); + background-color: rgb(255, 255, 0); +} + Qt::AlignCenter @@ -2346,6 +2352,12 @@ list. The list can be maintained in Settings (F2). Upload decoded messages to WSPRnet.org. + + QCheckBox:unchecked { + color: rgb(0, 0, 0); + background-color: rgb(255, 255, 0); +} + Upload spots @@ -2491,8 +2503,7 @@ list. The list can be maintained in Settings (F2). } QLabel[oob="true"] { background-color: red; -} - +} 14.078 000