2015-04-06 01:57:47 +00:00
|
|
|
#include "FrequencyList.hpp"
|
|
|
|
|
2016-10-30 22:36:13 +00:00
|
|
|
#include <cstdlib>
|
2015-04-06 01:57:47 +00:00
|
|
|
#include <utility>
|
2016-10-30 22:36:13 +00:00
|
|
|
#include <limits>
|
2015-04-06 01:57:47 +00:00
|
|
|
|
2016-05-24 10:08:35 +00:00
|
|
|
#include <QMetaType>
|
2015-04-06 01:57:47 +00:00
|
|
|
#include <QAbstractTableModel>
|
|
|
|
#include <QString>
|
|
|
|
#include <QList>
|
|
|
|
#include <QListIterator>
|
|
|
|
#include <QVector>
|
|
|
|
#include <QStringList>
|
|
|
|
#include <QMimeData>
|
|
|
|
#include <QDataStream>
|
|
|
|
#include <QByteArray>
|
2016-04-06 17:11:02 +00:00
|
|
|
#include <QDebugStateSaver>
|
2015-04-06 01:57:47 +00:00
|
|
|
|
2017-01-08 23:58:00 +00:00
|
|
|
#include "Radio.hpp"
|
2015-05-28 23:22:17 +00:00
|
|
|
#include "Bands.hpp"
|
2015-04-06 01:57:47 +00:00
|
|
|
#include "pimpl_impl.hpp"
|
|
|
|
|
2015-06-09 14:30:23 +00:00
|
|
|
#include "moc_FrequencyList.cpp"
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
namespace
|
|
|
|
{
|
2017-08-09 16:10:08 +00:00
|
|
|
FrequencyList_v2::FrequencyItems const default_frequency_list =
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
{198000, Modes::FreqCal, IARURegions::R1}, // BBC Radio 4 Droitwich
|
|
|
|
{4996000, Modes::FreqCal, IARURegions::R1}, // RWM time signal
|
|
|
|
{9996000, Modes::FreqCal, IARURegions::R1}, // RWM time signal
|
|
|
|
{14996000, Modes::FreqCal, IARURegions::R1}, // RWM time signal
|
|
|
|
|
|
|
|
{660000, Modes::FreqCal, IARURegions::R2},
|
|
|
|
{880000, Modes::FreqCal, IARURegions::R2},
|
|
|
|
{1210000, Modes::FreqCal, IARURegions::R2},
|
|
|
|
|
|
|
|
{2500000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{3330000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{5000000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{7850000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{10000000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{14670000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{15000000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
{20000000, Modes::FreqCal, IARURegions::ALL},
|
|
|
|
|
|
|
|
{136000, Modes::WSPR, IARURegions::ALL},
|
|
|
|
{136130, Modes::JT65, IARURegions::ALL},
|
|
|
|
{136130, Modes::JT9, IARURegions::ALL},
|
|
|
|
|
|
|
|
{474200, Modes::JT65, IARURegions::ALL},
|
|
|
|
{474200, Modes::JT9, IARURegions::ALL},
|
|
|
|
{474200, Modes::WSPR, IARURegions::ALL},
|
|
|
|
|
|
|
|
{1836600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
{1838000, Modes::JT65, IARURegions::ALL}, // squeezed allocations
|
|
|
|
{1839000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{1840000, Modes::FT8, IARURegions::ALL},
|
|
|
|
|
|
|
|
{3570000, Modes::JT65, IARURegions::ALL}, // JA compatible
|
|
|
|
{3572000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65
|
|
|
|
// is out of DM allocation
|
2017-07-14 09:27:14 +00:00
|
|
|
{3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker
|
2017-07-07 23:11:41 +00:00
|
|
|
// and lock out
|
|
|
|
|
|
|
|
{7038600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
{7074000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{7076000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{7078000, Modes::JT9, IARURegions::ALL},
|
|
|
|
|
|
|
|
{10136000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{10138000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{10138700, Modes::WSPR, IARURegions::ALL},
|
|
|
|
{10140000, Modes::JT9, IARURegions::ALL},
|
|
|
|
|
|
|
|
{14095600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
{14074000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{14076000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{14078000, Modes::JT9, IARURegions::ALL},
|
|
|
|
|
|
|
|
{18100000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{18102000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{18104000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{18104600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
|
|
|
|
{21074000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{21076000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{21078000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{21094600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
|
|
|
|
{24915000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{24917000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{24919000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{24924600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
|
|
|
|
{28074000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{28076000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{28078000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{28124600, Modes::WSPR, IARURegions::ALL},
|
|
|
|
|
2017-07-16 15:08:56 +00:00
|
|
|
{50200000, Modes::Echo, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
{50276000, Modes::JT65, IARURegions::R2},
|
|
|
|
{50276000, Modes::JT65, IARURegions::R3},
|
|
|
|
{50260000, Modes::MSK144, IARURegions::R2},
|
|
|
|
{50260000, Modes::MSK144, IARURegions::R3},
|
|
|
|
{50293000, Modes::WSPR, IARURegions::R2},
|
|
|
|
{50293000, Modes::WSPR, IARURegions::R3},
|
|
|
|
{50310000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{50312000, Modes::JT9, IARURegions::ALL},
|
|
|
|
{50313000, Modes::FT8, IARURegions::ALL},
|
|
|
|
{50360000, Modes::MSK144, IARURegions::R1},
|
|
|
|
|
|
|
|
{70100000, Modes::FT8, IARURegions::R1},
|
|
|
|
{70102000, Modes::JT65, IARURegions::R1},
|
|
|
|
{70104000, Modes::JT9, IARURegions::R1},
|
|
|
|
{70091000, Modes::WSPR, IARURegions::R1},
|
|
|
|
{70230000, Modes::MSK144, IARURegions::R1},
|
|
|
|
|
|
|
|
{144120000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{144120000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{144360000, Modes::MSK144, IARURegions::R1},
|
|
|
|
{144150000, Modes::MSK144, IARURegions::R2},
|
|
|
|
{144489000, Modes::WSPR, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{144120000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{222065000, Modes::Echo, IARURegions::R2},
|
|
|
|
{222065000, Modes::JT65, IARURegions::R2},
|
2017-07-16 15:08:56 +00:00
|
|
|
{222065000, Modes::QRA64, IARURegions::R2},
|
|
|
|
|
2017-07-07 23:11:41 +00:00
|
|
|
{432065000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{432065000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{432300000, Modes::WSPR, IARURegions::ALL},
|
|
|
|
{432360000, Modes::MSK144, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{432065000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
2017-07-16 15:08:56 +00:00
|
|
|
{902065000, Modes::JT65, IARURegions::R2},
|
|
|
|
{902065000, Modes::QRA64, IARURegions::R2},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{1296065000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{1296065000, Modes::JT65, IARURegions::ALL},
|
|
|
|
{1296500000, Modes::WSPR, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{1296065000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{2301000000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{2301065000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{2301065000, Modes::JT65, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{2301065000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{2304065000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{2304065000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{2304065000, Modes::JT65, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{2304065000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{2320065000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{2320065000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{2320065000, Modes::JT65, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{2320065000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{3400065000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{3400065000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{3400065000, Modes::JT65, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{3400065000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{5760065000, Modes::Echo, IARURegions::ALL},
|
|
|
|
{5760065000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{5760065000, Modes::JT65, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{5760200000, Modes::QRA64, IARURegions::ALL},
|
2017-07-07 23:11:41 +00:00
|
|
|
|
|
|
|
{10368100000, Modes::Echo, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{10368200000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{10368200000, Modes::QRA64, IARURegions::ALL},
|
|
|
|
|
2017-07-07 23:11:41 +00:00
|
|
|
{24048100000, Modes::Echo, IARURegions::ALL},
|
2017-07-16 15:08:56 +00:00
|
|
|
{24048200000, Modes::JT4, IARURegions::ALL},
|
|
|
|
{24048200000, Modes::QRA64, IARURegions::ALL},
|
2015-05-28 23:22:17 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#if !defined (QT_NO_DEBUG_STREAM)
|
2017-08-09 16:10:08 +00:00
|
|
|
QDebug operator << (QDebug debug, FrequencyList_v2::Item const& item)
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
2016-04-06 17:11:02 +00:00
|
|
|
QDebugStateSaver saver {debug};
|
2015-05-28 23:22:17 +00:00
|
|
|
debug.nospace () << "FrequencyItem("
|
|
|
|
<< item.frequency_ << ", "
|
2017-07-07 23:11:41 +00:00
|
|
|
<< item.region_ << ", "
|
2015-05-28 23:22:17 +00:00
|
|
|
<< item.mode_ << ')';
|
2016-04-06 17:11:02 +00:00
|
|
|
return debug;
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QDataStream& operator << (QDataStream& os, FrequencyList_v2::Item const& item)
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
|
|
|
return os << item.frequency_
|
2017-07-07 23:11:41 +00:00
|
|
|
<< item.mode_
|
|
|
|
<< item.region_;
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QDataStream& operator >> (QDataStream& is, FrequencyList_v2::Item& item)
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
|
|
|
return is >> item.frequency_
|
2017-07-07 23:11:41 +00:00
|
|
|
>> item.mode_
|
|
|
|
>> item.region_;
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
class FrequencyList_v2::impl final
|
2015-04-06 01:57:47 +00:00
|
|
|
: public QAbstractTableModel
|
|
|
|
{
|
|
|
|
public:
|
2015-05-28 23:22:17 +00:00
|
|
|
impl (Bands const * bands, QObject * parent)
|
2015-04-06 01:57:47 +00:00
|
|
|
: QAbstractTableModel {parent}
|
2015-05-28 23:22:17 +00:00
|
|
|
, bands_ {bands}
|
2017-07-07 23:11:41 +00:00
|
|
|
, region_filter_ {IARURegions::ALL}
|
|
|
|
, mode_filter_ {Modes::ALL}
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
FrequencyItems frequency_list (FrequencyItems);
|
|
|
|
QModelIndex add (Item);
|
2017-07-07 23:11:41 +00:00
|
|
|
void add (FrequencyItems);
|
2015-04-06 01:57:47 +00:00
|
|
|
|
|
|
|
// Implement the QAbstractTableModel interface
|
|
|
|
int rowCount (QModelIndex const& parent = QModelIndex {}) const override;
|
|
|
|
int columnCount (QModelIndex const& parent = QModelIndex {}) const override;
|
|
|
|
Qt::ItemFlags flags (QModelIndex const& = QModelIndex {}) const override;
|
|
|
|
QVariant data (QModelIndex const&, int role = Qt::DisplayRole) const override;
|
|
|
|
bool setData (QModelIndex const&, QVariant const& value, int role = Qt::EditRole) override;
|
|
|
|
QVariant headerData (int section, Qt::Orientation, int = Qt::DisplayRole) const override;
|
|
|
|
bool removeRows (int row, int count, QModelIndex const& parent = QModelIndex {}) override;
|
|
|
|
bool insertRows (int row, int count, QModelIndex const& parent = QModelIndex {}) override;
|
|
|
|
QStringList mimeTypes () const override;
|
|
|
|
QMimeData * mimeData (QModelIndexList const&) const override;
|
|
|
|
|
2017-07-07 23:11:41 +00:00
|
|
|
static int constexpr num_cols {SENTINAL};
|
2016-05-01 00:40:51 +00:00
|
|
|
static auto constexpr mime_type = "application/wsjt.Frequencies";
|
2015-04-06 01:57:47 +00:00
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
Bands const * bands_;
|
|
|
|
FrequencyItems frequency_list_;
|
2017-07-07 23:11:41 +00:00
|
|
|
Region region_filter_;
|
2015-05-28 23:22:17 +00:00
|
|
|
Mode mode_filter_;
|
2015-04-06 01:57:47 +00:00
|
|
|
};
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
FrequencyList_v2::FrequencyList_v2 (Bands const * bands, QObject * parent)
|
2015-04-06 01:57:47 +00:00
|
|
|
: QSortFilterProxyModel {parent}
|
2015-05-28 23:22:17 +00:00
|
|
|
, m_ {bands, parent}
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
setSourceModel (&*m_);
|
|
|
|
setSortRole (SortRole);
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
FrequencyList_v2::~FrequencyList_v2 ()
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::frequency_list (FrequencyItems frequency_list) -> FrequencyItems
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
|
|
|
return m_->frequency_list (frequency_list);
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::frequency_list () const -> FrequencyItems const&
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
|
|
|
return m_->frequency_list_;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::frequency_list (QModelIndexList const& model_index_list) const -> FrequencyItems
|
2017-07-07 23:11:41 +00:00
|
|
|
{
|
|
|
|
FrequencyItems list;
|
|
|
|
Q_FOREACH (auto const& index, model_index_list)
|
|
|
|
{
|
|
|
|
list << m_->frequency_list_[mapToSource (index).row ()];
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
void FrequencyList_v2::frequency_list_merge (FrequencyItems const& items)
|
2017-07-07 23:11:41 +00:00
|
|
|
{
|
|
|
|
m_->add (items);
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
int FrequencyList_v2::best_working_frequency (Frequency f) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-31 11:51:31 +00:00
|
|
|
int result {-1};
|
2015-05-28 23:22:17 +00:00
|
|
|
auto const& target_band = m_->bands_->find (f);
|
2015-05-31 11:51:31 +00:00
|
|
|
if (!target_band.isEmpty ())
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
2016-10-30 22:36:13 +00:00
|
|
|
Radio::FrequencyDelta delta {std::numeric_limits<Radio::FrequencyDelta>::max ()};
|
2015-05-31 11:51:40 +00:00
|
|
|
// find a frequency in the same band that is allowed
|
|
|
|
for (int row = 0; row < rowCount (); ++row)
|
|
|
|
{
|
|
|
|
auto const& source_row = mapToSource (index (row, 0)).row ();
|
2016-10-30 22:36:13 +00:00
|
|
|
auto const& candidate_frequency = m_->frequency_list_[source_row].frequency_;
|
|
|
|
auto const& band = m_->bands_->find (candidate_frequency);
|
2015-05-31 11:51:40 +00:00
|
|
|
if (band == target_band)
|
|
|
|
{
|
2016-10-30 22:36:13 +00:00
|
|
|
// take closest band match
|
|
|
|
Radio::FrequencyDelta new_delta = f - candidate_frequency;
|
|
|
|
if (std::abs (new_delta) < std::abs (delta))
|
|
|
|
{
|
|
|
|
delta = new_delta;
|
|
|
|
result = row;
|
|
|
|
}
|
2015-05-31 11:51:40 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
int FrequencyList_v2::best_working_frequency (QString const& target_band) const
|
2015-05-31 11:51:40 +00:00
|
|
|
{
|
|
|
|
int result {-1};
|
|
|
|
if (!target_band.isEmpty ())
|
|
|
|
{
|
|
|
|
// find a frequency in the same band that is allowed
|
2015-05-28 23:22:17 +00:00
|
|
|
for (int row = 0; row < rowCount (); ++row)
|
|
|
|
{
|
|
|
|
auto const& source_row = mapToSource (index (row, 0)).row ();
|
|
|
|
auto const& band = m_->bands_->find (m_->frequency_list_[source_row].frequency_);
|
2015-05-31 11:51:31 +00:00
|
|
|
if (band == target_band)
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
2015-05-31 11:51:31 +00:00
|
|
|
return row;
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-05-31 11:51:31 +00:00
|
|
|
return result;
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
void FrequencyList_v2::reset_to_defaults ()
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
m_->frequency_list (default_frequency_list);
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QModelIndex FrequencyList_v2::add (Item f)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
return mapFromSource (m_->add (f));
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::remove (Item f)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
auto row = m_->frequency_list_.indexOf (f);
|
2015-04-06 01:57:47 +00:00
|
|
|
|
|
|
|
if (0 > row)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return m_->removeRow (row);
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
bool row_is_higher (QModelIndex const& lhs, QModelIndex const& rhs)
|
|
|
|
{
|
|
|
|
return lhs.row () > rhs.row ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::removeDisjointRows (QModelIndexList rows)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
bool result {true};
|
|
|
|
|
|
|
|
// We must work with source model indexes because we don't want row
|
|
|
|
// removes to invalidate model indexes we haven't yet processed. We
|
|
|
|
// achieve that by processing them in decending row order.
|
|
|
|
for (int r = 0; r < rows.size (); ++r)
|
|
|
|
{
|
|
|
|
rows[r] = mapToSource (rows[r]);
|
|
|
|
}
|
|
|
|
|
|
|
|
// reverse sort by row
|
|
|
|
qSort (rows.begin (), rows.end (), row_is_higher);
|
|
|
|
Q_FOREACH (auto index, rows)
|
|
|
|
{
|
|
|
|
if (result && !m_->removeRow (index.row ()))
|
|
|
|
{
|
|
|
|
result = false;
|
|
|
|
}
|
|
|
|
}
|
2015-05-28 23:22:17 +00:00
|
|
|
return result;
|
|
|
|
}
|
2015-04-06 01:57:47 +00:00
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
void FrequencyList_v2::filter (Region region, Mode mode)
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
m_->region_filter_ = region;
|
2015-05-28 23:22:17 +00:00
|
|
|
m_->mode_filter_ = mode;
|
|
|
|
invalidateFilter ();
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::filterAcceptsRow (int source_row, QModelIndex const& /* parent */) const
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
|
|
|
bool result {true};
|
2017-07-07 23:11:41 +00:00
|
|
|
auto const& item = m_->frequency_list_[source_row];
|
|
|
|
if (m_->region_filter_ != IARURegions::ALL)
|
|
|
|
{
|
|
|
|
result = IARURegions::ALL == item.region_ || m_->region_filter_ == item.region_;
|
|
|
|
}
|
|
|
|
if (result && m_->mode_filter_ != Modes::ALL)
|
2015-05-28 23:22:17 +00:00
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
// we pass ALL mode rows unless filtering for FreqCal mode
|
|
|
|
result = (Modes::ALL == item.mode_ && m_->mode_filter_ != Modes::FreqCal)
|
2017-01-12 21:03:30 +00:00
|
|
|
|| m_->mode_filter_ == item.mode_;
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
2015-04-06 01:57:47 +00:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::impl::frequency_list (FrequencyItems frequency_list) -> FrequencyItems
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
beginResetModel ();
|
2015-05-28 23:22:17 +00:00
|
|
|
std::swap (frequency_list_, frequency_list);
|
2015-04-06 01:57:47 +00:00
|
|
|
endResetModel ();
|
2015-05-28 23:22:17 +00:00
|
|
|
return frequency_list;
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QModelIndex FrequencyList_v2::impl::add (Item f)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
// Any Frequency that isn't in the list may be added
|
2015-05-28 23:22:17 +00:00
|
|
|
if (!frequency_list_.contains (f))
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
auto row = frequency_list_.size ();
|
2015-04-06 01:57:47 +00:00
|
|
|
|
|
|
|
beginInsertRows (QModelIndex {}, row, row);
|
2015-05-28 23:22:17 +00:00
|
|
|
frequency_list_.append (f);
|
2015-04-06 01:57:47 +00:00
|
|
|
endInsertRows ();
|
|
|
|
|
|
|
|
return index (row, 0);
|
|
|
|
}
|
|
|
|
return QModelIndex {};
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
void FrequencyList_v2::impl::add (FrequencyItems items)
|
2017-07-07 23:11:41 +00:00
|
|
|
{
|
|
|
|
// Any Frequency that isn't in the list may be added
|
|
|
|
for (auto p = items.begin (); p != items.end ();)
|
|
|
|
{
|
|
|
|
if (frequency_list_.contains (*p))
|
|
|
|
{
|
|
|
|
p = items.erase (p);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
++p;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (items.size ())
|
|
|
|
{
|
|
|
|
auto row = frequency_list_.size ();
|
|
|
|
|
|
|
|
beginInsertRows (QModelIndex {}, row, row + items.size () - 1);
|
|
|
|
frequency_list_.append (items);
|
|
|
|
endInsertRows ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
int FrequencyList_v2::impl::rowCount (QModelIndex const& parent) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
return parent.isValid () ? 0 : frequency_list_.size ();
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
int FrequencyList_v2::impl::columnCount (QModelIndex const& parent) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
return parent.isValid () ? 0 : num_cols;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
Qt::ItemFlags FrequencyList_v2::impl::flags (QModelIndex const& index) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
auto result = QAbstractTableModel::flags (index) | Qt::ItemIsDropEnabled;
|
|
|
|
auto row = index.row ();
|
|
|
|
auto column = index.column ();
|
|
|
|
if (index.isValid ()
|
2015-05-28 23:22:17 +00:00
|
|
|
&& row < frequency_list_.size ()
|
2015-04-06 01:57:47 +00:00
|
|
|
&& column < num_cols)
|
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
if (frequency_mhz_column != column)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
result |= Qt::ItemIsEditable | Qt::ItemIsDragEnabled;
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QVariant FrequencyList_v2::impl::data (QModelIndex const& index, int role) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
QVariant item;
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
auto const& row = index.row ();
|
|
|
|
auto const& column = index.column ();
|
2015-04-06 01:57:47 +00:00
|
|
|
|
|
|
|
if (index.isValid ()
|
2015-05-28 23:22:17 +00:00
|
|
|
&& row < frequency_list_.size ()
|
2015-04-06 01:57:47 +00:00
|
|
|
&& column < num_cols)
|
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
auto const& frequency_item = frequency_list_.at (row);
|
2015-04-06 01:57:47 +00:00
|
|
|
switch (column)
|
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
case region_column:
|
|
|
|
switch (role)
|
|
|
|
{
|
|
|
|
case SortRole:
|
|
|
|
case Qt::DisplayRole:
|
|
|
|
case Qt::EditRole:
|
|
|
|
case Qt::AccessibleTextRole:
|
|
|
|
item = IARURegions::name (frequency_item.region_);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::ToolTipRole:
|
|
|
|
case Qt::AccessibleDescriptionRole:
|
|
|
|
item = tr ("IARU Region");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::TextAlignmentRole:
|
|
|
|
item = Qt::AlignHCenter + Qt::AlignVCenter;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
case mode_column:
|
2015-04-06 01:57:47 +00:00
|
|
|
switch (role)
|
|
|
|
{
|
|
|
|
case SortRole:
|
|
|
|
case Qt::DisplayRole:
|
|
|
|
case Qt::EditRole:
|
|
|
|
case Qt::AccessibleTextRole:
|
2015-05-28 23:22:17 +00:00
|
|
|
item = Modes::name (frequency_item.mode_);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::ToolTipRole:
|
|
|
|
case Qt::AccessibleDescriptionRole:
|
|
|
|
item = tr ("Mode");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::TextAlignmentRole:
|
|
|
|
item = Qt::AlignHCenter + Qt::AlignVCenter;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case frequency_column:
|
|
|
|
switch (role)
|
|
|
|
{
|
|
|
|
case SortRole:
|
|
|
|
case Qt::EditRole:
|
|
|
|
case Qt::AccessibleTextRole:
|
|
|
|
item = frequency_item.frequency_;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::DisplayRole:
|
|
|
|
{
|
|
|
|
auto const& band = bands_->find (frequency_item.frequency_);
|
2015-05-31 11:51:31 +00:00
|
|
|
item = Radio::pretty_frequency_MHz_string (frequency_item.frequency_)
|
|
|
|
+ " MHz (" + (band.isEmpty () ? "OOB" : band) + ')';
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
2015-04-06 01:57:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::ToolTipRole:
|
|
|
|
case Qt::AccessibleDescriptionRole:
|
|
|
|
item = tr ("Frequency");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::TextAlignmentRole:
|
|
|
|
item = Qt::AlignRight + Qt::AlignVCenter;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
case frequency_mhz_column:
|
2015-04-06 01:57:47 +00:00
|
|
|
switch (role)
|
|
|
|
{
|
|
|
|
case Qt::EditRole:
|
|
|
|
case Qt::AccessibleTextRole:
|
2015-09-10 21:03:42 +00:00
|
|
|
item = Radio::frequency_MHz_string (frequency_item.frequency_);
|
2015-04-06 01:57:47 +00:00
|
|
|
break;
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
case Qt::DisplayRole:
|
|
|
|
{
|
|
|
|
auto const& band = bands_->find (frequency_item.frequency_);
|
2015-05-31 11:51:31 +00:00
|
|
|
item = Radio::pretty_frequency_MHz_string (frequency_item.frequency_)
|
|
|
|
+ " MHz (" + (band.isEmpty () ? "OOB" : band) + ')';
|
2015-05-28 23:22:17 +00:00
|
|
|
}
|
2015-04-06 01:57:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::ToolTipRole:
|
|
|
|
case Qt::AccessibleDescriptionRole:
|
2015-05-28 23:22:17 +00:00
|
|
|
item = tr ("Frequency (MHz)");
|
2015-04-06 01:57:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::TextAlignmentRole:
|
|
|
|
item = Qt::AlignRight + Qt::AlignVCenter;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::impl::setData (QModelIndex const& model_index, QVariant const& value, int role)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
bool changed {false};
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
auto const& row = model_index.row ();
|
2015-04-06 01:57:47 +00:00
|
|
|
if (model_index.isValid ()
|
|
|
|
&& Qt::EditRole == role
|
2015-05-28 23:22:17 +00:00
|
|
|
&& row < frequency_list_.size ())
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
QVector<int> roles;
|
|
|
|
roles << role;
|
|
|
|
|
|
|
|
auto& item = frequency_list_[row];
|
|
|
|
switch (model_index.column ())
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
case region_column:
|
Merged from trunk (r8085 thru r8170 inc.):
------------------------------------------------------------------------
r8085 | k9an | 2017-09-13 01:46:16 +0100 (Wed, 13 Sep 2017) | 1 line
Open up DT range to +/- 2.5 s for testing.
------------------------------------------------------------------------
r8086 | bsomervi | 2017-09-16 11:12:38 +0100 (Sat, 16 Sep 2017) | 1 line
Do not allow window manager events to close the astronomical data window
------------------------------------------------------------------------
r8087 | bsomervi | 2017-09-16 21:27:05 +0100 (Sat, 16 Sep 2017) | 4 lines
Fix regression in ADIF parser that caused failure with missing header
Improved robustness of the ADIF parser and re-factored to more
idiomatic C++.
------------------------------------------------------------------------
r8088 | bsomervi | 2017-09-16 21:27:13 +0100 (Sat, 16 Sep 2017) | 1 line
Update band limits as per ADIF 3.0.6 specification
------------------------------------------------------------------------
r8089 | bsomervi | 2017-09-16 21:27:20 +0100 (Sat, 16 Sep 2017) | 1 line
Use a single definition of band limits (Bands class)
------------------------------------------------------------------------
r8090 | bsomervi | 2017-09-16 21:27:33 +0100 (Sat, 16 Sep 2017) | 5 lines
Add button to the decoded text window context menu to erase the contents
Right-click either decoded text window to erase its contents. The
"Erase" button on the main UI still operates as before although it is
implemented differently now.
------------------------------------------------------------------------
r8091 | bsomervi | 2017-09-16 23:20:51 +0100 (Sat, 16 Sep 2017) | 1 line
Correct the actions taken when clearing decodes windows
------------------------------------------------------------------------
r8092 | bsomervi | 2017-09-16 23:20:59 +0100 (Sat, 16 Sep 2017) | 8 lines
Restore functionality of sending .WAV playback decodes to UDP
Extended the Decode and WSPRDecode UDP messages with an "off air"
boolean field indicating the decode was derived from a .WAV fle
playback rather than an on air reception.
Extended reference applications to use the new off air decode message
field.
------------------------------------------------------------------------
r8093 | k9an | 2017-09-17 16:34:32 +0100 (Sun, 17 Sep 2017) | 1 line
Experimental tweak to FT8 decoder. Try a second symbol metric if
the first one fails - currently configured to use max-amplitude
and max-log.
------------------------------------------------------------------------
r8094 | k9an | 2017-09-17 21:43:30 +0100 (Sun, 17 Sep 2017) | 1 line
Restore the use of max-amplitude for ap passes.
------------------------------------------------------------------------
r8095 | k1jt | 2017-09-18 16:42:14 +0100 (Mon, 18 Sep 2017) | 2 lines
Allow specialized use of "x2 Tone Spacing" in FT8 mode.
------------------------------------------------------------------------
r8096 | k1jt | 2017-09-18 16:47:29 +0100 (Mon, 18 Sep 2017) | 2 lines
Allow X2 tone spacing also in JT9 (slow) modes.
------------------------------------------------------------------------
r8097 | k1jt | 2017-09-18 21:42:18 +0100 (Mon, 18 Sep 2017) | 2 lines
Change CRLF line endings to *nix style.
------------------------------------------------------------------------
r8098 | k1jt | 2017-09-19 17:04:10 +0100 (Tue, 19 Sep 2017) | 2 lines
Add a missing step to description of the Frequency Calibration procedure.
------------------------------------------------------------------------
r8099 | k1jt | 2017-09-20 17:31:04 +0100 (Wed, 20 Sep 2017) | 1 line
Insert a link to FT8_Operating_Tips.pdf.
------------------------------------------------------------------------
r8100 | k1jt | 2017-09-20 20:11:04 +0100 (Wed, 20 Sep 2017) | 3 lines
As an experiment, move "NA VHF Contest Mode" checkbox to main screen and
query operator if d>10000 km.
------------------------------------------------------------------------
r8101 | k1jt | 2017-09-20 20:19:47 +0100 (Wed, 20 Sep 2017) | 2 lines
Correct a tool-tip typo.
------------------------------------------------------------------------
r8102 | bsomervi | 2017-09-22 13:31:01 +0100 (Fri, 22 Sep 2017) | 1 line
UI tweaks to improve portability between platforms and font size changes
------------------------------------------------------------------------
r8103 | bsomervi | 2017-09-22 16:36:24 +0100 (Fri, 22 Sep 2017) | 5 lines
Extend UDP Reply message with keyboard modifiers
This allows UDP servers to emulate keyboard modified double-clicks on
decoded messages, E.g. ALT+double-click for replying to a CQ or QRZ
call without changing ones Tx frequency offset.
------------------------------------------------------------------------
r8104 | bsomervi | 2017-09-22 16:49:42 +0100 (Fri, 22 Sep 2017) | 1 line
Updated AD1C cty.dat file (21st Sept 2017)
------------------------------------------------------------------------
r8105 | k1jt | 2017-09-22 18:38:51 +0100 (Fri, 22 Sep 2017) | 2 lines
Another attempt at eliminating confusion when NA VHF Contest Mode is in use.
------------------------------------------------------------------------
r8106 | k9an | 2017-09-22 21:36:52 +0100 (Fri, 22 Sep 2017) | 1 line
Make sure that fastGrph is properly initialized.
------------------------------------------------------------------------
r8107 | bsomervi | 2017-09-22 23:08:41 +0100 (Fri, 22 Sep 2017) | 1 line
Improve performance of the UDP reference application message_aggregator
------------------------------------------------------------------------
r8108 | bsomervi | 2017-09-22 23:08:49 +0100 (Fri, 22 Sep 2017) | 1 line
Fix a regression in processing incoming Reply UDP messages
------------------------------------------------------------------------
r8109 | bsomervi | 2017-09-22 23:08:56 +0100 (Fri, 22 Sep 2017) | 4 lines
Better handling of worked before and country name display
Appended text is added at a fixed column unless the message overlaps
in which case the appended information floats to thr right.
------------------------------------------------------------------------
r8110 | bsomervi | 2017-09-22 23:09:04 +0100 (Fri, 22 Sep 2017) | 4 lines
Restore printing of MSK144 decode quality information
Now that a way of dealing with worked before and country information
without losing this information has been found.
------------------------------------------------------------------------
r8111 | bsomervi | 2017-09-22 23:09:11 +0100 (Fri, 22 Sep 2017) | 5 lines
Fix an issue with truncated free text messages being generated
This is an edge case when working a call like RI9F/GM4WJS where it is
not possible to confirm receipt of the full compound callsign in a Tx5
73 message as "RI9F/GM4WJS 73" is 14 characters.
------------------------------------------------------------------------
r8112 | bsomervi | 2017-09-23 19:09:29 +0100 (Sat, 23 Sep 2017) | 1 line
Tidy up some ugly code
------------------------------------------------------------------------
r8113 | bsomervi | 2017-09-23 19:09:37 +0100 (Sat, 23 Sep 2017) | 1 line
Clean up some main window UI layout
------------------------------------------------------------------------
r8114 | k9an | 2017-09-23 20:39:42 +0100 (Sat, 23 Sep 2017) | 1 line
Comment out some diagnostic writes.
------------------------------------------------------------------------
r8115 | k9an | 2017-09-23 20:56:45 +0100 (Sat, 23 Sep 2017) | 1 line
Add some text for section 13.3 of the User Guide.
------------------------------------------------------------------------
r8116 | k9an | 2017-09-23 21:01:31 +0100 (Sat, 23 Sep 2017) | 1 line
Minor change to new_features.adoc.
------------------------------------------------------------------------
r8117 | bsomervi | 2017-09-23 23:02:24 +0100 (Sat, 23 Sep 2017) | 1 line
Minor additions to MSK144 phase eq docs
------------------------------------------------------------------------
r8118 | k9an | 2017-09-23 23:32:06 +0100 (Sat, 23 Sep 2017) | 1 line
Fix up Table 2 caption.
------------------------------------------------------------------------
r8119 | bsomervi | 2017-09-24 22:14:10 +0100 (Sun, 24 Sep 2017) | 1 line
Fix issues processing free text 73 messages
------------------------------------------------------------------------
r8120 | k1jt | 2017-09-25 18:02:52 +0100 (Mon, 25 Sep 2017) | 3 lines
First tests of "RR73 NOW ..." and "NIL NOW ..." (i3bit=1, 2) messages in FT8.
DO NOT USE THIS FEATURE ON THE AIR!
------------------------------------------------------------------------
r8121 | k1jt | 2017-09-25 20:21:25 +0100 (Mon, 25 Sep 2017) | 2 lines
Make bDXped a member variable, default to false.
------------------------------------------------------------------------
r8122 | bsomervi | 2017-09-26 00:38:19 +0100 (Tue, 26 Sep 2017) | 1 line
Fix regression in handling double-clicked CQ and QRZ calls
------------------------------------------------------------------------
r8123 | bsomervi | 2017-09-26 00:38:27 +0100 (Tue, 26 Sep 2017) | 1 line
Fix a regression handling compound calls in 73 messages
------------------------------------------------------------------------
r8124 | k1jt | 2017-09-27 13:26:33 +0100 (Wed, 27 Sep 2017) | 2 lines
Additions to Section 13.3 of WSJT-X User Guide: "Phase Equalkization".
------------------------------------------------------------------------
r8125 | k1jt | 2017-09-27 13:39:50 +0100 (Wed, 27 Sep 2017) | 31 lines
Experimental new behavior for "Lock Tx=Rx" and for clicking on waterfall and decoded text.
1. Checkbox "Lock Tx=Rx" is now labeled "Lock Tx Freq", and its meaning is
quite different. If checked, the audio Tx frequency cannot be changed.
It's like the "Lock" function on some transceivers.
2. Clicking on the Wide Graph waterfall and on lines of decoded text now
behave as follows:
Click on Action
---------------------------------------------------------------------
Waterfall: Click to set Rx frequency
Shift-click to set Tx frequency
Ctrl-click to set Rx and Tx frequencies
If Lock Tx Freq is checked, Tx freq does not move
Double-click to set Rx frequency and decode there
Decoded Text: Double-click to copy transmitting callsign to DX Call
and locator to DX Grid; change Rx frequency to decoded
signal's frequency; generate standard messages.
Tx frequency is not changed unless Ctrl is held down
and Lock Tx Freq not checked.
If this experimental behavior is adopted, some descriptions in the
User Guide and Special Mouse Commands will need to be updated.
3. Starting to implement a new function on the Tools menu,
"Solve for calibration parameters". This is not yet finished;
DO NOT USE in its present form.
------------------------------------------------------------------------
r8126 | k1jt | 2017-09-27 13:50:21 +0100 (Wed, 27 Sep 2017) | 2 lines
Add missing routine.
------------------------------------------------------------------------
r8127 | k1jt | 2017-09-28 02:35:09 +0100 (Thu, 28 Sep 2017) | 1 line
Functional 'Solve for calibration parameters' on Tools menu.
------------------------------------------------------------------------
r8128 | k1jt | 2017-09-28 13:30:52 +0100 (Thu, 28 Sep 2017) | 1 line
dummy
------------------------------------------------------------------------
r8129 | k9an | 2017-09-28 16:00:57 +0100 (Thu, 28 Sep 2017) | 1 line
Correct a typo in the docs.
------------------------------------------------------------------------
r8130 | k1jt | 2017-09-28 16:05:41 +0100 (Thu, 28 Sep 2017) | 1 line
Minor edits in User Guide.
------------------------------------------------------------------------
r8131 | k1jt | 2017-09-28 16:09:46 +0100 (Thu, 28 Sep 2017) | 3 lines
Fix two ways that Loxk Tx Freq could be circumvented; display Echo Graph
automatically when Echo mode is started; clean up display of FreqCal parameters.
------------------------------------------------------------------------
r8132 | k1jt | 2017-09-28 16:46:36 +0100 (Thu, 28 Sep 2017) | 2 lines
Clean up the display of "Controls" checkbox on Wide Graph.
------------------------------------------------------------------------
r8133 | k1jt | 2017-09-28 16:55:24 +0100 (Thu, 28 Sep 2017) | 2 lines
Display "NIL NOW ", etc., only for test cases.
------------------------------------------------------------------------
r8134 | k1jt | 2017-09-28 20:51:04 +0100 (Thu, 28 Sep 2017) | 2 lines
Add some FreqCal info to User Guide.
------------------------------------------------------------------------
r8135 | k1jt | 2017-09-29 00:34:13 +0100 (Fri, 29 Sep 2017) | 1 line
Move 'Controls' checkbox a few pixels to the right.
------------------------------------------------------------------------
r8136 | bsomervi | 2017-09-29 11:46:43 +0100 (Fri, 29 Sep 2017) | 1 line
Fix accidental regression in UDP Reply message handling
------------------------------------------------------------------------
r8137 | bsomervi | 2017-09-29 11:57:22 +0100 (Fri, 29 Sep 2017) | 1 line
Minor clarification for the User Guide waterfall controls description
------------------------------------------------------------------------
r8138 | k1jt | 2017-09-29 14:27:55 +0100 (Fri, 29 Sep 2017) | 2 lines
Minor change to make shift/ctrl double-click logic more consistent.
------------------------------------------------------------------------
r8139 | k1jt | 2017-09-29 14:47:26 +0100 (Fri, 29 Sep 2017) | 1 line
Remove a diagnostic qDebug().
------------------------------------------------------------------------
r8140 | k1jt | 2017-09-29 14:59:16 +0100 (Fri, 29 Sep 2017) | 2 lines
Additional instructions for using the FreqCal procedure.
------------------------------------------------------------------------
r8141 | k1jt | 2017-09-29 17:53:28 +0100 (Fri, 29 Sep 2017) | 2 lines
Many updates to User Guide, mostly to reflect changes in "click behavior".
------------------------------------------------------------------------
r8142 | k1jt | 2017-09-29 17:53:57 +0100 (Fri, 29 Sep 2017) | 1 line
Update mouse_sommands.txt.
------------------------------------------------------------------------
r8143 | k1jt | 2017-09-29 17:58:05 +0100 (Fri, 29 Sep 2017) | 3 lines
Previous commit message should have mentioned a fix to "stdmsg.f90" that was
preventing double-click on a JT65 "OOO" message from populating message fields.
------------------------------------------------------------------------
r8144 | k1jt | 2017-09-29 18:40:30 +0100 (Fri, 29 Sep 2017) | 2 lines
Add an option to enforce simplex operation (moving both Tx and Rx
frequency) when double-clicking on a decoded text line.
------------------------------------------------------------------------
r8145 | k1jt | 2017-09-30 14:56:33 +0100 (Sat, 30 Sep 2017) | 1 line
Fix a regression that prevented double-click on call from working as in r8123.
------------------------------------------------------------------------
r8146 | k1jt | 2017-09-30 18:48:46 +0100 (Sat, 30 Sep 2017) | 21 lines
Another try at optimizing the GUI for simplex and split behavior. Details below:
1. Checkbox "Double-click on call sets Tx and Rx freqs" has been removed
from the Settings -> General tab.
2. Checkbox "Lock Tx Freq" on main window is relabled "Hold Tx Freq".
3. Behavior now defaults to the "simplex" behavior in use up to code
revision r8123. In particular, double-clicking on decoded mesages
that do not contain your own call moves both Rx and Tx frequencies.
If the first callsign is your own call, only Rx freq moves.
4. If "Hold Tx Freq" is checked, double-clicking on decoded messages
moves the Rx frequency; Tx frequency is moved only if CTRL was held
down.
5. Clicking on the waterfall moves Rx and Tx frequencies as before:
Rx only on a simple click, Tx only on SHIFT-click, and both on
CTRL-click. This happens even if "Hold Tx Freq" is checked (which
is why this box is no longer labeled "Lock Tx Freq").
------------------------------------------------------------------------
r8147 | k1jt | 2017-09-30 20:25:01 +0100 (Sat, 30 Sep 2017) | 1 line
Fix behavior with double-click on 'CQ <AA-ZZ> <call> <grid>.'
------------------------------------------------------------------------
r8148 | k1jt | 2017-10-01 13:35:43 +0100 (Sun, 01 Oct 2017) | 1 line
Correct an improper disabling of TxFreqSpinBox.
------------------------------------------------------------------------
r8149 | k1jt | 2017-10-01 15:03:16 +0100 (Sun, 01 Oct 2017) | 1 line
Update mouse_commands.txt and tool tips.
------------------------------------------------------------------------
r8150 | k1jt | 2017-10-01 15:58:10 +0100 (Sun, 01 Oct 2017) | 1 line
Update 'blank line' band ID at 4*TRperiod/5.
------------------------------------------------------------------------
r8151 | bsomervi | 2017-10-01 22:43:59 +0100 (Sun, 01 Oct 2017) | 1 line
Fix an invalid iterator increment when there are no FreqCal frequencies
------------------------------------------------------------------------
r8152 | bsomervi | 2017-10-01 22:44:07 +0100 (Sun, 01 Oct 2017) | 1 line
Fix cty.dat lookups that were not honouring exact match flags
------------------------------------------------------------------------
r8153 | bsomervi | 2017-10-01 22:44:15 +0100 (Sun, 01 Oct 2017) | 6 lines
Add "Apply" button to calibration solution message box
Make calibration solution application iterative so that calibrations
can be applied sequentially if desired.
Tidy up calibration solution messages boxes and make i18n friendly.
------------------------------------------------------------------------
r8154 | k1jt | 2017-10-02 14:49:37 +0100 (Mon, 02 Oct 2017) | 2 lines
Update User Guide and "mouse_commands".
------------------------------------------------------------------------
r8155 | k1jt | 2017-10-02 15:15:15 +0100 (Mon, 02 Oct 2017) | 2 lines
Special DXpedition messages must not have the FreeText bit set.
------------------------------------------------------------------------
r8156 | k1jt | 2017-10-02 19:27:08 +0100 (Mon, 02 Oct 2017) | 2 lines
Add more on Copyright protections.
------------------------------------------------------------------------
r8157 | k1jt | 2017-10-02 19:33:17 +0100 (Mon, 02 Oct 2017) | 2 lines
Update the list of keyboard shortcuts.
------------------------------------------------------------------------
r8158 | k1jt | 2017-10-02 19:35:06 +0100 (Mon, 02 Oct 2017) | 2 lines
Minor edits.
------------------------------------------------------------------------
r8159 | k1jt | 2017-10-03 02:23:24 +0100 (Tue, 03 Oct 2017) | 1 line
Correct a misspelling; add quote marks; push 'About' to bottom of Tools menu.
------------------------------------------------------------------------
r8160 | k1jt | 2017-10-03 16:59:47 +0100 (Tue, 03 Oct 2017) | 2 lines
Add KA9Q to the copyright notice.
------------------------------------------------------------------------
r8161 | k1jt | 2017-10-04 14:14:51 +0100 (Wed, 04 Oct 2017) | 2 lines
Update an image; fix a typo.
------------------------------------------------------------------------
r8162 | k1jt | 2017-10-05 19:27:34 +0100 (Thu, 05 Oct 2017) | 2 lines
Fix a bug involving "firstcall contains mycall" but not equal to mycall.
------------------------------------------------------------------------
r8163 | bsomervi | 2017-10-06 17:18:17 +0100 (Fri, 06 Oct 2017) | 1 line
Add an accessor method to Configuration to get the current calibration parameters
------------------------------------------------------------------------
r8164 | bsomervi | 2017-10-06 17:18:25 +0100 (Fri, 06 Oct 2017) | 5 lines
Rename the fmt.all calibration measurements file after accepting a solution
This allows those who want to keep their calibration measurements
after finding a solution to calibrate their station. The fmt.all file
used to find and accept a solution is renamed to fmt.bak.
------------------------------------------------------------------------
r8165 | k1jt | 2017-10-13 15:36:10 +0100 (Fri, 13 Oct 2017) | 2 lines
Update the Tool Tip displayed for Frequency Calibration parameters.
------------------------------------------------------------------------
r8166 | bsomervi | 2017-10-13 23:34:10 +0100 (Fri, 13 Oct 2017) | 1 line
Fix an issue with editing IARU regions in the working frequencies table
------------------------------------------------------------------------
r8167 | bsomervi | 2017-10-13 23:34:21 +0100 (Fri, 13 Oct 2017) | 32 lines
Improved frequency calibration
Measure check box added to FreqCal mode, check to record to fmt.all
with current calibration correction disabled, uncheck to see the
impact of the current calibration parameters.
The fmt.all file is now optionally renamed to fmt.bak when a
calibration solution is accepted. This allows users to preserve an
fmt.all file that they might have edited for best fit.
A calibration procedure might proceed thus:-
1) select FreqCal mode,
2) step through suggested calibration test frequencies deleting those
that have no usable signal,
3) enable "Menu->Tools->Execute frequency calibration cycle" and check
that suitable signals are present,
4) select a suitable FTol and T/R period,
5) check "Measure" and let the cycle complete a few times to gather
data,
6) uncheck "Measure" to complete the data capture, optionally tidy the
fmt.all file with your favourite editor,
7) push "Menu->Tools->Solve for calibration parameters" and accept if
you like what you see,
8) sit back and admire your accurately frequency calibrated station.
------------------------------------------------------------------------
r8168 | bsomervi | 2017-10-13 23:34:36 +0100 (Fri, 13 Oct 2017) | 4 lines
Generic handling of keyboard modifiers via UDP and double-clicks
This change opens up all keyboard modifier options to UDP Reply
messages as well as double-clicks of decoded messages.
------------------------------------------------------------------------
r8169 | bsomervi | 2017-10-13 23:34:48 +0100 (Fri, 13 Oct 2017) | 3 lines
User guide updates for frequency calibration mode
Also some instances of non-italicized WSJT-X fixed.
------------------------------------------------------------------------
r8170 | k9an | 2017-10-14 02:02:38 +0100 (Sat, 14 Oct 2017) | 1 line
Don't open the false_decodes.txt file.
------------------------------------------------------------------------
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx-1.8@8171 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2017-10-14 09:09:10 +00:00
|
|
|
{
|
|
|
|
auto region = IARURegions::value (value.toString ());
|
|
|
|
if (region != item.region_)
|
|
|
|
{
|
|
|
|
item.region_ = region;
|
|
|
|
Q_EMIT dataChanged (model_index, model_index, roles);
|
|
|
|
changed = true;
|
|
|
|
}
|
2017-07-07 23:11:41 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2015-05-28 23:22:17 +00:00
|
|
|
case mode_column:
|
Merged from trunk (r8085 thru r8170 inc.):
------------------------------------------------------------------------
r8085 | k9an | 2017-09-13 01:46:16 +0100 (Wed, 13 Sep 2017) | 1 line
Open up DT range to +/- 2.5 s for testing.
------------------------------------------------------------------------
r8086 | bsomervi | 2017-09-16 11:12:38 +0100 (Sat, 16 Sep 2017) | 1 line
Do not allow window manager events to close the astronomical data window
------------------------------------------------------------------------
r8087 | bsomervi | 2017-09-16 21:27:05 +0100 (Sat, 16 Sep 2017) | 4 lines
Fix regression in ADIF parser that caused failure with missing header
Improved robustness of the ADIF parser and re-factored to more
idiomatic C++.
------------------------------------------------------------------------
r8088 | bsomervi | 2017-09-16 21:27:13 +0100 (Sat, 16 Sep 2017) | 1 line
Update band limits as per ADIF 3.0.6 specification
------------------------------------------------------------------------
r8089 | bsomervi | 2017-09-16 21:27:20 +0100 (Sat, 16 Sep 2017) | 1 line
Use a single definition of band limits (Bands class)
------------------------------------------------------------------------
r8090 | bsomervi | 2017-09-16 21:27:33 +0100 (Sat, 16 Sep 2017) | 5 lines
Add button to the decoded text window context menu to erase the contents
Right-click either decoded text window to erase its contents. The
"Erase" button on the main UI still operates as before although it is
implemented differently now.
------------------------------------------------------------------------
r8091 | bsomervi | 2017-09-16 23:20:51 +0100 (Sat, 16 Sep 2017) | 1 line
Correct the actions taken when clearing decodes windows
------------------------------------------------------------------------
r8092 | bsomervi | 2017-09-16 23:20:59 +0100 (Sat, 16 Sep 2017) | 8 lines
Restore functionality of sending .WAV playback decodes to UDP
Extended the Decode and WSPRDecode UDP messages with an "off air"
boolean field indicating the decode was derived from a .WAV fle
playback rather than an on air reception.
Extended reference applications to use the new off air decode message
field.
------------------------------------------------------------------------
r8093 | k9an | 2017-09-17 16:34:32 +0100 (Sun, 17 Sep 2017) | 1 line
Experimental tweak to FT8 decoder. Try a second symbol metric if
the first one fails - currently configured to use max-amplitude
and max-log.
------------------------------------------------------------------------
r8094 | k9an | 2017-09-17 21:43:30 +0100 (Sun, 17 Sep 2017) | 1 line
Restore the use of max-amplitude for ap passes.
------------------------------------------------------------------------
r8095 | k1jt | 2017-09-18 16:42:14 +0100 (Mon, 18 Sep 2017) | 2 lines
Allow specialized use of "x2 Tone Spacing" in FT8 mode.
------------------------------------------------------------------------
r8096 | k1jt | 2017-09-18 16:47:29 +0100 (Mon, 18 Sep 2017) | 2 lines
Allow X2 tone spacing also in JT9 (slow) modes.
------------------------------------------------------------------------
r8097 | k1jt | 2017-09-18 21:42:18 +0100 (Mon, 18 Sep 2017) | 2 lines
Change CRLF line endings to *nix style.
------------------------------------------------------------------------
r8098 | k1jt | 2017-09-19 17:04:10 +0100 (Tue, 19 Sep 2017) | 2 lines
Add a missing step to description of the Frequency Calibration procedure.
------------------------------------------------------------------------
r8099 | k1jt | 2017-09-20 17:31:04 +0100 (Wed, 20 Sep 2017) | 1 line
Insert a link to FT8_Operating_Tips.pdf.
------------------------------------------------------------------------
r8100 | k1jt | 2017-09-20 20:11:04 +0100 (Wed, 20 Sep 2017) | 3 lines
As an experiment, move "NA VHF Contest Mode" checkbox to main screen and
query operator if d>10000 km.
------------------------------------------------------------------------
r8101 | k1jt | 2017-09-20 20:19:47 +0100 (Wed, 20 Sep 2017) | 2 lines
Correct a tool-tip typo.
------------------------------------------------------------------------
r8102 | bsomervi | 2017-09-22 13:31:01 +0100 (Fri, 22 Sep 2017) | 1 line
UI tweaks to improve portability between platforms and font size changes
------------------------------------------------------------------------
r8103 | bsomervi | 2017-09-22 16:36:24 +0100 (Fri, 22 Sep 2017) | 5 lines
Extend UDP Reply message with keyboard modifiers
This allows UDP servers to emulate keyboard modified double-clicks on
decoded messages, E.g. ALT+double-click for replying to a CQ or QRZ
call without changing ones Tx frequency offset.
------------------------------------------------------------------------
r8104 | bsomervi | 2017-09-22 16:49:42 +0100 (Fri, 22 Sep 2017) | 1 line
Updated AD1C cty.dat file (21st Sept 2017)
------------------------------------------------------------------------
r8105 | k1jt | 2017-09-22 18:38:51 +0100 (Fri, 22 Sep 2017) | 2 lines
Another attempt at eliminating confusion when NA VHF Contest Mode is in use.
------------------------------------------------------------------------
r8106 | k9an | 2017-09-22 21:36:52 +0100 (Fri, 22 Sep 2017) | 1 line
Make sure that fastGrph is properly initialized.
------------------------------------------------------------------------
r8107 | bsomervi | 2017-09-22 23:08:41 +0100 (Fri, 22 Sep 2017) | 1 line
Improve performance of the UDP reference application message_aggregator
------------------------------------------------------------------------
r8108 | bsomervi | 2017-09-22 23:08:49 +0100 (Fri, 22 Sep 2017) | 1 line
Fix a regression in processing incoming Reply UDP messages
------------------------------------------------------------------------
r8109 | bsomervi | 2017-09-22 23:08:56 +0100 (Fri, 22 Sep 2017) | 4 lines
Better handling of worked before and country name display
Appended text is added at a fixed column unless the message overlaps
in which case the appended information floats to thr right.
------------------------------------------------------------------------
r8110 | bsomervi | 2017-09-22 23:09:04 +0100 (Fri, 22 Sep 2017) | 4 lines
Restore printing of MSK144 decode quality information
Now that a way of dealing with worked before and country information
without losing this information has been found.
------------------------------------------------------------------------
r8111 | bsomervi | 2017-09-22 23:09:11 +0100 (Fri, 22 Sep 2017) | 5 lines
Fix an issue with truncated free text messages being generated
This is an edge case when working a call like RI9F/GM4WJS where it is
not possible to confirm receipt of the full compound callsign in a Tx5
73 message as "RI9F/GM4WJS 73" is 14 characters.
------------------------------------------------------------------------
r8112 | bsomervi | 2017-09-23 19:09:29 +0100 (Sat, 23 Sep 2017) | 1 line
Tidy up some ugly code
------------------------------------------------------------------------
r8113 | bsomervi | 2017-09-23 19:09:37 +0100 (Sat, 23 Sep 2017) | 1 line
Clean up some main window UI layout
------------------------------------------------------------------------
r8114 | k9an | 2017-09-23 20:39:42 +0100 (Sat, 23 Sep 2017) | 1 line
Comment out some diagnostic writes.
------------------------------------------------------------------------
r8115 | k9an | 2017-09-23 20:56:45 +0100 (Sat, 23 Sep 2017) | 1 line
Add some text for section 13.3 of the User Guide.
------------------------------------------------------------------------
r8116 | k9an | 2017-09-23 21:01:31 +0100 (Sat, 23 Sep 2017) | 1 line
Minor change to new_features.adoc.
------------------------------------------------------------------------
r8117 | bsomervi | 2017-09-23 23:02:24 +0100 (Sat, 23 Sep 2017) | 1 line
Minor additions to MSK144 phase eq docs
------------------------------------------------------------------------
r8118 | k9an | 2017-09-23 23:32:06 +0100 (Sat, 23 Sep 2017) | 1 line
Fix up Table 2 caption.
------------------------------------------------------------------------
r8119 | bsomervi | 2017-09-24 22:14:10 +0100 (Sun, 24 Sep 2017) | 1 line
Fix issues processing free text 73 messages
------------------------------------------------------------------------
r8120 | k1jt | 2017-09-25 18:02:52 +0100 (Mon, 25 Sep 2017) | 3 lines
First tests of "RR73 NOW ..." and "NIL NOW ..." (i3bit=1, 2) messages in FT8.
DO NOT USE THIS FEATURE ON THE AIR!
------------------------------------------------------------------------
r8121 | k1jt | 2017-09-25 20:21:25 +0100 (Mon, 25 Sep 2017) | 2 lines
Make bDXped a member variable, default to false.
------------------------------------------------------------------------
r8122 | bsomervi | 2017-09-26 00:38:19 +0100 (Tue, 26 Sep 2017) | 1 line
Fix regression in handling double-clicked CQ and QRZ calls
------------------------------------------------------------------------
r8123 | bsomervi | 2017-09-26 00:38:27 +0100 (Tue, 26 Sep 2017) | 1 line
Fix a regression handling compound calls in 73 messages
------------------------------------------------------------------------
r8124 | k1jt | 2017-09-27 13:26:33 +0100 (Wed, 27 Sep 2017) | 2 lines
Additions to Section 13.3 of WSJT-X User Guide: "Phase Equalkization".
------------------------------------------------------------------------
r8125 | k1jt | 2017-09-27 13:39:50 +0100 (Wed, 27 Sep 2017) | 31 lines
Experimental new behavior for "Lock Tx=Rx" and for clicking on waterfall and decoded text.
1. Checkbox "Lock Tx=Rx" is now labeled "Lock Tx Freq", and its meaning is
quite different. If checked, the audio Tx frequency cannot be changed.
It's like the "Lock" function on some transceivers.
2. Clicking on the Wide Graph waterfall and on lines of decoded text now
behave as follows:
Click on Action
---------------------------------------------------------------------
Waterfall: Click to set Rx frequency
Shift-click to set Tx frequency
Ctrl-click to set Rx and Tx frequencies
If Lock Tx Freq is checked, Tx freq does not move
Double-click to set Rx frequency and decode there
Decoded Text: Double-click to copy transmitting callsign to DX Call
and locator to DX Grid; change Rx frequency to decoded
signal's frequency; generate standard messages.
Tx frequency is not changed unless Ctrl is held down
and Lock Tx Freq not checked.
If this experimental behavior is adopted, some descriptions in the
User Guide and Special Mouse Commands will need to be updated.
3. Starting to implement a new function on the Tools menu,
"Solve for calibration parameters". This is not yet finished;
DO NOT USE in its present form.
------------------------------------------------------------------------
r8126 | k1jt | 2017-09-27 13:50:21 +0100 (Wed, 27 Sep 2017) | 2 lines
Add missing routine.
------------------------------------------------------------------------
r8127 | k1jt | 2017-09-28 02:35:09 +0100 (Thu, 28 Sep 2017) | 1 line
Functional 'Solve for calibration parameters' on Tools menu.
------------------------------------------------------------------------
r8128 | k1jt | 2017-09-28 13:30:52 +0100 (Thu, 28 Sep 2017) | 1 line
dummy
------------------------------------------------------------------------
r8129 | k9an | 2017-09-28 16:00:57 +0100 (Thu, 28 Sep 2017) | 1 line
Correct a typo in the docs.
------------------------------------------------------------------------
r8130 | k1jt | 2017-09-28 16:05:41 +0100 (Thu, 28 Sep 2017) | 1 line
Minor edits in User Guide.
------------------------------------------------------------------------
r8131 | k1jt | 2017-09-28 16:09:46 +0100 (Thu, 28 Sep 2017) | 3 lines
Fix two ways that Loxk Tx Freq could be circumvented; display Echo Graph
automatically when Echo mode is started; clean up display of FreqCal parameters.
------------------------------------------------------------------------
r8132 | k1jt | 2017-09-28 16:46:36 +0100 (Thu, 28 Sep 2017) | 2 lines
Clean up the display of "Controls" checkbox on Wide Graph.
------------------------------------------------------------------------
r8133 | k1jt | 2017-09-28 16:55:24 +0100 (Thu, 28 Sep 2017) | 2 lines
Display "NIL NOW ", etc., only for test cases.
------------------------------------------------------------------------
r8134 | k1jt | 2017-09-28 20:51:04 +0100 (Thu, 28 Sep 2017) | 2 lines
Add some FreqCal info to User Guide.
------------------------------------------------------------------------
r8135 | k1jt | 2017-09-29 00:34:13 +0100 (Fri, 29 Sep 2017) | 1 line
Move 'Controls' checkbox a few pixels to the right.
------------------------------------------------------------------------
r8136 | bsomervi | 2017-09-29 11:46:43 +0100 (Fri, 29 Sep 2017) | 1 line
Fix accidental regression in UDP Reply message handling
------------------------------------------------------------------------
r8137 | bsomervi | 2017-09-29 11:57:22 +0100 (Fri, 29 Sep 2017) | 1 line
Minor clarification for the User Guide waterfall controls description
------------------------------------------------------------------------
r8138 | k1jt | 2017-09-29 14:27:55 +0100 (Fri, 29 Sep 2017) | 2 lines
Minor change to make shift/ctrl double-click logic more consistent.
------------------------------------------------------------------------
r8139 | k1jt | 2017-09-29 14:47:26 +0100 (Fri, 29 Sep 2017) | 1 line
Remove a diagnostic qDebug().
------------------------------------------------------------------------
r8140 | k1jt | 2017-09-29 14:59:16 +0100 (Fri, 29 Sep 2017) | 2 lines
Additional instructions for using the FreqCal procedure.
------------------------------------------------------------------------
r8141 | k1jt | 2017-09-29 17:53:28 +0100 (Fri, 29 Sep 2017) | 2 lines
Many updates to User Guide, mostly to reflect changes in "click behavior".
------------------------------------------------------------------------
r8142 | k1jt | 2017-09-29 17:53:57 +0100 (Fri, 29 Sep 2017) | 1 line
Update mouse_sommands.txt.
------------------------------------------------------------------------
r8143 | k1jt | 2017-09-29 17:58:05 +0100 (Fri, 29 Sep 2017) | 3 lines
Previous commit message should have mentioned a fix to "stdmsg.f90" that was
preventing double-click on a JT65 "OOO" message from populating message fields.
------------------------------------------------------------------------
r8144 | k1jt | 2017-09-29 18:40:30 +0100 (Fri, 29 Sep 2017) | 2 lines
Add an option to enforce simplex operation (moving both Tx and Rx
frequency) when double-clicking on a decoded text line.
------------------------------------------------------------------------
r8145 | k1jt | 2017-09-30 14:56:33 +0100 (Sat, 30 Sep 2017) | 1 line
Fix a regression that prevented double-click on call from working as in r8123.
------------------------------------------------------------------------
r8146 | k1jt | 2017-09-30 18:48:46 +0100 (Sat, 30 Sep 2017) | 21 lines
Another try at optimizing the GUI for simplex and split behavior. Details below:
1. Checkbox "Double-click on call sets Tx and Rx freqs" has been removed
from the Settings -> General tab.
2. Checkbox "Lock Tx Freq" on main window is relabled "Hold Tx Freq".
3. Behavior now defaults to the "simplex" behavior in use up to code
revision r8123. In particular, double-clicking on decoded mesages
that do not contain your own call moves both Rx and Tx frequencies.
If the first callsign is your own call, only Rx freq moves.
4. If "Hold Tx Freq" is checked, double-clicking on decoded messages
moves the Rx frequency; Tx frequency is moved only if CTRL was held
down.
5. Clicking on the waterfall moves Rx and Tx frequencies as before:
Rx only on a simple click, Tx only on SHIFT-click, and both on
CTRL-click. This happens even if "Hold Tx Freq" is checked (which
is why this box is no longer labeled "Lock Tx Freq").
------------------------------------------------------------------------
r8147 | k1jt | 2017-09-30 20:25:01 +0100 (Sat, 30 Sep 2017) | 1 line
Fix behavior with double-click on 'CQ <AA-ZZ> <call> <grid>.'
------------------------------------------------------------------------
r8148 | k1jt | 2017-10-01 13:35:43 +0100 (Sun, 01 Oct 2017) | 1 line
Correct an improper disabling of TxFreqSpinBox.
------------------------------------------------------------------------
r8149 | k1jt | 2017-10-01 15:03:16 +0100 (Sun, 01 Oct 2017) | 1 line
Update mouse_commands.txt and tool tips.
------------------------------------------------------------------------
r8150 | k1jt | 2017-10-01 15:58:10 +0100 (Sun, 01 Oct 2017) | 1 line
Update 'blank line' band ID at 4*TRperiod/5.
------------------------------------------------------------------------
r8151 | bsomervi | 2017-10-01 22:43:59 +0100 (Sun, 01 Oct 2017) | 1 line
Fix an invalid iterator increment when there are no FreqCal frequencies
------------------------------------------------------------------------
r8152 | bsomervi | 2017-10-01 22:44:07 +0100 (Sun, 01 Oct 2017) | 1 line
Fix cty.dat lookups that were not honouring exact match flags
------------------------------------------------------------------------
r8153 | bsomervi | 2017-10-01 22:44:15 +0100 (Sun, 01 Oct 2017) | 6 lines
Add "Apply" button to calibration solution message box
Make calibration solution application iterative so that calibrations
can be applied sequentially if desired.
Tidy up calibration solution messages boxes and make i18n friendly.
------------------------------------------------------------------------
r8154 | k1jt | 2017-10-02 14:49:37 +0100 (Mon, 02 Oct 2017) | 2 lines
Update User Guide and "mouse_commands".
------------------------------------------------------------------------
r8155 | k1jt | 2017-10-02 15:15:15 +0100 (Mon, 02 Oct 2017) | 2 lines
Special DXpedition messages must not have the FreeText bit set.
------------------------------------------------------------------------
r8156 | k1jt | 2017-10-02 19:27:08 +0100 (Mon, 02 Oct 2017) | 2 lines
Add more on Copyright protections.
------------------------------------------------------------------------
r8157 | k1jt | 2017-10-02 19:33:17 +0100 (Mon, 02 Oct 2017) | 2 lines
Update the list of keyboard shortcuts.
------------------------------------------------------------------------
r8158 | k1jt | 2017-10-02 19:35:06 +0100 (Mon, 02 Oct 2017) | 2 lines
Minor edits.
------------------------------------------------------------------------
r8159 | k1jt | 2017-10-03 02:23:24 +0100 (Tue, 03 Oct 2017) | 1 line
Correct a misspelling; add quote marks; push 'About' to bottom of Tools menu.
------------------------------------------------------------------------
r8160 | k1jt | 2017-10-03 16:59:47 +0100 (Tue, 03 Oct 2017) | 2 lines
Add KA9Q to the copyright notice.
------------------------------------------------------------------------
r8161 | k1jt | 2017-10-04 14:14:51 +0100 (Wed, 04 Oct 2017) | 2 lines
Update an image; fix a typo.
------------------------------------------------------------------------
r8162 | k1jt | 2017-10-05 19:27:34 +0100 (Thu, 05 Oct 2017) | 2 lines
Fix a bug involving "firstcall contains mycall" but not equal to mycall.
------------------------------------------------------------------------
r8163 | bsomervi | 2017-10-06 17:18:17 +0100 (Fri, 06 Oct 2017) | 1 line
Add an accessor method to Configuration to get the current calibration parameters
------------------------------------------------------------------------
r8164 | bsomervi | 2017-10-06 17:18:25 +0100 (Fri, 06 Oct 2017) | 5 lines
Rename the fmt.all calibration measurements file after accepting a solution
This allows those who want to keep their calibration measurements
after finding a solution to calibrate their station. The fmt.all file
used to find and accept a solution is renamed to fmt.bak.
------------------------------------------------------------------------
r8165 | k1jt | 2017-10-13 15:36:10 +0100 (Fri, 13 Oct 2017) | 2 lines
Update the Tool Tip displayed for Frequency Calibration parameters.
------------------------------------------------------------------------
r8166 | bsomervi | 2017-10-13 23:34:10 +0100 (Fri, 13 Oct 2017) | 1 line
Fix an issue with editing IARU regions in the working frequencies table
------------------------------------------------------------------------
r8167 | bsomervi | 2017-10-13 23:34:21 +0100 (Fri, 13 Oct 2017) | 32 lines
Improved frequency calibration
Measure check box added to FreqCal mode, check to record to fmt.all
with current calibration correction disabled, uncheck to see the
impact of the current calibration parameters.
The fmt.all file is now optionally renamed to fmt.bak when a
calibration solution is accepted. This allows users to preserve an
fmt.all file that they might have edited for best fit.
A calibration procedure might proceed thus:-
1) select FreqCal mode,
2) step through suggested calibration test frequencies deleting those
that have no usable signal,
3) enable "Menu->Tools->Execute frequency calibration cycle" and check
that suitable signals are present,
4) select a suitable FTol and T/R period,
5) check "Measure" and let the cycle complete a few times to gather
data,
6) uncheck "Measure" to complete the data capture, optionally tidy the
fmt.all file with your favourite editor,
7) push "Menu->Tools->Solve for calibration parameters" and accept if
you like what you see,
8) sit back and admire your accurately frequency calibrated station.
------------------------------------------------------------------------
r8168 | bsomervi | 2017-10-13 23:34:36 +0100 (Fri, 13 Oct 2017) | 4 lines
Generic handling of keyboard modifiers via UDP and double-clicks
This change opens up all keyboard modifier options to UDP Reply
messages as well as double-clicks of decoded messages.
------------------------------------------------------------------------
r8169 | bsomervi | 2017-10-13 23:34:48 +0100 (Fri, 13 Oct 2017) | 3 lines
User guide updates for frequency calibration mode
Also some instances of non-italicized WSJT-X fixed.
------------------------------------------------------------------------
r8170 | k9an | 2017-10-14 02:02:38 +0100 (Sat, 14 Oct 2017) | 1 line
Don't open the false_decodes.txt file.
------------------------------------------------------------------------
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx-1.8@8171 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2017-10-14 09:09:10 +00:00
|
|
|
{
|
|
|
|
auto mode = Modes::value (value.toString ());
|
|
|
|
if (mode != item.mode_)
|
|
|
|
{
|
|
|
|
item.mode_ = mode;
|
|
|
|
Q_EMIT dataChanged (model_index, model_index, roles);
|
|
|
|
changed = true;
|
|
|
|
}
|
|
|
|
}
|
2015-05-28 23:22:17 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case frequency_column:
|
|
|
|
if (value.canConvert<Frequency> ())
|
|
|
|
{
|
2017-01-08 23:58:00 +00:00
|
|
|
Radio::Frequency frequency {qvariant_cast <Radio::Frequency> (value)};
|
2015-05-28 23:22:17 +00:00
|
|
|
if (frequency != item.frequency_)
|
|
|
|
{
|
|
|
|
item.frequency_ = frequency;
|
|
|
|
// mark derived column (1) changed as well
|
|
|
|
Q_EMIT dataChanged (index (model_index.row (), 1), model_index, roles);
|
|
|
|
changed = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return changed;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QVariant FrequencyList_v2::impl::headerData (int section, Qt::Orientation orientation, int role) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
QVariant header;
|
|
|
|
if (Qt::DisplayRole == role
|
|
|
|
&& Qt::Horizontal == orientation
|
|
|
|
&& section < num_cols)
|
|
|
|
{
|
|
|
|
switch (section)
|
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
case region_column: header = tr ("IARU Region"); break;
|
2015-05-28 23:22:17 +00:00
|
|
|
case mode_column: header = tr ("Mode"); break;
|
|
|
|
case frequency_column: header = tr ("Frequency"); break;
|
|
|
|
case frequency_mhz_column: header = tr ("Frequency (MHz)"); break;
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
header = QAbstractTableModel::headerData (section, orientation, role);
|
|
|
|
}
|
|
|
|
return header;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::impl::removeRows (int row, int count, QModelIndex const& parent)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
if (0 < count && (row + count) <= rowCount (parent))
|
|
|
|
{
|
|
|
|
beginRemoveRows (parent, row, row + count - 1);
|
|
|
|
for (auto r = 0; r < count; ++r)
|
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
frequency_list_.removeAt (row);
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
endRemoveRows ();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::impl::insertRows (int row, int count, QModelIndex const& parent)
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
if (0 < count)
|
|
|
|
{
|
|
|
|
beginInsertRows (parent, row, row + count - 1);
|
|
|
|
for (auto r = 0; r < count; ++r)
|
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
frequency_list_.insert (row, Item {0, Mode::ALL, IARURegions::ALL});
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
endInsertRows ();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QStringList FrequencyList_v2::impl::mimeTypes () const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
QStringList types;
|
|
|
|
types << mime_type;
|
|
|
|
return types;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
QMimeData * FrequencyList_v2::impl::mimeData (QModelIndexList const& items) const
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
|
|
|
QMimeData * mime_data = new QMimeData {};
|
|
|
|
QByteArray encoded_data;
|
|
|
|
QDataStream stream {&encoded_data, QIODevice::WriteOnly};
|
|
|
|
|
|
|
|
Q_FOREACH (auto const& item, items)
|
|
|
|
{
|
2015-05-28 23:22:17 +00:00
|
|
|
if (item.isValid () && frequency_column == item.column ())
|
2015-04-06 01:57:47 +00:00
|
|
|
{
|
2015-11-13 23:44:48 +00:00
|
|
|
stream << frequency_list_.at (item.row ());
|
2015-04-06 01:57:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mime_data->setData (mime_type, encoded_data);
|
|
|
|
return mime_data;
|
|
|
|
}
|
2015-05-31 11:51:31 +00:00
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::const_iterator::operator * () const -> Item const&
|
2015-05-31 11:51:31 +00:00
|
|
|
{
|
|
|
|
return parent_->frequency_list ().at(parent_->mapToSource (parent_->index (row_, 0)).row ());
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::const_iterator::operator -> () const -> Item const *
|
2017-01-08 23:58:09 +00:00
|
|
|
{
|
|
|
|
return &parent_->frequency_list ().at(parent_->mapToSource (parent_->index (row_, 0)).row ());
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::const_iterator::operator != (const_iterator const& rhs) const
|
2015-05-31 11:51:31 +00:00
|
|
|
{
|
|
|
|
return parent_ != rhs.parent_ || row_ != rhs.row_;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
bool FrequencyList_v2::const_iterator::operator == (const_iterator const& rhs) const
|
2017-01-08 23:58:09 +00:00
|
|
|
{
|
|
|
|
return parent_ == rhs.parent_ && row_ == rhs.row_;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::const_iterator::operator ++ () -> const_iterator&
|
2015-05-31 11:51:31 +00:00
|
|
|
{
|
|
|
|
++row_;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::begin () const -> const_iterator
|
2015-05-31 11:51:31 +00:00
|
|
|
{
|
|
|
|
return const_iterator (this, 0);
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::end () const -> const_iterator
|
2015-05-31 11:51:31 +00:00
|
|
|
{
|
|
|
|
return const_iterator (this, rowCount ());
|
|
|
|
}
|
2015-05-31 11:51:40 +00:00
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::find (Frequency f) const -> const_iterator
|
2017-01-12 21:03:30 +00:00
|
|
|
{
|
|
|
|
int row {0};
|
|
|
|
for (; row < rowCount (); ++row)
|
|
|
|
{
|
|
|
|
if (m_->frequency_list_[mapToSource (index (row, 0)).row ()].frequency_ == f)
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return const_iterator (this, row);
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::filtered_bands () const -> BandSet
|
2015-05-31 11:51:40 +00:00
|
|
|
{
|
|
|
|
BandSet result;
|
2015-06-06 00:06:46 +00:00
|
|
|
for (auto const& item : *this)
|
2015-05-31 11:51:40 +00:00
|
|
|
{
|
|
|
|
result << m_->bands_->find (item.frequency_);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2017-08-09 16:10:08 +00:00
|
|
|
auto FrequencyList_v2::all_bands (Region region, Mode mode) const -> BandSet
|
2015-05-31 11:51:40 +00:00
|
|
|
{
|
|
|
|
BandSet result;
|
2015-06-06 00:06:46 +00:00
|
|
|
for (auto const& item : m_->frequency_list_)
|
2015-05-31 11:51:40 +00:00
|
|
|
{
|
2017-07-07 23:11:41 +00:00
|
|
|
if (region == IARURegions::ALL || item.region_ == region
|
|
|
|
|| mode == Modes::ALL || item.mode_ == mode)
|
2015-06-06 00:06:46 +00:00
|
|
|
{
|
|
|
|
result << m_->bands_->find (item.frequency_);
|
|
|
|
}
|
2015-05-31 11:51:40 +00:00
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
2017-08-09 16:10:08 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Obsolete version of FrequencyList no longer used but needed to
|
|
|
|
// allow loading and saving of old settings contents without damage
|
|
|
|
//
|
|
|
|
QDataStream& operator << (QDataStream& os, FrequencyList::Item const& item)
|
|
|
|
{
|
|
|
|
return os << item.frequency_
|
|
|
|
<< item.mode_;
|
|
|
|
}
|
|
|
|
|
|
|
|
QDataStream& operator >> (QDataStream& is, FrequencyList::Item& item)
|
|
|
|
{
|
|
|
|
return is >> item.frequency_
|
|
|
|
>> item.mode_;
|
|
|
|
}
|