From 81efe18ae5256a52d207265e8ab0cd6daf76468c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 27 Aug 2016 18:15:21 +0200 Subject: [PATCH] refs #745, improved own model set dialog * allow to consolidate data * display either preferences or all distributors * builder can consolidate * get model set from mapping component --- src/blackcore/modelsetbuilder.cpp | 33 +++++++++--- src/blackcore/modelsetbuilder.h | 7 +-- .../components/dbmappingcomponent.cpp | 5 ++ src/blackgui/components/dbmappingcomponent.h | 5 +- .../components/dbmappingcomponentaware.cpp | 1 - .../components/dbownmodelsetdialog.cpp | 31 +++++++---- src/blackgui/components/dbownmodelsetdialog.h | 5 +- src/blackgui/editors/ownmodelsetform.cpp | 51 ++++++++++++++++--- src/blackgui/editors/ownmodelsetform.h | 33 ++++++++---- src/blackgui/editors/ownmodelsetform.ui | 45 +++++++++------- 10 files changed, 157 insertions(+), 59 deletions(-) diff --git a/src/blackcore/modelsetbuilder.cpp b/src/blackcore/modelsetbuilder.cpp index 314bb03cc..d042ab722 100644 --- a/src/blackcore/modelsetbuilder.cpp +++ b/src/blackcore/modelsetbuilder.cpp @@ -7,9 +7,10 @@ * contained in the LICENSE file. */ -#include "blackcore/application.h" -#include "blackcore/modelsetbuilder.h" -#include "blackcore/webdataservices.h" +#include "application.h" +#include "modelsetbuilder.h" +#include "webdataservices.h" +#include "db/databaseutils.h" #include "blackmisc/aviation/aircrafticaocodelist.h" #include "blackmisc/simulation/aircraftmodel.h" @@ -18,6 +19,7 @@ #include using namespace BlackMisc::Simulation; +using namespace BlackCore::Db; namespace BlackCore { @@ -31,8 +33,9 @@ namespace BlackCore if (models.isEmpty()) { return CAircraftModelList(); } CAircraftModelList modelSet; - // I avoid and empty distributor set wipes out everything - if (oprions.testFlag(FilterDistributos) && !distributors.isEmpty()) + // Select by distributor: + // I avoid an empty distributor set because it wipes out everything + if (oprions.testFlag(GivenDistributorsOnly) && !distributors.isEmpty()) { modelSet = models.findByDistributors(distributors); } @@ -41,6 +44,7 @@ namespace BlackCore modelSet = models; } + // Only DB data? if (oprions.testFlag(OnlyDbData)) { modelSet.removeObjectsWithoutDbKey(); @@ -57,16 +61,22 @@ namespace BlackCore modelSet = modelSet.findWithKnownAircraftDesignator(); } + // Include only modelSet = modelSet.matchesSimulator(simulator); 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 + if (!currentSet.isEmpty()) + { + // update in full set + CAircraftModelList copy(currentSet); + copy.replaceOrAddModelsWithString(modelSet, Qt::CaseInsensitive); + modelSet = copy; + } } + // sort by preferences if applicable modelSet.resetOrder(); if (oprions.testFlag(SortByDistributors)) { @@ -74,6 +84,13 @@ namespace BlackCore modelSet.sortBy(&CAircraftModel::getDistributorOrder); } + // DB consolidation + if (oprions.testFlag(ConsolidateWithDb)) + { + CDatabaseUtils::consolidateModelsWithDbData(modelSet, true); + } + + // result return modelSet; } } // ns diff --git a/src/blackcore/modelsetbuilder.h b/src/blackcore/modelsetbuilder.h index db138f2ba..12ecbff3a 100644 --- a/src/blackcore/modelsetbuilder.h +++ b/src/blackcore/modelsetbuilder.h @@ -35,11 +35,12 @@ namespace BlackCore enum BuilderFlag { NoOptions = 0, - FilterDistributos = 1 << 0, + GivenDistributorsOnly = 1 << 0, OnlyDbData = 1 << 1, OnlyDbIcaoCodes = 1 << 2, Incremental = 1 << 3, - SortByDistributors = 1 << 4 + SortByDistributors = 1 << 4, + ConsolidateWithDb = 1 << 5 }; Q_DECLARE_FLAGS(Builder, BuilderFlag) @@ -51,7 +52,7 @@ namespace BlackCore const BlackMisc::Simulation::CSimulatorInfo &simulator, const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CAircraftModelList ¤tSet, Builder oprions, - const BlackMisc::Simulation::CDistributorList &onlyByDistributors = {}) const; + const BlackMisc::Simulation::CDistributorList &distributors = {}) const; }; } // ns diff --git a/src/blackgui/components/dbmappingcomponent.cpp b/src/blackgui/components/dbmappingcomponent.cpp index 61edb987b..59f9de2ef 100644 --- a/src/blackgui/components/dbmappingcomponent.cpp +++ b/src/blackgui/components/dbmappingcomponent.cpp @@ -814,6 +814,11 @@ namespace BlackGui ui->comp_OwnModelSet->setModelSetSimulator(simulator); } + CAircraftModelList CDbMappingComponent::getOwnModelSet() const + { + return ui->comp_OwnModelSet->getModelSet(); + } + CStatusMessage CDbMappingComponent::stashModel(const CAircraftModel &model, bool replace) { return ui->comp_StashAircraft->stashModel(model, replace); diff --git a/src/blackgui/components/dbmappingcomponent.h b/src/blackgui/components/dbmappingcomponent.h index 21761ffb7..ec01441cc 100644 --- a/src/blackgui/components/dbmappingcomponent.h +++ b/src/blackgui/components/dbmappingcomponent.h @@ -148,11 +148,14 @@ namespace BlackGui int getOwnModelsCount() const; //! @} - // ---------------- own models ----------------- + // ---------------- own model set ----------------- //! Set simulator for own models void setOwnModelSetSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator); + //! Own model set + BlackMisc::Simulation::CAircraftModelList getOwnModelSet() const; + public slots: //! \copydoc CDbStashComponent::stashModel BlackMisc::CStatusMessage stashModel(const BlackMisc::Simulation::CAircraftModel &model, bool replace = false); diff --git a/src/blackgui/components/dbmappingcomponentaware.cpp b/src/blackgui/components/dbmappingcomponentaware.cpp index d67cc8026..eb4bebb7e 100644 --- a/src/blackgui/components/dbmappingcomponentaware.cpp +++ b/src/blackgui/components/dbmappingcomponentaware.cpp @@ -31,6 +31,5 @@ namespace BlackGui if (!m) { return; } m_mappingComponent = m; } - } // ns } // ns diff --git a/src/blackgui/components/dbownmodelsetdialog.cpp b/src/blackgui/components/dbownmodelsetdialog.cpp index c4f40a2c2..f1ee64196 100644 --- a/src/blackgui/components/dbownmodelsetdialog.cpp +++ b/src/blackgui/components/dbownmodelsetdialog.cpp @@ -57,7 +57,8 @@ namespace BlackGui this->m_simulatorInfo = this->getMappingComponent()->getOwnModelsSimulator(); Q_ASSERT_X(this->m_simulatorInfo.isSingleSimulator(), Q_FUNC_INFO, "Need single simulator"); ui->form_OwnModelSet->setSimulator(this->m_simulatorInfo); - this->ui->form_OwnModelSet->reloadData(); + ui->form_OwnModelSet->reloadData(); + this->m_modelSet = this->getMappingComponent()->getOwnModelSet(); } int CDbOwnModelSetDialog::exec() @@ -118,22 +119,30 @@ namespace BlackGui 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->useSelectedDistributors(); - 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 bool givenDistributorsOnly = !ui->form_OwnModelSet->optionUseAllDistributors(); + const bool dbDataOnly = ui->form_OwnModelSet->optionDbDataOnly(); + const bool dbIcaoOnly = ui->form_OwnModelSet->optionDbIcaoCodesOnly(); + const bool incremnental = ui->form_OwnModelSet->optionIncrementalBuild(); + const bool sortByDistributor = ui->form_OwnModelSet->optionSortByDistributorPreferences(); + const bool consolidateWithDb = ui->form_OwnModelSet->optionConsolidateModelSetWithDbData(); - const CAircraftModelList models = this->getMappingComponent()->getOwnModels(); this->m_simulatorInfo = this->getMappingComponent()->getOwnModelsSimulator(); - const CDistributorList distributors = selectedProviders ? - ui->form_OwnModelSet->getSelectedDistributors() : - ui->form_OwnModelSet->getDistributorsFromPreferences(); + const CAircraftModelList models = this->getMappingComponent()->getOwnModels(); + const CDistributorList distributors = ui->form_OwnModelSet->getDistributorsBasedOnOptions(); + + if (givenDistributorsOnly && distributors.isEmpty()) + { + // nothing to do, keep current set + return currentSet; + } + const CModelSetBuilder builder(this); - CModelSetBuilder::Builder options = selectedProviders ? CModelSetBuilder::FilterDistributos : CModelSetBuilder::NoOptions; + CModelSetBuilder::Builder options = givenDistributorsOnly ? CModelSetBuilder::GivenDistributorsOnly : CModelSetBuilder::NoOptions; if (dbDataOnly) { options |= CModelSetBuilder::OnlyDbData; } if (dbIcaoOnly) { options |= CModelSetBuilder::OnlyDbIcaoCodes; } if (incremnental) { options |= CModelSetBuilder::Incremental; } - if (ui->form_OwnModelSet->hasDistributorPreferences()) { options |= CModelSetBuilder::SortByDistributors; } + if (sortByDistributor) { options |= CModelSetBuilder::SortByDistributors; } + if (consolidateWithDb) { options |= CModelSetBuilder::ConsolidateWithDb; } return builder.buildModelSet(simulator, models, currentSet, options, distributors); } } // ns diff --git a/src/blackgui/components/dbownmodelsetdialog.h b/src/blackgui/components/dbownmodelsetdialog.h index 2744ff948..513944310 100644 --- a/src/blackgui/components/dbownmodelsetdialog.h +++ b/src/blackgui/components/dbownmodelsetdialog.h @@ -51,10 +51,13 @@ namespace BlackGui //! Last build set const BlackMisc::Simulation::CAircraftModelList &getModelSet() const { return m_modelSet; } + //! Init last set + void setModelSet(const BlackMisc::Simulation::CAircraftModelList &models) { m_modelSet = models; } + //! Simulator info const BlackMisc::Simulation::CSimulatorInfo &getSimulatorInfo() const { return m_simulatorInfo; } - //! Reload data + //! Reload data e.g. current model set and simulator void reloadData(); //! Exec and display simulator diff --git a/src/blackgui/editors/ownmodelsetform.cpp b/src/blackgui/editors/ownmodelsetform.cpp index 9debe3613..0138d66a6 100644 --- a/src/blackgui/editors/ownmodelsetform.cpp +++ b/src/blackgui/editors/ownmodelsetform.cpp @@ -58,21 +58,36 @@ namespace BlackGui this->initDistributorDisplay(); } - bool COwnModelSetForm::useSelectedDistributors() const + bool COwnModelSetForm::optionUseSelectedDistributors() const { - return this->ui->rb_SelectedDistributors->isChecked(); + return ui->rb_DistributorsSelected->isChecked(); } - bool COwnModelSetForm::dbDataOnly() const + bool COwnModelSetForm::optionUseAllDistributors() const { - return this->ui->rb_DbDataOnly->isChecked(); + return ui->rb_DistributorsAll->isChecked(); } - bool COwnModelSetForm::incrementalBuild() const + bool COwnModelSetForm::optionDbDataOnly() const + { + return ui->rb_DbDataOnly->isChecked(); + } + + bool COwnModelSetForm::optionIncrementalBuild() const { return ui->rb_Incremental->isChecked(); } + bool COwnModelSetForm::optionSortByDistributorPreferences() const + { + return ui->cb_SortByPreferences->isChecked() && this->hasDistributorPreferences(); + } + + bool COwnModelSetForm::optionConsolidateModelSetWithDbData() const + { + return ui->cb_ConsolidateModelSet->isChecked(); + } + void COwnModelSetForm::ps_preferencesChanged() { // void @@ -120,6 +135,14 @@ namespace BlackGui { ui->tvp_Distributors->setDistributorMode(hasPreferences ? CDistributorListModel::MinimalWithOrder : CDistributorListModel::Minimal); ui->tvp_Distributors->fullResizeToContents(); + if (hasPreferences) + { + ui->tvp_Distributors->setSorting(CDistributor::IndexOrder); + } + else + { + ui->tvp_Distributors->setSorting(CDistributor::IndexDbStringKey); + } } CDistributorList COwnModelSetForm::getDistributorsFromPreferences() const @@ -137,9 +160,18 @@ namespace BlackGui return sGui->getWebDataServices()->getDistributors().matchesSimulator(this->m_simulator); } - bool COwnModelSetForm::dbIcaoCodesOnly() const + CDistributorList COwnModelSetForm::getDistributorsBasedOnOptions() const { - return this->ui->rb_DbIcaoCodesOnly->isChecked(); + if (ui->rb_DistributorsAll->isChecked()) { return this->getAllDistributors(); } + if (ui->rb_DistributorsSelected->isChecked()) { return this->getSelectedDistributors(); } + if (ui->rb_DistributorsFromBelow->isChecked()) { return this->getShownDistributors(); } + Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong option"); + return CDistributorList(); + } + + bool COwnModelSetForm::optionDbIcaoCodesOnly() const + { + return ui->rb_DbIcaoCodesOnly->isChecked(); } CDistributorList COwnModelSetForm::getSelectedDistributors() const @@ -147,6 +179,11 @@ namespace BlackGui return ui->tvp_Distributors->selectedObjects(); } + CDistributorList COwnModelSetForm::getShownDistributors() const + { + return ui->tvp_Distributors->containerOrFilteredContainer(); + } + void COwnModelSetForm::setSimulator(const CSimulatorInfo &simulator) { Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Need single simulator"); diff --git a/src/blackgui/editors/ownmodelsetform.h b/src/blackgui/editors/ownmodelsetform.h index e0399206c..68fa637da 100644 --- a/src/blackgui/editors/ownmodelsetform.h +++ b/src/blackgui/editors/ownmodelsetform.h @@ -41,23 +41,35 @@ namespace BlackGui //! Reload data void reloadData(); - //! Selected providers? - bool useSelectedDistributors() const; - - //! Get selected providers - BlackMisc::Simulation::CDistributorList getSelectedDistributors() const; - //! Current simulator void setSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator); + //! Selected distributors? + bool optionUseSelectedDistributors() const; + + //! All distributors? + bool optionUseAllDistributors() const; + //! Only DB data - bool dbDataOnly() const; + bool optionDbDataOnly() const; //! DB ICAO codes - bool dbIcaoCodesOnly() const; + bool optionDbIcaoCodesOnly() const; //! Request incremental build - bool incrementalBuild() const; + bool optionIncrementalBuild() const; + + //! Sort by distributor preferences + bool optionSortByDistributorPreferences() const; + + //! Consolidate with DB data? + bool optionConsolidateModelSetWithDbData() const; + + //! Get selected distributors + BlackMisc::Simulation::CDistributorList getSelectedDistributors() const; + + //! Get shown distributors + BlackMisc::Simulation::CDistributorList getShownDistributors() const; //! Distributors from preferences BlackMisc::Simulation::CDistributorList getDistributorsFromPreferences() const; @@ -65,6 +77,9 @@ namespace BlackGui //! All distributors BlackMisc::Simulation::CDistributorList getAllDistributors() const; + //! Get distributors based on options + BlackMisc::Simulation::CDistributorList getDistributorsBasedOnOptions() const; + //! Preferences for given simulator? bool hasDistributorPreferences() const; diff --git a/src/blackgui/editors/ownmodelsetform.ui b/src/blackgui/editors/ownmodelsetform.ui index af1ef6f3f..f521332be 100644 --- a/src/blackgui/editors/ownmodelsetform.ui +++ b/src/blackgui/editors/ownmodelsetform.ui @@ -74,19 +74,6 @@ - - - - all - - - true - - - bg_Distributors - - - @@ -140,7 +127,7 @@ - + selected @@ -209,6 +196,29 @@ + + + + all + + + true + + + bg_Distributors + + + + + + + all from below + + + bg_Distributors + + + @@ -245,16 +255,15 @@ rb_DbDataOnly rb_DbIcaoCodesOnly rb_WithIcaoData - rb_SelectedDistributors - rb_AllDistributors + rb_DistributorsSelected tvp_Distributors - - + +