diff --git a/src/blackgui/models/aircraftmodellistmodel.cpp b/src/blackgui/models/aircraftmodellistmodel.cpp index c230242ab..7ab529cf3 100644 --- a/src/blackgui/models/aircraftmodellistmodel.cpp +++ b/src/blackgui/models/aircraftmodellistmodel.cpp @@ -63,7 +63,8 @@ namespace BlackGui case OwnSimulatorModelMapping: this->m_columns.addColumn(CColumn::standardString("model", CAircraftModel::IndexModelString)); this->m_columns.addColumn(CColumn("mode", "model mode(include, exclude)", CAircraftModel::IndexModelModeAsIcon, new CPixmapFormatter())); - this->m_columns.addColumn(CColumn::standardValueObject("call", "callsign", CAircraftModel::IndexCallsign)); + // this->m_columns.addColumn(CColumn::standardValueObject("call", "callsign", CAircraftModel::IndexCallsign)); + this->m_columns.addColumn(CColumn::standardString("dist.", "distributor", { CAircraftModel::IndexDistributor, CDistributor::IndexDbStringKey})); this->m_columns.addColumn(CColumn::standardString("ac", "aircraft ICAO", { CAircraftModel::IndexAircraftIcaoCode, CAircraftIcaoCode::IndexAircraftDesignator})); this->m_columns.addColumn(CColumn::standardString("al", "airline ICAO", { CAircraftModel::IndexLivery, CLivery::IndexAirlineIcaoCode, CAirlineIcaoCode::IndexAirlineDesignator})); // this->m_columns.addColumn(CColumn::standardString("ct", "combined type", { CAircraftModel::IndexIcao, CAircraftIcaoData::IndexCombinedAircraftType})); diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index f4fd240fa..90d5ebfcc 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -51,7 +51,8 @@ namespace BlackMisc { Undefined = 0, Include = 1 << 0, - Exclude = 1 << 1 + Exclude = 1 << 1, + All = Include | Exclude }; //! Supposed to be used only in filter operations diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index f05593b07..8cac62456 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -102,7 +102,7 @@ namespace BlackMisc }); } - CAircraftModelList CAircraftModelList::withAircraftDesignator() const + CAircraftModelList CAircraftModelList::findWithAircraftDesignator() const { return this->findBy([ = ](const CAircraftModel & model) { @@ -110,7 +110,7 @@ namespace BlackMisc }); } - CAircraftModelList CAircraftModelList::withAircraftDesignator(const QStringList &designators) const + CAircraftModelList CAircraftModelList::findWithAircraftDesignator(const QStringList &designators) const { if (designators.isEmpty()) { return CAircraftModelList(); } return this->findBy([ = ](const CAircraftModel & model) @@ -119,7 +119,7 @@ namespace BlackMisc }); } - CAircraftModelList CAircraftModelList::withKnownAircraftDesignator() const + CAircraftModelList CAircraftModelList::findWithKnownAircraftDesignator() const { return this->findBy([ = ](const CAircraftModel & model) { @@ -127,7 +127,16 @@ namespace BlackMisc }); } - CAircraftModelList CAircraftModelList::byDistributor(const CDistributorList &distributors) const + CAircraftModelList CAircraftModelList::matchesSimulator(const CSimulatorInfo &simulator) const + { + const CSimulatorInfo::Simulator s = simulator.getSimulator(); + return this->findBy([ = ](const CAircraftModel & model) + { + return (s & model.getSimulatorInfo().getSimulator()) > 0; + }); + } + + CAircraftModelList CAircraftModelList::findByDistributors(const CDistributorList &distributors) const { if (distributors.isEmpty()) { return CAircraftModelList(); } return this->findBy([ = ](const CAircraftModel & model) @@ -136,12 +145,40 @@ namespace BlackMisc }); } - void CAircraftModelList::setSimulatorInfo(const CSimulatorInfo &info) + int CAircraftModelList::setSimulatorInfo(const CSimulatorInfo &info) { + int c = 0; + const CSimulatorInfo::Simulator s = info.getSimulator(); for (CAircraftModel &model : (*this)) { + if (model.getSimulatorInfo().getSimulator() == s) { continue; } model.setSimulatorInfo(info); + c++; } + return c; + } + + CSimulatorInfo CAircraftModelList::simulatorsSupported() const + { + CSimulatorInfo::Simulator s = CSimulatorInfo::None; + for (const CAircraftModel &model : (*this)) + { + s |= model.getSimulatorInfo().getSimulator(); + if (s == CSimulatorInfo::All) { break; } + } + return CSimulatorInfo(s); + } + + int CAircraftModelList::setModelMode(CAircraftModel::ModelMode mode) + { + int c = 0; + for (CAircraftModel &model : (*this)) + { + if (model.getModelMode() == mode) { continue; } + model.setModelMode(mode); + c++; + } + return c; } int CAircraftModelList::keepModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity) @@ -244,7 +281,7 @@ namespace BlackMisc return validateForPublishing(invalidModels); } - CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &invalidModels) const + CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &validateModels) const { if (this->isEmpty()) { return CStatusMessageList(); } CStatusMessageList msgs; @@ -271,7 +308,7 @@ namespace BlackMisc singleMsg.prependMessage(model.getModelString() + ": "); } msgs.push_back(singleMsg); - invalidModels.push_back(model); + validateModels.push_back(model); } return msgs; } diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index a23034bab..85da35a9c 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -69,20 +69,29 @@ namespace BlackMisc //! With file name CAircraftModelList findWithFileName() const; + //! All models from given distributors + CAircraftModelList findByDistributors(const CDistributorList &distributors) const; + //! Models with aircraft ICAO code set - CAircraftModelList withAircraftDesignator() const; + CAircraftModelList findWithAircraftDesignator() const; //! Models with aircraft ICAO code from list - CAircraftModelList withAircraftDesignator(const QStringList &designators) const; + CAircraftModelList findWithAircraftDesignator(const QStringList &designators) const; //! Models with a known aircraft ICAO code set - CAircraftModelList withKnownAircraftDesignator() const; + CAircraftModelList findWithKnownAircraftDesignator() const; - //! All models from given distributors - CAircraftModelList byDistributor(const CDistributorList &distributors) const; + //! Find for given simulator + CAircraftModelList matchesSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; //! Set simulator for all elements - void setSimulatorInfo(const BlackMisc::Simulation::CSimulatorInfo &info); + int setSimulatorInfo(const BlackMisc::Simulation::CSimulatorInfo &info); + + //! Which simulators are supported in that model list + CSimulatorInfo simulatorsSupported() const; + + //! Set mode for all elements + int setModelMode(BlackMisc::Simulation::CAircraftModel::ModelMode mode); //! Keep only those models with given model strings //! \return number of elements removed @@ -112,7 +121,7 @@ namespace BlackMisc CStatusMessageList validateForPublishing() const; //! Validate for publishing - CStatusMessageList validateForPublishing(CAircraftModelList &invalidModels) const; + CStatusMessageList validateForPublishing(CAircraftModelList &validateModels) const; //! To database JSON QJsonArray toDatabaseJson() const;