Merge branch 'feat-fst280' of bitbucket.org:k1jt/wsjtx into feat-fst280

This commit is contained in:
Joe Taylor 2020-06-28 16:27:23 -04:00
commit 1610375eee
32 changed files with 814 additions and 540 deletions

View File

@ -230,7 +230,7 @@ namespace
|IL|IN|KS|KY|LA|LAX|MAR|MB|MDC |IL|IN|KS|KY|LA|LAX|MAR|MB|MDC
|ME|MI|MN|MO|MS|MT|NC|ND|NE|NFL |ME|MI|MN|MO|MS|MT|NC|ND|NE|NFL
|NH|NL|NLI|NM|NNJ|NNY|NT|NTX|NV |NH|NL|NLI|NM|NNJ|NNY|NT|NTX|NV
|OH|OK|ONE|ONN|ONS|OR|ORG|PAC |OH|OK|ONE|ONN|ONS|OR|ORG|PAC|PE
|PR|QC|RI|SB|SC|SCV|SD|SDG|SF |PR|QC|RI|SB|SC|SCV|SD|SDG|SF
|SFL|SJV|SK|SNJ|STX|SV|TN|UT|VA |SFL|SJV|SK|SNJ|STX|SV|TN|UT|VA
|VI|VT|WCF|WI|WMA|WNY|WPA|WTX |VI|VT|WCF|WI|WMA|WNY|WPA|WTX

26
NEWS
View File

@ -13,6 +13,32 @@
Copyright 2001 - 2020 by Joe Taylor, K1JT. Copyright 2001 - 2020 by Joe Taylor, K1JT.
Release: WSJT-X 2.2.2
June 22, 2020
---------------------
WSJT-X v2.2.2 is a bug fix release, mainly to incorporate the new RAC
section PE into the FT8/FT4/MSK144 Contest Mode for Field Day.
- Stations intending to operate in Field Day (FD) are urged to
upgrade to this release, without it you cannot set your section to
PE, and of equal importance you cannot decode contest messages from
stations who are operating from PE without this upgrade.
- FT8 decoder speeded up in Normal and Fast modes. This change gives
a speed of decoding closer to that of v2.1.2 without compromising
the number of decodes. It is particularly targeted for slower
single board computer users such as the Raspberry Pi Model 3 or
similar.
- Thanks to our user interface language translation contributors for
many improvements to the translated strings.
- The DX Grid field is now cleared automatically when the DX Call
field is changed. Care should be taken to complete entry of a
callsign before entering a grid square.
Release: WSJT-X 2.2.1 Release: WSJT-X 2.2.1
June 6, 2020 June 6, 2020
--------------------- ---------------------

View File

@ -425,28 +425,23 @@ MessageClient::MessageClient (QString const& id, QString const& version, QString
{ {
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
connect (&*m_, static_cast<void (impl::*) (impl::SocketError)> (&impl::error) connect (&*m_, static_cast<void (impl::*) (impl::SocketError)> (&impl::error)
, [this] (impl::SocketError e) , [this] (impl::SocketError e) {
{
#if defined (Q_OS_WIN)
if (e != impl::NetworkError // take this out when Qt 5.5
// stops doing this
// spuriously
&& e != impl::ConnectionRefusedError) // not
// interested
// in this with
// UDP socket
#else #else
Q_UNUSED (e); connect (&*m_, &impl::errorOccurred, [this] (impl::SocketError e) {
#endif
#if defined (Q_OS_WIN)
// take this out when Qt 5.5 stops doing this spuriously
if (e != impl::NetworkError
// not interested in this with UDP socket
&& e != impl::ConnectionRefusedError)
#else
Q_UNUSED (e);
#endif #endif
{ {
Q_EMIT error (m_->errorString ()); Q_EMIT error (m_->errorString ());
} }
}); });
#else
connect (&*m_, &impl::errorOccurred, [this] (impl::SocketError) {
Q_EMIT error (m_->errorString ());
});
#endif
set_server (server); set_server (server);
} }
@ -573,7 +568,7 @@ void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QStr
, QString const& comments, QString const& name, QDateTime time_on , QString const& comments, QString const& name, QDateTime time_on
, QString const& operator_call, QString const& my_call , QString const& operator_call, QString const& my_call
, QString const& my_grid, QString const& exchange_sent , QString const& my_grid, QString const& exchange_sent
, QString const& exchange_rcvd) , QString const& exchange_rcvd, QString const& propmode)
{ {
if (m_->server_port_ && !m_->server_string_.isEmpty ()) if (m_->server_port_ && !m_->server_string_.isEmpty ())
{ {
@ -582,8 +577,8 @@ void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QStr
out << time_off << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 () out << time_off << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 ()
<< report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 () << report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 ()
<< name.toUtf8 () << time_on << operator_call.toUtf8 () << my_call.toUtf8 () << my_grid.toUtf8 () << name.toUtf8 () << time_on << operator_call.toUtf8 () << my_call.toUtf8 () << my_grid.toUtf8 ()
<< exchange_sent.toUtf8 () << exchange_rcvd.toUtf8 (); << exchange_sent.toUtf8 () << exchange_rcvd.toUtf8 () << propmode.toUtf8 ();
TRACE_UDP ("time off:" << time_off << "DX:" << dx_call << "DX grid:" << dx_grid << "dial:" << dial_frequency << "mode:" << mode << "sent:" << report_sent << "rcvd:" << report_received << "pwr:" << tx_power << "comments:" << comments << "name:" << name << "time on:" << time_on << "op:" << operator_call << "DE:" << my_call << "DE grid:" << my_grid << "exch sent:" << exchange_sent << "exch rcvd:" << exchange_rcvd); TRACE_UDP ("time off:" << time_off << "DX:" << dx_call << "DX grid:" << dx_grid << "dial:" << dial_frequency << "mode:" << mode << "sent:" << report_sent << "rcvd:" << report_received << "pwr:" << tx_power << "comments:" << comments << "name:" << name << "time on:" << time_on << "op:" << operator_call << "DE:" << my_call << "DE grid:" << my_grid << "exch sent:" << exchange_sent << "exch rcvd:" << exchange_rcvd << "prop_mode:" << propmode);
m_->send_message (out, message); m_->send_message (out, message);
} }
} }

View File

@ -69,7 +69,8 @@ public:
, QString const& report_received, QString const& tx_power, QString const& comments , QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call , QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd); , QString const& exchange_sent, QString const& exchange_rcvd
, QString const& propmode);
// ADIF_record argument should be valid ADIF excluding any <EOR> end // ADIF_record argument should be valid ADIF excluding any <EOR> end
// of record marker // of record marker

View File

@ -308,6 +308,7 @@
* My grid utf8 * My grid utf8
* Exchange sent utf8 * Exchange sent utf8
* Exchange received utf8 * Exchange received utf8
* ADIF Propagation mode utf8
* *
* The QSO logged message is sent to the server(s) when the * The QSO logged message is sent to the server(s) when the
* WSJT-X user accepts the "Log QSO" dialog by clicking the "OK" * WSJT-X user accepts the "Log QSO" dialog by clicking the "OK"

View File

@ -13,6 +13,32 @@
Copyright 2001 - 2020 by Joe Taylor, K1JT. Copyright 2001 - 2020 by Joe Taylor, K1JT.
Release: WSJT-X 2.2.2
June 22, 2020
---------------------
WSJT-X v2.2.2 is a bug fix release, mainly to incorporate the new RAC
section PE into the FT8/FT4/MSK144 Contest Mode for Field Day.
- Stations intending to operate in Field Day (FD) are urged to
upgrade to this release, without it you cannot set your section to
PE, and of equal importance you cannot decode contest messages from
stations who are operating from PE without this upgrade.
- FT8 decoder speeded up in Normal and Fast modes. This change gives
a speed of decoding closer to that of v2.1.2 without compromising
the number of decodes. It is particularly targeted for slower
single board computer users such as the Raspberry Pi Model 3 or
similar.
- Thanks to our user interface language translation contributors for
many improvements to the translated strings.
- The DX Grid field is now cleared automatically when the DX Call
field is changed. Care should be taken to complete entry of a
callsign before entering a grid square.
Release: WSJT-X 2.2.1 Release: WSJT-X 2.2.1
June 6, 2020 June 6, 2020
--------------------- ---------------------

View File

@ -25,8 +25,9 @@ namespace
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Operator"), QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Operator"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Call"), QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Call"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Grid"), QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Grid"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exchange Sent"), QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exch Sent"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exchange Rcvd"), QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exch Rcvd"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Prop"),
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Comments"), QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Comments"),
}; };
} }
@ -212,7 +213,8 @@ void MessageAggregatorMainWindow::log_qso (QString const& /*id*/, QDateTime time
, QString const& tx_power, QString const& comments , QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call , QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd) , QString const& exchange_sent, QString const& exchange_rcvd
, QString const& prop_mode)
{ {
QList<QStandardItem *> row; QList<QStandardItem *> row;
row << new QStandardItem {time_on.toString ("dd-MMM-yyyy hh:mm:ss")} row << new QStandardItem {time_on.toString ("dd-MMM-yyyy hh:mm:ss")}
@ -230,6 +232,7 @@ void MessageAggregatorMainWindow::log_qso (QString const& /*id*/, QDateTime time
<< new QStandardItem {my_grid} << new QStandardItem {my_grid}
<< new QStandardItem {exchange_sent} << new QStandardItem {exchange_sent}
<< new QStandardItem {exchange_rcvd} << new QStandardItem {exchange_rcvd}
<< new QStandardItem {prop_mode}
<< new QStandardItem {comments}; << new QStandardItem {comments};
log_->appendRow (row); log_->appendRow (row);
log_table_view_->resizeColumnsToContents (); log_table_view_->resizeColumnsToContents ();

View File

@ -33,7 +33,7 @@ public:
, QString const& report_received, QString const& tx_power, QString const& comments , QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call , QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd); , QString const& exchange_sent, QString const& exchange_rcvd, QString const& prop_mode);
private: private:
void add_client (QString const& id, QString const& version, QString const& revision); void add_client (QString const& id, QString const& version, QString const& revision);

View File

@ -345,9 +345,10 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s
QByteArray my_grid; QByteArray my_grid;
QByteArray exchange_sent; QByteArray exchange_sent;
QByteArray exchange_rcvd; QByteArray exchange_rcvd;
QByteArray prop_mode;
in >> time_off >> dx_call >> dx_grid >> dial_frequency >> mode >> report_sent >> report_received in >> time_off >> dx_call >> dx_grid >> dial_frequency >> mode >> report_sent >> report_received
>> tx_power >> comments >> name >> time_on >> operator_call >> my_call >> my_grid >> tx_power >> comments >> name >> time_on >> operator_call >> my_call >> my_grid
>> exchange_sent >> exchange_rcvd; >> exchange_sent >> exchange_rcvd >> prop_mode;
if (check_status (in) != Fail) if (check_status (in) != Fail)
{ {
Q_EMIT self_->qso_logged (id, time_off, QString::fromUtf8 (dx_call), QString::fromUtf8 (dx_grid) Q_EMIT self_->qso_logged (id, time_off, QString::fromUtf8 (dx_call), QString::fromUtf8 (dx_grid)
@ -356,7 +357,7 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s
, QString::fromUtf8 (comments), QString::fromUtf8 (name), time_on , QString::fromUtf8 (comments), QString::fromUtf8 (name), time_on
, QString::fromUtf8 (operator_call), QString::fromUtf8 (my_call) , QString::fromUtf8 (operator_call), QString::fromUtf8 (my_call)
, QString::fromUtf8 (my_grid), QString::fromUtf8 (exchange_sent) , QString::fromUtf8 (my_grid), QString::fromUtf8 (exchange_sent)
, QString::fromUtf8 (exchange_rcvd)); , QString::fromUtf8 (exchange_rcvd), QString::fromUtf8 (prop_mode));
} }
} }
break; break;

View File

@ -106,7 +106,7 @@ public:
, QString const& report_received, QString const& tx_power, QString const& comments , QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call , QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd); , QString const& exchange_sent, QString const& exchange_rcvd, QString const& prop_mode);
Q_SIGNAL void decodes_cleared (QString const& id); Q_SIGNAL void decodes_cleared (QString const& id);
Q_SIGNAL void logged_ADIF (QString const& id, QByteArray const& ADIF); Q_SIGNAL void logged_ADIF (QString const& id, QByteArray const& ADIF);

View File

@ -102,7 +102,7 @@ public:
, QString const& report_received, QString const& tx_power , QString const& report_received, QString const& tx_power
, QString const& comments, QString const& name, QDateTime time_on , QString const& comments, QString const& name, QDateTime time_on
, QString const& operator_call, QString const& my_call, QString const& my_grid , QString const& operator_call, QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd) , QString const& exchange_sent, QString const& exchange_rcvd, QString const& prop_mode)
{ {
if (client_id == id_) if (client_id == id_)
{ {
@ -111,12 +111,13 @@ public:
<< "rpt_rcvd:" << report_received << "Tx_pwr:" << tx_power << "comments:" << comments << "rpt_rcvd:" << report_received << "Tx_pwr:" << tx_power << "comments:" << comments
<< "name:" << name << "operator_call:" << operator_call << "my_call:" << my_call << "name:" << name << "operator_call:" << operator_call << "my_call:" << my_call
<< "my_grid:" << my_grid << "exchange_sent:" << exchange_sent << "my_grid:" << my_grid << "exchange_sent:" << exchange_sent
<< "exchange_rcvd:" << exchange_rcvd; << "exchange_rcvd:" << exchange_rcvd << "prop_mode:" << prop_mode;
std::cout << QByteArray {80, '-'}.data () << '\n'; std::cout << QByteArray {80, '-'}.data () << '\n';
std::cout << tr ("%1: Logged %2 grid: %3 power: %4 sent: %5 recd: %6 freq: %7 time_off: %8 op: %9 my_call: %10 my_grid: %11") std::cout << tr ("%1: Logged %2 grid: %3 power: %4 sent: %5 recd: %6 freq: %7 time_off: %8 op: %9 my_call: %10 my_grid: %11 exchange_sent: %12 exchange_rcvd: %13 comments: %14 prop_mode: %15")
.arg (id_).arg (dx_call).arg (dx_grid).arg (tx_power).arg (report_sent).arg (report_received) .arg (id_).arg (dx_call).arg (dx_grid).arg (tx_power).arg (report_sent).arg (report_received)
.arg (dial_frequency).arg (time_off.toString("yyyy-MM-dd hh:mm:ss.z")).arg (operator_call) .arg (dial_frequency).arg (time_off.toString("yyyy-MM-dd hh:mm:ss.z")).arg (operator_call)
.arg (my_call).arg (my_grid).toStdString () .arg (my_call).arg (my_grid).arg (exchange_sent).arg (exchange_rcvd)
.arg (comments).arg (prop_mode).toStdString ()
<< std::endl; << std::endl;
} }
} }

View File

@ -1,7 +1,7 @@
// Status=edited // Status=edited
Download and execute the package file {win32} (WinXP, Vista, Win 7, Download and execute the package file {win32} (Win 7,
Win 8, Win10, 32-bit) or {win64} (Vista, Win 7, Win 8, Win10, 64-bit) Win 8, Win10, 32-bit) or {win64} (Win 7, Win 8, Win10, 64-bit)
following these instructions: following these instructions:
* Install _WSJT-X_ into its own directory, for example `C:\WSJTX` or `C:\WSJT\WSJTX`, rather than the conventional location `C:\Program * Install _WSJT-X_ into its own directory, for example `C:\WSJTX` or `C:\WSJT\WSJTX`, rather than the conventional location `C:\Program

View File

@ -196,7 +196,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
! the value of nrx is used to decide when mycall13 or dxcall13 should ! the value of nrx is used to decide when mycall13 or dxcall13 should
! be used in place of a callsign from the hashtable ! be used in place of a callsign from the hashtable
! !
parameter (NSEC=84) !Number of ARRL Sections parameter (NSEC=85) !Number of ARRL Sections
parameter (NUSCAN=65) !Number of US states and Canadian provinces parameter (NUSCAN=65) !Number of US states and Canadian provinces
parameter (MAXGRID4=32400) parameter (MAXGRID4=32400)
integer*8 n58 integer*8 n58
@ -228,7 +228,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
"ONS","OR ","ORG","PAC","PR ","QC ","RI ","SB ","SC ","SCV", & "ONS","OR ","ORG","PAC","PR ","QC ","RI ","SB ","SC ","SCV", &
"SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX","SV ","TN ", & "SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX","SV ","TN ", &
"UT ","VA ","VI ","VT ","WCF","WI ","WMA","WNY","WPA","WTX", & "UT ","VA ","VI ","VT ","WCF","WI ","WMA","WNY","WPA","WTX", &
"WV ","WWA","WY ","DX "/ "WV ","WWA","WY ","DX ","PE "/
data cmult/ & data cmult/ &
"AL ","AK ","AZ ","AR ","CA ","CO ","CT ","DE ","FL ","GA ", & "AL ","AK ","AZ ","AR ","CA ","CO ","CT ","DE ","FL ","GA ", &
"HI ","ID ","IL ","IN ","IA ","KS ","KY ","LA ","ME ","MD ", & "HI ","ID ","IL ","IN ","IA ","KS ","KY ","LA ","ME ","MD ", &
@ -868,7 +868,7 @@ subroutine pack77_03(nwords,w,i3,n3,c77)
! Check 0.3 and 0.4 (ARRL Field Day exchange) ! Check 0.3 and 0.4 (ARRL Field Day exchange)
! Example message: WA9XYZ KA1ABC R 16A EMA 28 28 1 4 3 7 71 ! Example message: WA9XYZ KA1ABC R 16A EMA 28 28 1 4 3 7 71
parameter (NSEC=84) !Number of ARRL Sections parameter (NSEC=85) !Number of ARRL Sections
character*13 w(19) character*13 w(19)
character*77 c77 character*77 c77
character*6 bcall_1,bcall_2 character*6 bcall_1,bcall_2
@ -883,7 +883,7 @@ subroutine pack77_03(nwords,w,i3,n3,c77)
"ONS","OR ","ORG","PAC","PR ","QC ","RI ","SB ","SC ","SCV", & "ONS","OR ","ORG","PAC","PR ","QC ","RI ","SB ","SC ","SCV", &
"SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX","SV ","TN ", & "SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX","SV ","TN ", &
"UT ","VA ","VI ","VT ","WCF","WI ","WMA","WNY","WPA","WTX", & "UT ","VA ","VI ","VT ","WCF","WI ","WMA","WNY","WPA","WTX", &
"WV ","WWA","WY ","DX "/ "WV ","WWA","WY ","DX ","PE "/
if(nwords.lt.4 .or. nwords.gt.5) return if(nwords.lt.4 .or. nwords.gt.5) return
call chkcall(w(1),bcall_1,ok1) call chkcall(w(1),bcall_1,ok1)

View File

@ -58,6 +58,8 @@ subroutine get_fst240_bitmetrics(cd,nss,hmod,nmax,bitmetrics,s4,badsync)
is1=0 is1=0
is2=0 is2=0
is3=0 is3=0
is4=0
is5=0
badsync=.false. badsync=.false.
ibmax=0 ibmax=0
@ -74,9 +76,8 @@ subroutine get_fst240_bitmetrics(cd,nss,hmod,nmax,bitmetrics,s4,badsync)
if(icos8(k-1).eq.(ip(1)-1)) is5=is5+1 if(icos8(k-1).eq.(ip(1)-1)) is5=is5+1
enddo enddo
nsync=is1+is2+is3+is4+is5 !Number of correct hard sync symbols, 0-40 nsync=is1+is2+is3+is4+is5 !Number of correct hard sync symbols, 0-40
badsync=.false. badsync=.false.
if(nsync .lt. 8) then if(nsync .lt. 16) then
badsync=.true. badsync=.true.
return return
endif endif

View File

@ -131,7 +131,7 @@ contains
norder=2 norder=2
endif endif
! The big fft is done once and is used for calculating the smoothed spectrum ! The big fft is done once and is used for calculating the smoothed spectrum
! and also for downconverting/downsampling each candidate. ! and also for downconverting/downsampling each candidate.
r_data(1:nfft1)=iwave(1:nfft1) r_data(1:nfft1)=iwave(1:nfft1)
r_data(nfft1+1:nfft1+2)=0.0 r_data(nfft1+1:nfft1+2)=0.0
@ -218,6 +218,7 @@ contains
candidates(icand,3)=fc_synced candidates(icand,3)=fc_synced
candidates(icand,4)=isbest candidates(icand,4)=isbest
enddo enddo
! remove duplicate candidates ! remove duplicate candidates
do icand=1,ncand do icand=1,ncand
fc=candidates(icand,3) fc=candidates(icand,3)
@ -226,7 +227,7 @@ contains
fc2=candidates(ic2,3) fc2=candidates(ic2,3)
isbest2=nint(candidates(ic2,4)) isbest2=nint(candidates(ic2,4))
if(ic2.ne.icand .and. fc2.gt.0.0) then if(ic2.ne.icand .and. fc2.gt.0.0) then
if(abs(fc2-fc).lt.0.05*baud) then ! same frequency if(abs(fc2-fc).lt.0.10*baud) then ! same frequency
if(abs(isbest2-isbest).le.2) then if(abs(isbest2-isbest).le.2) then
candidates(ic2,3)=-1 candidates(ic2,3)=-1
endif endif
@ -243,6 +244,7 @@ contains
endif endif
enddo enddo
ncand=ic ncand=ic
do icand=1,ncand do icand=1,ncand
sync=candidates(icand,2) sync=candidates(icand,2)
fc_synced=candidates(icand,3) fc_synced=candidates(icand,3)
@ -269,7 +271,7 @@ contains
ns4=count(hbits(229:244).eq.(/0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0/)) ns4=count(hbits(229:244).eq.(/0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0/))
ns5=count(hbits(305:320).eq.(/0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0/)) ns5=count(hbits(305:320).eq.(/0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0/))
nsync_qual=ns1+ns2+ns3+ns4+ns5 nsync_qual=ns1+ns2+ns3+ns4+ns5
if(nsync_qual.lt. 26) cycle !### Value ?? ### if(nsync_qual.lt. 44) cycle !### Value ?? ###
scalefac=2.83 scalefac=2.83
llra( 1: 60)=bitmetrics( 17: 76, 1) llra( 1: 60)=bitmetrics( 17: 76, 1)
@ -349,7 +351,7 @@ contains
iaptype=0 iaptype=0
qual=0. qual=0.
fsig=fc_synced - 1.5*hmod*baud fsig=fc_synced - 1.5*hmod*baud
write(21,'(8i4,f7.1,f7.2,3f7.1,1x,a37)') & write(21,'(i6,7i6,f7.1,f9.2,3f7.1,1x,a37)') &
nutc,icand,itry,iaptype,ijitter,ntype,nsync_qual,nharderrors,dmin,sync,xsnr,xdt,fsig,msg nutc,icand,itry,iaptype,ijitter,ntype,nsync_qual,nharderrors,dmin,sync,xsnr,xdt,fsig,msg
call this%callback(nutc,smax1,nsnr,xdt,fsig,msg, & call this%callback(nutc,smax1,nsnr,xdt,fsig,msg, &
iaptype,qual,ntrperiod) iaptype,qual,ntrperiod)
@ -479,12 +481,14 @@ write(21,'(8i4,f7.1,f7.2,3f7.1,1x,a37)') &
complex c_bigfft(0:nfft1/2) complex c_bigfft(0:nfft1/2)
integer hmod integer hmod
integer indx(100) integer indx(100),im(1)
real candidates(100,4) real candidates(100,4)
real candidates0(100,4) real candidates0(100,4)
real snr_cand(100) real snr_cand(100)
real s(18000) real s(18000)
real s2(18000) real s2(18000)
real xdb(-3:3)
data xdb/0.25,0.50,0.75,1.0,0.75,0.50,0.25/
data nfft1z/-1/ data nfft1z/-1/
save nfft1z save nfft1z
@ -530,27 +534,25 @@ write(21,'(8i4,f7.1,f7.2,3f7.1,1x,a37)') &
candidates=0 candidates=0
if(ia.lt.3) ia=3 if(ia.lt.3) ia=3
if(ib.gt.18000-2) ib=18000-2 if(ib.gt.18000-2) ib=18000-2
do i=ia,ib
if((s2(i).gt.s2(i-2)).and. &
(s2(i).gt.s2(i+2)).and. &
(s2(i).gt.thresh).and.ncand.lt.100) then
ncand=ncand+1
candidates(ncand,1)=df2*i
candidates(ncand,2)=s2(i)
endif
enddo
snr_cand=0. pval=99.99
snr_cand(1:ncand)=candidates(1:ncand,2) do while(ncand.lt.100 .and. pval.gt.thresh)
call indexx(snr_cand,ncand,indx) im=maxloc(s2(ia:ib))
nmax=min(ncand,20) iploc=ia+im(1)-1
do i=1,nmax pval=s2(iploc)
j=indx(ncand+1-i) if(s2(iploc).gt.thresh) then
candidates0(i,1:4)=candidates(j,1:4) do i=-3,+3
enddo k=iploc+2*hmod*i
ncand=nmax if(k.ge.ia .and. k.le.ib) then
candidates(1:ncand,1:4)=candidates0(1:ncand,1:4) s2(k)=max(0.,s2(k)-0.9*pval*xdb(i))
candidates(ncand+1:,1:4)=0. endif
enddo
ncand=ncand+1
candidates(ncand,1)=df2*iploc
candidates(ncand,2)=pval
endif
enddo
return return
end subroutine get_candidates_fst240 end subroutine get_candidates_fst240

View File

@ -442,7 +442,7 @@ bool WorkedBefore::add (QString const& call
QTextStream out {&file}; QTextStream out {&file};
if (!file.size ()) if (!file.size ())
{ {
out << "WSJT-X ADIF Export<eh>" << // new file out << "WSJT-X ADIF Export<eoh>" << // new file
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
endl endl
#else #else

View File

@ -74,7 +74,7 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q
QDateTime const& dateTimeOff, QString const& band, QString const& comments, QDateTime const& dateTimeOff, QString const& band, QString const& comments,
QString const& name, QString const& strDialFreq, QString const& myCall, QString const& name, QString const& strDialFreq, QString const& myCall,
QString const& myGrid, QString const& txPower, QString const& operator_call, QString const& myGrid, QString const& txPower, QString const& operator_call,
QString const& xSent, QString const& xRcvd) QString const& xSent, QString const& xRcvd, QString const& propmode)
{ {
QString t; QString t;
t = "<call:" + QString::number(hisCall.size()) + ">" + hisCall; t = "<call:" + QString::number(hisCall.size()) + ">" + hisCall;
@ -101,6 +101,7 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q
if(comments!="") t += " <comment:" + QString::number(comments.size()) + ">" + comments; if(comments!="") t += " <comment:" + QString::number(comments.size()) + ">" + comments;
if(name!="") t += " <name:" + QString::number(name.size()) + ">" + name; if(name!="") t += " <name:" + QString::number(name.size()) + ">" + name;
if(operator_call!="") t+=" <operator:" + QString::number(operator_call.size()) + ">" + operator_call; if(operator_call!="") t+=" <operator:" + QString::number(operator_call.size()) + ">" + operator_call;
if(propmode!="") t += " <prop_mode:" + QString::number(propmode.size()) + ">" + propmode;
if (xSent.size ()) if (xSent.size ())
{ {
auto words = xSent.split (' ' auto words = xSent.split (' '

View File

@ -44,7 +44,7 @@ public:
QDateTime const& dateTimeOff, QString const& band, QString const& comments, QDateTime const& dateTimeOff, QString const& band, QString const& comments,
QString const& name, QString const& strDialFreq, QString const& myCall, QString const& name, QString const& strDialFreq, QString const& myCall,
QString const& m_myGrid, QString const& m_txPower, QString const& operator_call, QString const& m_myGrid, QString const& m_txPower, QString const& operator_call,
QString const& xSent, QString const& xRcvd); QString const& xSent, QString const& xRcvd, QString const& propmode);
Q_SIGNAL void finished_loading (int worked_before_record_count, QString const& error) const; Q_SIGNAL void finished_loading (int worked_before_record_count, QString const& error) const;

View File

@ -323,6 +323,7 @@ int main(int argc, char *argv[])
db.exec ("PRAGMA locking_mode=EXCLUSIVE"); db.exec ("PRAGMA locking_mode=EXCLUSIVE");
int result; int result;
auto const& original_style_sheet = a.styleSheet ();
do do
{ {
#if WSJT_QDEBUG_TO_FILE #if WSJT_QDEBUG_TO_FILE
@ -387,6 +388,9 @@ int main(int argc, char *argv[])
splash.raise (); splash.raise ();
QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit())); QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit()));
result = a.exec(); result = a.exec();
// ensure config switches start with the right style sheet
a.setStyleSheet (original_style_sheet);
} }
while (!result && !multi_settings.exit ()); while (!result && !multi_settings.exit ());

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -888,6 +888,16 @@ Format:
</context> </context>
<context> <context>
<name>Directory</name> <name>Directory</name>
<message>
<location filename="../SampleDownloader/Directory.cpp" line="51"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SampleDownloader/Directory.cpp" line="51"/>
<source>Progress</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SampleDownloader/Directory.cpp" line="113"/> <location filename="../SampleDownloader/Directory.cpp" line="113"/>
<location filename="../SampleDownloader/Directory.cpp" line="189"/> <location filename="../SampleDownloader/Directory.cpp" line="189"/>

View File

@ -4173,9 +4173,8 @@ UDP 服务器 %2:%3</translation>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="340"/>
<source>Invalid rig name - \ &amp; / not allowed</source> <source>Invalid rig name - \ &amp; / not allowed</source>
<translation>线 - \ &amp; / </translation> <translation type="vanished">线 - \ &amp; / </translation>
</message> </message>
<message> <message>
<location filename="../widgets/widegraph.cpp" line="18"/> <location filename="../widgets/widegraph.cpp" line="18"/>

View File

@ -4173,7 +4173,6 @@ UDP 服務器 %2:%3</translation>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="340"/>
<source>Invalid rig name - \ &amp; / not allowed</source> <source>Invalid rig name - \ &amp; / not allowed</source>
<translation> - \ &amp; / </translation> <translation> - \ &amp; / </translation>
</message> </message>

View File

@ -20,10 +20,10 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
"weak-signal Amateur Radio communication. <br /><br />" "weak-signal Amateur Radio communication. <br /><br />"
"&copy; 2001-2020 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />" "&copy; 2001-2020 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
"and Steve Franke, K9AN. <br /><br />" "and Steve Franke, K9AN. <br /><br />"
"We gratefully acknowledge contributions from AC6SL, AE4JY, DJ0OT, <br />" "We gratefully acknowledge contributions from AC6SL, AE4JY,<br />"
"G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL, KA9Q, KB1ZMX,<br />" "DF2ET, DJ0OT, G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL,<br />"
"KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ,<br />" "KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY,<br />"
"VK7MO, W4TI, W4TV, and W9MDB.<br /><br />" "VK3ACF, VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
"WSJT-X is licensed under the terms of Version 3 <br />" "WSJT-X is licensed under the terms of Version 3 <br />"
"of the GNU General Public License (GPL) <br /><br />" "of the GNU General Public License (GPL) <br /><br />"
"<a href=" WSJTX_STRINGIZE (PROJECT_HOMEPAGE) ">" "<a href=" WSJTX_STRINGIZE (PROJECT_HOMEPAGE) ">"

View File

@ -46,7 +46,8 @@ Astro::Astro(QSettings * settings, Configuration const * configuration, QWidget
{ {
ui_->setupUi (this); ui_->setupUi (this);
setWindowTitle (QApplication::applicationName () + " - " + tr ("Astronomical Data")); setWindowTitle (QApplication::applicationName () + " - " + tr ("Astronomical Data"));
setStyleSheet ("QWidget {background: white;}"); setBackgroundRole (QPalette::Base);
setAutoFillBackground (true);
connect (ui_->cbDopplerTracking, &QAbstractButton::toggled, ui_->doppler_widget, &QWidget::setVisible); connect (ui_->cbDopplerTracking, &QAbstractButton::toggled, ui_->doppler_widget, &QWidget::setVisible);
read_settings (); read_settings ();
ui_->text_label->clear (); ui_->text_label->clear ();

View File

@ -15,6 +15,37 @@
#include "ui_logqso.h" #include "ui_logqso.h"
#include "moc_logqso.cpp" #include "moc_logqso.cpp"
namespace
{
struct PropMode
{
char const * id_;
char const * name_;
};
constexpr PropMode prop_modes[] =
{
{"", ""}
, {"AS", QT_TRANSLATE_NOOP ("LogQSO", "Aircraft scatter")}
, {"AUE", QT_TRANSLATE_NOOP ("LogQSO", "Aurora-E")}
, {"AUR", QT_TRANSLATE_NOOP ("LogQSO", "Aurora")}
, {"BS", QT_TRANSLATE_NOOP ("LogQSO", "Back scatter")}
, {"ECH", QT_TRANSLATE_NOOP ("LogQSO", "Echolink")}
, {"EME", QT_TRANSLATE_NOOP ("LogQSO", "Earth-moon-earth")}
, {"ES", QT_TRANSLATE_NOOP ("LogQSO", "Sporadic E")}
, {"F2", QT_TRANSLATE_NOOP ("LogQSO", "F2 Reflection")}
, {"FAI", QT_TRANSLATE_NOOP ("LogQSO", "Field aligned irregularities")}
, {"INTERNET", QT_TRANSLATE_NOOP ("LogQSO", "Internet-assisted")}
, {"ION", QT_TRANSLATE_NOOP ("LogQSO", "Ionoscatter")}
, {"IRL", QT_TRANSLATE_NOOP ("LogQSO", "IRLP")}
, {"MS", QT_TRANSLATE_NOOP ("LogQSO", "Meteor scatter")}
, {"RPT", QT_TRANSLATE_NOOP ("LogQSO", "Non-satellite repeater or transponder")}
, {"RS", QT_TRANSLATE_NOOP ("LogQSO", "Rain scatter")}
, {"SAT", QT_TRANSLATE_NOOP ("LogQSO", "Satellite")}
, {"TEP", QT_TRANSLATE_NOOP ("LogQSO", "Trans-equatorial")}
, {"TR", QT_TRANSLATE_NOOP ("LogQSO", "Troposheric ducting")}
};
}
LogQSO::LogQSO(QString const& programTitle, QSettings * settings LogQSO::LogQSO(QString const& programTitle, QSettings * settings
, Configuration const * config, LogBook * log, QWidget *parent) , Configuration const * config, LogBook * log, QWidget *parent)
: QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint} : QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint}
@ -25,6 +56,10 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings
{ {
ui->setupUi(this); ui->setupUi(this);
setWindowTitle(programTitle + " - Log QSO"); setWindowTitle(programTitle + " - Log QSO");
for (auto const& prop_mode : prop_modes)
{
ui->comboBoxPropMode->addItem (prop_mode.name_, prop_mode.id_);
}
loadSettings (); loadSettings ();
ui->grid->setValidator (new MaidenheadLocatorValidator {this}); ui->grid->setValidator (new MaidenheadLocatorValidator {this});
} }
@ -39,8 +74,15 @@ void LogQSO::loadSettings ()
restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ()); restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ());
ui->cbTxPower->setChecked (m_settings->value ("SaveTxPower", false).toBool ()); ui->cbTxPower->setChecked (m_settings->value ("SaveTxPower", false).toBool ());
ui->cbComments->setChecked (m_settings->value ("SaveComments", false).toBool ()); ui->cbComments->setChecked (m_settings->value ("SaveComments", false).toBool ());
ui->cbPropMode->setChecked (m_settings->value ("SavePropMode", false).toBool ());
m_txPower = m_settings->value ("TxPower", "").toString (); m_txPower = m_settings->value ("TxPower", "").toString ();
m_comments = m_settings->value ("LogComments", "").toString(); m_comments = m_settings->value ("LogComments", "").toString();
int prop_index {0};
if (ui->cbPropMode->isChecked ())
{
prop_index = ui->comboBoxPropMode->findData (m_settings->value ("PropMode", "").toString());
}
ui->comboBoxPropMode->setCurrentIndex (prop_index);
m_settings->endGroup (); m_settings->endGroup ();
} }
@ -50,8 +92,10 @@ void LogQSO::storeSettings () const
m_settings->setValue ("geometry", saveGeometry ()); m_settings->setValue ("geometry", saveGeometry ());
m_settings->setValue ("SaveTxPower", ui->cbTxPower->isChecked ()); m_settings->setValue ("SaveTxPower", ui->cbTxPower->isChecked ());
m_settings->setValue ("SaveComments", ui->cbComments->isChecked ()); m_settings->setValue ("SaveComments", ui->cbComments->isChecked ());
m_settings->setValue ("SavePropMode", ui->cbPropMode->isChecked ());
m_settings->setValue ("TxPower", m_txPower); m_settings->setValue ("TxPower", m_txPower);
m_settings->setValue ("LogComments", m_comments); m_settings->setValue ("LogComments", m_comments);
m_settings->setValue ("PropMode", ui->comboBoxPropMode->currentData ());
m_settings->endGroup (); m_settings->endGroup ();
} }
@ -100,6 +144,10 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString
ui->loggedOperator->setText(m_config->opCall()); ui->loggedOperator->setText(m_config->opCall());
ui->exchSent->setText (xSent); ui->exchSent->setText (xSent);
ui->exchRcvd->setText (xRcvd); ui->exchRcvd->setText (xRcvd);
if (!ui->cbPropMode->isChecked ())
{
ui->comboBoxPropMode->setCurrentIndex (-1);
}
using SpOp = Configuration::SpecialOperatingActivity; using SpOp = Configuration::SpecialOperatingActivity;
auto special_op = m_config->special_op_id (); auto special_op = m_config->special_op_id ();
@ -178,6 +226,7 @@ void LogQSO::accept()
} }
} }
auto const& prop_mode = ui->comboBoxPropMode->currentData ().toString ();
//Log this QSO to file "wsjtx.log" //Log this QSO to file "wsjtx.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")}; static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")};
if(!f.open(QIODevice::Text | QIODevice::Append)) { if(!f.open(QIODevice::Text | QIODevice::Append)) {
@ -191,7 +240,7 @@ void LogQSO::accept()
dateTimeOff.time().toString("hh:mm:ss,") + hisCall + "," + dateTimeOff.time().toString("hh:mm:ss,") + hisCall + "," +
hisGrid + "," + strDialFreq + "," + mode + hisGrid + "," + strDialFreq + "," + mode +
"," + rptSent + "," + rptRcvd + "," + m_txPower + "," + rptSent + "," + rptRcvd + "," + m_txPower +
"," + m_comments + "," + name; "," + m_comments + "," + name + "," + prop_mode;
QTextStream out(&f); QTextStream out(&f);
out << logEntry << out << logEntry <<
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
@ -220,6 +269,7 @@ void LogQSO::accept()
, m_myGrid , m_myGrid
, xsent , xsent
, xrcvd , xrcvd
, prop_mode
, m_log->QSOToADIF (hisCall , m_log->QSOToADIF (hisCall
, hisGrid , hisGrid
, mode , mode
@ -236,7 +286,8 @@ void LogQSO::accept()
, m_txPower , m_txPower
, operator_call , operator_call
, xsent , xsent
, xrcvd)); , xrcvd
, prop_mode));
QDialog::accept(); QDialog::accept();
} }

View File

@ -42,7 +42,7 @@ signals:
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call , QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd , QString const& exchange_sent, QString const& exchange_rcvd
, QByteArray const& ADIF); , QString const& propmode, QByteArray const& ADIF);
protected: protected:
void hideEvent (QHideEvent *); void hideEvent (QHideEvent *);

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>377</width> <width>440</width>
<height>287</height> <height>322</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -46,6 +46,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>call</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -68,6 +71,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>start_date_time</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -103,6 +109,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>end_date_time</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -142,6 +151,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>mode</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -171,6 +183,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>band</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -200,6 +215,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>sent</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -229,6 +247,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>rcvd</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -258,6 +279,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>grid</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -290,6 +314,9 @@
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="buddy">
<cstring>name</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -310,6 +337,9 @@
<property name="text"> <property name="text">
<string>Tx power</string> <string>Tx power</string>
</property> </property>
<property name="buddy">
<cstring>txPower</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -339,6 +369,9 @@
<property name="text"> <property name="text">
<string>Comments</string> <string>Comments</string>
</property> </property>
<property name="buddy">
<cstring>comments</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -369,6 +402,9 @@
<property name="text"> <property name="text">
<string>Operator</string> <string>Operator</string>
</property> </property>
<property name="buddy">
<cstring>loggedOperator</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -403,6 +439,9 @@
<property name="text"> <property name="text">
<string>Exch sent</string> <string>Exch sent</string>
</property> </property>
<property name="buddy">
<cstring>exchSent</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -433,6 +472,9 @@
<property name="text"> <property name="text">
<string>Rcvd</string> <string>Rcvd</string>
</property> </property>
<property name="buddy">
<cstring>exchRcvd</cstring>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -447,6 +489,30 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0,0">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Prop Mode</string>
</property>
<property name="buddy">
<cstring>comboBoxPropMode</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxPropMode"/>
</item>
<item>
<widget class="QCheckBox" name="cbPropMode">
<property name="text">
<string>Retain</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
@ -486,6 +552,11 @@
<tabstop>cbTxPower</tabstop> <tabstop>cbTxPower</tabstop>
<tabstop>comments</tabstop> <tabstop>comments</tabstop>
<tabstop>cbComments</tabstop> <tabstop>cbComments</tabstop>
<tabstop>loggedOperator</tabstop>
<tabstop>exchSent</tabstop>
<tabstop>exchRcvd</tabstop>
<tabstop>comboBoxPropMode</tabstop>
<tabstop>cbPropMode</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>
<connections> <connections>

View File

@ -5700,7 +5700,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call , QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd , QString const& exchange_sent, QString const& exchange_rcvd
, QByteArray const& ADIF) , QString const& propmode, QByteArray const& ADIF)
{ {
QString date = QSO_date_on.toString("yyyyMMdd"); QString date = QSO_date_on.toString("yyyyMMdd");
if (!m_logBook.add (call, grid, m_config.bands()->find(dial_freq), mode, ADIF)) if (!m_logBook.add (call, grid, m_config.bands()->find(dial_freq), mode, ADIF))
@ -5711,7 +5711,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
m_messageClient->qso_logged (QSO_date_off, call, grid, dial_freq, mode, rpt_sent, rpt_received m_messageClient->qso_logged (QSO_date_off, call, grid, dial_freq, mode, rpt_sent, rpt_received
, tx_power, comments, name, QSO_date_on, operator_call, my_call, my_grid , tx_power, comments, name, QSO_date_on, operator_call, my_call, my_grid
, exchange_sent, exchange_rcvd); , exchange_sent, exchange_rcvd, propmode);
m_messageClient->logged_ADIF (ADIF); m_messageClient->logged_ADIF (ADIF);
// Log to N1MM Logger // Log to N1MM Logger

View File

@ -243,7 +243,7 @@ private slots:
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call , QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
, QString const& my_call, QString const& my_grid , QString const& my_call, QString const& my_grid
, QString const& exchange_sent, QString const& exchange_rcvd , QString const& exchange_sent, QString const& exchange_rcvd
, QByteArray const& ADIF); , QString const& propmode, QByteArray const& ADIF);
void on_bandComboBox_currentIndexChanged (int index); void on_bandComboBox_currentIndexChanged (int index);
void on_bandComboBox_activated (int index); void on_bandComboBox_activated (int index);
void on_readFreq_clicked(); void on_readFreq_clicked();

View File

@ -10,7 +10,7 @@ SOURCES += \
widgets/AbstractLogWindow.cpp \ widgets/AbstractLogWindow.cpp \
widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \ widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \
widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp \ widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp \
widgets/HelpTextWindow.cpp widgets/HelpTextWindow.cpp widgets/RestrictedSpinBox.cpp
HEADERS += \ HEADERS += \
widgets/mainwindow.h widgets/plotter.h \ widgets/mainwindow.h widgets/plotter.h \
widgets/about.h widgets/widegraph.h \ widgets/about.h widgets/widegraph.h \
@ -21,7 +21,8 @@ HEADERS += \
widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \ widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \
widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \ widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \
widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \ widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \
widgets/DateTimeEdit.hpp widgets/HelpTextWindow.hpp widgets/DateTimeEdit.hpp widgets/HelpTextWindow.hpp \
widgets/RestrictedSpinBox.hpp
FORMS += \ FORMS += \
widgets/mainwindow.ui widgets/about.ui \ widgets/mainwindow.ui widgets/about.ui \