From b78d82348562c8d472c57f334e4a0531de0ec40c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 23 Mar 2016 03:12:45 +0100 Subject: [PATCH] refs #618, support for incremental build in model set builder --- src/blackcore/modelsetbuilder.cpp | 27 ++++-- src/blackcore/modelsetbuilder.h | 9 +- .../components/dbownmodelsetdialog.cpp | 8 +- src/blackgui/components/dbownmodelsetdialog.h | 2 +- src/blackgui/editors/ownmodelsetform.cpp | 5 + src/blackgui/editors/ownmodelsetform.h | 3 + src/blackgui/editors/ownmodelsetform.ui | 95 ++++++++++++------- 7 files changed, 103 insertions(+), 46 deletions(-) diff --git a/src/blackcore/modelsetbuilder.cpp b/src/blackcore/modelsetbuilder.cpp index 2e7d1f2e9..7eb5d7608 100644 --- a/src/blackcore/modelsetbuilder.cpp +++ b/src/blackcore/modelsetbuilder.cpp @@ -19,13 +19,15 @@ namespace BlackCore // void } - CAircraftModelList CModelSetBuilder::buildModelSet(const CAircraftModelList &models, Builder oprions, const CDistributorList &onlyByDistributors) const + CAircraftModelList CModelSetBuilder::buildModelSet(const CSimulatorInfo &simulator, const CAircraftModelList &models, const CAircraftModelList ¤tSet, Builder oprions, const CDistributorList &onlyByDistributors) const { if (models.isEmpty()) { return CAircraftModelList(); } CAircraftModelList modelSet; - if (oprions.testFlag(FilterDistributos)) + + // I avoid and empty distributor set wipes out everything + if (oprions.testFlag(FilterDistributos) && !onlyByDistributors.isEmpty()) { - modelSet = models.byDistributor(onlyByDistributors); + modelSet = models.findByDistributors(onlyByDistributors); } else { @@ -40,13 +42,24 @@ namespace BlackCore { Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "No web data services"); const QStringList designators(sApp->getWebDataServices()->getAircraftIcaoCodes().allIcaoCodes()); - modelSet = modelSet.withAircraftDesignator(designators); + modelSet = modelSet.findWithAircraftDesignator(designators); } else { // without any information we can not use them - modelSet = modelSet.withKnownAircraftDesignator(); + modelSet = modelSet.findWithKnownAircraftDesignator(); + } + modelSet.setModelMode(CAircraftModel::Include); // in sets we only include, exclude means not present in set + if (oprions.testFlag(Incremental)) + { + if (currentSet.isEmpty()) { return modelSet; } + CAircraftModelList copy(currentSet); + copy.replaceOrAddModelsWithString(modelSet, Qt::CaseInsensitive); // incremental + return copy.matchesSimulator(simulator); + } + else + { + return modelSet.matchesSimulator(simulator); } - return modelSet; } -} +} // ns diff --git a/src/blackcore/modelsetbuilder.h b/src/blackcore/modelsetbuilder.h index 87224733b..c15d0a00a 100644 --- a/src/blackcore/modelsetbuilder.h +++ b/src/blackcore/modelsetbuilder.h @@ -34,7 +34,8 @@ namespace BlackCore NoOptions = 0, FilterDistributos = 1 << 0, OnlyDbData = 1 << 1, - OnlyDbIcaoCodes = 1 << 2 + OnlyDbIcaoCodes = 1 << 2, + Incremental = 1 << 3 }; Q_DECLARE_FLAGS(Builder, BuilderFlag) @@ -43,8 +44,10 @@ namespace BlackCore //! Build a model set BlackMisc::Simulation::CAircraftModelList buildModelSet( - const BlackMisc::Simulation::CAircraftModelList &models, Builder oprions, - const BlackMisc::Simulation::CDistributorList &onlyByDistributors = BlackMisc::Simulation::CDistributorList()) const; + const BlackMisc::Simulation::CSimulatorInfo &simulator, + const BlackMisc::Simulation::CAircraftModelList &models, + const BlackMisc::Simulation::CAircraftModelList ¤tSet, Builder oprions, + const BlackMisc::Simulation::CDistributorList &onlyByDistributors = {}) const; }; } // ns diff --git a/src/blackgui/components/dbownmodelsetdialog.cpp b/src/blackgui/components/dbownmodelsetdialog.cpp index 26a72992a..95f3b8d13 100644 --- a/src/blackgui/components/dbownmodelsetdialog.cpp +++ b/src/blackgui/components/dbownmodelsetdialog.cpp @@ -64,17 +64,18 @@ namespace BlackGui } else if (sender == ui->pb_Ok) { - this->m_modelSet = this->buildSet(); + this->m_modelSet = this->buildSet(this->m_simulatorInfo, this->m_modelSet); this->accept(); } } - CAircraftModelList CDbOwnModelSetDialog::buildSet() + CAircraftModelList CDbOwnModelSetDialog::buildSet(const CSimulatorInfo &simulator, const CAircraftModelList ¤tSet) { Q_ASSERT_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component"); const bool selectedProviders = this->ui->form_OwnModelSet->selectedDistributors(); const bool dbDataOnly = this->ui->form_OwnModelSet->dbDataOnly(); const bool dbIcaoOnly = this->ui->form_OwnModelSet->dbIcaoCodesOnly(); + const bool incremnental = this->ui->form_OwnModelSet->incrementalBuild(); const CAircraftModelList models = this->getMappingComponent()->getOwnModels(); this->m_simulatorInfo = this->getMappingComponent()->getOwnModelsSimulator(); @@ -85,7 +86,8 @@ namespace BlackGui CModelSetBuilder::Builder options = selectedProviders ? CModelSetBuilder::FilterDistributos : CModelSetBuilder::NoOptions; if (dbDataOnly) { options |= CModelSetBuilder::OnlyDbData; } if (dbIcaoOnly) { options |= CModelSetBuilder::OnlyDbIcaoCodes; } - return builder.buildModelSet(models, options, distributors); + if (incremnental) { options |= CModelSetBuilder::Incremental; } + return builder.buildModelSet(simulator, models, currentSet, options, distributors); } } // ns } // ns diff --git a/src/blackgui/components/dbownmodelsetdialog.h b/src/blackgui/components/dbownmodelsetdialog.h index f0e15ce3f..9b04cb1cd 100644 --- a/src/blackgui/components/dbownmodelsetdialog.h +++ b/src/blackgui/components/dbownmodelsetdialog.h @@ -66,7 +66,7 @@ namespace BlackGui BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo; //! Build the set - BlackMisc::Simulation::CAircraftModelList buildSet(); + BlackMisc::Simulation::CAircraftModelList buildSet(const BlackMisc::Simulation::CSimulatorInfo &simulator, const BlackMisc::Simulation::CAircraftModelList ¤tSet = {}); }; } // ns } // ns diff --git a/src/blackgui/editors/ownmodelsetform.cpp b/src/blackgui/editors/ownmodelsetform.cpp index 1259cd3e7..fda5cd42e 100644 --- a/src/blackgui/editors/ownmodelsetform.cpp +++ b/src/blackgui/editors/ownmodelsetform.cpp @@ -53,6 +53,11 @@ namespace BlackGui return this->ui->rb_DbDataOnly->isChecked(); } + bool COwnModelSetForm::incrementalBuild() const + { + return ui->rb_Incremental->isChecked(); + } + bool COwnModelSetForm::dbIcaoCodesOnly() const { return this->ui->rb_DbIcaoCodesOnly->isChecked(); diff --git a/src/blackgui/editors/ownmodelsetform.h b/src/blackgui/editors/ownmodelsetform.h index d5c7389ff..4fb58bb18 100644 --- a/src/blackgui/editors/ownmodelsetform.h +++ b/src/blackgui/editors/ownmodelsetform.h @@ -51,6 +51,9 @@ namespace BlackGui //! DB ICAO codes bool dbIcaoCodesOnly() const; + //! Request incremental build + bool incrementalBuild() const; + private: QScopedPointer ui; }; diff --git a/src/blackgui/editors/ownmodelsetform.ui b/src/blackgui/editors/ownmodelsetform.ui index 81e364fa9..1ddb9e523 100644 --- a/src/blackgui/editors/ownmodelsetform.ui +++ b/src/blackgui/editors/ownmodelsetform.ui @@ -37,16 +37,13 @@ 3 - - + + - Model has ICAO code known in DB + Own models for which DB data are available - DB ICAO data - - - true + DB data only bg_SourceSet @@ -54,13 +51,13 @@ - + - Distributors: + Source set: - + Model has ICAO code @@ -76,14 +73,7 @@ - - - - Source set: - - - - + selected @@ -93,20 +83,7 @@ - - - - Own models for which DB data are available - - - DB data only - - - bg_SourceSet - - - - + default @@ -119,6 +96,59 @@ + + + + Distributors: + + + + + + + Model has ICAO code known in DB + + + DB ICAO data + + + true + + + bg_SourceSet + + + + + + + Mode: + + + + + + + full + + + true + + + bg_Mode + + + + + + + incremental + + + bg_Mode + + + @@ -148,5 +178,6 @@ +