diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index ca0a5cf91..cd0f4a7d8 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -714,9 +714,17 @@ namespace BlackCore } // military / civilian - if (mode.testFlag(CAircraftMatcherSetup::ByMilitary)) + bool milFlagReduced = false; + if (mode.testFlag(CAircraftMatcherSetup::ByForceMilitary) && remoteAircraft.isMilitary()) { matchedModels = ifPossibleReduceByMilitaryFlag(remoteAircraft, matchedModels, reduced, log); + milFlagReduced = true; + } + + if (!milFlagReduced && mode.testFlag(CAircraftMatcherSetup::ByForceCivilian) && !remoteAircraft.isMilitary()) + { + matchedModels = ifPossibleReduceByMilitaryFlag(remoteAircraft, matchedModels, reduced, log); + milFlagReduced = true; } // combined code diff --git a/src/blackgui/editors/matchingform.cpp b/src/blackgui/editors/matchingform.cpp index 9434efabd..c2ef34711 100644 --- a/src/blackgui/editors/matchingform.cpp +++ b/src/blackgui/editors/matchingform.cpp @@ -42,7 +42,8 @@ namespace BlackGui CGuiUtility::checkBoxReadOnly(ui->cb_ByLivery, readonly); CGuiUtility::checkBoxReadOnly(ui->cb_ByCombinedCode, readonly); CGuiUtility::checkBoxReadOnly(ui->cb_ByVtol, readonly); - CGuiUtility::checkBoxReadOnly(ui->cb_ByMilitary, readonly); + CGuiUtility::checkBoxReadOnly(ui->cb_ByForceMilitary, readonly); + CGuiUtility::checkBoxReadOnly(ui->cb_ByForceCivilian, readonly); CGuiUtility::checkBoxReadOnly(ui->cb_ScoreIgnoreZeros, readonly); CGuiUtility::checkBoxReadOnly(ui->cb_ScorePreferColorLiveries, readonly); @@ -72,7 +73,8 @@ namespace BlackGui ui->rb_ByIcaoDataAirline1st->setChecked(mode.testFlag(CAircraftMatcherSetup::ByIcaoOrderAirlineFirst)); ui->cb_ByLivery->setChecked(mode.testFlag(CAircraftMatcherSetup::ByLivery)); ui->cb_ByFamily->setChecked(mode.testFlag(CAircraftMatcherSetup::ByFamily)); - ui->cb_ByMilitary->setChecked(mode.testFlag(CAircraftMatcherSetup::ByMilitary)); + ui->cb_ByForceMilitary->setChecked(mode.testFlag(CAircraftMatcherSetup::ByForceMilitary)); + ui->cb_ByForceCivilian->setChecked(mode.testFlag(CAircraftMatcherSetup::ByForceCivilian)); ui->cb_ByVtol->setChecked(mode.testFlag(CAircraftMatcherSetup::ByVtol)); ui->cb_ScoreIgnoreZeros->setChecked(mode.testFlag(CAircraftMatcherSetup::ScoreIgnoreZeros)); ui->cb_ScorePreferColorLiveries->setChecked(mode.testFlag(CAircraftMatcherSetup::ScorePreferColorLiveries)); @@ -109,7 +111,9 @@ namespace BlackGui ui->rb_ByIcaoDataAircraft1st->isChecked(), ui->rb_ByIcaoDataAirline1st->isChecked(), ui->cb_ByFamily->isChecked(), ui->cb_ByLivery->isChecked(), ui->cb_ByCombinedCode->isChecked(), - ui->cb_ByMilitary->isChecked(), ui->cb_ByVtol->isChecked(), + ui->cb_ByForceMilitary->isChecked(), + ui->cb_ByForceCivilian->isChecked(), + ui->cb_ByVtol->isChecked(), ui->cb_ScoreIgnoreZeros->isChecked(), ui->cb_ScorePreferColorLiveries->isChecked(), ui->cb_ExclNoDbData->isChecked(), ui->cb_ExclNoExcludedModels->isChecked() ); diff --git a/src/blackgui/editors/matchingform.ui b/src/blackgui/editors/matchingform.ui index e29b47623..59f57e5d7 100644 --- a/src/blackgui/editors/matchingform.ui +++ b/src/blackgui/editors/matchingform.ui @@ -105,13 +105,6 @@ Reduction - - - - model string - - - @@ -119,10 +112,17 @@ - - - - Qt::Horizontal + + + + model string + + + + + + + combined code @@ -133,6 +133,13 @@ + + + + Qt::Horizontal + + + @@ -147,27 +154,33 @@ - - + + + + inbound military force matched military + - combined code + force military - - - - military - - - - + Vertical Takeoff or Landing - VTOL + VTOL (helicopters and such) + + + + + + + inbound civilian force matched civilian + + + force civilian @@ -231,6 +244,8 @@ rb_Reduction rb_ScoreOnly + rb_ScoreAndReduction + pb_Reset rb_PickFirst rb_PickRandom rb_PickByOrder @@ -238,6 +253,11 @@ rb_ByIcaoDataAirline1st cb_ByModelString cb_ByLivery + cb_ByFamily + cb_ByCombinedCode + cb_ByVtol + cb_ByForceMilitary + cb_ByForceCivilian cb_ExclNoExcludedModels cb_ExclNoDbData cb_ScorePreferColorLiveries diff --git a/src/blackmisc/simulation/aircraftmatchersetup.cpp b/src/blackmisc/simulation/aircraftmatchersetup.cpp index 9a7301b17..06d7f7769 100644 --- a/src/blackmisc/simulation/aircraftmatchersetup.cpp +++ b/src/blackmisc/simulation/aircraftmatchersetup.cpp @@ -125,6 +125,9 @@ namespace BlackMisc static const QString icaoAircraft("by ICAO, aircraft first"); static const QString icaoAirline("by ICAO, airline first"); static const QString family("by family"); + static const QString forceMil("force military"); + static const QString forceCiv("force civilian"); + static const QString vtol("VTOL"); static const QString livery("by livery"); static const QString combined("by combined code"); static const QString noZeros("scoring, ignore zero scores"); @@ -141,6 +144,9 @@ namespace BlackMisc 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; @@ -162,6 +168,9 @@ namespace BlackMisc 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); } return modes.join(", "); @@ -185,11 +194,11 @@ namespace BlackMisc return unknown; } - CAircraftMatcherSetup::MatchingMode CAircraftMatcherSetup::matchingMode( - bool byModelString, bool byIcaoDataAircraft1st, bool byIcaoDataAirline1st, bool byFamily, bool byLivery, bool byCombinedType, - bool byMilitary, bool byVtol, - bool scoreIgnoreZeros, bool scorePreferColorLiveries, - bool excludeNoDbData, bool excludeNoExcluded) + CAircraftMatcherSetup::MatchingMode CAircraftMatcherSetup::matchingMode(bool byModelString, bool byIcaoDataAircraft1st, bool byIcaoDataAirline1st, bool byFamily, bool byLivery, bool byCombinedType, + bool byForceMilitary, bool byForceCivilian, + bool byVtol, + bool scoreIgnoreZeros, bool scorePreferColorLiveries, + bool excludeNoDbData, bool excludeNoExcluded) { MatchingMode mode = byModelString ? ByModelString : ModeNone; if (byIcaoDataAircraft1st) { mode |= ByIcaoOrderAircraftFirst; } @@ -197,7 +206,8 @@ namespace BlackMisc if (byFamily) { mode |= ByFamily; } if (byLivery) { mode |= ByLivery; } if (byCombinedType) { mode |= ByCombinedType; } - if (byMilitary) { mode |= ByMilitary; } + if (byForceMilitary) { mode |= ByForceMilitary; } + if (byForceCivilian) { mode |= ByForceCivilian; } if (byVtol) { mode |= ByVtol; } if (scoreIgnoreZeros) { mode |= ScoreIgnoreZeros; } if (scorePreferColorLiveries) { mode |= ScorePreferColorLiveries; } diff --git a/src/blackmisc/simulation/aircraftmatchersetup.h b/src/blackmisc/simulation/aircraftmatchersetup.h index db387f6bc..02a7a27d4 100644 --- a/src/blackmisc/simulation/aircraftmatchersetup.h +++ b/src/blackmisc/simulation/aircraftmatchersetup.h @@ -41,16 +41,18 @@ namespace BlackMisc ByLivery = 1 << 3, ByCombinedType = 1 << 4, ByManufacturer = 1 << 5, - ByMilitary = 1 << 6, - ByVtol = 1 << 7, - ByIcaoOrderAircraftFirst = (1 << 8) | ByIcaoData, - ByIcaoOrderAirlineFirst = (1 << 9) | ByIcaoData, + ByForceMilitary = 1 << 6, //!< military (in) will only search in military + ByForceCivilian = 1 << 7, //!< civilian (in) will only search in civilian + ByMilitary = ByForceCivilian | ByForceMilitary, + ByVtol = 1 << 8, + ByIcaoOrderAircraftFirst = (1 << 9) | ByIcaoData, + ByIcaoOrderAirlineFirst = (1 << 10) | ByIcaoData, // --- score based matching --- - ScoreIgnoreZeros = 1 << 10, //!< zero scores are ignored - ScorePreferColorLiveries = 1 << 11, //!< prefer color liveries + ScoreIgnoreZeros = 1 << 11, //!< zero scores are ignored + ScorePreferColorLiveries = 1 << 12, //!< prefer color liveries // --- exclusion --- - ExcludeNoDbData = 1 << 12, - ExcludeNoExcluded = 1 << 13, + ExcludeNoDbData = 1 << 13, + ExcludeNoExcluded = 1 << 14, ExcludeDefault = ExcludeNoExcluded | ExcludeNoDbData, // --- others --- ModeNone = 0, @@ -139,7 +141,9 @@ namespace BlackMisc //! Mode by flags static MatchingMode matchingMode(bool byModelString, bool byIcaoDataAircraft1st, bool byIcaoDataAirline1st, - bool byFamily, bool byLivery, bool byCombinedType, bool byMilitary, bool byVtol, + bool byFamily, bool byLivery, bool byCombinedType, + bool byForceMilitary, bool byForceCivilian, + bool byVtol, bool scoreIgnoreZeros, bool scorePreferColorLiveries, bool excludeNoDbData, bool excludeNoExcluded); private: diff --git a/src/blackmisc/simulation/simulatedaircraft.cpp b/src/blackmisc/simulation/simulatedaircraft.cpp index 44ff6363b..a37edca6b 100644 --- a/src/blackmisc/simulation/simulatedaircraft.cpp +++ b/src/blackmisc/simulation/simulatedaircraft.cpp @@ -290,7 +290,12 @@ namespace BlackMisc bool CSimulatedAircraft::isVtol() const { - return getModel().isVtol(); + return this->getModel().isVtol(); + } + + bool CSimulatedAircraft::isMilitary() const + { + return this->getModel().isMilitary(); } QString CSimulatedAircraft::getCombinedIcaoLiveryString(bool networkModel) const diff --git a/src/blackmisc/simulation/simulatedaircraft.h b/src/blackmisc/simulation/simulatedaircraft.h index 613bf347b..54e22f1f3 100644 --- a/src/blackmisc/simulation/simulatedaircraft.h +++ b/src/blackmisc/simulation/simulatedaircraft.h @@ -345,6 +345,9 @@ namespace BlackMisc //! VTOL aircraft? bool isVtol() const; + //! Is military aircraft + bool isMilitary() const; + //! Combined ICAO / color string QString getCombinedIcaoLiveryString(bool networkModel = false) const;