From ad71a67a44db1dcec9f60488d59d5116fe462535 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 9 Mar 2018 04:26:35 +0100 Subject: [PATCH] Fixes completer (model strings), show correct placeholder when simulator is changed --- src/blackcore/context/contextsimulator.h | 2 +- .../aircraftmodelstringcompleter.cpp | 44 ++++++++++++++----- .../components/aircraftmodelstringcompleter.h | 12 ++++- src/blackgui/components/mappingcomponent.cpp | 19 +++++--- 4 files changed, 56 insertions(+), 21 deletions(-) diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index 9977660be..086c4ae63 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -155,7 +155,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const = 0; //! Set the model set loader simulator directly - //! \note for testing purposes + //! \note for testing purposes and can be used if no simulator is connected virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) = 0; //! Simulators which have an initialized model set diff --git a/src/blackgui/components/aircraftmodelstringcompleter.cpp b/src/blackgui/components/aircraftmodelstringcompleter.cpp index 8c3d7d6da..f3a33a4ca 100644 --- a/src/blackgui/components/aircraftmodelstringcompleter.cpp +++ b/src/blackgui/components/aircraftmodelstringcompleter.cpp @@ -40,11 +40,13 @@ namespace BlackGui connect(ui->rb_Db, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::initGui); connect(ui->rb_ModelSet, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::initGui); connect(ui->rb_OwnModels, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::initGui); + connect(&m_modelCaches, &CModelCaches::cacheChanged, this, &CAircraftModelStringCompleter::setSimulator, Qt::QueuedConnection); + CSimulatorInfo sim = CSimulatorInfo(CSimulatorInfo::P3D); // default if (sGui->getIContextSimulator()) { connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorStatusChanged, this, &CAircraftModelStringCompleter::onSimulatorConnected); - const CSimulatorInfo sim(sGui->getIContextSimulator()->getSimulatorPluginInfo().getSimulator()); + sim = sGui->getIContextSimulator()->getSimulatorPluginInfo().getSimulator(); if (sim.isSingleSimulator()) { m_modelCaches.setCurrentSimulator(sim); @@ -52,8 +54,10 @@ namespace BlackGui else { this->setSourceVisible(OwnModels, false); + sim = m_modelCaches.getCurrentSimulator(); } } + this->setSimulator(sim); } CAircraftModelStringCompleter::~CAircraftModelStringCompleter() @@ -98,37 +102,53 @@ namespace BlackGui } } + bool CAircraftModelStringCompleter::setSimulator(const CSimulatorInfo &simulator) + { + if (this->getSimulator() == simulator) { return false; } + m_currentSimulator = simulator; + m_modelCaches.setCurrentSimulator(simulator); // all models + QTimer::singleShot(100, this, [ = ] { this->setCompleter(true); }); + return true; + } + + CSimulatorInfo CAircraftModelStringCompleter::getSimulator() const + { + return m_currentSimulator; + } + void CAircraftModelStringCompleter::clear() { ui->le_modelString->clear(); } - void CAircraftModelStringCompleter::setCompleter() + void CAircraftModelStringCompleter::setCompleter(bool simChanged) { QStringList modelStrings; - CompleterSourceFlag sourceWithData = None; + CompleterSourceFlag dataSource = None; + QString simInfo = m_currentSimulator.toQString(); if (ui->rb_Db->isChecked()) { - if (m_currentSourceWithData == DB) { return; } + if (!simChanged && m_currentDataSource == DB) { return; } modelStrings = sGui->getWebDataServices()->getModelCompleterStrings(); - if (!modelStrings.isEmpty()) { sourceWithData = DB; } + dataSource = DB; + simInfo = QStringLiteral("DB models"); } else if (ui->rb_ModelSet->isChecked()) { - if (m_currentSourceWithData == ModelSet) { return; } + if (!simChanged && m_currentDataSource == ModelSet) { return; } modelStrings = sGui->getIContextSimulator()->getModelSetCompleterStrings(true); - if (!modelStrings.isEmpty()) { sourceWithData = ModelSet; } + dataSource = ModelSet; } else if (ui->rb_OwnModels->isChecked()) { - if (m_currentSourceWithData == OwnModels) { return; } + if (!simChanged && m_currentDataSource == OwnModels) { return; } modelStrings = m_modelCaches.getCurrentCachedModels().toCompleterStrings(); - if (!modelStrings.isEmpty()) { sourceWithData = OwnModels; } + dataSource = OwnModels; } - m_currentSourceWithData = sourceWithData; + m_currentDataSource = dataSource; ui->le_modelString->setCompleter(new QCompleter(modelStrings, this)); - ui->le_modelString->setPlaceholderText(QString("model strings (%1)").arg(modelStrings.size())); + ui->le_modelString->setPlaceholderText(QString("model strings (%1/%2)").arg(modelStrings.size()).arg(simInfo)); } void CAircraftModelStringCompleter::onTextChanged() @@ -138,7 +158,7 @@ namespace BlackGui void CAircraftModelStringCompleter::initGui() { - this->setCompleter(); + this->setCompleter(true); } void CAircraftModelStringCompleter::onSimulatorConnected(int status) diff --git a/src/blackgui/components/aircraftmodelstringcompleter.h b/src/blackgui/components/aircraftmodelstringcompleter.h index f01288264..6664baf1b 100644 --- a/src/blackgui/components/aircraftmodelstringcompleter.h +++ b/src/blackgui/components/aircraftmodelstringcompleter.h @@ -67,6 +67,12 @@ namespace BlackGui //! Set the currently selected source void selectSource(CompleterSourceFlag source); + //! Change the simulator + bool setSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator); + + //! Get current simulator + BlackMisc::Simulation::CSimulatorInfo getSimulator() const; + //! Clear void clear(); @@ -76,7 +82,7 @@ namespace BlackGui private: //! Set the completer - void setCompleter(); + void setCompleter(bool simChanged); //! Init the GUI void initGui(); @@ -92,8 +98,10 @@ namespace BlackGui private: QScopedPointer ui; + // model set completer data are fetched from context BlackMisc::Simulation::Data::CModelCaches m_modelCaches { false, this }; //!< all models, works locally only - CompleterSourceFlag m_currentSourceWithData = None; + BlackMisc::Simulation::CSimulatorInfo m_currentSimulator; + CompleterSourceFlag m_currentDataSource = None; }; } // ns } // ns diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index f3334c79a..64bcd5871 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -56,6 +56,12 @@ namespace BlackGui { namespace Components { + const CLogCategoryList &CMappingComponent::getLogCategories() + { + static const CLogCategoryList cats({ CLogCategory::mapping(), CLogCategory::guiComponent() }); + return cats; + } + CMappingComponent::CMappingComponent(QWidget *parent) : COverlayMessagesFrame(parent), CIdentifiable(this), @@ -137,18 +143,13 @@ namespace BlackGui connect(ui->tvp_RenderedAircraft, &CAircraftModelView::objectChanged, this, &CMappingComponent::onChangedSimulatedAircraftInView); // with external core models might be already available + this->onModelSetSimulatorChanged(ui->comp_SimulatorSelector->getValue()); this->onModelSetChanged(); } CMappingComponent::~CMappingComponent() { } - const CLogCategoryList &CMappingComponent::getLogCategories() - { - static const CLogCategoryList cats({ CLogCategory::mapping(), CLogCategory::guiComponent() }); - return cats; - } - int CMappingComponent::countCurrentMappings() const { Q_ASSERT(ui->tvp_RenderedAircraft); @@ -177,6 +178,9 @@ namespace BlackGui { CLogMessage(this).info("Models loaded, you can update the model view"); } + + // change completer + ui->completer_ModelStrings->setSimulator(ui->comp_SimulatorSelector->getValue()); } void CMappingComponent::onRowCountChanged(int count, bool withFilter) @@ -287,8 +291,11 @@ namespace BlackGui void CMappingComponent::onModelSetSimulatorChanged(const CSimulatorInfo &simulator) { if (!sGui || !sGui->supportsContexts()) { return; } + if (sGui->isShuttingDown()) { return; } if (sGui->getIContextSimulator()->isSimulatorAvailable()) { return; } sGui->getIContextSimulator()->setModelSetLoaderSimulator(simulator); + + // completer will be changed in onModelSetChanged } void CMappingComponent::onPluginChanged(const CSimulatorPluginInfo &pluginInfo)