From 8ad640704c9560df743c721d0ad4cb57125b1aa6 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 26 May 2016 20:13:13 +0200 Subject: [PATCH] refs #661, allow to sort by distributor order in builder * some style changes * pass distributors to builder * distributor model mode * flags --- src/blackcore/modelsetbuilder.cpp | 12 +++++++++--- src/blackcore/modelsetbuilder.h | 3 ++- src/blackgui/components/dbmappingcomponent.cpp | 15 ++++++++------- src/blackgui/components/dbmappingcomponent.h | 2 +- src/blackgui/components/dbownmodelscomponent.h | 2 +- .../components/dbownmodelsetcomponent.cpp | 5 ++++- src/blackgui/components/dbownmodelsetdialog.cpp | 9 +++++---- src/blackgui/editors/ownmodelsetform.cpp | 2 ++ src/blackgui/editors/ownmodelsetform.h | 2 +- 9 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/blackcore/modelsetbuilder.cpp b/src/blackcore/modelsetbuilder.cpp index cb20a348d..314bb03cc 100644 --- a/src/blackcore/modelsetbuilder.cpp +++ b/src/blackcore/modelsetbuilder.cpp @@ -26,15 +26,15 @@ namespace BlackCore // void } - CAircraftModelList CModelSetBuilder::buildModelSet(const CSimulatorInfo &simulator, const CAircraftModelList &models, const CAircraftModelList ¤tSet, Builder oprions, const CDistributorList &onlyByDistributors) const + CAircraftModelList CModelSetBuilder::buildModelSet(const CSimulatorInfo &simulator, const CAircraftModelList &models, const CAircraftModelList ¤tSet, Builder oprions, const CDistributorList &distributors) const { if (models.isEmpty()) { return CAircraftModelList(); } CAircraftModelList modelSet; // I avoid and empty distributor set wipes out everything - if (oprions.testFlag(FilterDistributos) && !onlyByDistributors.isEmpty()) + if (oprions.testFlag(FilterDistributos) && !distributors.isEmpty()) { - modelSet = models.findByDistributors(onlyByDistributors); + modelSet = models.findByDistributors(distributors); } else { @@ -68,6 +68,12 @@ namespace BlackCore } modelSet.resetOrder(); + if (oprions.testFlag(SortByDistributors)) + { + modelSet.updateDistributorOrder(distributors); + modelSet.sortBy(&CAircraftModel::getDistributorOrder); + } + return modelSet; } } // ns diff --git a/src/blackcore/modelsetbuilder.h b/src/blackcore/modelsetbuilder.h index 81935a29b..db138f2ba 100644 --- a/src/blackcore/modelsetbuilder.h +++ b/src/blackcore/modelsetbuilder.h @@ -38,7 +38,8 @@ namespace BlackCore FilterDistributos = 1 << 0, OnlyDbData = 1 << 1, OnlyDbIcaoCodes = 1 << 2, - Incremental = 1 << 3 + Incremental = 1 << 3, + SortByDistributors = 1 << 4 }; Q_DECLARE_FLAGS(Builder, BuilderFlag) diff --git a/src/blackgui/components/dbmappingcomponent.cpp b/src/blackgui/components/dbmappingcomponent.cpp index 1112cf4f1..4298cca60 100644 --- a/src/blackgui/components/dbmappingcomponent.cpp +++ b/src/blackgui/components/dbmappingcomponent.cpp @@ -114,6 +114,7 @@ namespace BlackGui // initial values this->ps_onModelSetChanged(ui->comp_OwnModelSet->view()->rowCount(), ui->comp_OwnModelSet->view()->hasFilter()); this->ps_onStashedModelsDataChanged(ui->comp_StashAircraft->view()->rowCount(), ui->comp_StashAircraft->view()->hasFilter()); + this->ps_onOwnModelsChanged(ui->comp_OwnAircraftModels->view()->rowCount(), ui->comp_OwnAircraftModels->view()->hasFilter()); // how to display forms ui->editor_AircraftIcao->setSelectOnly(); @@ -389,11 +390,11 @@ namespace BlackGui this->m_autoFilterInDbViews = !this->m_autoFilterInDbViews; } - void CDbMappingComponent::ps_applyDbData() + void CDbMappingComponent::ps_applyFormData() { - QAction *sender = qobject_cast(this->sender()); + const QAction *sender = qobject_cast(this->sender()); if (!sender) { return; } - QString cn(sender->data().toString()); + const QString cn(sender->data().toString()); if (cn.isEmpty()) { return; } if (this->ui->comp_StashAircraft->view()->selectedRowCount() < 1) { return; } @@ -915,16 +916,16 @@ namespace BlackGui // stash view and selection menuActions.addMenuStashEditor(); - this->m_menuActions[0] = menuActions.addAction(this->m_menuActions[0], CIcons::appAircraftIcao16(), "Current aircraft ICAO", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyDbData }); + this->m_menuActions[0] = menuActions.addAction(this->m_menuActions[0], CIcons::appAircraftIcao16(), "Current aircraft ICAO", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyFormData }); this->m_menuActions[0]->setData(CAircraftIcaoCode().getClassName()); - this->m_menuActions[1] = menuActions.addAction(this->m_menuActions[1], CIcons::appDistributors16(), "Current distributor", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyDbData }); + this->m_menuActions[1] = menuActions.addAction(this->m_menuActions[1], CIcons::appDistributors16(), "Current distributor", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyFormData }); this->m_menuActions[1]->setData(CDistributor().getClassName()); - this->m_menuActions[2] = menuActions.addAction(this->m_menuActions[2], CIcons::appLiveries16(), "Current livery", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyDbData }); + this->m_menuActions[2] = menuActions.addAction(this->m_menuActions[2], CIcons::appLiveries16(), "Current livery", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyFormData }); this->m_menuActions[2]->setData(CLivery().getClassName()); - this->m_menuActions[3] = menuActions.addAction(this->m_menuActions[3], CIcons::databaseTable16(), "Modify DB model data", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyDbData }); + this->m_menuActions[3] = menuActions.addAction(this->m_menuActions[3], CIcons::databaseTable16(), "Modify DB model data", CMenuAction::pathStashEditor(), this, { mapComp, &CDbMappingComponent::ps_applyFormData }); this->m_menuActions[3]->setData(CAircraftModel().getClassName()); } this->nestedCustomMenu(menuActions); diff --git a/src/blackgui/components/dbmappingcomponent.h b/src/blackgui/components/dbmappingcomponent.h index a098e5233..2da4c549a 100644 --- a/src/blackgui/components/dbmappingcomponent.h +++ b/src/blackgui/components/dbmappingcomponent.h @@ -262,7 +262,7 @@ namespace BlackGui void ps_toggleAutoFiltering(); //! Apply current DB data from form - void ps_applyDbData(); + void ps_applyFormData(); //! Open model modify dialog void ps_modifyModelDialog(); diff --git a/src/blackgui/components/dbownmodelscomponent.h b/src/blackgui/components/dbownmodelscomponent.h index 46a52f87c..edfd5c165 100644 --- a/src/blackgui/components/dbownmodelscomponent.h +++ b/src/blackgui/components/dbownmodelscomponent.h @@ -106,7 +106,7 @@ namespace BlackGui std::unique_ptr m_modelLoader; //!< read own aircraft models BlackMisc::CData m_simulatorSelection {this }; //!< last selection - //! Init model loader + //! Init or change model loader bool initModelLoader(const BlackMisc::Simulation::CSimulatorInfo &simulator); //! File name for savinf diff --git a/src/blackgui/components/dbownmodelsetcomponent.cpp b/src/blackgui/components/dbownmodelsetcomponent.cpp index babe8bde5..42ad2e4d9 100644 --- a/src/blackgui/components/dbownmodelsetcomponent.cpp +++ b/src/blackgui/components/dbownmodelsetcomponent.cpp @@ -193,6 +193,9 @@ namespace BlackGui const QObject *sender = QObject::sender(); if (sender == ui->pb_CreateNewSet) { + // make sure both tabs display the same simulator + Q_ASSERT_X(this->getMappingComponent(), Q_FUNC_INFO, "Missing mapping component"); + this->getMappingComponent()->setOwnModelsSimulator(this->getModelSetSimulator()); if (!this->m_modelSetDialog) { this->m_modelSetDialog.reset(new CDbOwnModelSetDialog(this)); @@ -211,7 +214,7 @@ namespace BlackGui } else { - static const CStatusMessage m(CStatusMessage(this, CStatusMessage::SeverityError, "No model data")); + static const CStatusMessage m = CStatusMessage(this).error("No model data for %1") << this->m_modelSetDialog->getSimulatorInfo().toQString(true); this->getMappingComponent()->showOverlayMessage(m); } } diff --git a/src/blackgui/components/dbownmodelsetdialog.cpp b/src/blackgui/components/dbownmodelsetdialog.cpp index f47e3d36b..5c7d70c72 100644 --- a/src/blackgui/components/dbownmodelsetdialog.cpp +++ b/src/blackgui/components/dbownmodelsetdialog.cpp @@ -124,13 +124,14 @@ namespace BlackGui const CAircraftModelList models = this->getMappingComponent()->getOwnModels(); this->m_simulatorInfo = this->getMappingComponent()->getOwnModelsSimulator(); const CDistributorList distributors = selectedProviders ? - this->ui->form_OwnModelSet->getSelectedDistributors() : - CDistributorList(); + ui->form_OwnModelSet->getSelectedDistributors() : + ui->form_OwnModelSet->getDistributors(); const CModelSetBuilder builder(this); CModelSetBuilder::Builder options = selectedProviders ? CModelSetBuilder::FilterDistributos : CModelSetBuilder::NoOptions; - if (dbDataOnly) { options |= CModelSetBuilder::OnlyDbData; } - if (dbIcaoOnly) { options |= CModelSetBuilder::OnlyDbIcaoCodes; } + if (dbDataOnly) { options |= CModelSetBuilder::OnlyDbData; } + if (dbIcaoOnly) { options |= CModelSetBuilder::OnlyDbIcaoCodes; } if (incremnental) { options |= CModelSetBuilder::Incremental; } + if (ui->form_OwnModelSet->hasDIstributorPreferences()) { options |= CModelSetBuilder::SortByDistributors; } return builder.buildModelSet(simulator, models, currentSet, options, distributors); } } // ns diff --git a/src/blackgui/editors/ownmodelsetform.cpp b/src/blackgui/editors/ownmodelsetform.cpp index 6f9bf9532..f4b11a9ce 100644 --- a/src/blackgui/editors/ownmodelsetform.cpp +++ b/src/blackgui/editors/ownmodelsetform.cpp @@ -51,6 +51,7 @@ namespace BlackGui const bool hasPreferences = this->hasDIstributorPreferences(); ui->cb_Preferences->setChecked(hasPreferences); ui->comp_SimulatorSelector->setValue(this->m_simulator); + ui->tvp_Distributors->setDistributorMode(hasPreferences ? CDistributorListModel::MinimalWithOrder : CDistributorListModel::Minimal); if (!distributors.isEmpty()) { this->ui->tvp_Distributors->updateContainerMaybeAsync(distributors); @@ -87,6 +88,7 @@ namespace BlackGui CDistributorList COwnModelSetForm::getDistributors() const { Q_ASSERT_X(sGui && sGui->hasWebDataServices(), Q_FUNC_INFO, "Missing web data services"); + Q_ASSERT_X(this->m_simulator.isSingleSimulator(), Q_FUNC_INFO, "Need single simulator"); const CDistributorListPreferences prefs(this->m_distributorPreferences.getCopy()); const CDistributorList distributors(prefs.getDistributors(this->m_simulator)); if (!distributors.isEmpty()) { return distributors; } diff --git a/src/blackgui/editors/ownmodelsetform.h b/src/blackgui/editors/ownmodelsetform.h index eea825a9e..d0f61542a 100644 --- a/src/blackgui/editors/ownmodelsetform.h +++ b/src/blackgui/editors/ownmodelsetform.h @@ -59,7 +59,7 @@ namespace BlackGui //! Request incremental build bool incrementalBuild() const; - //! Distributors + //! Distributors (from preferences or web) BlackMisc::Simulation::CDistributorList getDistributors() const; //! Preferences for given simulator