diff --git a/src/blackgui/editors/matchingform.cpp b/src/blackgui/editors/matchingform.cpp
index 80c12ced6..a5fa7c614 100644
--- a/src/blackgui/editors/matchingform.cpp
+++ b/src/blackgui/editors/matchingform.cpp
@@ -28,7 +28,6 @@ namespace BlackGui
connect(ui->rb_Reduction, &QRadioButton::released, this, &CMatchingForm::onAlgorithmChanged, Qt::QueuedConnection);
connect(ui->rb_ScoreAndReduction, &QRadioButton::released, this, &CMatchingForm::onAlgorithmChanged, Qt::QueuedConnection);
connect(ui->rb_ScoreOnly, &QRadioButton::released, this, &CMatchingForm::onAlgorithmChanged, Qt::QueuedConnection);
-
connect(ui->pb_Reset, &QPushButton::released, this, &CMatchingForm::clear, Qt::QueuedConnection);
}
@@ -47,6 +46,8 @@ namespace BlackGui
CGuiUtility::checkBoxReadOnly(ui->cb_ScoreIgnoreZeros, readonly);
CGuiUtility::checkBoxReadOnly(ui->cb_ScorePreferColorLiveries, readonly);
CGuiUtility::checkBoxReadOnly(ui->cb_ModelSetRemoveFailed, readonly);
+ CGuiUtility::checkBoxReadOnly(ui->cb_ModelFailedFailover, readonly);
+ CGuiUtility::checkBoxReadOnly(ui->cb_ModelSetVerification, readonly);
const bool enabled = !readonly;
ui->rb_Reduction->setEnabled(enabled);
@@ -82,6 +83,8 @@ namespace BlackGui
ui->cb_ExclNoExcludedModels->setChecked(mode.testFlag(CAircraftMatcherSetup::ExcludeNoExcluded));
ui->cb_ExclNoDbData->setChecked(mode.testFlag(CAircraftMatcherSetup::ExcludeNoDbData));
ui->cb_ModelSetRemoveFailed->setChecked(mode.testFlag(CAircraftMatcherSetup::ModelSetRemoveFailedModel));
+ ui->cb_ModelFailedFailover->setChecked(mode.testFlag(CAircraftMatcherSetup::ModelFailoverWhenNoModelCanBeLoaded));
+ ui->cb_ModelSetVerification->setChecked(mode.testFlag(CAircraftMatcherSetup::ModelVerificationAtStartup));
this->setMatchingAlgorithm(setup);
this->setPickStrategy(setup);
@@ -118,7 +121,8 @@ namespace BlackGui
ui->cb_ByVtol->isChecked(),
ui->cb_ScoreIgnoreZeros->isChecked(), ui->cb_ScorePreferColorLiveries->isChecked(),
ui->cb_ExclNoDbData->isChecked(), ui->cb_ExclNoExcludedModels->isChecked(),
- ui->cb_ModelSetRemoveFailed->isChecked()
+ ui->cb_ModelSetVerification->isChecked(), ui->cb_ModelSetRemoveFailed->isChecked(),
+ ui->cb_ModelFailedFailover->isChecked()
);
}
diff --git a/src/blackgui/editors/matchingform.ui b/src/blackgui/editors/matchingform.ui
index 7f533d41f..018e8667f 100644
--- a/src/blackgui/editors/matchingform.ui
+++ b/src/blackgui/editors/matchingform.ui
@@ -7,7 +7,7 @@
0
0
293
- 453
+ 465
@@ -190,13 +190,30 @@
-
- Failure handling
+ Failure handling and verification
-
-
-
+
+
-
+
+ temp.remove failed from model set
+
- removed failed from set
+ temp.remove failed
+
+
+
+ -
+
+
+ verify set on startup
+
+
+
+ -
+
+
+ use other model if failed
@@ -215,7 +232,7 @@
models marked as excluded are ignored
- Excluded models
+ excluded models
@@ -225,7 +242,7 @@
models without DB data are ignored
- Exclude if no DB data
+ exclude if no DB data
@@ -274,7 +291,9 @@
cb_ByVtol
cb_ByForceMilitary
cb_ByForceCivilian
+ cb_ModelSetVerification
cb_ModelSetRemoveFailed
+ cb_ModelFailedFailover
cb_ExclNoExcludedModels
cb_ExclNoDbData
cb_ScorePreferColorLiveries
diff --git a/src/blackmisc/simulation/aircraftmatchersetup.cpp b/src/blackmisc/simulation/aircraftmatchersetup.cpp
index fc66256c6..7f0781bc3 100644
--- a/src/blackmisc/simulation/aircraftmatchersetup.cpp
+++ b/src/blackmisc/simulation/aircraftmatchersetup.cpp
@@ -45,6 +45,13 @@ namespace BlackMisc
return true;
}
+ void CAircraftMatcherSetup::setVerificationAtStartup(bool verify)
+ {
+ MatchingMode m = this->getMatchingMode();
+ m.setFlag(ModelVerificationAtStartup, verify);
+ this->setMatchingMode(m);
+ }
+
QString CAircraftMatcherSetup::convertToQString(bool i18n) const
{
Q_UNUSED(i18n);
@@ -61,8 +68,8 @@ namespace BlackMisc
switch (i)
{
case IndexMatchingAlgorithm: return CVariant::fromValue(m_algorithm);
- case IndexMatchingMode: return CVariant::fromValue(m_mode);
- case IndexPickStrategy: return CVariant::fromValue(m_strategy);
+ case IndexMatchingMode: return CVariant::fromValue(m_mode);
+ case IndexPickStrategy: return CVariant::fromValue(m_strategy);
default: break;
}
return CValueObject::propertyByIndex(index);
@@ -75,8 +82,8 @@ namespace BlackMisc
switch (i)
{
case IndexMatchingAlgorithm: m_algorithm = variant.toInt(); break;
- case IndexMatchingMode: m_mode = variant.toInt(); break;
- case IndexPickStrategy: m_strategy = variant.toInt(); break;
+ case IndexMatchingMode: m_mode = variant.toInt(); break;
+ case IndexPickStrategy: m_strategy = variant.toInt(); break;
default: break;
}
CValueObject::setPropertyByIndex(index, variant);
@@ -88,12 +95,8 @@ namespace BlackMisc
MatchingMode mode = ModeNone;
switch (algorithm)
{
- case MatchingStepwiseReduce:
- mode = ModeDefaultReduce;
- break;
- case MatchingScoreBased:
- mode = ModeDefaultScore;
- break;
+ case MatchingStepwiseReduce: mode = ModeDefaultReduce; break;
+ case MatchingScoreBased: mode = ModeDefaultScore; break;
case MatchingStepwiseReducePlusScoreBased:
default:
mode = ModeDefaultReducePlusScore;
@@ -134,25 +137,29 @@ namespace BlackMisc
static const QString preferColorLiveries("scoring, prefer color liveries");
static const QString exNoDb("excl.without DB data");
static const QString exExcl("excl.excluded");
- static const QString remModelSet("rem.from model set");
+ static const QString removeFromModelSet("rem.from model set");
+ static const QString verification("Verify models at startup");
+ static const QString modelFailedLoad("Replace models failed to load");
switch (modeFlag)
{
- case ByModelString: return ms;
- case ByIcaoData: return icao;
- case ByFamily: return family;
- case ByLivery: return livery;
- case ByCombinedType: return combined;
- case ByIcaoOrderAircraftFirst: return icaoAircraft;
- case ByIcaoOrderAirlineFirst: return icaoAirline;
- case ByForceCivilian: return forceCiv;
- case ByForceMilitary: return forceMil;
- case ByVtol: return vtol;
- case ScoreIgnoreZeros: return noZeros;
- case ScorePreferColorLiveries: return preferColorLiveries;
- case ExcludeNoDbData: return exNoDb;
- case ExcludeNoExcluded: return exExcl;
- case ModelSetRemoveFailedModel: return remModelSet;
+ case ByModelString: return ms;
+ case ByIcaoData: return icao;
+ case ByFamily: return family;
+ case ByLivery: return livery;
+ case ByCombinedType: return combined;
+ case ByIcaoOrderAircraftFirst: return icaoAircraft;
+ case ByIcaoOrderAirlineFirst: return icaoAirline;
+ case ByForceCivilian: return forceCiv;
+ case ByForceMilitary: return forceMil;
+ case ByVtol: return vtol;
+ case ScoreIgnoreZeros: return noZeros;
+ case ScorePreferColorLiveries: return preferColorLiveries;
+ case ExcludeNoDbData: return exNoDb;
+ case ExcludeNoExcluded: return exExcl;
+ case ModelSetRemoveFailedModel: return removeFromModelSet;
+ case ModelVerificationAtStartup: return verification;
+ case ModelFailoverWhenNoModelCanBeLoaded: return modelFailedLoad;
default: break;
}
@@ -163,19 +170,22 @@ namespace BlackMisc
QString CAircraftMatcherSetup::modeToString(MatchingMode mode)
{
QStringList modes;
- if (mode.testFlag(ByModelString)) { modes << modeFlagToString(ByModelString); }
- if (mode.testFlag(ByIcaoData)) { modes << modeFlagToString(ByIcaoData); }
- if (mode.testFlag(ByIcaoOrderAircraftFirst)) { modes << modeFlagToString(ByIcaoOrderAircraftFirst); }
- if (mode.testFlag(ByIcaoOrderAirlineFirst)) { modes << modeFlagToString(ByIcaoOrderAirlineFirst); }
- if (mode.testFlag(ByFamily)) { modes << modeFlagToString(ByFamily); }
- if (mode.testFlag(ByLivery)) { modes << modeFlagToString(ByLivery); }
- if (mode.testFlag(ByCombinedType)) { modes << modeFlagToString(ByCombinedType); }
- if (mode.testFlag(ByForceCivilian)) { modes << modeFlagToString(ByForceCivilian); }
- if (mode.testFlag(ByForceMilitary)) { modes << modeFlagToString(ByForceMilitary); }
- if (mode.testFlag(ByVtol)) { modes << modeFlagToString(ByVtol); }
- if (mode.testFlag(ScoreIgnoreZeros)) { modes << modeFlagToString(ScoreIgnoreZeros); }
- if (mode.testFlag(ScorePreferColorLiveries)) { modes << modeFlagToString(ScorePreferColorLiveries); }
- if (mode.testFlag(ModelSetRemoveFailedModel)) { modes << modeFlagToString(ModelSetRemoveFailedModel); }
+ if (mode.testFlag(ByModelString)) { modes << modeFlagToString(ByModelString); }
+ if (mode.testFlag(ByIcaoData)) { modes << modeFlagToString(ByIcaoData); }
+ if (mode.testFlag(ByIcaoOrderAircraftFirst)) { modes << modeFlagToString(ByIcaoOrderAircraftFirst); }
+ if (mode.testFlag(ByIcaoOrderAirlineFirst)) { modes << modeFlagToString(ByIcaoOrderAirlineFirst); }
+ if (mode.testFlag(ByFamily)) { modes << modeFlagToString(ByFamily); }
+ if (mode.testFlag(ByLivery)) { modes << modeFlagToString(ByLivery); }
+ if (mode.testFlag(ByCombinedType)) { modes << modeFlagToString(ByCombinedType); }
+ if (mode.testFlag(ByForceCivilian)) { modes << modeFlagToString(ByForceCivilian); }
+ if (mode.testFlag(ByForceMilitary)) { modes << modeFlagToString(ByForceMilitary); }
+ if (mode.testFlag(ByVtol)) { modes << modeFlagToString(ByVtol); }
+ if (mode.testFlag(ScoreIgnoreZeros)) { modes << modeFlagToString(ScoreIgnoreZeros); }
+ if (mode.testFlag(ScorePreferColorLiveries)) { modes << modeFlagToString(ScorePreferColorLiveries); }
+ if (mode.testFlag(ModelSetRemoveFailedModel)) { modes << modeFlagToString(ModelSetRemoveFailedModel); }
+ if (mode.testFlag(ModelVerificationAtStartup)) { modes << modeFlagToString(ModelVerificationAtStartup); }
+ if (mode.testFlag(ModelFailoverWhenNoModelCanBeLoaded)) { modes << modeFlagToString(ModelFailoverWhenNoModelCanBeLoaded); }
+
return modes.join(", ");
}
@@ -202,22 +212,24 @@ namespace BlackMisc
bool byVtol,
bool scoreIgnoreZeros, bool scorePreferColorLiveries,
bool excludeNoDbData, bool excludeNoExcluded,
- bool modelSetRemoveFailedModel)
+ bool modelVerification, bool modelSetRemoveFailedModel, bool modelFailover)
{
MatchingMode mode = byModelString ? ByModelString : ModeNone;
- if (byIcaoDataAircraft1st) { mode |= ByIcaoOrderAircraftFirst; }
- if (byIcaoDataAirline1st) { mode |= ByIcaoOrderAirlineFirst; }
- if (byFamily) { mode |= ByFamily; }
- if (byLivery) { mode |= ByLivery; }
- if (byCombinedType) { mode |= ByCombinedType; }
- if (byForceMilitary) { mode |= ByForceMilitary; }
- if (byForceCivilian) { mode |= ByForceCivilian; }
- if (byVtol) { mode |= ByVtol; }
- if (scoreIgnoreZeros) { mode |= ScoreIgnoreZeros; }
- if (scorePreferColorLiveries) { mode |= ScorePreferColorLiveries; }
- if (excludeNoDbData) { mode |= ExcludeNoDbData; }
- if (excludeNoExcluded) { mode |= ExcludeNoExcluded; }
+ if (byIcaoDataAircraft1st) { mode |= ByIcaoOrderAircraftFirst; }
+ if (byIcaoDataAirline1st) { mode |= ByIcaoOrderAirlineFirst; }
+ if (byFamily) { mode |= ByFamily; }
+ if (byLivery) { mode |= ByLivery; }
+ if (byCombinedType) { mode |= ByCombinedType; }
+ if (byForceMilitary) { mode |= ByForceMilitary; }
+ if (byForceCivilian) { mode |= ByForceCivilian; }
+ if (byVtol) { mode |= ByVtol; }
+ if (scoreIgnoreZeros) { mode |= ScoreIgnoreZeros; }
+ if (scorePreferColorLiveries) { mode |= ScorePreferColorLiveries; }
+ if (excludeNoDbData) { mode |= ExcludeNoDbData; }
+ if (excludeNoExcluded) { mode |= ExcludeNoExcluded; }
if (modelSetRemoveFailedModel) { mode |= ModelSetRemoveFailedModel; }
+ if (modelVerification) { mode |= ModelVerificationAtStartup; }
+ if (modelFailover) { mode |= ModelFailoverWhenNoModelCanBeLoaded; }
return mode;
}
} // namespace
diff --git a/src/blackmisc/simulation/aircraftmatchersetup.h b/src/blackmisc/simulation/aircraftmatchersetup.h
index faa29f4a1..fd12adc94 100644
--- a/src/blackmisc/simulation/aircraftmatchersetup.h
+++ b/src/blackmisc/simulation/aircraftmatchersetup.h
@@ -55,13 +55,18 @@ namespace BlackMisc
ExcludeNoExcluded = 1 << 14,
ExcludeDefault = ExcludeNoExcluded | ExcludeNoDbData,
// --- model set ---
- ModelSetRemoveFailedModel = 1 << 15,
+ ModelSetRemoveFailedModel = 1 << 15,
+ ModelVerificationAtStartup = 1 << 16,
+ ModelFailoverWhenNoModelCanBeLoaded = 1 << 17,
// --- others ---
ModeNone = 0,
ModeByFLags = ByMilitary | ByVtol,
+ // ModeDefaultSet = ModelSetRemoveFailedModel | ModelVerificationAtStartup | ModelFailoverWhenNoModelCanBeLoaded,
+ ModeDefaultSet = ModelSetRemoveFailedModel | ModelFailoverWhenNoModelCanBeLoaded,
ModeDefaultScore = ScoreIgnoreZeros | ScorePreferColorLiveries | ExcludeDefault,
ModeDefaultReduce = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ByLivery | ExcludeDefault,
- ModeDefaultReducePlusScore = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ModeDefaultScore | ExcludeDefault
+ ModeDefaultReducePlusScore = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ModeDefaultScore | ExcludeDefault,
+ ModeDefault = ModeDefaultReducePlusScore | ModeDefaultSet
};
Q_DECLARE_FLAGS(MatchingMode, MatchingModeFlag)
@@ -102,6 +107,13 @@ namespace BlackMisc
//! Matching mode
MatchingMode getMatchingMode() const { return static_cast(m_mode); }
+ //! Verification at startup?
+ //! \sa ModelVerificationOnStartup
+ bool doVerificationAtStartup() const { return this->getMatchingMode().testFlag(ModelVerificationAtStartup); }
+
+ //! Set startup verification
+ void setVerificationAtStartup(bool verify);
+
//! Matching mode as string
QString getMatchingModeAsString() const { return modeToString(this->getMatchingMode()); }
@@ -149,13 +161,13 @@ namespace BlackMisc
bool byFamily, bool byLivery, bool byCombinedType,
bool byForceMilitary, bool byForceCivilian,
bool byVtol,
- bool scoreIgnoreZeros, bool scorePreferColorLiveries, bool excludeNoDbData, bool excludeNoExcluded,
- bool modelSetRemoveFailedModel);
+ bool scoreIgnoreZeros, bool scorePreferColorLiveries, bool excludeNoDbData, bool excludeNoExcluded,
+ bool modelVerification, bool modelSetRemoveFailedModel, bool modelFailover);
private:
- int m_algorithm = static_cast(MatchingStepwiseReducePlusScoreBased);
- int m_mode = static_cast(ModeDefaultReducePlusScore);
- int m_strategy = static_cast(PickByOrder);
+ int m_algorithm = static_cast(ModeDefault);
+ int m_mode = static_cast(ModeDefaultReducePlusScore);
+ int m_strategy = static_cast(PickByOrder);
BLACK_METACLASS(
CAircraftMatcherSetup,