From ca8f40bc28e8f995138f3aa22dd09d671246a9d3 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 21 May 2019 15:14:52 +0200 Subject: [PATCH] Model matching resolution for airline groups * UI * setup class --- src/blackgui/editors/matchingform.cpp | 35 ++++- src/blackgui/editors/matchingform.h | 3 + src/blackgui/editors/matchingform.ui | 127 ++++++++++++------ .../simulation/aircraftmatchersetup.cpp | 17 ++- .../simulation/aircraftmatchersetup.h | 13 +- 5 files changed, 145 insertions(+), 50 deletions(-) diff --git a/src/blackgui/editors/matchingform.cpp b/src/blackgui/editors/matchingform.cpp index 4d1aa1070..ec22ce30e 100644 --- a/src/blackgui/editors/matchingform.cpp +++ b/src/blackgui/editors/matchingform.cpp @@ -27,12 +27,18 @@ namespace BlackGui { ui->setupUi(this); 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_ResetAlgorithm, &QPushButton::released, this, &CMatchingForm::resetByAlgorithm, Qt::QueuedConnection); connect(ui->pb_ResetAll, &QPushButton::released, this, &CMatchingForm::resetAll, Qt::QueuedConnection); connect(ui->pb_MsNetwork, &QPushButton::released, this, &CMatchingForm::fileDialog, Qt::QueuedConnection); connect(ui->pb_MsMatching, &QPushButton::released, this, &CMatchingForm::fileDialog, 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->rb_AirlineGroupIfNoAirline, &QRadioButton::released, this, &CMatchingForm::onAirlineGroupChanged, Qt::QueuedConnection); + connect(ui->rb_AirlineGroupAsAirline, &QRadioButton::released, this, &CMatchingForm::onAirlineGroupChanged, Qt::QueuedConnection); + connect(ui->rb_AirlineGroupNo, &QRadioButton::released, this, &CMatchingForm::onAirlineGroupChanged, Qt::QueuedConnection); } CMatchingForm::~CMatchingForm() @@ -62,7 +68,10 @@ namespace BlackGui ui->rb_ScoreOnly->setEnabled(enabled); ui->rb_ByIcaoDataAircraft1st->setEnabled(enabled); ui->rb_ByIcaoDataAirline1st->setEnabled(enabled); - ui->rb_PickFirst->setEnabled(enabled); + ui->rb_AirlineGroupAsAirline->setEnabled(enabled); ui->rb_PickFirst->setEnabled(enabled); + ui->rb_AirlineGroupNo->setEnabled(enabled); + ui->rb_AirlineGroupIfNoAirline->setEnabled(enabled); + ui->rb_PickByOrder->setEnabled(enabled); ui->rb_PickRandom->setEnabled(enabled); @@ -83,8 +92,21 @@ namespace BlackGui const CAircraftMatcherSetup::MatchingMode mode = setup.getMatchingMode(); ui->cb_ByModelString->setChecked(mode.testFlag(CAircraftMatcherSetup::ByModelString)); ui->cb_ByCombinedCode->setChecked(mode.testFlag(CAircraftMatcherSetup::ByCombinedType)); + ui->rb_ByIcaoDataAircraft1st->setChecked(mode.testFlag(CAircraftMatcherSetup::ByIcaoOrderAircraftFirst)); ui->rb_ByIcaoDataAirline1st->setChecked(mode.testFlag(CAircraftMatcherSetup::ByIcaoOrderAirlineFirst)); + + const bool nag = !mode.testFlag(CAircraftMatcherSetup::ByAirlineGroupSameAsAirline) && !mode.testFlag(CAircraftMatcherSetup::ByAirlineGroupIfNoAirline); + if (nag) + { + ui->rb_AirlineGroupNo->setChecked(nag); + } + else + { + ui->rb_AirlineGroupAsAirline->setChecked(mode.testFlag(CAircraftMatcherSetup::ByAirlineGroupSameAsAirline)); + ui->rb_AirlineGroupIfNoAirline->setChecked(mode.testFlag(CAircraftMatcherSetup::CAircraftMatcherSetup::ByAirlineGroupIfNoAirline)); + } + ui->cb_ByLivery->setChecked(mode.testFlag(CAircraftMatcherSetup::ByLivery)); ui->cb_ByFamily->setChecked(mode.testFlag(CAircraftMatcherSetup::ByFamily)); ui->cb_ByForceMilitary->setChecked(mode.testFlag(CAircraftMatcherSetup::ByForceMilitary)); @@ -113,6 +135,7 @@ namespace BlackGui CAircraftMatcherSetup CMatchingForm::value() const { CAircraftMatcherSetup setup(algorithm(), matchingMode(), pickStrategy()); + setup.setAirlineGroupBehaviour(ui->rb_AirlineGroupIfNoAirline->isChecked(), ui->rb_AirlineGroupAsAirline->isChecked()); setup.setMsNetworkEntryFile(ui->le_MsNetwork->text()); setup.setMsMatchingStageFile(ui->le_MsMatching->text()); setup.setMsNetworkEntryEnabled(ui->cb_MsNetwork->isChecked()); @@ -228,5 +251,11 @@ namespace BlackGui const CAircraftMatcherSetup setup = this->value(); this->setValue(setup); } + + void CMatchingForm::onAirlineGroupChanged() + { + const CAircraftMatcherSetup setup = this->value(); + this->setValue(setup); + } } // ns } // ns diff --git a/src/blackgui/editors/matchingform.h b/src/blackgui/editors/matchingform.h index a10493907..3dbee86d1 100644 --- a/src/blackgui/editors/matchingform.h +++ b/src/blackgui/editors/matchingform.h @@ -66,6 +66,9 @@ namespace BlackGui //! Algorithm has been toggled void onAlgorithmChanged(); + //! Airline group changed + void onAirlineGroupChanged(); + //! Reset @{ void resetByAlgorithm(); void resetAll(); diff --git a/src/blackgui/editors/matchingform.ui b/src/blackgui/editors/matchingform.ui index b04e3e612..d3d4307b8 100644 --- a/src/blackgui/editors/matchingform.ui +++ b/src/blackgui/editors/matchingform.ui @@ -6,8 +6,8 @@ 0 0 - 293 - 647 + 323 + 667 @@ -182,34 +182,28 @@ 0 - 150 + 165 Reduction - - - - Vertical Takeoff or Landing - - - VTOL (helicopters and such) + + + + Qt::Horizontal - - - - inbound military force matched military - + + - force military + livery - + inbound civilian force matched civilian @@ -219,46 +213,55 @@ - - + + - livery + family - + + + + combined code + + + + + + + Vertical Takeoff or Landing + + + VTOL (helicopters and such) + + + + model string + + + + inbound military force matched military + + + force military + + + by ICAO: airline first - - - - - - combined code - - - - - - - family - - - - - - - Qt::Horizontal - + + bg_ICAOfirst + @@ -266,6 +269,39 @@ by ICAO: aircraft first + + bg_ICAOfirst + + + + + + + no airline group + + + bg_AirlineGroup + + + + + + + group if no airline + + + bg_AirlineGroup + + + + + + + group=airline + + + bg_AirlineGroup + @@ -411,6 +447,9 @@ rb_PickByOrder rb_ByIcaoDataAircraft1st rb_ByIcaoDataAirline1st + rb_AirlineGroupNo + rb_AirlineGroupIfNoAirline + rb_AirlineGroupAsAirline cb_ByModelString cb_ByLivery cb_ByFamily @@ -431,4 +470,8 @@ + + + + diff --git a/src/blackmisc/simulation/aircraftmatchersetup.cpp b/src/blackmisc/simulation/aircraftmatchersetup.cpp index ad2e006d5..539aab48c 100644 --- a/src/blackmisc/simulation/aircraftmatchersetup.cpp +++ b/src/blackmisc/simulation/aircraftmatchersetup.cpp @@ -75,6 +75,16 @@ namespace BlackMisc this->setMatchingMode(m); } + void CAircraftMatcherSetup::setAirlineGroupBehaviour(bool ifNoAirline, bool sameAsAirline) + { + MatchingMode m = this->getMatchingMode(); + const bool icao = m.testFlag(ByIcaoData); + m.setFlag(ByAirlineGroupIfNoAirline, ifNoAirline); + m.setFlag(ByAirlineGroupSameAsAirline, sameAsAirline); + m.setFlag(ByIcaoData, icao); + this->setMatchingMode(m); + } + QString CAircraftMatcherSetup::convertToQString(bool i18n) const { Q_UNUSED(i18n); @@ -192,6 +202,8 @@ namespace BlackMisc static const QString categoryGlider("glider categories"); static const QString categoryMilitary("military categories"); static const QString revModelString("reverse model lookup"); + static const QString agSameAsAirline("group as airline"); + static const QString agIfNoAirline("group if no airline"); switch (modeFlag) { @@ -214,6 +226,8 @@ namespace BlackMisc case ExcludeNoExcluded: return exExcl; case ModelSetRemoveFailedModel: return removeFromModelSet; case ModelVerificationAtStartup: return verification; + case ByAirlineGroupIfNoAirline: return agIfNoAirline; + case ByAirlineGroupSameAsAirline: return agSameAsAirline; case ModelVerificationOnlyWarnError: return verificationWarn; case ModelFailoverIfNoModelCanBeAdded: return modelFailedAdded; default: break; @@ -243,9 +257,10 @@ namespace BlackMisc if (mode.testFlag(ScorePreferColorLiveries)) { modes << modeFlagToString(ScorePreferColorLiveries); } if (mode.testFlag(ModelSetRemoveFailedModel)) { modes << modeFlagToString(ModelSetRemoveFailedModel); } if (mode.testFlag(ModelVerificationAtStartup)) { modes << modeFlagToString(ModelVerificationAtStartup); } + if (mode.testFlag(ByAirlineGroupIfNoAirline)) { modes << modeFlagToString(ByAirlineGroupIfNoAirline); } + if (mode.testFlag(ByAirlineGroupSameAsAirline)) { modes << modeFlagToString(ByAirlineGroupSameAsAirline); } if (mode.testFlag(ModelVerificationOnlyWarnError)) { modes << modeFlagToString(ModelVerificationOnlyWarnError); } if (mode.testFlag(ModelFailoverIfNoModelCanBeAdded)) { modes << modeFlagToString(ModelFailoverIfNoModelCanBeAdded); } - return modes.join(", "); } diff --git a/src/blackmisc/simulation/aircraftmatchersetup.h b/src/blackmisc/simulation/aircraftmatchersetup.h index b5c08529a..aee6675a0 100644 --- a/src/blackmisc/simulation/aircraftmatchersetup.h +++ b/src/blackmisc/simulation/aircraftmatchersetup.h @@ -43,8 +43,10 @@ namespace BlackMisc ByForceCivilian = 1 << 7, //!< civilian (in) will only search in civilian ByMilitary = ByForceCivilian | ByForceMilitary, ByVtol = 1 << 8, - ByIcaoOrderAircraftFirst = (1 << 9) | ByIcaoData, - ByIcaoOrderAirlineFirst = (1 << 10) | ByIcaoData, + ByIcaoOrderAircraftFirst = (1 << 9) | ByIcaoData, + ByIcaoOrderAirlineFirst = (1 << 10) | ByIcaoData, + ByAirlineGroupSameAsAirline = (1 << 11) | ByIcaoData, + ByAirlineGroupIfNoAirline = (1 << 12) | ByIcaoData, ByCategoryGlider = 1 << 20, ByCategoryMilitary = 1 << 21, @@ -76,8 +78,8 @@ namespace BlackMisc // default depending on algorithm ModeDefaultScore = ScoreIgnoreZeros | ScorePreferColorLiveries | ExcludeDefault | ReverseLookupDefault, - ModeDefaultReduce = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ByLivery | ExcludeDefault | ReverseLookupDefault, - ModeDefaultReducePlusScore = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ModeDefaultScore | ExcludeDefault | ReverseLookupDefault, + ModeDefaultReduce = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ByAirlineGroupIfNoAirline | ReverseLookupDefault | ExcludeDefault | ByLivery, + ModeDefaultReducePlusScore = ModeByFLags | ByModelString | ByFamily | ByManufacturer | ByCombinedType | ByIcaoOrderAircraftFirst | ByAirlineGroupIfNoAirline | ReverseLookupDefault | ExcludeDefault | ModeDefaultScore, }; Q_DECLARE_FLAGS(MatchingMode, MatchingModeFlag) @@ -186,6 +188,9 @@ namespace BlackMisc //! Set reverse lookup flags void setReverseLookup(bool useModelLookup); + //! Airline group behaviour + void setAirlineGroupBehaviour(bool ifNoAirline, bool sameAsAirline); + //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(bool i18n = false) const;