mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -05:00
Add option to highlight un-worked grid fields
This is a check box option in "Settings->Colors" rather than new highlighting types so un-worked field highlighting and un-worked grid square highlighting are mutually exclusive. The check box state can be changed at any time, no log rescanning is necessary, and subsequent decoded message highlighting will be according to the check box state.
This commit is contained in:
parent
2acc6358a5
commit
ca07d22e89
@ -571,6 +571,7 @@ private:
|
|||||||
DecodeHighlightingModel decode_highlighing_model_;
|
DecodeHighlightingModel decode_highlighing_model_;
|
||||||
DecodeHighlightingModel next_decode_highlighing_model_;
|
DecodeHighlightingModel next_decode_highlighing_model_;
|
||||||
bool highlight_by_mode_;
|
bool highlight_by_mode_;
|
||||||
|
bool highlight_only_fields_;
|
||||||
bool include_WAE_entities_;
|
bool include_WAE_entities_;
|
||||||
int LotW_days_since_upload_;
|
int LotW_days_since_upload_;
|
||||||
|
|
||||||
@ -753,6 +754,7 @@ bool Configuration::pwrBandTuneMemory () const {return m_->pwrBandTuneMemory_;}
|
|||||||
LotWUsers const& Configuration::lotw_users () const {return m_->lotw_users_;}
|
LotWUsers const& Configuration::lotw_users () const {return m_->lotw_users_;}
|
||||||
DecodeHighlightingModel const& Configuration::decode_highlighting () const {return m_->decode_highlighing_model_;}
|
DecodeHighlightingModel const& Configuration::decode_highlighting () const {return m_->decode_highlighing_model_;}
|
||||||
bool Configuration::highlight_by_mode () const {return m_->highlight_by_mode_;}
|
bool Configuration::highlight_by_mode () const {return m_->highlight_by_mode_;}
|
||||||
|
bool Configuration::highlight_only_fields () const {return m_->highlight_only_fields_;}
|
||||||
bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;}
|
bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;}
|
||||||
|
|
||||||
void Configuration::set_calibration (CalibrationParams params)
|
void Configuration::set_calibration (CalibrationParams params)
|
||||||
@ -959,6 +961,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
|
|||||||
, station_insert_action_ {tr ("&Insert ..."), nullptr}
|
, station_insert_action_ {tr ("&Insert ..."), nullptr}
|
||||||
, station_dialog_ {new StationDialog {&next_stations_, &bands_, this}}
|
, station_dialog_ {new StationDialog {&next_stations_, &bands_, this}}
|
||||||
, highlight_by_mode_ {false}
|
, highlight_by_mode_ {false}
|
||||||
|
, highlight_only_fields_ {false}
|
||||||
, include_WAE_entities_ {false}
|
, include_WAE_entities_ {false}
|
||||||
, LotW_days_since_upload_ {0}
|
, LotW_days_since_upload_ {0}
|
||||||
, last_port_type_ {TransceiverFactory::Capabilities::none}
|
, last_port_type_ {TransceiverFactory::Capabilities::none}
|
||||||
@ -1325,6 +1328,7 @@ void Configuration::impl::initialize_models ()
|
|||||||
|
|
||||||
next_decode_highlighing_model_.items (decode_highlighing_model_.items ());
|
next_decode_highlighing_model_.items (decode_highlighing_model_.items ());
|
||||||
ui_->highlight_by_mode_check_box->setChecked (highlight_by_mode_);
|
ui_->highlight_by_mode_check_box->setChecked (highlight_by_mode_);
|
||||||
|
ui_->only_fields_check_box->setChecked (highlight_only_fields_);
|
||||||
ui_->include_WAE_check_box->setChecked (include_WAE_entities_);
|
ui_->include_WAE_check_box->setChecked (include_WAE_entities_);
|
||||||
ui_->LotW_days_since_upload_spin_box->setValue (LotW_days_since_upload_);
|
ui_->LotW_days_since_upload_spin_box->setValue (LotW_days_since_upload_);
|
||||||
|
|
||||||
@ -1474,6 +1478,7 @@ void Configuration::impl::read_settings ()
|
|||||||
if (!highlight_items.size ()) highlight_items = DecodeHighlightingModel::default_items ();
|
if (!highlight_items.size ()) highlight_items = DecodeHighlightingModel::default_items ();
|
||||||
decode_highlighing_model_.items (highlight_items);
|
decode_highlighing_model_.items (highlight_items);
|
||||||
highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool ();
|
highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool ();
|
||||||
|
highlight_only_fields_ = settings_->value("OnlyFieldsSought", false).toBool ();
|
||||||
include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool ();
|
include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool ();
|
||||||
LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt ();
|
LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt ();
|
||||||
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
||||||
@ -1588,6 +1593,7 @@ void Configuration::impl::write_settings ()
|
|||||||
settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ()));
|
settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ()));
|
||||||
settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ()));
|
settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ()));
|
||||||
settings_->setValue ("HighlightByMode", highlight_by_mode_);
|
settings_->setValue ("HighlightByMode", highlight_by_mode_);
|
||||||
|
settings_->setValue ("OnlyFieldsSought", highlight_only_fields_);
|
||||||
settings_->setValue ("IncludeWAEEntities", include_WAE_entities_);
|
settings_->setValue ("IncludeWAEEntities", include_WAE_entities_);
|
||||||
settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_);
|
settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_);
|
||||||
settings_->setValue ("toRTTY", log_as_RTTY_);
|
settings_->setValue ("toRTTY", log_as_RTTY_);
|
||||||
@ -2130,6 +2136,7 @@ void Configuration::impl::accept ()
|
|||||||
Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_);
|
Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_);
|
||||||
}
|
}
|
||||||
highlight_by_mode_ = ui_->highlight_by_mode_check_box->isChecked ();
|
highlight_by_mode_ = ui_->highlight_by_mode_check_box->isChecked ();
|
||||||
|
highlight_only_fields_ = ui_->only_fields_check_box->isChecked ();
|
||||||
include_WAE_entities_ = ui_->include_WAE_check_box->isChecked ();
|
include_WAE_entities_ = ui_->include_WAE_check_box->isChecked ();
|
||||||
LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value ();
|
LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value ();
|
||||||
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
||||||
|
@ -177,6 +177,7 @@ public:
|
|||||||
LotWUsers const& lotw_users () const;
|
LotWUsers const& lotw_users () const;
|
||||||
DecodeHighlightingModel const& decode_highlighting () const;
|
DecodeHighlightingModel const& decode_highlighting () const;
|
||||||
bool highlight_by_mode () const;
|
bool highlight_by_mode () const;
|
||||||
|
bool highlight_only_fields () const;
|
||||||
bool include_WAE_entities () const;
|
bool include_WAE_entities () const;
|
||||||
|
|
||||||
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND};
|
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND};
|
||||||
|
100
Configuration.ui
100
Configuration.ui
@ -2206,8 +2206,45 @@ Right click for insert and delete options.</string>
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Decode Highlightling</string>
|
<string>Decode Highlightling</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
|
<item row="2" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||||
<item>
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="rescan_log_push_button">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Rescan ADIF Log</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QPushButton" name="reset_highlighting_to_defaults_push_button">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Reset Highlighting</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
<widget class="DecodeHighlightingListView" name="highlighting_list_view">
|
<widget class="DecodeHighlightingListView" name="highlighting_list_view">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
@ -2247,19 +2284,7 @@ Right click for insert and delete options.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="2" column="0">
|
||||||
<widget class="QPushButton" name="reset_highlighting_to_defaults_push_button">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string><html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html></string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Reset Highlighting</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="highlight_by_mode_check_box">
|
<widget class="QCheckBox" name="highlight_by_mode_check_box">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html></string>
|
<string><html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html></string>
|
||||||
@ -2269,47 +2294,22 @@ Right click for insert and delete options.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="4" column="0">
|
||||||
<spacer name="horizontalSpacer_5">
|
<widget class="QCheckBox" name="include_WAE_check_box">
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="rescan_log_push_button">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string><html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html></string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Rescan ADIF Log</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QFormLayout" name="formLayout_20">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QCheckBox" name="include_WAE_check_box"/>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="includeExtraWAEEntitiesLabel">
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Include extra WAE entities</string>
|
<string>Include extra WAE entities</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
|
||||||
<cstring>include_WAE_check_box</cstring>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
<item row="3" column="0">
|
||||||
|
<widget class="QCheckBox" name="only_fields_check_box">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Check to for grid highlighting to only apply to unworked grid fields</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Only grid Fields sought</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <boost/multi_index/hashed_index.hpp>
|
#include <boost/multi_index/hashed_index.hpp>
|
||||||
#include <boost/multi_index/ordered_index.hpp>
|
#include <boost/multi_index/ordered_index.hpp>
|
||||||
#include <boost/multi_index/key_extractors.hpp>
|
#include <boost/multi_index/key_extractors.hpp>
|
||||||
|
#include <boost/range/iterator_range.hpp>
|
||||||
#include <QtConcurrent/QtConcurrentRun>
|
#include <QtConcurrent/QtConcurrentRun>
|
||||||
#include <QFuture>
|
#include <QFuture>
|
||||||
#include <QFutureWatcher>
|
#include <QFutureWatcher>
|
||||||
@ -362,7 +363,8 @@ class WorkedBefore::impl final
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
impl (Configuration const * configuration)
|
impl (Configuration const * configuration)
|
||||||
: path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
|
: configuration_ {configuration}
|
||||||
|
, path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
|
||||||
, prefixes_ {configuration}
|
, prefixes_ {configuration}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -373,6 +375,7 @@ public:
|
|||||||
loader_watcher_.setFuture (async_loader_);
|
loader_watcher_.setFuture (async_loader_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Configuration const * configuration_;
|
||||||
QString path_;
|
QString path_;
|
||||||
AD1CCty prefixes_;
|
AD1CCty prefixes_;
|
||||||
QFutureWatcher<worked_before_database_type> loader_watcher_;
|
QFutureWatcher<worked_before_database_type> loader_watcher_;
|
||||||
@ -491,18 +494,38 @@ bool WorkedBefore::country_worked (QString const& country, QString const& mode,
|
|||||||
|
|
||||||
bool WorkedBefore::grid_worked (QString const& grid, QString const& mode, QString const& band) const
|
bool WorkedBefore::grid_worked (QString const& grid, QString const& mode, QString const& band) const
|
||||||
{
|
{
|
||||||
|
auto gridsquare = grid.left (4).toUpper ();
|
||||||
|
if (m_->configuration_->highlight_only_fields ())
|
||||||
|
{
|
||||||
|
// can't use a direct set find operation or a set operation with
|
||||||
|
// a (CompatibleKey, CompatibleCompare) concept so we must
|
||||||
|
// partially scan the index
|
||||||
|
auto range = boost::make_iterator_range (
|
||||||
|
m_->worked_.get<grid_mode_band> ().lower_bound (gridsquare.left (2))
|
||||||
|
, m_->worked_.get<grid_mode_band> ().upper_bound (gridsquare.left (2) + "99"));
|
||||||
|
for (worked_entry const& worked : range)
|
||||||
|
{
|
||||||
|
if ((!mode.size () || mode.toUpper () == worked.mode_)
|
||||||
|
&& (!band.size () || worked.band_ == band.toUpper ()))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (mode.size ())
|
if (mode.size ())
|
||||||
{
|
{
|
||||||
if (band.size ())
|
if (band.size ())
|
||||||
{
|
{
|
||||||
return m_->worked_.get<grid_mode_band> ().end ()
|
return m_->worked_.get<grid_mode_band> ().end ()
|
||||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper (), band.toUpper ()));
|
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (gridsquare, mode.toUpper (), band.toUpper ()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// partial key lookup
|
// partial key lookup
|
||||||
return m_->worked_.get<grid_mode_band> ().end ()
|
return m_->worked_.get<grid_mode_band> ().end ()
|
||||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper ()));
|
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (gridsquare, mode.toUpper ()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -510,15 +533,17 @@ bool WorkedBefore::grid_worked (QString const& grid, QString const& mode, QStrin
|
|||||||
if (band.size ())
|
if (band.size ())
|
||||||
{
|
{
|
||||||
return m_->worked_.get<grid_band> ().end ()
|
return m_->worked_.get<grid_band> ().end ()
|
||||||
!= m_->worked_.get<grid_band> ().find (std::make_tuple (grid.left (4).toUpper (), band.toUpper ()));
|
!= m_->worked_.get<grid_band> ().find (std::make_tuple (gridsquare, band.toUpper ()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// partial key lookup
|
// partial key lookup
|
||||||
return m_->worked_.get<grid_band> ().end ()
|
return m_->worked_.get<grid_band> ().end ()
|
||||||
!= m_->worked_.get<grid_band> ().find (grid.left (4).toUpper ());
|
!= m_->worked_.get<grid_band> ().find (gridsquare);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WorkedBefore::call_worked (QString const& call, QString const& mode, QString const& band) const
|
bool WorkedBefore::call_worked (QString const& call, QString const& mode, QString const& band) const
|
||||||
|
Loading…
Reference in New Issue
Block a user