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;