diff --git a/Configuration.cpp b/Configuration.cpp index ebb6380b3..f4bf79e82 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -571,6 +571,7 @@ private: DecodeHighlightingModel decode_highlighing_model_; DecodeHighlightingModel next_decode_highlighing_model_; bool highlight_by_mode_; + bool highlight_only_fields_; bool include_WAE_entities_; 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_;} 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_only_fields () const {return m_->highlight_only_fields_;} bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;} void Configuration::set_calibration (CalibrationParams params) @@ -959,6 +961,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network , station_insert_action_ {tr ("&Insert ..."), nullptr} , station_dialog_ {new StationDialog {&next_stations_, &bands_, this}} , highlight_by_mode_ {false} + , highlight_only_fields_ {false} , include_WAE_entities_ {false} , LotW_days_since_upload_ {0} , last_port_type_ {TransceiverFactory::Capabilities::none} @@ -1325,6 +1328,7 @@ void Configuration::impl::initialize_models () next_decode_highlighing_model_.items (decode_highlighing_model_.items ()); 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_->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 (); decode_highlighing_model_.items (highlight_items); highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool (); + highlight_only_fields_ = settings_->value("OnlyFieldsSought", false).toBool (); include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool (); LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt (); 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 ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ())); settings_->setValue ("HighlightByMode", highlight_by_mode_); + settings_->setValue ("OnlyFieldsSought", highlight_only_fields_); settings_->setValue ("IncludeWAEEntities", include_WAE_entities_); settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_); settings_->setValue ("toRTTY", log_as_RTTY_); @@ -2130,6 +2136,7 @@ void Configuration::impl::accept () Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_); } 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 (); LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value (); lotw_users_.set_age_constraint (LotW_days_since_upload_); diff --git a/Configuration.hpp b/Configuration.hpp index dbf232fd5..3e57267e3 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -177,6 +177,7 @@ public: LotWUsers const& lotw_users () const; DecodeHighlightingModel const& decode_highlighting () const; bool highlight_by_mode () const; + bool highlight_only_fields () const; bool include_WAE_entities () const; enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND}; diff --git a/Configuration.ui b/Configuration.ui index b3d0836d3..f473bb6b4 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2206,8 +2206,45 @@ Right click for insert and delete options. Decode Highlightling - - + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + <html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html> + + + Rescan ADIF Log + + + + + + + + + <html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html> + + + Reset Highlighting + + + + @@ -2247,69 +2284,32 @@ Right click for insert and delete options. - - + + - <html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html> + <html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html> - Reset Highlighting + Highlight by Mode - - - - - - <html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html> - - - Highlight by Mode - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - <html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html> - - - Rescan ADIF Log - - - - + + + + Include extra WAE entities + + - - - - - - - - - Include extra WAE entities - - - include_WAE_check_box - - - - + + + + Check to for grid highlighting to only apply to unworked grid fields + + + Only grid Fields sought + + diff --git a/logbook/WorkedBefore.cpp b/logbook/WorkedBefore.cpp index aa65ab651..a1d774e4e 100644 --- a/logbook/WorkedBefore.cpp +++ b/logbook/WorkedBefore.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -362,7 +363,8 @@ class WorkedBefore::impl final { public: impl (Configuration const * configuration) - : path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)} + : configuration_ {configuration} + , path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)} , prefixes_ {configuration} { } @@ -373,6 +375,7 @@ public: loader_watcher_.setFuture (async_loader_); } + Configuration const * configuration_; QString path_; AD1CCty prefixes_; QFutureWatcher loader_watcher_; @@ -491,34 +494,56 @@ bool WorkedBefore::country_worked (QString const& country, QString const& mode, bool WorkedBefore::grid_worked (QString const& grid, QString const& mode, QString const& band) const { - if (mode.size ()) + auto gridsquare = grid.left (4).toUpper (); + if (m_->configuration_->highlight_only_fields ()) { - if (band.size ()) + // 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 ().lower_bound (gridsquare.left (2)) + , m_->worked_.get ().upper_bound (gridsquare.left (2) + "99")); + for (worked_entry const& worked : range) { - return m_->worked_.get ().end () - != m_->worked_.get ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper (), band.toUpper ())); - } - else - { - // partial key lookup - return m_->worked_.get ().end () - != m_->worked_.get ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper ())); + if ((!mode.size () || mode.toUpper () == worked.mode_) + && (!band.size () || worked.band_ == band.toUpper ())) + { + return true; + } } } else { - if (band.size ()) + if (mode.size ()) { - return m_->worked_.get ().end () - != m_->worked_.get ().find (std::make_tuple (grid.left (4).toUpper (), band.toUpper ())); + if (band.size ()) + { + return m_->worked_.get ().end () + != m_->worked_.get ().find (std::make_tuple (gridsquare, mode.toUpper (), band.toUpper ())); + } + else + { + // partial key lookup + return m_->worked_.get ().end () + != m_->worked_.get ().find (std::make_tuple (gridsquare, mode.toUpper ())); + } } else { - // partial key lookup - return m_->worked_.get ().end () - != m_->worked_.get ().find (grid.left (4).toUpper ()); + if (band.size ()) + { + return m_->worked_.get ().end () + != m_->worked_.get ().find (std::make_tuple (gridsquare, band.toUpper ())); + } + else + { + // partial key lookup + return m_->worked_.get ().end () + != m_->worked_.get ().find (gridsquare); + } } } + return false; } bool WorkedBefore::call_worked (QString const& call, QString const& mode, QString const& band) const