Merge branch 'develop' into qmap

This commit is contained in:
Joe Taylor 2023-11-30 10:46:23 -05:00
commit 330db0feb4
7 changed files with 416 additions and 103 deletions

View File

@ -363,6 +363,7 @@ set (wsjt_FSRCS
lib/bpdecode128_90.f90 lib/bpdecode128_90.f90
lib/ft8/bpdecode174_91.f90 lib/ft8/bpdecode174_91.f90
lib/baddata.f90 lib/baddata.f90
lib/cablog.f90
lib/calibrate.f90 lib/calibrate.f90
lib/ccf2.f90 lib/ccf2.f90
lib/ccf65.f90 lib/ccf65.f90
@ -1143,6 +1144,9 @@ target_link_libraries (jt65sim wsjt_fort wsjt_cxx)
add_executable (sumsim lib/sumsim.f90) add_executable (sumsim lib/sumsim.f90)
target_link_libraries (sumsim wsjt_fort wsjt_cxx) target_link_libraries (sumsim wsjt_fort wsjt_cxx)
add_executable (cablog lib/cablog.f90)
target_link_libraries (cablog)
add_executable (test_snr lib/test_snr.f90) add_executable (test_snr lib/test_snr.f90)
target_link_libraries (test_snr wsjt_fort) target_link_libraries (test_snr wsjt_fort)
@ -1599,7 +1603,7 @@ install (TARGETS jt9 wsprd fmtave fcal fmeasure
if(WSJT_BUILD_UTILS) if(WSJT_BUILD_UTILS)
install (TARGETS ft8code jt65code jt9code jt4code msk144code install (TARGETS ft8code jt65code jt9code jt4code msk144code
q65code fst4sim q65sim echosim hash22calc q65code fst4sim q65sim echosim hash22calc cablog
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
) )

View File

@ -173,7 +173,6 @@
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonArray> #include <QJsonArray>
#include "pimpl_impl.hpp" #include "pimpl_impl.hpp"
#include "Logger.hpp" #include "Logger.hpp"
#include "qt_helpers.hpp" #include "qt_helpers.hpp"
@ -331,9 +330,9 @@ public:
connect (button_box, &QDialogButtonBox::accepted, this, &FrequencyDialog::accept); connect (button_box, &QDialogButtonBox::accepted, this, &FrequencyDialog::accept);
connect (button_box, &QDialogButtonBox::rejected, this, &FrequencyDialog::reject); connect (button_box, &QDialogButtonBox::rejected, this, &FrequencyDialog::reject);
connect(start_date_time_edit_, &QDateTimeEdit::dateTimeChanged, this, &FrequencyDialog::checkSaneDates); connect (start_date_time_edit_, &QDateTimeEdit::dateTimeChanged, this, &FrequencyDialog::checkSaneDates);
connect(end_date_time_edit_, &QDateTimeEdit::dateTimeChanged, this, &FrequencyDialog::checkSaneDates); connect (end_date_time_edit_, &QDateTimeEdit::dateTimeChanged, this, &FrequencyDialog::checkSaneDates);
connect(enable_dates_checkbox_, &QCheckBox::stateChanged, this, &FrequencyDialog::toggleValidity); connect (enable_dates_checkbox_, &QCheckBox::stateChanged, this, &FrequencyDialog::toggleValidity);
toggleValidity(); toggleValidity();
} }
@ -585,6 +584,7 @@ private:
Q_SLOT void on_revert_update_button_clicked (bool); Q_SLOT void on_revert_update_button_clicked (bool);
void error_during_hamlib_download (QString const& reason); void error_during_hamlib_download (QString const& reason);
void after_hamlib_downloaded(); void after_hamlib_downloaded();
void display_file_information();
Q_SLOT void on_cbx2ToneSpacing_clicked(bool); Q_SLOT void on_cbx2ToneSpacing_clicked(bool);
Q_SLOT void on_cbx4ToneSpacing_clicked(bool); Q_SLOT void on_cbx4ToneSpacing_clicked(bool);
@ -689,6 +689,7 @@ private:
QString FD_exchange_; QString FD_exchange_;
QString RTTY_exchange_; QString RTTY_exchange_;
QString Contest_Name_; QString Contest_Name_;
QString hamlib_backed_up_;
qint32 id_interval_; qint32 id_interval_;
qint32 ntrials_; qint32 ntrials_;
@ -1575,6 +1576,7 @@ void Configuration::impl::read_settings ()
ui_->Field_Day_Exchange->setText(FD_exchange_); ui_->Field_Day_Exchange->setText(FD_exchange_);
ui_->RTTY_Exchange->setText(RTTY_exchange_); ui_->RTTY_Exchange->setText(RTTY_exchange_);
ui_->Contest_Name->setText(Contest_Name_); ui_->Contest_Name->setText(Contest_Name_);
hamlib_backed_up_ = settings_->value ("HamlibBackedUp",QString {}).toString ();
if (next_font_.fromString (settings_->value ("Font", QGuiApplication::font ().toString ()).toString ()) if (next_font_.fromString (settings_->value ("Font", QGuiApplication::font ().toString ()).toString ())
&& next_font_ != font_) && next_font_ != font_)
@ -1751,6 +1753,18 @@ void Configuration::impl::read_settings ()
pwrBandTuneMemory_ = settings_->value("pwrBandTuneMemory",false).toBool (); pwrBandTuneMemory_ = settings_->value("pwrBandTuneMemory",false).toBool ();
highlight_DXcall_ = settings_->value("highlight_DXcall",false).toBool (); highlight_DXcall_ = settings_->value("highlight_DXcall",false).toBool ();
highlight_DXgrid_ = settings_->value("highlight_DXgrid",false).toBool (); highlight_DXgrid_ = settings_->value("highlight_DXgrid",false).toBool ();
#ifdef WIN32
QTimer::singleShot (2500, [=] {display_file_information ();});
#else
ui_->hamlib_groupBox->setTitle("Hamlib Version");
ui_->rbHamlib64->setVisible(false);
ui_->rbHamlib32->setVisible(false);
ui_->hamlib_download_button->setVisible(false);
ui_->revert_update_button->setVisible(false);
ui_->backed_up_text->setVisible(false);
ui_->backed_up->setVisible(false);
QTimer::singleShot (2500, [=] {display_file_information ();});
#endif
} }
void Configuration::impl::find_audio_devices () void Configuration::impl::find_audio_devices ()
@ -2492,6 +2506,11 @@ void Configuration::impl::on_decoded_text_font_push_button_clicked ()
void Configuration::impl::on_hamlib_download_button_clicked (bool /*clicked*/) void Configuration::impl::on_hamlib_download_button_clicked (bool /*clicked*/)
{ {
#ifdef WIN32 #ifdef WIN32
extern char* hamlib_version2;
QString hamlib = QString(QLatin1String(hamlib_version2));
SettingsGroup g {settings_, "Configuration"};
settings_->setValue ("HamlibBackedUp", hamlib);
settings_->sync ();
QDir dataPath = QCoreApplication::applicationDirPath(); QDir dataPath = QCoreApplication::applicationDirPath();
QFile f1 {dataPath.absolutePath() + "/" + "libhamlib-4_old.dll"}; QFile f1 {dataPath.absolutePath() + "/" + "libhamlib-4_old.dll"};
QFile f2 {dataPath.absolutePath() + "/" + "libhamlib-4_new.dll"}; QFile f2 {dataPath.absolutePath() + "/" + "libhamlib-4_new.dll"};
@ -2501,14 +2520,14 @@ void Configuration::impl::on_hamlib_download_button_clicked (bool /*clicked*/)
ui_->revert_update_button->setEnabled (false); ui_->revert_update_button->setEnabled (false);
if (ui_->rbHamlib32->isChecked()) { if (ui_->rbHamlib32->isChecked()) {
cty_download.configure(network_manager_, cty_download.configure(network_manager_,
"https://n0nb.users.sourceforge.net/dll32/libhamlib-4.dll", "https://n0nb.users.sourceforge.net/dll32/libhamlib-4.dll",
dataPath.absoluteFilePath("libhamlib-4_new.dll"), dataPath.absoluteFilePath("libhamlib-4_new.dll"),
"Downloading latest libhamlib-4.dll"); "Downloading latest libhamlib-4.dll");
} else { } else {
cty_download.configure(network_manager_, cty_download.configure(network_manager_,
"https://n0nb.users.sourceforge.net/dll64/libhamlib-4.dll", "https://n0nb.users.sourceforge.net/dll64/libhamlib-4.dll",
dataPath.absoluteFilePath("libhamlib-4_new.dll"), dataPath.absoluteFilePath("libhamlib-4_new.dll"),
"Downloading latest libhamlib-4.dll"); "Downloading latest libhamlib-4.dll");
} }
connect (&cty_download, &FileDownload::complete, this, &Configuration::impl::after_hamlib_downloaded, Qt::UniqueConnection); connect (&cty_download, &FileDownload::complete, this, &Configuration::impl::after_hamlib_downloaded, Qt::UniqueConnection);
connect (&cty_download, &FileDownload::error, this, &Configuration::impl::error_during_hamlib_download, Qt::UniqueConnection); connect (&cty_download, &FileDownload::error, this, &Configuration::impl::error_during_hamlib_download, Qt::UniqueConnection);
@ -2550,7 +2569,7 @@ void Configuration::impl::on_revert_update_button_clicked (bool /*clicked*/)
ui_->hamlib_download_button->setEnabled (false); ui_->hamlib_download_button->setEnabled (false);
QFile::rename(dataPath.absolutePath() + "/" + "libhamlib-4.dll", dataPath.absolutePath() + "/" + "libhamlib-4_new.dll"); QFile::rename(dataPath.absolutePath() + "/" + "libhamlib-4.dll", dataPath.absolutePath() + "/" + "libhamlib-4_new.dll");
QTimer::singleShot (1000, [=] { QTimer::singleShot (1000, [=] {
QFile::rename(dataPath.absolutePath() + "/" + "libhamlib-4_old.dll", dataPath.absolutePath() + "/" + "libhamlib-4.dll"); QFile::copy(dataPath.absolutePath() + "/" + "libhamlib-4_old.dll", dataPath.absolutePath() + "/" + "libhamlib-4.dll");
}); });
QTimer::singleShot (2000, [=] { QTimer::singleShot (2000, [=] {
MessageBox::information_message (this, tr ("Hamlib successfully reverted \n\nReverted Hamlib will be used after restart")); MessageBox::information_message (this, tr ("Hamlib successfully reverted \n\nReverted Hamlib will be used after restart"));
@ -2565,6 +2584,31 @@ void Configuration::impl::on_revert_update_button_clicked (bool /*clicked*/)
#endif #endif
} }
void Configuration::impl::display_file_information ()
{
#ifdef WIN32
QDir dataPath = QCoreApplication::applicationDirPath();
extern char* hamlib_version2;
QString hamlib = QString(QLatin1String(hamlib_version2));
ui_->in_use->setText(hamlib);
QFileInfo fi2(dataPath.absolutePath() + "/" + "libhamlib-4_old.dll");
QString birthTime2 = fi2.birthTime().toString("yyyy-MM-dd hh:mm");
QFile f {dataPath.absolutePath() + "/" + "libhamlib-4_old.dll"};
if (f.exists()) {
if (hamlib_backed_up_=="") {
ui_->backed_up->setText(QString{"no hamlib data available, file saved %1"}.arg(birthTime2));
} else {
ui_->backed_up->setText(hamlib_backed_up_);
}
} else {
ui_->backed_up->setText("");
}
#else
extern char* hamlib_version2;
QString hamlib = QString(QLatin1String(hamlib_version2));
ui_->in_use->setText(hamlib);
#endif
}
void Configuration::impl::on_PTT_port_combo_box_activated (int /* index */) void Configuration::impl::on_PTT_port_combo_box_activated (int /* index */)
{ {

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>684</width> <width>800</width>
<height>662</height> <height>600</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -1371,7 +1371,7 @@ radio interface behave as expected.</string>
<item row="12" column="0"> <item row="12" column="0">
<widget class="QGroupBox" name="hamlib_groupBox"> <widget class="QGroupBox" name="hamlib_groupBox">
<property name="title"> <property name="title">
<string>Update Hamlib (Windows only)</string> <string>Update Hamlib</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_18"> <layout class="QGridLayout" name="gridLayout_18">
<item row="0" column="0"> <item row="0" column="0">
@ -1391,6 +1391,16 @@ radio interface behave as expected.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="3">
<widget class="QPushButton" name="revert_update_button">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Revert the last Hamlib update. &lt;/p&gt;&lt;p&gt;Note: This function is only available on Windows.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Revert Update</string>
</property>
</widget>
</item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QPushButton" name="hamlib_download_button"> <widget class="QPushButton" name="hamlib_download_button">
<property name="toolTip"> <property name="toolTip">
@ -1401,15 +1411,37 @@ radio interface behave as expected.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="3"> <item row="1" column="0" colspan="4">
<widget class="QPushButton" name="revert_update_button"> <layout class="QGridLayout" name="hamlib_version_gridLayout" columnstretch="0,1">
<property name="toolTip"> <item row="0" column="0">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Revert the last Hamlib update. &lt;/p&gt;&lt;p&gt;Note: This function is only available on Windows.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <widget class="QLabel" name="in_use_text">
</property> <property name="text">
<property name="text"> <string>In use:</string>
<string>Revert Update</string> </property>
</property> </widget>
</widget> </item>
<item row="1" column="0">
<widget class="QLabel" name="backed_up_text">
<property name="text">
<string>Backed up:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="in_use">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="backed_up">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -3466,13 +3498,13 @@ Right click for insert and delete options.</string>
</connection> </connection>
</connections> </connections>
<buttongroups> <buttongroups>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="CAT_stop_bits_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="CAT_handshake_button_group"/> <buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="special_op_activity_button_group"/> <buttongroup name="special_op_activity_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="CAT_stop_bits_button_group"/>
<buttongroup name="PTT_method_button_group"/> <buttongroup name="PTT_method_button_group"/>
</buttongroups> </buttongroups>
</ui> </ui>

105
lib/cablog.f90 Normal file
View File

@ -0,0 +1,105 @@
program cablog
character*100 line,infile,outfile
character cband*4,cmode*2,cdate*10,cutc*4,callsign*10,mycall*10
character csent*3,crcvd*3,dsent*3,drcvd*3
integer icomma(20)
nargs=iargc()
if(nargs.ne.4) then
print*,"Program cablog converts the file 'wsjtx.log' to a bare-bones"
print*,"Cabrillo log for the ARRL International EME Contest. You will"
print*,"certainly need to edit the header information, and you may"
print*,"edit the log elsewhere as required."
print*,' '
print*,'Usage: cablog <MyCall> <sent> <rcvd> <infile>'
print*,'Example: cablog W2ZQ -15 -16 wsjtx.log'
go to 999
endif
call getarg(1,mycall)
outfile=trim(mycall)//'.log'
call getarg(2,dsent)
call getarg(3,drcvd)
call getarg(4,infile)
open(10,file=trim(infile),status='old')
open(12,file=trim(outfile),status='unknown')
write(12,1000)
1000 format('START-OF-LOG: 3.0'/ &
'CONTEST: ARRL-EME'/ &
'CALLSIGN: '/ &
'CATEGORY-OPERATOR: '/ &
'CATEGORY-BAND: '/ &
'CATEGORY-MODE: '/ &
'EMAIL: '/ &
'OPERATORS: '/ &
'CATEGORY-POWER: HIGH'/ &
'CATEGORY-TRANSMITTER: ONE'/ &
'CATEGORY-STATION: FIXED'/ &
'CATEGORY-TIME: 24-HOURS'/ &
'CATEGORY-ASSISTED: ASSISTED'/ &
'LOCATION: SNJ'/ &
'CLAIMED-SCORE: '/ &
'CLUB: '/ &
'NAME: '/ &
'ADDRESS: '/ &
'ADDRESS: '/ &
'ADDRESS: '/ &
'CREATED-BY: cablog (C) K1JT')
n=0
do nn=1,9999
read(10,'(a100)',end=900) line
if(len(trim(line)).eq.0) cycle
n=n+1
k=0
do j=1,100
if(line(j:j).eq.',') then
k=k+1
icomma(k)=j
endif
enddo
cmode='DG'
if(index(line,',CW,').gt.10) cmode='CW'
cdate=line(1:10)
cutc=line(32:33)//line(35:36)
i0=index(line(41:),',')
callsign=line(41:39+i0)
read(line(icomma(6)+1:icomma(7)-1),*,err=10,end=10) freq
go to 20
10 print*,'***Error at line ',n
print*,trim(line)
20 if(freq.ge.50.0 .and. freq.le.54.0) cband='50 '
if(freq.ge.144.0 .and. freq.le.148.0) cband='144 '
if(freq.ge.28.0 .and. freq.le.29.0) cband='144 '
if(freq.ge.222.0 .and. freq.le.225.0) cband='222 '
if(freq.ge.420.0 .and. freq.le.450.0) cband='432 '
if(freq.ge.902.0 .and. freq.le.928.0) cband='902 '
if(freq.ge.1240.0 .and. freq.le.1300.0) cband='1.2G'
if(freq.ge.2300.0 .and. freq.le.2450.0) cband='2.3G'
if(freq.ge.3300.0 .and. freq.le.3500.0) cband='3.4G'
if(freq.ge.5650.0 .and. freq.le.5925.0) cband='5.7G'
if(freq.ge.10000.0 .and. freq.le.10500.0) cband='10G '
if(freq.ge.24000.0 .and. freq.le.24250.0) cband='24G '
if(icomma(8).eq.icomma(9)-1) then
csent=dsent
else
csent=line(icomma(8)+1:icomma(9)-1)
endif
if(icomma(9).eq.icomma(10)-1) then
crcvd=drcvd
else
crcvd=line(icomma(9)+1:icomma(10)-1)
endif
write(12,1020) cband,cmode,cdate,cutc,mycall,csent,callsign,crcvd
1020 format('QSO: ',a4,1x,a2,1x,a10,1x,a4,1x,a6,1x,a3,5x,a10,1x,a3)
enddo
900 write(12,1900)
1900 format('END-OF-LOG:')
write(*,1910) n,trim(outfile)
1910 format('Processed',i5,' QSOs.'/'Output file: ',a)
999 end program cablog
!2023-10-28,00:17:00,2023-10-28,00:21:00,G7TZZ,IO92,1296.083100,Q65,-17,-17,,,,

View File

@ -996,7 +996,7 @@ contains
do i=-ia,ia !Find freq range that has 50% of signal power do i=-ia,ia !Find freq range that has 50% of signal power
sum2=sum2 + ss(i)-avg sum2=sum2 + ss(i)-avg
if(sum2.ge.0.25*sum1 .and. xi1.eq.-999.0) then if(sum2.ge.0.25*sum1 .and. xi1.eq.-999.0) then
xi1=i - 1 + (sum2-0.25*sum1)/(sum2-sum2z) xi1=i - 1 + (0.25*sum1-sum2)/(sum2-sum2z)
endif endif
if(sum2.ge.0.50*sum1 .and. xi2.eq.-999.0) then if(sum2.ge.0.50*sum1 .and. xi2.eq.-999.0) then
xi2=i - 1 + (sum2-0.50*sum1)/(sum2-sum2z) xi2=i - 1 + (sum2-0.50*sum1)/(sum2-sum2z)

View File

@ -64,9 +64,11 @@ void ActiveStations::displayRecentStations(QString mode, QString const& t)
{ {
if(mode!=m_mode) { if(mode!=m_mode) {
m_mode=mode; m_mode=mode;
ui->cbReadyOnly->setText("Ready only");
if(m_mode=="Q65") { if(m_mode=="Q65") {
ui->header_label2->setText(" N Frx Fsked S/N Call Grid Tx Age"); ui->header_label2->setText(" N Frx Fsked S/N Call Grid Tx Age");
ui->label->setText("QSOs:"); ui->label->setText("QSOs:");
ui->cbReadyOnly->setText("CQ only");
} else if(m_mode=="Q65-pileup") { } else if(m_mode=="Q65-pileup") {
ui->header_label2->setText(" N Freq Call Grid El Age(h)"); ui->header_label2->setText(" N Freq Call Grid El Age(h)");
} else { } else {

View File

@ -213,6 +213,7 @@ QVector<QColor> g_ColorTbl;
using SpecOp = Configuration::SpecialOperatingActivity; using SpecOp = Configuration::SpecialOperatingActivity;
bool blocked = false;
bool m_displayBand = false; bool m_displayBand = false;
bool no_a7_decodes = false; bool no_a7_decodes = false;
bool keep_frequency = false; bool keep_frequency = false;
@ -1088,7 +1089,16 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
// backup libhamlib-4.dll file, so it is still available after the next program update // backup libhamlib-4.dll file, so it is still available after the next program update
QDir dataPath = QCoreApplication::applicationDirPath(); QDir dataPath = QCoreApplication::applicationDirPath();
QFile f {dataPath.absolutePath() + "/" + "libhamlib-4_old.dll"}; QFile f {dataPath.absolutePath() + "/" + "libhamlib-4_old.dll"};
if (!f.exists()) QFile::copy(dataPath.absolutePath() + "/" + "libhamlib-4.dll", dataPath.absolutePath() + "/" + "libhamlib-4_old.dll"); if (!f.exists()) {
QFile::copy(dataPath.absolutePath() + "/" + "libhamlib-4.dll", dataPath.absolutePath() + "/" + "libhamlib-4_old.dll");
QTimer::singleShot (5000, [=] { //wait until hamlib has been started
extern char* hamlib_version2;
QString hamlib = QString(QLatin1String(hamlib_version2));
m_settings->beginGroup("Configuration");
m_settings->setValue ("HamlibBackedUp", hamlib);
m_settings->endGroup();
});
}
#endif #endif
// this must be the last statement of constructor // this must be the last statement of constructor
@ -1213,6 +1223,16 @@ void MainWindow::writeSettings()
m_settings->setValue ("SerialNumber",ui->sbSerialNumber->value ()); m_settings->setValue ("SerialNumber",ui->sbSerialNumber->value ());
m_settings->endGroup(); m_settings->endGroup();
// do this in the General group because we save the parameters from various places
if(m_mode=="JT9") {
m_settings->setValue("SubMode",ui->sbSubmode->value());
m_settings->setValue("TRPeriod", ui->sbTR->value());
}
if(m_mode=="MSK144") m_settings->setValue("ShMsgs_MSK144",m_bShMsgs);
if(m_mode=="Q65") m_settings->setValue("ShMsgs_Q65",m_bShMsgs);
if(m_mode=="JT65") m_settings->setValue("ShMsgs_JT65",m_bShMsgs);
if(m_mode=="JT4") m_settings->setValue("ShMsgs_JT4",m_bShMsgs);
m_settings->beginGroup("Common"); m_settings->beginGroup("Common");
m_settings->setValue("Mode",m_mode); m_settings->setValue("Mode",m_mode);
m_settings->setValue("SaveNone",ui->actionNone->isChecked()); m_settings->setValue("SaveNone",ui->actionNone->isChecked());
@ -1226,13 +1246,12 @@ void MainWindow::writeSettings()
m_settings->setValue("FST4W_FTol",ui->sbFST4W_FTol->value()); m_settings->setValue("FST4W_FTol",ui->sbFST4W_FTol->value());
m_settings->setValue("FST4_FLow",ui->sbF_Low->value()); m_settings->setValue("FST4_FLow",ui->sbF_Low->value());
m_settings->setValue("FST4_FHigh",ui->sbF_High->value()); m_settings->setValue("FST4_FHigh",ui->sbF_High->value());
// m_settings->setValue("SubMode",ui->sbSubmode->value());
m_settings->setValue("DTtol",m_DTtol); m_settings->setValue("DTtol",m_DTtol);
m_settings->setValue("Ftol", ui->sbFtol->value ()); m_settings->setValue("Ftol", ui->sbFtol->value ());
m_settings->setValue("MinSync",m_minSync); m_settings->setValue("MinSync",m_minSync);
m_settings->setValue ("AutoSeq", ui->cbAutoSeq->isChecked ()); m_settings->setValue ("AutoSeq", ui->cbAutoSeq->isChecked ());
m_settings->setValue ("RxAll", ui->cbRxAll->isChecked ()); m_settings->setValue ("RxAll", ui->cbRxAll->isChecked ());
m_settings->setValue("ShMsgs",m_bShMsgs); // m_settings->setValue("ShMsgs",m_bShMsgs);
m_settings->setValue("SWL",ui->cbSWL->isChecked()); m_settings->setValue("SWL",ui->cbSWL->isChecked());
m_settings->setValue ("DialFreq", QVariant::fromValue(m_lastMonitoredFrequency)); m_settings->setValue ("DialFreq", QVariant::fromValue(m_lastMonitoredFrequency));
m_settings->setValue("OutAttenuation", ui->outAttenuation->value ()); m_settings->setValue("OutAttenuation", ui->outAttenuation->value ());
@ -1248,7 +1267,6 @@ void MainWindow::writeSettings()
m_settings->setValue("UploadSpots",m_uploadWSPRSpots); m_settings->setValue("UploadSpots",m_uploadWSPRSpots);
m_settings->setValue("NoOwnCall",ui->cbNoOwnCall->isChecked()); m_settings->setValue("NoOwnCall",ui->cbNoOwnCall->isChecked());
m_settings->setValue ("BandHopping", ui->band_hopping_group_box->isChecked ()); m_settings->setValue ("BandHopping", ui->band_hopping_group_box->isChecked ());
// m_settings->setValue ("TRPeriod", ui->sbTR->value ());
m_settings->setValue ("MaxDrift", ui->sbMaxDrift->value()); m_settings->setValue ("MaxDrift", ui->sbMaxDrift->value());
m_settings->setValue ("TRPeriod_FST4W", ui->sbTR_FST4W->value ()); m_settings->setValue ("TRPeriod_FST4W", ui->sbTR_FST4W->value ());
m_settings->setValue("FastMode",m_bFastMode); m_settings->setValue("FastMode",m_bFastMode);
@ -1316,16 +1334,58 @@ void MainWindow::readSettings()
ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ()); ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ());
m_settings->endGroup(); m_settings->endGroup();
m_settings->beginGroup("Common");
m_mode=m_settings->value("Mode","FT8").toString();
m_settings->endGroup();
// do this outside of settings group because it uses groups internally // do this outside of settings group because it uses groups internally
ui->actionAstronomical_data->setChecked (displayAstro); ui->actionAstronomical_data->setChecked (displayAstro);
// do this in the General group because we save the parameters from various places
if(m_mode=="JT9") {
blocked=true;
m_nSubMode=m_settings->value("SubMode",0).toInt();
ui->sbSubmode->setValue(m_nSubMode);
ui->sbFtol->setValue (m_settings->value("Ftol_JT9", 50).toInt());
ui->sbTR->setValue (m_settings->value ("TRPeriod", 15).toInt());
QTimer::singleShot (50, [=] {blocked = false;});
}
if (m_mode=="Q65") {
m_nSubMode=m_settings->value("SubMode_Q65",0).toInt();
ui->sbSubmode->setValue(m_nSubMode_Q65);
ui->sbFtol->setValue (m_settings->value("Ftol_Q65", 50).toInt());
ui->sbTR->setValue (m_settings->value ("TRPeriod_Q65", 30).toInt());
}
if (m_mode=="JT65") {
m_nSubMode=m_settings->value("SubMode_JT65",0).toInt();
ui->sbSubmode->setValue(m_nSubMode_JT65);
ui->sbFtol->setValue (m_settings->value("Ftol_JT65", 50).toInt());
}
if (m_mode=="JT4") {
m_nSubMode=m_settings->value("SubMode_JT4",0).toInt();
ui->sbSubmode->setValue(m_nSubMode_JT4);
ui->sbFtol->setValue (m_settings->value("Ftol_JT4", 50).toInt());
ui->sbTR->setValue (m_settings->value ("TRPeriod_FST4", 60).toInt());
}
if (m_mode=="MSK144") {
ui->sbFtol->setValue (m_settings->value("Ftol_MSK144",50).toInt());
if (!(m_currentBand=="6m" or m_currentBand=="4m" or m_currentBand=="2m")) ui->sbTR->setValue (m_settings->value ("TRPeriod_MSK144", 30).toInt());
if (m_currentBand=="6m" or m_currentBand=="4m") ui->sbTR->setValue (m_settings->value ("TRPeriod_MSK144_6m", 15).toInt());
if (m_currentBand=="2m") ui->sbTR->setValue (m_settings->value ("TRPeriod_MSK144_2m", 30).toInt());
}
if (m_mode=="MSK144") m_bShMsgs=m_settings->value("ShMsgs_MSK144",false).toBool();
if (m_mode=="Q65") m_bShMsgs=m_settings->value("ShMsgs_Q65",false).toBool();
if (m_mode=="JT65") m_bShMsgs=m_settings->value("ShMsgs_JT65",false).toBool();
if (m_mode=="JT4") m_bShMsgs=m_settings->value("ShMsgs_JT4",false).toBool();
m_settings->beginGroup("Common"); m_settings->beginGroup("Common");
ui->labDXped->setText(m_settings->value("labDXpedText",QString {}).toString ()); ui->labDXped->setText(m_settings->value("labDXpedText",QString {}).toString ());
ui->actionDon_t_split_ALL_TXT->setChecked(m_settings->value("actionDontSplitALLTXT", true).toBool()); ui->actionDon_t_split_ALL_TXT->setChecked(m_settings->value("actionDontSplitALLTXT", true).toBool());
ui->actionSplit_ALL_TXT_yearly->setChecked(m_settings->value("splitAllTxtYearly", false).toBool()); ui->actionSplit_ALL_TXT_yearly->setChecked(m_settings->value("splitAllTxtYearly", false).toBool());
ui->actionSplit_ALL_TXT_monthly->setChecked(m_settings->value("splitAllTxtMonthly", false).toBool()); ui->actionSplit_ALL_TXT_monthly->setChecked(m_settings->value("splitAllTxtMonthly", false).toBool());
ui->actionDisable_writing_of_ALL_TXT->setChecked(m_settings->value("disableWritingOfAllTxt", false).toBool()); ui->actionDisable_writing_of_ALL_TXT->setChecked(m_settings->value("disableWritingOfAllTxt", false).toBool());
m_mode=m_settings->value("Mode","FT8").toString(); // m_mode=m_settings->value("Mode","FT8").toString();
ui->actionNone->setChecked(m_settings->value("SaveNone",true).toBool()); ui->actionNone->setChecked(m_settings->value("SaveNone",true).toBool());
ui->actionSave_decoded->setChecked(m_settings->value("SaveDecoded",false).toBool()); ui->actionSave_decoded->setChecked(m_settings->value("SaveDecoded",false).toBool());
ui->actionSave_all->setChecked(m_settings->value("SaveAll",false).toBool()); ui->actionSave_all->setChecked(m_settings->value("SaveAll",false).toBool());
@ -1335,28 +1395,16 @@ void MainWindow::readSettings()
ui->sbFST4W_RxFreq->setValue(m_settings->value("FST4W_RxFreq",1500).toInt()); ui->sbFST4W_RxFreq->setValue(m_settings->value("FST4W_RxFreq",1500).toInt());
ui->sbF_Low->setValue(m_settings->value("FST4_FLow",600).toInt()); ui->sbF_Low->setValue(m_settings->value("FST4_FLow",600).toInt());
ui->sbF_High->setValue(m_settings->value("FST4_FHigh",1400).toInt()); ui->sbF_High->setValue(m_settings->value("FST4_FHigh",1400).toInt());
// m_nSubMode=m_settings->value("SubMode",0).toInt();
if (m_mode=="Q65") m_nSubMode=m_settings->value("SubMode_Q65",0).toInt();
if (m_mode=="JT65") m_nSubMode=m_settings->value("SubMode_JT65",0).toInt();
if (m_mode=="JT4") m_nSubMode=m_settings->value("SubMode_JT4",0).toInt();
// ui->sbSubmode->setValue(m_nSubMode);
if (m_mode=="Q65") ui->sbSubmode->setValue(m_nSubMode_Q65);
if (m_mode=="JT65") ui->sbSubmode->setValue(m_nSubMode_JT65);
if (m_mode=="JT4") ui->sbSubmode->setValue(m_nSubMode_JT4);
ui->sbFtol->setValue (m_settings->value("Ftol", 50).toInt()); ui->sbFtol->setValue (m_settings->value("Ftol", 50).toInt());
ui->sbFST4W_FTol->setValue(m_settings->value("FST4W_FTol",100).toInt()); ui->sbFST4W_FTol->setValue(m_settings->value("FST4W_FTol",100).toInt());
m_minSync=m_settings->value("MinSync",0).toInt(); m_minSync=m_settings->value("MinSync",0).toInt();
ui->syncSpinBox->setValue(m_minSync); ui->syncSpinBox->setValue(m_minSync);
ui->cbAutoSeq->setChecked (m_settings->value ("AutoSeq", false).toBool()); ui->cbAutoSeq->setChecked (m_settings->value ("AutoSeq", false).toBool());
ui->cbRxAll->setChecked (m_settings->value ("RxAll", false).toBool()); ui->cbRxAll->setChecked (m_settings->value ("RxAll", false).toBool());
m_bShMsgs=m_settings->value("ShMsgs",false).toBool(); // m_bShMsgs=m_settings->value("ShMsgs",false).toBool();
m_bSWL=m_settings->value("SWL",false).toBool(); m_bSWL=m_settings->value("SWL",false).toBool();
m_bFast9=m_settings->value("Fast9",false).toBool(); m_bFast9=m_settings->value("Fast9",false).toBool();
m_bFastMode=m_settings->value("FastMode",false).toBool(); m_bFastMode=m_settings->value("FastMode",false).toBool();
// ui->sbTR->setValue (m_settings->value ("TRPeriod", 15).toInt());
if (m_mode=="Q65") ui->sbTR->setValue (m_settings->value ("TRPeriod_Q65", 30).toInt());
if (m_mode=="MSK144") ui->sbTR->setValue (m_settings->value ("TRPeriod_MSK144", 15).toInt());
if (m_mode=="FST4") ui->sbTR->setValue (m_settings->value ("TRPeriod_FST4", 60).toInt());
ui->sbMaxDrift->setValue (m_settings->value ("MaxDrift",0).toInt()); ui->sbMaxDrift->setValue (m_settings->value ("MaxDrift",0).toInt());
ui->sbTR_FST4W->setValue (m_settings->value ("TRPeriod_FST4W", 15).toInt()); ui->sbTR_FST4W->setValue (m_settings->value ("TRPeriod_FST4W", 15).toInt());
m_lastMonitoredFrequency = m_settings->value ("DialFreq", m_lastMonitoredFrequency = m_settings->value ("DialFreq",
@ -6877,6 +6925,10 @@ void MainWindow::on_actionFST4_triggered()
on_sbSubmode_valueChanged(ui->sbSubmode->value()); on_sbSubmode_valueChanged(ui->sbSubmode->value());
}); });
m_mode="FST4"; m_mode="FST4";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
ui->actionFST4->setChecked(true); ui->actionFST4->setChecked(true);
m_bFast9=false; m_bFast9=false;
m_bFastMode=false; m_bFastMode=false;
@ -6919,6 +6971,10 @@ void MainWindow::on_actionFST4_triggered()
void MainWindow::on_actionFST4W_triggered() void MainWindow::on_actionFST4W_triggered()
{ {
m_mode="FST4W"; m_mode="FST4W";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
ui->actionFST4W->setChecked(true); ui->actionFST4W->setChecked(true);
m_bFast9=false; m_bFast9=false;
m_bFastMode=false; m_bFastMode=false;
@ -6954,6 +7010,10 @@ void MainWindow::on_actionFT4_triggered()
on_sbSubmode_valueChanged(ui->sbSubmode->value()); on_sbSubmode_valueChanged(ui->sbSubmode->value());
}); });
m_mode="FT4"; m_mode="FT4";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
m_TRperiod=7.5; m_TRperiod=7.5;
bool bVHF=m_config.enable_VHF_features(); bool bVHF=m_config.enable_VHF_features();
m_bFast9=false; m_bFast9=false;
@ -7120,6 +7180,10 @@ void MainWindow::on_actionJT4_triggered()
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq_old",1500).toInt()); ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq_old",1500).toInt());
}); });
m_mode="JT4"; m_mode="JT4";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
bool bVHF=m_config.enable_VHF_features(); bool bVHF=m_config.enable_VHF_features();
WSPR_config(false); WSPR_config(false);
switch_mode (Modes::JT4); switch_mode (Modes::JT4);
@ -7143,10 +7207,13 @@ void MainWindow::on_actionJT4_triggered()
ui->lh_decodes_headings_label->setText("UTC dB DT Freq " + tr ("Message")); ui->lh_decodes_headings_label->setText("UTC dB DT Freq " + tr ("Message"));
ui->rh_decodes_headings_label->setText("UTC dB DT Freq " + tr ("Message")); ui->rh_decodes_headings_label->setText("UTC dB DT Freq " + tr ("Message"));
if(bVHF) { if(bVHF) {
// ui->sbSubmode->setValue(m_nSubMode); // restore last used parameters
QTimer::singleShot (50, [=] {m_nSubMode=m_settings->value("SubMode_JT4",0).toInt();}); ui->sbFtol->setValue (m_settings->value ("Ftol_JT4", 50).toInt());
QTimer::singleShot (75, [=] {ui->sbSubmode->setValue(m_settings->value("SubMode_JT4",0).toInt());}); m_nSubMode=m_settings->value("SubMode_JT4",0).toInt();
QTimer::singleShot (100, [=] {on_sbSubmode_valueChanged(m_nSubMode);}); ui->sbSubmode->setValue(m_settings->value("SubMode_JT4",0).toInt());
QTimer::singleShot (50, [=] {on_sbSubmode_valueChanged(ui->sbSubmode->value());});
m_bShMsgs=m_settings->value("ShMsgs_JT4",false).toBool();
ui->cbShMsgs->setChecked(m_bShMsgs);
} else { } else {
ui->sbSubmode->setValue(0); ui->sbSubmode->setValue(0);
} }
@ -7163,8 +7230,25 @@ void MainWindow::on_actionJT4_triggered()
void MainWindow::on_actionJT9_triggered() void MainWindow::on_actionJT9_triggered()
{ {
m_mode="JT9"; m_mode="JT9";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
bool bVHF=m_config.enable_VHF_features(); bool bVHF=m_config.enable_VHF_features();
m_bFast9=ui->cbFast9->isChecked(); // restore last used parameters
if(bVHF && m_mode!="JT65" && !blocked) {
ui->sbSubmode->setMaximum(7);
m_bFast9=m_settings->value("JT9_Fast",false).toBool();
ui->cbFast9->setChecked(m_bFast9 or m_bFastMode);
ui->sbFtol->setValue (m_settings->value ("Ftol_JT9", 50).toInt());
m_nSubMode=m_settings->value("SubMode",0).toInt();
ui->sbSubmode->setValue(m_nSubMode);
QTimer::singleShot (50, [=] {
on_sbTR_valueChanged (ui->sbTR->value());
on_sbSubmode_valueChanged(ui->sbSubmode->value());
});
}
// m_bFast9=ui->cbFast9->isChecked();
m_bFastMode=m_bFast9; m_bFastMode=m_bFast9;
WSPR_config(false); WSPR_config(false);
switch_mode (Modes::JT9); switch_mode (Modes::JT9);
@ -7187,6 +7271,7 @@ void MainWindow::on_actionJT9_triggered()
ui->sbSubmode->setMaximum(7); ui->sbSubmode->setMaximum(7);
if(m_bFast9) { if(m_bFast9) {
ui->sbTR->values ({5, 10, 15, 30}); ui->sbTR->values ({5, 10, 15, 30});
if(bVHF && m_mode!="JT65" && !blocked) ui->sbTR->setValue (m_settings->value ("TRPeriod", 15).toInt()); // restore last used TRperiod
on_sbTR_valueChanged (ui->sbTR->value()); on_sbTR_valueChanged (ui->sbTR->value());
m_wideGraph->hide(); m_wideGraph->hide();
m_fastGraph->showNormal(); m_fastGraph->showNormal();
@ -7226,6 +7311,10 @@ void MainWindow::on_actionJT65_triggered()
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq_old",1500).toInt()); ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq_old",1500).toInt());
}); });
on_actionJT9_triggered(); on_actionJT9_triggered();
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
m_mode="JT65"; m_mode="JT65";
bool bVHF=m_config.enable_VHF_features(); bool bVHF=m_config.enable_VHF_features();
WSPR_config(false); WSPR_config(false);
@ -7251,10 +7340,13 @@ void MainWindow::on_actionJT65_triggered()
m_bFast9=false; m_bFast9=false;
ui->sbSubmode->setMaximum(2); ui->sbSubmode->setMaximum(2);
if(bVHF) { if(bVHF) {
// ui->sbSubmode->setValue(m_nSubMode); // restore last used parameters
QTimer::singleShot (50, [=] {m_nSubMode=m_settings->value("SubMode_JT65",0).toInt();}); ui->sbFtol->setValue (m_settings->value ("Ftol_JT65", 50).toInt());
QTimer::singleShot (75, [=] {ui->sbSubmode->setValue(m_settings->value("SubMode_JT65",0).toInt());}); m_nSubMode=m_settings->value("SubMode_JT65",0).toInt();
QTimer::singleShot (100, [=] {on_sbSubmode_valueChanged(m_nSubMode);}); ui->sbSubmode->setValue(m_settings->value("SubMode_JT65",0).toInt());
QTimer::singleShot (50, [=] {on_sbSubmode_valueChanged(ui->sbSubmode->value());});
m_bShMsgs=m_settings->value("ShMsgs_JT65",false).toBool();
ui->cbShMsgs->setChecked(m_bShMsgs);
} else { } else {
ui->sbSubmode->setValue(0); ui->sbSubmode->setValue(0);
ui->lh_decodes_title_label->setText(tr ("Band Activity")); ui->lh_decodes_title_label->setText(tr ("Band Activity"));
@ -7281,6 +7373,10 @@ void MainWindow::on_actionQ65_triggered()
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq_old",1500).toInt()); ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq_old",1500).toInt());
}); });
m_mode="Q65"; m_mode="Q65";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
ui->actionQ65->setChecked(true); ui->actionQ65->setChecked(true);
switch_mode(Modes::Q65); switch_mode(Modes::Q65);
ui->cbAutoSeq->setChecked(true); ui->cbAutoSeq->setChecked(true);
@ -7294,12 +7390,17 @@ void MainWindow::on_actionQ65_triggered()
Q_EMIT FFTSize(m_FFTSize); Q_EMIT FFTSize(m_FFTSize);
m_hsymStop=49; m_hsymStop=49;
ui->sbTR->values ({15, 30, 60, 120, 300}); ui->sbTR->values ({15, 30, 60, 120, 300});
ui->sbTR->setValue (m_settings->value ("TRPeriod_Q65", 30).toInt()); // remember sbTR settings by mode // restore last used parameters
QTimer::singleShot (50, [=] {on_sbTR_valueChanged (ui->sbTR->value());}); ui->sbTR->setValue (m_settings->value ("TRPeriod_Q65", 30).toInt());
// ui->sbSubmode->setValue(m_nSubMode); ui->sbFtol->setValue (m_settings->value ("Ftol_Q65", 50).toInt());
QTimer::singleShot (50, [=] {m_nSubMode=m_settings->value("SubMode_Q65",0).toInt();}); m_nSubMode=m_settings->value("SubMode_Q65",0).toInt();
QTimer::singleShot (75, [=] {ui->sbSubmode->setValue(m_settings->value("SubMode_Q65",0).toInt());}); ui->sbSubmode->setValue(m_settings->value("SubMode_Q65",0).toInt());
QTimer::singleShot (100, [=] {on_sbSubmode_valueChanged(m_nSubMode);}); QTimer::singleShot (50, [=] {
on_sbTR_valueChanged (ui->sbTR->value());
on_sbSubmode_valueChanged(ui->sbSubmode->value());
});
m_bShMsgs=m_settings->value("ShMsgs_Q65",false).toBool();
ui->cbShMsgs->setChecked(m_bShMsgs);
QString fname {QDir::toNativeSeparators(m_config.temp_dir().absoluteFilePath ("red.dat"))}; QString fname {QDir::toNativeSeparators(m_config.temp_dir().absoluteFilePath ("red.dat"))};
m_wideGraph->setRedFile(fname); m_wideGraph->setRedFile(fname);
m_wideGraph->setMode(m_mode); m_wideGraph->setMode(m_mode);
@ -7361,6 +7462,10 @@ void MainWindow::on_actionMSK144_triggered()
return; return;
} }
m_mode="MSK144"; m_mode="MSK144";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
ui->actionMSK144->setChecked(true); ui->actionMSK144->setChecked(true);
switch_mode (Modes::MSK144); switch_mode (Modes::MSK144);
m_nsps=6; m_nsps=6;
@ -7374,11 +7479,10 @@ void MainWindow::on_actionMSK144_triggered()
m_bFastMode=true; m_bFastMode=true;
m_bFast9=false; m_bFast9=false;
ui->sbTR->values ({5, 10, 15, 30}); ui->sbTR->values ({5, 10, 15, 30});
ui->sbTR->setValue (m_settings->value ("TRPeriod_MSK144", 15).toInt()); // remember sbTR settings by mode ui->sbTR->setValue (m_settings->value ("TRPeriod_MSK144", 15).toInt()); // restore last used TRperiod
QTimer::singleShot (50, [=] { QTimer::singleShot (50, [=] {on_sbTR_valueChanged (ui->sbTR->value());});
on_sbTR_valueChanged (ui->sbTR->value()); m_bShMsgs=m_settings->value("ShMsgs_MSK144",false).toBool();
on_sbSubmode_valueChanged(ui->sbSubmode->value()); ui->cbShMsgs->setChecked(m_bShMsgs);
});
m_wideGraph->hide(); m_wideGraph->hide();
m_fastGraph->showNormal(); m_fastGraph->showNormal();
ui->TxFreqSpinBox->setValue(1500); ui->TxFreqSpinBox->setValue(1500);
@ -7419,6 +7523,10 @@ void MainWindow::on_actionMSK144_triggered()
void MainWindow::on_actionWSPR_triggered() void MainWindow::on_actionWSPR_triggered()
{ {
m_mode="WSPR"; m_mode="WSPR";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
WSPR_config(true); WSPR_config(true);
switch_mode (Modes::WSPR); switch_mode (Modes::WSPR);
m_TRperiod=120.0; m_TRperiod=120.0;
@ -7455,6 +7563,10 @@ void MainWindow::on_actionEcho_triggered()
if(nd==3) ui->actionDeepestDecode->setChecked (true); if(nd==3) ui->actionDeepestDecode->setChecked (true);
m_mode="Echo"; m_mode="Echo";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
ui->actionEcho->setChecked(true); ui->actionEcho->setChecked(true);
m_TRperiod=3.0; m_TRperiod=3.0;
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
@ -7489,6 +7601,10 @@ void MainWindow::on_actionFreqCal_triggered()
{ {
on_actionJT9_triggered(); on_actionJT9_triggered();
m_mode="FreqCal"; m_mode="FreqCal";
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
ui->actionFreqCal->setChecked(true); ui->actionFreqCal->setChecked(true);
switch_mode(Modes::FreqCal); switch_mode(Modes::FreqCal);
m_wideGraph->setMode(m_mode); m_wideGraph->setMode(m_mode);
@ -8482,6 +8598,14 @@ void MainWindow::on_sbFtol_valueChanged(int value)
{ {
m_wideGraph->setTol (value); m_wideGraph->setTol (value);
statusUpdate (); statusUpdate ();
// save last used parameters
QTimer::singleShot (200, [=] {
if (m_mode=="Q65") m_settings->setValue ("Ftol_Q65", ui->sbFtol->value());
if (m_mode=="MSK144") m_settings->setValue ("Ftol_MSK144", ui->sbFtol->value());
if (m_mode=="JT65") m_settings->setValue ("Ftol_JT65", ui->sbFtol->value ());
if (m_mode=="JT4") m_settings->setValue ("Ftol_JT4", ui->sbFtol->value());
if (m_mode=="JT9") m_settings->setValue ("Ftol_JT9", ui->sbFtol->value ());
});
} }
void::MainWindow::VHF_features_enabled(bool b) void::MainWindow::VHF_features_enabled(bool b)
@ -8543,19 +8667,25 @@ void MainWindow::on_sbTR_valueChanged(int value)
m_wideGraph->setPeriod (value, m_nsps); m_wideGraph->setPeriod (value, m_nsps);
progressBar.setMaximum (value); progressBar.setMaximum (value);
} }
if (m_mode=="Q65") {
QTimer::singleShot (200, [=] {m_settings->setValue ("TRPeriod_Q65", ui->sbTR->value ());});
}
if (m_mode=="MSK144") {
QTimer::singleShot (200, [=] {m_settings->setValue ("TRPeriod_MSK144", ui->sbTR->value ());});
}
if (m_mode=="FST4") {
chk_FST4_freq_range();
QTimer::singleShot (200, [=] {m_settings->setValue ("TRPeriod_FST4", ui->sbTR->value ());});
}
// if(m_transmitting) on_stopTxButton_clicked(); //### Is this needed or desirable? ### // if(m_transmitting) on_stopTxButton_clicked(); //### Is this needed or desirable? ###
if (m_mode=="FST4") chk_FST4_freq_range();
on_sbSubmode_valueChanged(ui->sbSubmode->value()); on_sbSubmode_valueChanged(ui->sbSubmode->value());
statusUpdate (); statusUpdate ();
// save last used parameters
QTimer::singleShot (200, [=] {
if (m_mode=="Q65") m_settings->setValue ("TRPeriod_Q65", ui->sbTR->value ());
if (m_mode=="MSK144" && (!(m_currentBand=="6m" or m_currentBand=="4m" or m_currentBand=="2m"))) {
m_settings->setValue ("TRPeriod_MSK144", ui->sbTR->value ());
}
if (m_mode=="MSK144" && (m_currentBand=="6m" or m_currentBand=="4m")) {
m_settings->setValue ("TRPeriod_MSK144_6m", ui->sbTR->value ());
}
if (m_mode=="MSK144" && m_currentBand=="2m") {
m_settings->setValue ("TRPeriod_MSK144_2m", ui->sbTR->value ());
}
if (m_mode=="FST4") m_settings->setValue ("TRPeriod_FST4", ui->sbTR->value ());
if (m_mode=="JT9") m_settings->setValue ("TRPeriod", ui->sbTR->value ());
});
} }
void MainWindow::on_sbTR_FST4W_valueChanged(int value) void MainWindow::on_sbTR_FST4W_valueChanged(int value)
@ -8602,17 +8732,21 @@ void MainWindow::on_sbSubmode_valueChanged(int n)
ui->sbTR->setVisible(false); ui->sbTR->setVisible(false);
m_TRperiod=60.0; m_TRperiod=60.0;
} else { } else {
ui->cbFast9->setEnabled(true); if(!blocked) ui->cbFast9->setEnabled(true);
} }
ui->sbTR->setVisible(m_bFast9); ui->sbTR->setVisible(m_bFast9);
if(m_bFast9) ui->TxFreqSpinBox->setValue(700); if(m_bFast9) ui->TxFreqSpinBox->setValue(700);
} }
if(m_transmitting and m_bFast9 and m_nSubMode>=4) transmit (99.0); if(m_transmitting and m_bFast9 and m_nSubMode>=4) transmit (99.0);
if (m_mode !="Q65") ui->TxFreqSpinBox->setStyleSheet(""); if (m_mode !="Q65") ui->TxFreqSpinBox->setStyleSheet("");
if (m_mode=="Q65") {QTimer::singleShot (200, [=] {m_settings->setValue("SubMode_Q65",ui->sbSubmode->value());});}
if (m_mode=="JT65") {QTimer::singleShot (200, [=] {m_settings->setValue("SubMode_JT65",ui->sbSubmode->value());});}
if (m_mode=="JT4") {QTimer::singleShot (200, [=] {m_settings->setValue("SubMode_JT4",ui->sbSubmode->value());});}
statusUpdate (); statusUpdate ();
// save last used parameters
QTimer::singleShot (200, [=] {
if (m_mode=="Q65") m_settings->setValue("SubMode_Q65",ui->sbSubmode->value());
if (m_mode=="JT65") m_settings->setValue("SubMode_JT65",ui->sbSubmode->value());
if (m_mode=="JT4") m_settings->setValue("SubMode_JT4",ui->sbSubmode->value());
if (m_mode=="JT9") m_settings->setValue("SubMode",ui->sbSubmode->value());
});
} }
void MainWindow::on_cbFast9_clicked(bool b) void MainWindow::on_cbFast9_clicked(bool b)
@ -8620,7 +8754,12 @@ void MainWindow::on_cbFast9_clicked(bool b)
if(m_mode=="JT9") { if(m_mode=="JT9") {
m_bFast9=b; m_bFast9=b;
// ui->cbAutoSeq->setVisible(b); // ui->cbAutoSeq->setVisible(b);
blocked=true; // needed to prevent a loop
on_actionJT9_triggered(); on_actionJT9_triggered();
QTimer::singleShot (50, [=] {blocked = false;}); // needed to prevent a loop
QTimer::singleShot (200, [=] {
if(m_mode=="JT9") m_settings->setValue("JT9_Fast",m_bFast9);
});
} }
if(b) { if(b) {
@ -8652,6 +8791,12 @@ void MainWindow::on_cbShMsgs_toggled(bool b)
if(ntx==4) ui->txrb4->setChecked(true); if(ntx==4) ui->txrb4->setChecked(true);
if(ntx==5) ui->txrb5->setChecked(true); if(ntx==5) ui->txrb5->setChecked(true);
if(ntx==6) ui->txrb6->setChecked(true); if(ntx==6) ui->txrb6->setChecked(true);
QTimer::singleShot (200, [=] {
if(m_mode=="MSK144") m_settings->setValue("ShMsgs_MSK144",m_bShMsgs);
if(m_mode=="Q65") m_settings->setValue("ShMsgs_Q65",m_bShMsgs);
if(m_mode=="JT65") m_settings->setValue("ShMsgs_JT65",m_bShMsgs);
if(m_mode=="JT4") m_settings->setValue("ShMsgs_JT4",m_bShMsgs);
});
} }
void MainWindow::on_cbSWL_toggled(bool b) void MainWindow::on_cbSWL_toggled(bool b)
@ -9495,7 +9640,8 @@ void MainWindow::readWidebandDecodes()
m_EMECall[dxcall].t=60*nhr + nmin; m_EMECall[dxcall].t=60*nhr + nmin;
if(w3.contains(grid_regexp)) m_EMECall[dxcall].grid4=w3; if(w3.contains(grid_regexp)) m_EMECall[dxcall].grid4=w3;
bool bCQ=line.contains(" CQ "); bool bCQ=line.contains(" CQ ");
m_EMECall[dxcall].ready2call=(bCQ or line.contains(" 73") or line.contains(" RR73")); // m_EMECall[dxcall].ready2call=(bCQ or line.contains(" 73") or line.contains(" RR73"));
m_EMECall[dxcall].ready2call=(bCQ);
Frequency frequency = (m_freqNominal/1000000) * 1000000 + int(fsked*1000.0); Frequency frequency = (m_freqNominal/1000000) * 1000000 + int(fsked*1000.0);
bool bFromDisk=qmapcom.nQDecoderDone==2; bool bFromDisk=qmapcom.nQDecoderDone==2;
if(!bFromDisk and (m_EMECall[dxcall].grid4.contains(grid_regexp) or bCQ)) { if(!bFromDisk and (m_EMECall[dxcall].grid4.contains(grid_regexp) or bCQ)) {
@ -10630,45 +10776,25 @@ void MainWindow::on_houndButton_clicked (bool checked)
void MainWindow::on_ft8Button_clicked() void MainWindow::on_ft8Button_clicked()
{ {
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionFT8_triggered(); on_actionFT8_triggered();
} }
void MainWindow::on_ft4Button_clicked() void MainWindow::on_ft4Button_clicked()
{ {
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionFT4_triggered(); on_actionFT4_triggered();
} }
void MainWindow::on_msk144Button_clicked() void MainWindow::on_msk144Button_clicked()
{ {
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionMSK144_triggered(); on_actionMSK144_triggered();
} }
void MainWindow::on_q65Button_clicked() void MainWindow::on_q65Button_clicked()
{ {
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionQ65_triggered(); on_actionQ65_triggered();
} }
void MainWindow::on_jt65Button_clicked() void MainWindow::on_jt65Button_clicked()
{ {
if(m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionJT65_triggered(); on_actionJT65_triggered();
} }