mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-10-31 15:47:10 -04:00
Merge branch 'develop' into feat-psk-reporter-re-work
This commit is contained in:
commit
7bb5a8e009
@ -289,6 +289,7 @@ set (wsjt_qt_CXXSRCS
|
||||
logbook/AD1CCty.cpp
|
||||
logbook/WorkedBefore.cpp
|
||||
logbook/Multiplier.cpp
|
||||
Network/NetworkAccessManager.cpp
|
||||
)
|
||||
|
||||
set (wsjt_qtmm_CXXSRCS
|
||||
@ -846,6 +847,8 @@ endif (APPLE)
|
||||
#
|
||||
# find some useful tools
|
||||
#
|
||||
include (CheckSymbolExists)
|
||||
|
||||
find_program(CTAGS ctags)
|
||||
find_program(ETAGS etags)
|
||||
|
||||
@ -881,6 +884,10 @@ message (STATUS "hamlib_INCLUDE_DIRS: ${hamlib_INCLUDE_DIRS}")
|
||||
message (STATUS "hamlib_LIBRARIES: ${hamlib_LIBRARIES}")
|
||||
message (STATUS "hamlib_LIBRARY_DIRS: ${hamlib_LIBRARY_DIRS}")
|
||||
|
||||
set (CMAKE_REQUIRED_INCLUDES "${hamlib_INCLUDE_DIRS}")
|
||||
set (CMAKE_REQUIRED_LIBRARIES "${hamlib_LIBRARIES}")
|
||||
check_symbol_exists (rig_set_cache_timeout_ms "hamlib/rig.h" HAVE_HAMLIB_CACHING)
|
||||
|
||||
|
||||
#
|
||||
# Qt5 setup
|
||||
@ -1098,7 +1105,7 @@ add_custom_target (etags COMMAND ${ETAGS} -o ${CMAKE_SOURCE_DIR}/TAGS -R ${sourc
|
||||
# Qt i18n - always include the country generic if any regional variant is included
|
||||
set (LANGUAGES
|
||||
ca # Catalan
|
||||
#da # Danish
|
||||
da # Danish
|
||||
en # English (we need this to stop
|
||||
# translation loaders loading the
|
||||
# second preference UI languge, it
|
||||
@ -1132,6 +1139,7 @@ if (UPDATE_TRANSLATIONS)
|
||||
qt5_create_translation (
|
||||
QM_FILES ${wsjt_qt_UISRCS} ${wsjtx_UISRCS} ${wsjt_qt_CXXSRCS} ${wsjtx_CXXSRCS}
|
||||
${TS_FILES}
|
||||
OPTIONS -I${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
else ()
|
||||
qt5_add_translation (QM_FILES ${TS_FILES})
|
||||
|
@ -230,7 +230,7 @@ namespace
|
||||
|IL|IN|KS|KY|LA|LAX|MAR|MB|MDC
|
||||
|ME|MI|MN|MO|MS|MT|NC|ND|NE|NFL
|
||||
|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
|
||||
|SFL|SJV|SK|SNJ|STX|SV|TN|UT|VA
|
||||
|VI|VT|WCF|WI|WMA|WNY|WPA|WTX
|
||||
|
@ -165,7 +165,13 @@ QString DecodedText::call() const
|
||||
// get the second word, most likely the de call and the third word, most likely grid
|
||||
void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
|
||||
{
|
||||
auto const& match = words_re.match (message_);
|
||||
auto msg = message_;
|
||||
auto p = msg.indexOf ("; ");
|
||||
if (p >= 0)
|
||||
{
|
||||
msg = msg.mid (p + 2);
|
||||
}
|
||||
auto const& match = words_re.match (msg);
|
||||
call = match.captured ("word2");
|
||||
grid = match.captured ("word3");
|
||||
if ("R" == grid) grid = match.captured ("word4");
|
||||
|
@ -292,7 +292,7 @@ EqualizationToolsDialog::impl::impl (EqualizationToolsDialog * self
|
||||
| QDialogButtonBox::RestoreDefaults | QDialogButtonBox::Close
|
||||
, Qt::Vertical}
|
||||
{
|
||||
setWindowTitle (windowTitle () + ' ' + tr (title));
|
||||
setWindowTitle (windowTitle () + ' ' + tr ("Equalization Tools"));
|
||||
resize (500, 600);
|
||||
{
|
||||
SettingsGroup g {settings_, title};
|
||||
|
26
NEWS
26
NEWS
@ -13,6 +13,32 @@
|
||||
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
|
||||
June 6, 2020
|
||||
---------------------
|
||||
|
@ -428,22 +428,24 @@ MessageClient::MessageClient (QString const& id, QString const& version, QString
|
||||
{
|
||||
connect (&*m_
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
||||
, static_cast<void (impl::*) (impl::SocketError)> (&impl::error), [this] (impl::SocketError e)
|
||||
connect (&*m_, static_cast<void (impl::*) (impl::SocketError)> (&impl::error)
|
||||
, [this] (impl::SocketError e) {
|
||||
#else
|
||||
, &impl::errorOccurred, [this] (impl::SocketError e)
|
||||
connect (&*m_, &impl::errorOccurred, [this] (impl::SocketError e) {
|
||||
#endif
|
||||
{
|
||||
#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
|
||||
{
|
||||
// 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
|
||||
{
|
||||
Q_EMIT error (m_->errorString ());
|
||||
}
|
||||
});
|
||||
|
||||
set_server (server);
|
||||
}
|
||||
|
||||
@ -549,7 +551,7 @@ void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QStr
|
||||
, QString const& comments, QString const& name, QDateTime time_on
|
||||
, QString const& operator_call, QString const& my_call
|
||||
, 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 ())
|
||||
{
|
||||
@ -558,8 +560,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 ()
|
||||
<< report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 ()
|
||||
<< name.toUtf8 () << time_on << operator_call.toUtf8 () << my_call.toUtf8 () << my_grid.toUtf8 ()
|
||||
<< exchange_sent.toUtf8 () << exchange_rcvd.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);
|
||||
<< 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 << "prop_mode:" << propmode);
|
||||
m_->send_message (out, message);
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,8 @@ public:
|
||||
, QString const& report_received, QString const& tx_power, QString const& comments
|
||||
, QString const& name, QDateTime time_on, 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& propmode);
|
||||
|
||||
// ADIF_record argument should be valid ADIF excluding any <EOR> end
|
||||
// of record marker
|
||||
|
@ -4,8 +4,6 @@
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QList>
|
||||
#include <QSslError>
|
||||
#include <QNetworkReply>
|
||||
#include <QString>
|
||||
|
||||
#include "widgets/MessageBox.hpp"
|
||||
|
||||
@ -18,58 +16,18 @@ class QWidget;
|
||||
class NetworkAccessManager
|
||||
: public QNetworkAccessManager
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
NetworkAccessManager (QWidget * parent)
|
||||
: QNetworkAccessManager (parent)
|
||||
{
|
||||
// handle SSL errors that have not been cached as allowed
|
||||
// exceptions and offer them to the user to add to the ignored
|
||||
// exception cache
|
||||
connect (this, &QNetworkAccessManager::sslErrors, [this, &parent] (QNetworkReply * reply, QList<QSslError> const& errors) {
|
||||
QString message;
|
||||
QList<QSslError> new_errors;
|
||||
for (auto const& error: errors)
|
||||
{
|
||||
if (!allowed_ssl_errors_.contains (error))
|
||||
{
|
||||
new_errors << error;
|
||||
message += '\n' + reply->request ().url ().toDisplayString () + ": "
|
||||
+ error.errorString ();
|
||||
}
|
||||
}
|
||||
if (new_errors.size ())
|
||||
{
|
||||
QString certs;
|
||||
for (auto const& cert : reply->sslConfiguration ().peerCertificateChain ())
|
||||
{
|
||||
certs += cert.toText () + '\n';
|
||||
}
|
||||
if (MessageBox::Ignore == MessageBox::query_message (parent, tr ("Network SSL Errors"), message, certs, MessageBox::Abort | MessageBox::Ignore))
|
||||
{
|
||||
// accumulate new SSL error exceptions that have been allowed
|
||||
allowed_ssl_errors_.append (new_errors);
|
||||
reply->ignoreSslErrors (allowed_ssl_errors_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// no new exceptions so silently ignore the ones already allowed
|
||||
reply->ignoreSslErrors (allowed_ssl_errors_);
|
||||
}
|
||||
});
|
||||
}
|
||||
explicit NetworkAccessManager (QWidget * parent);
|
||||
|
||||
protected:
|
||||
QNetworkReply * createRequest (Operation operation, QNetworkRequest const& request, QIODevice * outgoing_data = nullptr) override
|
||||
{
|
||||
auto reply = QNetworkAccessManager::createRequest (operation, request, outgoing_data);
|
||||
// errors are usually certificate specific so passing all cached
|
||||
// exceptions here is ok
|
||||
reply->ignoreSslErrors (allowed_ssl_errors_);
|
||||
return reply;
|
||||
}
|
||||
QNetworkReply * createRequest (Operation, QNetworkRequest const&, QIODevice * = nullptr) override;
|
||||
|
||||
private:
|
||||
void filter_SSL_errors (QNetworkReply * reply, QList<QSslError> const& errors);
|
||||
|
||||
QWidget * parent_widget_;
|
||||
QList<QSslError> allowed_ssl_errors_;
|
||||
};
|
||||
|
||||
|
@ -308,6 +308,7 @@
|
||||
* My grid utf8
|
||||
* Exchange sent utf8
|
||||
* Exchange received utf8
|
||||
* ADIF Propagation mode utf8
|
||||
*
|
||||
* The QSO logged message is sent to the server(s) when the
|
||||
* WSJT-X user accepts the "Log QSO" dialog by clicking the "OK"
|
||||
|
@ -13,6 +13,32 @@
|
||||
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
|
||||
June 6, 2020
|
||||
---------------------
|
||||
|
@ -88,7 +88,7 @@ SampleDownloader::impl::impl (QSettings * settings
|
||||
, directory_ {configuration, network_manager}
|
||||
, button_box_ {QDialogButtonBox::Close, Qt::Vertical}
|
||||
{
|
||||
setWindowTitle (windowTitle () + ' ' + tr (title));
|
||||
setWindowTitle (windowTitle () + ' ' + tr ("Download Samples"));
|
||||
resize (500, 600);
|
||||
{
|
||||
SettingsGroup g {settings_, title};
|
||||
@ -111,7 +111,7 @@ SampleDownloader::impl::impl (QSettings * settings
|
||||
details_layout_.setMargin (0);
|
||||
details_layout_.addRow (tr ("Base URL for samples:"), &url_line_edit_);
|
||||
details_layout_.addRow (tr ("Only use HTTP:"), &http_only_check_box_);
|
||||
http_only_check_box_.setToolTip (tr ("Check this is you get SSL/TLS errors"));
|
||||
http_only_check_box_.setToolTip (tr ("Check this if you get SSL/TLS errors"));
|
||||
details_widget_.setLayout (&details_layout_);
|
||||
|
||||
main_layout_.addLayout (&left_layout_, 0, 0);
|
||||
|
@ -409,7 +409,7 @@ QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd,
|
||||
{
|
||||
TRACE_CAT ("DXLabSuiteCommanderTransceiver", "failed to send command:" << commander_->errorString ());
|
||||
throw error {
|
||||
tr ("DX Lab Suite Commander failed to send command \"%1\": %2\n")
|
||||
tr ("DX Lab Suite Commander send command failed \"%1\": %2\n")
|
||||
.arg (cmd)
|
||||
.arg (commander_->errorString ())
|
||||
};
|
||||
|
@ -606,6 +606,13 @@ int HamlibTransceiver::do_start ()
|
||||
}
|
||||
}
|
||||
|
||||
#if HAVE_HAMLIB_CACHING
|
||||
// we must disable Hamlib caching because it lies about frequency
|
||||
// for less than 1 Hz resolution rigs
|
||||
auto orig_cache_timeout = rig_get_cache_timeout_ms (rig_.data (), HAMLIB_CACHE_ALL);
|
||||
rig_set_cache_timeout_ms (rig_.data (), HAMLIB_CACHE_ALL, 0);
|
||||
#endif
|
||||
|
||||
int resolution {0};
|
||||
if (freq_query_works_)
|
||||
{
|
||||
@ -646,6 +653,11 @@ int HamlibTransceiver::do_start ()
|
||||
resolution = -1; // best guess
|
||||
}
|
||||
|
||||
#if HAVE_HAMLIB_CACHING
|
||||
// revert Hamlib cache timeout
|
||||
rig_set_cache_timeout_ms (rig_.data (), HAMLIB_CACHE_ALL, orig_cache_timeout);
|
||||
#endif
|
||||
|
||||
do_poll ();
|
||||
|
||||
TRACE_CAT ("HamlibTransceiver", "exit" << state () << "reversed =" << reversed_ << "resolution = " << resolution);
|
||||
@ -672,7 +684,7 @@ void HamlibTransceiver::do_stop ()
|
||||
TRACE_CAT ("HamlibTransceiver", "state:" << state () << "reversed =" << reversed_);
|
||||
}
|
||||
|
||||
auto HamlibTransceiver::get_vfos (bool for_split) const -> std::tuple<vfo_t, vfo_t>
|
||||
std::tuple<vfo_t, vfo_t> HamlibTransceiver::get_vfos (bool for_split) const
|
||||
{
|
||||
if (get_vfo_works_ && rig_->caps->get_vfo)
|
||||
{
|
||||
|
@ -25,8 +25,9 @@ namespace
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Operator"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Call"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "My Grid"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exchange Sent"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exchange Rcvd"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exch Sent"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Exch Rcvd"),
|
||||
QT_TRANSLATE_NOOP ("MessageAggregatorMainWindow", "Prop"),
|
||||
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& name, QDateTime time_on, 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)
|
||||
{
|
||||
QList<QStandardItem *> row;
|
||||
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 {exchange_sent}
|
||||
<< new QStandardItem {exchange_rcvd}
|
||||
<< new QStandardItem {prop_mode}
|
||||
<< new QStandardItem {comments};
|
||||
log_->appendRow (row);
|
||||
log_table_view_->resizeColumnsToContents ();
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
, QString const& report_received, QString const& tx_power, QString const& comments
|
||||
, QString const& name, QDateTime time_on, 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);
|
||||
|
||||
private:
|
||||
void add_client (QString const& id, QString const& version, QString const& revision);
|
||||
|
@ -345,9 +345,10 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s
|
||||
QByteArray my_grid;
|
||||
QByteArray exchange_sent;
|
||||
QByteArray exchange_rcvd;
|
||||
QByteArray prop_mode;
|
||||
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
|
||||
>> exchange_sent >> exchange_rcvd;
|
||||
>> exchange_sent >> exchange_rcvd >> prop_mode;
|
||||
if (check_status (in) != Fail)
|
||||
{
|
||||
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 (operator_call), QString::fromUtf8 (my_call)
|
||||
, QString::fromUtf8 (my_grid), QString::fromUtf8 (exchange_sent)
|
||||
, QString::fromUtf8 (exchange_rcvd));
|
||||
, QString::fromUtf8 (exchange_rcvd), QString::fromUtf8 (prop_mode));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -106,7 +106,7 @@ public:
|
||||
, QString const& report_received, QString const& tx_power, QString const& comments
|
||||
, QString const& name, QDateTime time_on, 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);
|
||||
Q_SIGNAL void decodes_cleared (QString const& id);
|
||||
Q_SIGNAL void logged_ADIF (QString const& id, QByteArray const& ADIF);
|
||||
|
||||
|
@ -102,7 +102,7 @@ public:
|
||||
, QString const& report_received, QString const& tx_power
|
||||
, QString const& comments, QString const& name, QDateTime time_on
|
||||
, 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_)
|
||||
{
|
||||
@ -111,12 +111,13 @@ public:
|
||||
<< "rpt_rcvd:" << report_received << "Tx_pwr:" << tx_power << "comments:" << comments
|
||||
<< "name:" << name << "operator_call:" << operator_call << "my_call:" << my_call
|
||||
<< "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 << 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 (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;
|
||||
}
|
||||
}
|
||||
|
@ -5,10 +5,10 @@ Usage example: include::../common/links.adoc[]
|
||||
Syntax: [link-id] [link] [displayed text]
|
||||
|
||||
Example:
|
||||
:pskreporter: http://pskreporter.info/pskmap.html[PSK Reporter]
|
||||
:pskreporter: https://pskreporter.info/pskmap.html[PSK Reporter]
|
||||
|
||||
[link-id] = :pskreporter:
|
||||
[link] http://pskreporter.info/pskmap.html
|
||||
[link] https://pskreporter.info/pskmap.html
|
||||
[displayed text] PSK Reporter
|
||||
|
||||
Perform searches from the doc root directory: doc
|
||||
@ -42,53 +42,53 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
|
||||
// General URL's
|
||||
//:launchpadac6sl: https://launchpad.net/~jnogatch/+archive/wsjtx[WSJT-X Linux Packages]
|
||||
:alarmejt: http://f5jmh.free.fr/index.php?page=english[AlarmeJT]
|
||||
:asciidoc_cheatsheet: http://powerman.name/doc/asciidoc[AsciiDoc Cheatsheet]
|
||||
:asciidoc_help: http://www.methods.co.nz/asciidoc/userguide.html[AsciiDoc User Guide]
|
||||
:asciidoc_questions: http://www.methods.co.nz/asciidoc/faq.html[AsciiDoc FAQ]
|
||||
:asciidoc_cheatsheet: https://powerman.name/doc/asciidoc[AsciiDoc Cheatsheet]
|
||||
:asciidoc_help: https://www.methods.co.nz/asciidoc/userguide.html[AsciiDoc User Guide]
|
||||
:asciidoc_questions: https://www.methods.co.nz/asciidoc/faq.html[AsciiDoc FAQ]
|
||||
:asciidoc_syntax: http://xpt.sourceforge.net/techdocs/nix/tool/asciidoc-syn/ascs01-AsciiDocMarkupSyntaxQuickSummary/single/[AsciiDoc Syntax]
|
||||
:asciidoctor_style: http://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Styles Guide]
|
||||
:asciidoctor_syntax: http://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Syntax Guide]
|
||||
:cc_by_sa: http://creativecommons.org/licenses/by-sa/3.0/[Commons Attribution-ShareAlike 3.0 Unported License]
|
||||
:debian32: http://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_i386.deb[wsjtx_{VERSION}_i386.deb]
|
||||
:debian64: http://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_amd64.deb[wsjtx_{VERSION}_amd64.deb]
|
||||
:raspbian: http://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_armhf.deb[wsjtx_{VERSION}_armhf.deb]
|
||||
:debian: http://www.debian.org/[Debian]
|
||||
:dev_guide: http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjt-dev-guide.html[Dev-Guide]
|
||||
:devsvn: http://sourceforge.net/p/wsjt/wsjt/HEAD/tree/[Devel-SVN]
|
||||
:asciidoctor_style: https://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Styles Guide]
|
||||
:asciidoctor_syntax: https://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Syntax Guide]
|
||||
:cc_by_sa: https://creativecommons.org/licenses/by-sa/3.0/[Commons Attribution-ShareAlike 3.0 Unported License]
|
||||
:debian32: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_i386.deb[wsjtx_{VERSION}_i386.deb]
|
||||
:debian64: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_amd64.deb[wsjtx_{VERSION}_amd64.deb]
|
||||
:raspbian: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_armhf.deb[wsjtx_{VERSION}_armhf.deb]
|
||||
:debian: https://www.debian.org/[Debian]
|
||||
:dev_guide: https://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjt-dev-guide.html[Dev-Guide]
|
||||
:devsvn: https://sourceforge.net/p/wsjt/wsjt/HEAD/tree/[Devel-SVN]
|
||||
:devrepo: https://sourceforge.net/p/wsjt/wsjtx/ci/master/tree/[SourceForge]
|
||||
:dimension4: http://www.thinkman.com/dimension4/[Thinking Man Software]
|
||||
:download: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[Download Page]
|
||||
:download: https://physics.princeton.edu/pulsar/K1JT/wsjtx.html[Download Page]
|
||||
:dxatlas: http://www.dxatlas.com/[Afreet Software, Inc.]
|
||||
:dxlcommander: http://www.dxlabsuite.com/commander/[Commander]
|
||||
:dxlsuite: http://www.dxlabsuite.com/[DX Lab Suite]
|
||||
:fedora32: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-i686.rpm[wsjtx-{VERSION}-i686.rpm]
|
||||
:fedora64: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-x86_64.rpm[wsjtx-{VERSION}-x86_64.rpm]
|
||||
:fmt_arrl: http://www.arrl.org/frequency-measuring-test[ARRL FMT Info]
|
||||
:dxlcommander: https://www.dxlabsuite.com/commander/[Commander]
|
||||
:dxlsuite: https://www.dxlabsuite.com/[DX Lab Suite]
|
||||
:fedora32: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-i686.rpm[wsjtx-{VERSION}-i686.rpm]
|
||||
:fedora64: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-x86_64.rpm[wsjtx-{VERSION}-x86_64.rpm]
|
||||
:fmt_arrl: https://www.arrl.org/frequency-measuring-test[ARRL FMT Info]
|
||||
:fmt_group: https://groups.yahoo.com/neo/groups/FMT-nuts/info[FMT Group]
|
||||
:fmt_k5cm: http://www.k5cm.com/[FMT Event Info]
|
||||
:fmt_wspr: http://www.physics.princeton.edu/pulsar/K1JT/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup]
|
||||
:ft4_protocol: http://physics.princeton.edu/pulsar/k1jt/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting]
|
||||
:ft4_ft8_protocols: http://physics.princeton.edu/pulsar/k1jt/FT4_FT8_QEX.pdf[The FT4 and FT8 Communication Protocols]
|
||||
:ft8_tips: http://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide]
|
||||
:ft8_DXped: http://physics.princeton.edu/pulsar/k1jt/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode]
|
||||
:gnu_gpl: http://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License]
|
||||
:homepage: http://physics.princeton.edu/pulsar/K1JT/[WSJT Home Page]
|
||||
:fmt_wspr: https://www.physics.princeton.edu/pulsar/K1JT/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup]
|
||||
:ft4_protocol: https://physics.princeton.edu/pulsar/k1jt/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting]
|
||||
:ft4_ft8_protocols: https://physics.princeton.edu/pulsar/k1jt/FT4_FT8_QEX.pdf[The FT4 and FT8 Communication Protocols]
|
||||
:ft8_tips: https://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide]
|
||||
:ft8_DXped: https://physics.princeton.edu/pulsar/k1jt/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode]
|
||||
:gnu_gpl: https://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License]
|
||||
:homepage: https://physics.princeton.edu/pulsar/K1JT/[WSJT Home Page]
|
||||
:hrd: http://www.hrdsoftwarellc.com/[Ham Radio Deluxe]
|
||||
:jt4eme: http://physics.princeton.edu/pulsar/K1JT/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation]
|
||||
:jt65protocol: http://physics.princeton.edu/pulsar/K1JT/JT65.pdf[QEX]
|
||||
:jtalert: http://hamapps.com/[JTAlert]
|
||||
:jt4eme: https://physics.princeton.edu/pulsar/K1JT/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation]
|
||||
:jt65protocol: https://physics.princeton.edu/pulsar/K1JT/JT65.pdf[QEX]
|
||||
:jtalert: https://hamapps.com/[JTAlert]
|
||||
:launchpadki7mt: https://launchpad.net/~ki7mt[KI7MT PPA's]
|
||||
:log4om: http://www.log4om.com[Log4OM]
|
||||
:lunarEchoes: http://physics.princeton.edu/pulsar/K1JT/LunarEchoes_QEX.pdf[QEX]
|
||||
:msk144: http://physics.princeton.edu/pulsar/k1jt/MSK144_Protocol_QEX.pdf[QEX]
|
||||
:log4om: https://www.log4om.com[Log4OM]
|
||||
:lunarEchoes: https://physics.princeton.edu/pulsar/K1JT/LunarEchoes_QEX.pdf[QEX]
|
||||
:msk144: https://physics.princeton.edu/pulsar/k1jt/MSK144_Protocol_QEX.pdf[QEX]
|
||||
:msvcpp_redist: https://www.microsoft.com/en-ph/download/details.aspx?id=40784[Microsoft VC++ 2013 Redistributable]
|
||||
:msys_url: http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/[MSYS Download]
|
||||
:msys_url: https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/[MSYS Download]
|
||||
:n1mm_logger: https://n1mm.hamdocs.com/tiki-index.php[N1MM Logger+]
|
||||
:ntpsetup: http://www.satsignal.eu/ntp/setup.html[Network Time Protocol Setup]
|
||||
:osx_instructions: http://physics.princeton.edu/pulsar/K1JT/OSX_Readme[Mac OS X Install Instructions]
|
||||
:ppa: http://en.wikipedia.org/wiki/Personal_Package_Archive[PPA]
|
||||
:projsummary: http://sourceforge.net/projects/wsjt/[Project Summary]
|
||||
:pskreporter: http://pskreporter.info/pskmap.html[PSK Reporter]
|
||||
:ntpsetup: https://www.satsignal.eu/ntp/setup.html[Network Time Protocol Setup]
|
||||
:osx_instructions: https://physics.princeton.edu/pulsar/K1JT/OSX_Readme[Mac OS X Install Instructions]
|
||||
:ppa: https://en.wikipedia.org/wiki/Personal_Package_Archive[PPA]
|
||||
:projsummary: https://sourceforge.net/projects/wsjt/[Project Summary]
|
||||
:pskreporter: https://pskreporter.info/pskmap.html[PSK Reporter]
|
||||
:sourceforge: https://sourceforge.net/user/registration[SourceForge]
|
||||
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
|
||||
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
|
||||
@ -97,37 +97,37 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
|
||||
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_1g.msi[Win64 OpenSSL Light Package]
|
||||
:writelog: https://writelog.com/[Writelog]
|
||||
:wsjtx_group: https://groups.io/g/WSJTX[WSJTX Group]
|
||||
:wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X]
|
||||
:wspr0_guide: http://www.physics.princeton.edu/pulsar/K1JT/WSPR0_Instructions.TXT[WSPR0 Guide]
|
||||
:wspr: http://physics.princeton.edu/pulsar/K1JT/wspr.html[WSPR Home Page]
|
||||
:wsprnet: http://wsprnet.org/drupal/[WSPRnet]
|
||||
:wsprnet_activity: http://wsprnet.org/drupal/wsprnet/activity[WSPRnet Activity page]
|
||||
:wsjtx: https://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X]
|
||||
:wspr0_guide: https://www.physics.princeton.edu/pulsar/K1JT/WSPR0_Instructions.TXT[WSPR0 Guide]
|
||||
:wspr: https://physics.princeton.edu/pulsar/K1JT/wspr.html[WSPR Home Page]
|
||||
:wsprnet: https://wsprnet.org/drupal/[WSPRnet]
|
||||
:wsprnet_activity: https://wsprnet.org/drupal/wsprnet/activity[WSPRnet Activity page]
|
||||
|
||||
// Download Links
|
||||
:cty_dat: http://www.country-files.com/cty/[Amateur Radio Country Files]
|
||||
:jtbridge: http://jt-bridge.eller.nu/[JT-Bridge]
|
||||
:jtsdk_doc: http://physics.princeton.edu/pulsar/K1JT/JTSDK-DOC.exe[Download]
|
||||
:jtsdk_installer: http://sourceforge.net/projects/jtsdk/files/win32/2.0.0/JTSDK-2.0.0-B2-Win32.exe/download[Download]
|
||||
:jtsdk_omnirig: http://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/OmniRig.zip/download[Download]
|
||||
:jtsdk_py: http://physics.princeton.edu/pulsar/K1JT/JTSDK-PY.exe[Download]
|
||||
:jtsdk_qt: http://physics.princeton.edu/pulsar/K1JT/JTSDK-QT.exe[Download]
|
||||
:jtsdk_vcredist: http://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/vcredist_x86.exe/download[Download]
|
||||
:cty_dat: https://www.country-files.com/cty/[Amateur Radio Country Files]
|
||||
:jtbridge: https://jt-bridge.eller.nu/[JT-Bridge]
|
||||
:jtsdk_doc: https://physics.princeton.edu/pulsar/K1JT/JTSDK-DOC.exe[Download]
|
||||
:jtsdk_installer: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/JTSDK-2.0.0-B2-Win32.exe/download[Download]
|
||||
:jtsdk_omnirig: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/OmniRig.zip/download[Download]
|
||||
:jtsdk_py: https://physics.princeton.edu/pulsar/K1JT/JTSDK-PY.exe[Download]
|
||||
:jtsdk_qt: https://physics.princeton.edu/pulsar/K1JT/JTSDK-QT.exe[Download]
|
||||
:jtsdk_vcredist: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/vcredist_x86.exe/download[Download]
|
||||
:nh6z: http://www.nh6z.net/Amatuer_Radio_Station_NH6Z/Other_Peoples_Software.html[here]
|
||||
:omnirig: http://www.dxatlas.com/OmniRig/Files/OmniRig.zip[Omni-Rig]
|
||||
:osx: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-Darwin.dmg[wsjtx-{VERSION}-Darwin.dmg]
|
||||
:QRA64_EME: http://physics.princeton.edu/pulsar/K1JT/QRA64_EME.pdf[QRA64 for microwave EME]
|
||||
:svn: http://subversion.apache.org/packages.html#windows[Subversion]
|
||||
:win32: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win32.exe[wsjtx-{VERSION}-win32.exe]
|
||||
:win64: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win64.exe[wsjtx-{VERSION}-win64.exe]
|
||||
:osx: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-Darwin.dmg[wsjtx-{VERSION}-Darwin.dmg]
|
||||
:QRA64_EME: https://physics.princeton.edu/pulsar/K1JT/QRA64_EME.pdf[QRA64 for microwave EME]
|
||||
:svn: https://subversion.apache.org/packages.html#windows[Subversion]
|
||||
:win32: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win32.exe[wsjtx-{VERSION}-win32.exe]
|
||||
:win64: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win64.exe[wsjtx-{VERSION}-win64.exe]
|
||||
:wsjt-devel: https://lists.sourceforge.net/lists/listinfo/wsjt-devel[here]
|
||||
:wsjt_repo: https://sourceforge.net/p/wsjt/wsjt_orig/ci/master/tree/[WSJT Source Repository]
|
||||
:wspr_code: http://physics.princeton.edu/pulsar/K1JT/WSPRcode.exe[WSPRcode.exe]
|
||||
:wspr_code: https://physics.princeton.edu/pulsar/K1JT/WSPRcode.exe[WSPRcode.exe]
|
||||
:wspr_svn: https://sourceforge.net/p/wsjt/wspr/ci/master/tree/[WSPR Source Repository]
|
||||
|
||||
// MAIL-TO links
|
||||
:alex_efros: mailto:powerman@powerman.name[Alex Efros]
|
||||
:bill_somerville: mailto:g4wjs -at- c l a s s d e s i g n -dot- com [G4WJS]
|
||||
:dev_mail_list: http://sourceforge.net/mailarchive/forum.php?forum_name=wsjt-devel[WSJT Developers Email List]
|
||||
:dev_mail_list: https://sourceforge.net/mailarchive/forum.php?forum_name=wsjt-devel[WSJT Developers Email List]
|
||||
:dev_mail_svn: https://sourceforge.net/auth/subscriptions/[WSJT SVN Archives]
|
||||
:devmail: mailto:wsjt-devel@lists.sourceforge.net[wsjt-devel@lists.sourceforge.net]
|
||||
:devmail1: mailto:wsjt-devel@lists.sourceforge.net[Post Message]
|
||||
|
@ -39,12 +39,12 @@ passband, if such control is available.
|
||||
|
||||
How should I configure _WSJT-X_ to run multiple instances?::
|
||||
|
||||
Start _WSJT-X_ from a command-prompt window, assigning each instance a
|
||||
unique identifier as in the following two-instance example. This
|
||||
procedure will isolate the *Settings* file and the writable file
|
||||
location for each instance of _WSJT-X_.
|
||||
Start _WSJT-X_ from a command-prompt window, assigning each a unique
|
||||
identifier as in the following two-instance example. This procedure
|
||||
will isolate the *Settings* file and the writable file location for
|
||||
each instance of _WSJT-X_.
|
||||
|
||||
wsjtx --rig-name=TS2000
|
||||
wsjtx --rig-name=TS590
|
||||
wsjtx --rig-name=FT847
|
||||
|
||||
I am getting a "Network Error - SSL/TLS support not installed" message. What should I do?::
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Status=edited
|
||||
|
||||
Download and execute the package file {win32} (WinXP, Vista, Win 7,
|
||||
Win 8, Win10, 32-bit) or {win64} (Vista, Win 7, Win 8, Win10, 64-bit)
|
||||
Download and execute the package file {win32} (Win 7,
|
||||
Win 8, Win10, 32-bit) or {win64} (Win 7, Win 8, Win10, 64-bit)
|
||||
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
|
||||
|
@ -2,8 +2,8 @@ module packjt77
|
||||
|
||||
! These variables are accessible from outside via "use packjt77":
|
||||
parameter (MAXHASH=1000,MAXRECENT=10)
|
||||
character (len=13), dimension(1:1024) :: calls10=''
|
||||
character (len=13), dimension(1:4096) :: calls12=''
|
||||
character (len=13), dimension(0:1023) :: calls10=''
|
||||
character (len=13), dimension(0:4095) :: calls12=''
|
||||
character (len=13), dimension(1:MAXHASH) :: calls22=''
|
||||
character (len=13), dimension(1:MAXRECENT) :: recent_calls=''
|
||||
character (len=13) :: mycall13=''
|
||||
@ -19,7 +19,7 @@ subroutine hash10(n10,c13)
|
||||
character*13 c13
|
||||
|
||||
c13='<...>'
|
||||
if(n10.lt.1 .or. n10.gt.1024) return
|
||||
if(n10.lt.0 .or. n10.gt.1023) return
|
||||
if(len(trim(calls10(n10))).gt.0) then
|
||||
c13=calls10(n10)
|
||||
c13='<'//trim(c13)//'>'
|
||||
@ -33,7 +33,7 @@ subroutine hash12(n12,c13)
|
||||
character*13 c13
|
||||
|
||||
c13='<...>'
|
||||
if(n12.lt.1 .or. n12.gt.4096) return
|
||||
if(n12.lt.0 .or. n12.gt.4095) return
|
||||
if(len(trim(calls12(n12))).gt.0) then
|
||||
c13=calls12(n12)
|
||||
c13='<'//trim(c13)//'>'
|
||||
@ -90,10 +90,10 @@ subroutine save_hash_call(c13,n10,n12,n22)
|
||||
if(len(trim(cw)) .lt. 3) return
|
||||
|
||||
n10=ihashcall(cw,10)
|
||||
if(n10.ge.1 .and. n10 .le. 1024 .and. cw.ne.mycall13) calls10(n10)=cw
|
||||
if(n10.ge.0 .and. n10 .le. 1023 .and. cw.ne.mycall13) calls10(n10)=cw
|
||||
|
||||
n12=ihashcall(cw,12)
|
||||
if(n12.ge.1 .and. n12 .le. 4096 .and. cw.ne.mycall13) calls12(n12)=cw
|
||||
if(n12.ge.0 .and. n12 .le. 4095 .and. cw.ne.mycall13) calls12(n12)=cw
|
||||
|
||||
n22=ihashcall(cw,22)
|
||||
if(any(ihash22.eq.n22)) then ! If entry exists, make sure callsign is the most recently received one
|
||||
@ -196,7 +196,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
|
||||
! the value of nrx is used to decide when mycall13 or dxcall13 should
|
||||
! 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 (MAXGRID4=32400)
|
||||
integer*8 n58
|
||||
@ -228,7 +228,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
|
||||
"ONS","OR ","ORG","PAC","PR ","QC ","RI ","SB ","SC ","SCV", &
|
||||
"SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX","SV ","TN ", &
|
||||
"UT ","VA ","VI ","VT ","WCF","WI ","WMA","WNY","WPA","WTX", &
|
||||
"WV ","WWA","WY ","DX "/
|
||||
"WV ","WWA","WY ","DX ","PE "/
|
||||
data cmult/ &
|
||||
"AL ","AK ","AZ ","AR ","CA ","CO ","CT ","DE ","FL ","GA ", &
|
||||
"HI ","ID ","IL ","IN ","IA ","KS ","KY ","LA ","ME ","MD ", &
|
||||
@ -864,7 +864,7 @@ subroutine pack77_03(nwords,w,i3,n3,c77)
|
||||
! Check 0.3 and 0.4 (ARRL Field Day exchange)
|
||||
! 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*77 c77
|
||||
character*6 bcall_1,bcall_2
|
||||
@ -879,7 +879,7 @@ subroutine pack77_03(nwords,w,i3,n3,c77)
|
||||
"ONS","OR ","ORG","PAC","PR ","QC ","RI ","SB ","SC ","SCV", &
|
||||
"SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX","SV ","TN ", &
|
||||
"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
|
||||
call chkcall(w(1),bcall_1,ok1)
|
||||
|
@ -442,7 +442,7 @@ bool WorkedBefore::add (QString const& call
|
||||
QTextStream out {&file};
|
||||
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)
|
||||
endl
|
||||
#else
|
||||
|
@ -74,7 +74,7 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q
|
||||
QDateTime const& dateTimeOff, QString const& band, QString const& comments,
|
||||
QString const& name, QString const& strDialFreq, QString const& myCall,
|
||||
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;
|
||||
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(name!="") t += " <name:" + QString::number(name.size()) + ">" + name;
|
||||
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 ())
|
||||
{
|
||||
auto words = xSent.split (' '
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
QDateTime const& dateTimeOff, QString const& band, QString const& comments,
|
||||
QString const& name, QString const& strDialFreq, QString const& myCall,
|
||||
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;
|
||||
|
||||
|
35
main.cpp
35
main.cpp
@ -323,6 +323,7 @@ int main(int argc, char *argv[])
|
||||
db.exec ("PRAGMA locking_mode=EXCLUSIVE");
|
||||
|
||||
int result;
|
||||
auto const& original_style_sheet = a.styleSheet ();
|
||||
do
|
||||
{
|
||||
#if WSJT_QDEBUG_TO_FILE
|
||||
@ -352,14 +353,41 @@ int main(int argc, char *argv[])
|
||||
// Multiple instances: use rig_name as shared memory key
|
||||
mem_jt9.setKey(a.applicationName ());
|
||||
|
||||
if(!mem_jt9.attach()) {
|
||||
if (!mem_jt9.create(sizeof(struct dec_data))) {
|
||||
// try and shut down any orphaned jt9 process
|
||||
for (int i = 3; i; --i) // three tries to close old jt9
|
||||
{
|
||||
if (mem_jt9.attach ()) // shared memory presence implies
|
||||
// orphaned jt9 sub-process
|
||||
{
|
||||
dec_data_t * dd = reinterpret_cast<dec_data_t *> (mem_jt9.data());
|
||||
mem_jt9.lock ();
|
||||
dd->ipc[1] = 999; // tell jt9 to shut down
|
||||
mem_jt9.unlock ();
|
||||
mem_jt9.detach (); // start again
|
||||
}
|
||||
else
|
||||
{
|
||||
break; // good to go
|
||||
}
|
||||
QThread::sleep (1); // wait for jt9 to end
|
||||
}
|
||||
if (!mem_jt9.attach ())
|
||||
{
|
||||
if (!mem_jt9.create (sizeof (struct dec_data)))
|
||||
{
|
||||
splash.hide ();
|
||||
MessageBox::critical_message (nullptr, a.translate ("main", "Shared memory error"),
|
||||
a.translate ("main", "Unable to create shared memory segment"));
|
||||
throw std::runtime_error {"Shared memory error"};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
splash.hide ();
|
||||
MessageBox::critical_message (nullptr, a.translate ("main", "Sub-process error"),
|
||||
a.translate ("main", "Failed to close orphaned jt9 process"));
|
||||
throw std::runtime_error {"Sub-process error"};
|
||||
}
|
||||
mem_jt9.lock ();
|
||||
memset(mem_jt9.data(),0,sizeof(struct dec_data)); //Zero all decoding params in shared memory
|
||||
mem_jt9.unlock ();
|
||||
@ -387,6 +415,9 @@ int main(int argc, char *argv[])
|
||||
splash.raise ();
|
||||
QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit()));
|
||||
result = a.exec();
|
||||
|
||||
// ensure config switches start with the right style sheet
|
||||
a.setStyleSheet (original_style_sheet);
|
||||
}
|
||||
while (!result && !multi_settings.exit ());
|
||||
|
||||
|
@ -12,10 +12,10 @@ namespace
|
||||
// human readable strings for each Region enumeration value
|
||||
char const * const region_names[] =
|
||||
{
|
||||
"All",
|
||||
"Region 1",
|
||||
"Region 2",
|
||||
"Region 3",
|
||||
QT_TRANSLATE_NOOP ("IARURegions", "All"),
|
||||
QT_TRANSLATE_NOOP ("IARURegions", "Region 1"),
|
||||
QT_TRANSLATE_NOOP ("IARURegions", "Region 2"),
|
||||
QT_TRANSLATE_NOOP ("IARURegions", "Region 3"),
|
||||
};
|
||||
std::size_t constexpr region_names_size = sizeof (region_names) / sizeof (region_names[0]);
|
||||
}
|
||||
@ -34,7 +34,7 @@ char const * IARURegions::name (Region r)
|
||||
return region_names[static_cast<int> (r)];
|
||||
}
|
||||
|
||||
auto IARURegions::value (QString const& s) -> Region
|
||||
IARURegions::Region IARURegions::value (QString const& s)
|
||||
{
|
||||
auto end = region_names + region_names_size;
|
||||
auto p = std::find_if (region_names, end
|
||||
|
File diff suppressed because it is too large
Load Diff
6439
translations/wsjtx_da.ts
Normal file
6439
translations/wsjtx_da.ts
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -20,10 +20,10 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
|
||||
"weak-signal Amateur Radio communication. <br /><br />"
|
||||
"© 2001-2020 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
|
||||
"and Steve Franke, K9AN. <br /><br />"
|
||||
"We gratefully acknowledge contributions from AC6SL, AE4JY, DJ0OT, <br />"
|
||||
"G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL, KA9Q, KB1ZMX,<br />"
|
||||
"KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ,<br />"
|
||||
"VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
|
||||
"We gratefully acknowledge contributions from AC6SL, AE4JY,<br />"
|
||||
"DF2ET, DJ0OT, G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL,<br />"
|
||||
"KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY,<br />"
|
||||
"VK3ACF, VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
|
||||
"WSJT-X is licensed under the terms of Version 3 <br />"
|
||||
"of the GNU General Public License (GPL) <br /><br />"
|
||||
"<a href=" WSJTX_STRINGIZE (PROJECT_HOMEPAGE) ">"
|
||||
|
@ -46,7 +46,8 @@ Astro::Astro(QSettings * settings, Configuration const * configuration, QWidget
|
||||
{
|
||||
ui_->setupUi (this);
|
||||
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);
|
||||
read_settings ();
|
||||
ui_->text_label->clear ();
|
||||
|
@ -15,6 +15,37 @@
|
||||
#include "ui_logqso.h"
|
||||
#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
|
||||
, Configuration const * config, LogBook * log, QWidget *parent)
|
||||
: QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint}
|
||||
@ -25,6 +56,10 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setWindowTitle(programTitle + " - Log QSO");
|
||||
for (auto const& prop_mode : prop_modes)
|
||||
{
|
||||
ui->comboBoxPropMode->addItem (prop_mode.name_, prop_mode.id_);
|
||||
}
|
||||
loadSettings ();
|
||||
ui->grid->setValidator (new MaidenheadLocatorValidator {this});
|
||||
}
|
||||
@ -39,8 +74,15 @@ void LogQSO::loadSettings ()
|
||||
restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ());
|
||||
ui->cbTxPower->setChecked (m_settings->value ("SaveTxPower", 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_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 ();
|
||||
}
|
||||
|
||||
@ -50,8 +92,10 @@ void LogQSO::storeSettings () const
|
||||
m_settings->setValue ("geometry", saveGeometry ());
|
||||
m_settings->setValue ("SaveTxPower", ui->cbTxPower->isChecked ());
|
||||
m_settings->setValue ("SaveComments", ui->cbComments->isChecked ());
|
||||
m_settings->setValue ("SavePropMode", ui->cbPropMode->isChecked ());
|
||||
m_settings->setValue ("TxPower", m_txPower);
|
||||
m_settings->setValue ("LogComments", m_comments);
|
||||
m_settings->setValue ("PropMode", ui->comboBoxPropMode->currentData ());
|
||||
m_settings->endGroup ();
|
||||
}
|
||||
|
||||
@ -100,6 +144,10 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString
|
||||
ui->loggedOperator->setText(m_config->opCall());
|
||||
ui->exchSent->setText (xSent);
|
||||
ui->exchRcvd->setText (xRcvd);
|
||||
if (!ui->cbPropMode->isChecked ())
|
||||
{
|
||||
ui->comboBoxPropMode->setCurrentIndex (-1);
|
||||
}
|
||||
|
||||
using SpOp = Configuration::SpecialOperatingActivity;
|
||||
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"
|
||||
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")};
|
||||
if(!f.open(QIODevice::Text | QIODevice::Append)) {
|
||||
@ -191,7 +240,7 @@ void LogQSO::accept()
|
||||
dateTimeOff.time().toString("hh:mm:ss,") + hisCall + "," +
|
||||
hisGrid + "," + strDialFreq + "," + mode +
|
||||
"," + rptSent + "," + rptRcvd + "," + m_txPower +
|
||||
"," + m_comments + "," + name;
|
||||
"," + m_comments + "," + name + "," + prop_mode;
|
||||
QTextStream out(&f);
|
||||
out << logEntry <<
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
||||
@ -220,6 +269,7 @@ void LogQSO::accept()
|
||||
, m_myGrid
|
||||
, xsent
|
||||
, xrcvd
|
||||
, prop_mode
|
||||
, m_log->QSOToADIF (hisCall
|
||||
, hisGrid
|
||||
, mode
|
||||
@ -236,7 +286,8 @@ void LogQSO::accept()
|
||||
, m_txPower
|
||||
, operator_call
|
||||
, xsent
|
||||
, xrcvd));
|
||||
, xrcvd
|
||||
, prop_mode));
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ signals:
|
||||
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
|
||||
, QString const& my_call, QString const& my_grid
|
||||
, QString const& exchange_sent, QString const& exchange_rcvd
|
||||
, QByteArray const& ADIF);
|
||||
, QString const& propmode, QByteArray const& ADIF);
|
||||
|
||||
protected:
|
||||
void hideEvent (QHideEvent *);
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>377</width>
|
||||
<height>287</height>
|
||||
<width>440</width>
|
||||
<height>322</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -46,6 +46,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>call</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -68,6 +71,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>start_date_time</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -103,6 +109,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>end_date_time</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -142,6 +151,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>mode</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -171,6 +183,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>band</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -200,6 +215,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>sent</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -229,6 +247,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>rcvd</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -258,6 +279,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>grid</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -290,6 +314,9 @@
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>name</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -310,6 +337,9 @@
|
||||
<property name="text">
|
||||
<string>Tx power</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>txPower</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -339,6 +369,9 @@
|
||||
<property name="text">
|
||||
<string>Comments</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comments</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -369,6 +402,9 @@
|
||||
<property name="text">
|
||||
<string>Operator</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>loggedOperator</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -403,6 +439,9 @@
|
||||
<property name="text">
|
||||
<string>Exch sent</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>exchSent</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -433,6 +472,9 @@
|
||||
<property name="text">
|
||||
<string>Rcvd</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>exchRcvd</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -447,6 +489,30 @@
|
||||
</item>
|
||||
</layout>
|
||||
</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>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
@ -486,6 +552,11 @@
|
||||
<tabstop>cbTxPower</tabstop>
|
||||
<tabstop>comments</tabstop>
|
||||
<tabstop>cbComments</tabstop>
|
||||
<tabstop>loggedOperator</tabstop>
|
||||
<tabstop>exchSent</tabstop>
|
||||
<tabstop>exchRcvd</tabstop>
|
||||
<tabstop>comboBoxPropMode</tabstop>
|
||||
<tabstop>cbPropMode</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
|
@ -4501,7 +4501,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers)
|
||||
}
|
||||
return;
|
||||
}
|
||||
DecodedText message {cursor.block().text().trimmed().remove("TU; ")};
|
||||
DecodedText message {cursor.block().text().trimmed().left(61).remove("TU; ")};
|
||||
m_bDoubleClicked = true;
|
||||
processMessage (message, modifiers);
|
||||
}
|
||||
@ -4609,6 +4609,13 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
||||
return;
|
||||
}
|
||||
|
||||
// ignore calls by other hounds
|
||||
if (SpecOp::HOUND == m_config.special_op_id()
|
||||
&& message.messageWords ().indexOf (QRegularExpression {R"(R\+-[0-9]+)"}) >= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QString firstcall = message.call();
|
||||
if(firstcall.length()==5 and firstcall.mid(0,3)=="CQ ") firstcall="CQ";
|
||||
if(!m_bFastMode and (!m_config.enable_VHF_features() or m_mode=="FT8")) {
|
||||
@ -5702,7 +5709,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& my_call, QString const& my_grid
|
||||
, QString const& exchange_sent, QString const& exchange_rcvd
|
||||
, QByteArray const& ADIF)
|
||||
, QString const& propmode, QByteArray const& ADIF)
|
||||
{
|
||||
QString date = QSO_date_on.toString("yyyyMMdd");
|
||||
if (!m_logBook.add (call, grid, m_config.bands()->find(dial_freq), mode, ADIF))
|
||||
@ -5713,7 +5720,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
|
||||
, 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);
|
||||
|
||||
// Log to N1MM Logger
|
||||
|
@ -241,7 +241,7 @@ private slots:
|
||||
, QString const& name, QDateTime const& QSO_date_on, QString const& operator_call
|
||||
, QString const& my_call, QString const& my_grid
|
||||
, 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_activated (int index);
|
||||
void on_readFreq_clicked();
|
||||
|
@ -10,7 +10,7 @@ SOURCES += \
|
||||
widgets/AbstractLogWindow.cpp \
|
||||
widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \
|
||||
widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp \
|
||||
widgets/HelpTextWindow.cpp
|
||||
widgets/HelpTextWindow.cpp widgets/RestrictedSpinBox.cpp
|
||||
HEADERS += \
|
||||
widgets/mainwindow.h widgets/plotter.h \
|
||||
widgets/about.h widgets/widegraph.h \
|
||||
@ -21,7 +21,8 @@ HEADERS += \
|
||||
widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \
|
||||
widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \
|
||||
widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \
|
||||
widgets/DateTimeEdit.hpp widgets/HelpTextWindow.hpp
|
||||
widgets/DateTimeEdit.hpp widgets/HelpTextWindow.hpp \
|
||||
widgets/RestrictedSpinBox.hpp
|
||||
|
||||
FORMS += \
|
||||
widgets/mainwindow.ui widgets/about.ui \
|
||||
|
@ -19,6 +19,8 @@ extern "C" {
|
||||
#cmakedefine PROJECT_SAMPLES_URL "@PROJECT_SAMPLES_URL@"
|
||||
#cmakedefine PROJECT_SUMMARY_DESCRIPTION "@PROJECT_SUMMARY_DESCRIPTION@"
|
||||
|
||||
#cmakedefine01 HAVE_HAMLIB_CACHING
|
||||
|
||||
#cmakedefine01 WSJT_SHARED_RUNTIME
|
||||
#cmakedefine01 WSJT_QDEBUG_TO_FILE
|
||||
#cmakedefine01 WSJT_QDEBUG_IN_RELEASE
|
||||
|
Loading…
Reference in New Issue
Block a user