refs #780, improved model string completion

* added signatures for completer string (when send via context size matters)
* support of all instaled models in completer
* added BLACKMISC_EXPORT in model cache classes
This commit is contained in:
Klaus Basan
2016-10-27 01:03:36 +02:00
parent 14f3eadc08
commit 1678ca8919
11 changed files with 70 additions and 24 deletions

View File

@@ -150,6 +150,9 @@ namespace BlackCore
//! Model strings //! Model strings
virtual QStringList getModelSetStrings() const = 0; virtual QStringList getModelSetStrings() const = 0;
//! Model set completer string
virtual QStringList getModelSetCompleterStrings(bool sorted) const = 0;
//! Set time synchronization between simulator and user's computer time //! Set time synchronization between simulator and user's computer time
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature //! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) = 0; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) = 0;

View File

@@ -87,6 +87,14 @@ namespace BlackCore
return QStringList(); return QStringList();
} }
//! \copydoc IContextSimulator::getModelSetStrings
virtual QStringList getModelSetCompleterStrings(bool sorted) const override
{
Q_UNUSED(sorted);
logEmptyContextWarning(Q_FUNC_INFO);
return QStringList();
}
//! \copydoc IContextSimulator::getModelSetModelsStartingWith //! \copydoc IContextSimulator::getModelSetModelsStartingWith
virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString modelString) const override virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString modelString) const override
{ {

View File

@@ -162,6 +162,12 @@ namespace BlackCore
return this->getModelSet().getModelStringList(false); return this->getModelSet().getModelStringList(false);
} }
QStringList CContextSimulator::getModelSetCompleterStrings(bool sorted) const
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << sorted; }
return this->getModelSet().toCompleterStrings(sorted);
}
int CContextSimulator::getModelSetCount() const int CContextSimulator::getModelSetCount() const
{ {
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
@@ -396,7 +402,7 @@ namespace BlackCore
Q_ASSERT(this->getIContextApplication()->isUsingImplementingObject()); Q_ASSERT(this->getIContextApplication()->isUsingImplementingObject());
Q_ASSERT(!simulatorInfo.isUnspecified()); Q_ASSERT(!simulatorInfo.isUnspecified());
ISimulator::SimulatorStatus simStatus = getSimulatorStatusEnum(); const ISimulator::SimulatorStatus simStatus = getSimulatorStatusEnum();
if (!m_simulatorPlugin.first.isUnspecified() && if (!m_simulatorPlugin.first.isUnspecified() &&
m_simulatorPlugin.first == simulatorInfo && simStatus.testFlag(ISimulator::Connected)) m_simulatorPlugin.first == simulatorInfo && simStatus.testFlag(ISimulator::Connected))
{ {

View File

@@ -82,6 +82,7 @@ namespace BlackCore
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
virtual QStringList getModelSetStrings() const override; virtual QStringList getModelSetStrings() const override;
virtual QStringList getModelSetCompleterStrings(bool sorted) const override;
virtual int getModelSetCount() const override; virtual int getModelSetCount() const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString modelString) const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString modelString) const override;
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override;

View File

@@ -94,6 +94,11 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<QStringList>(QLatin1Literal("getModelSetStrings")); return m_dBusInterface->callDBusRet<QStringList>(QLatin1Literal("getModelSetStrings"));
} }
QStringList CContextSimulatorProxy::getModelSetCompleterStrings(bool sorted) const
{
return m_dBusInterface->callDBusRet<QStringList>(QLatin1Literal("getModelSetCompleterStrings"), sorted);
}
CAircraftModelList CContextSimulatorProxy::getModelSetModelsStartingWith(const QString modelString) const CAircraftModelList CContextSimulatorProxy::getModelSetModelsStartingWith(const QString modelString) const
{ {
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModelList>(QLatin1Literal("getModelSetModelsStartingWith"), modelString); return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModelList>(QLatin1Literal("getModelSetModelsStartingWith"), modelString);

View File

@@ -61,6 +61,7 @@ namespace BlackCore
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
virtual QStringList getModelSetStrings() const override; virtual QStringList getModelSetStrings() const override;
virtual QStringList getModelSetCompleterStrings(bool sorted) const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString modelString) const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString modelString) const override;
virtual int getModelSetCount() const override; virtual int getModelSetCount() const override;
virtual BlackMisc::Simulation::CSimulatorSetup getSimulatorSetup() const override; virtual BlackMisc::Simulation::CSimulatorSetup getSimulatorSetup() const override;

View File

@@ -419,6 +419,12 @@ namespace BlackCore
return QStringList(); return QStringList();
} }
QStringList CWebDataServices::getModelCompleterStrings(bool sorted) const
{
if (m_modelDataReader) { return m_modelDataReader->getModels().toCompleterStrings(sorted); }
return QStringList();
}
CAircraftModelList CWebDataServices::getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode) const CAircraftModelList CWebDataServices::getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode) const
{ {
if (m_modelDataReader) { return m_modelDataReader->getModelsForAircraftDesignatorAndLiveryCombinedCode(aircraftDesignator, combinedCode); } if (m_modelDataReader) { return m_modelDataReader->getModelsForAircraftDesignatorAndLiveryCombinedCode(aircraftDesignator, combinedCode); }

View File

@@ -215,6 +215,10 @@ namespace BlackCore
//! \threadsafe //! \threadsafe
QStringList getModelStrings() const; QStringList getModelStrings() const;
//! Model completer string
//! \threadsafe
QStringList getModelCompleterStrings(bool sorted = true) const;
//! Models for combined code and aircraft designator //! Models for combined code and aircraft designator
//! \threadsafe //! \threadsafe
BlackMisc::Simulation::CAircraftModelList getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode) const; BlackMisc::Simulation::CAircraftModelList getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode) const;

View File

@@ -18,6 +18,8 @@
using namespace BlackCore; using namespace BlackCore;
using namespace BlackCore::Context; using namespace BlackCore::Context;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::Simulation::Data;
namespace BlackGui namespace BlackGui
{ {
@@ -42,6 +44,15 @@ namespace BlackGui
if (sGui->getIContextSimulator()) if (sGui->getIContextSimulator())
{ {
connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorStatusChanged, this, &CAircraftModelStringCompleter::ps_simulatorConnected); connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorStatusChanged, this, &CAircraftModelStringCompleter::ps_simulatorConnected);
const CSimulatorInfo sim(sGui->getIContextSimulator()->getSimulatorPluginInfo().getSimulator());
if (sim.isSingleSimulator())
{
this->m_modelCaches.setCurrentSimulator(sim);
}
else
{
this->setSourceVisible(OwnModels, false);
}
} }
} }
@@ -95,32 +106,27 @@ namespace BlackGui
void CAircraftModelStringCompleter::setCompleter() void CAircraftModelStringCompleter::setCompleter()
{ {
QStringList modelStrings; QStringList modelStrings;
CompleterSourceFlag sourceWithData = None;
if (ui->rb_Db->isChecked()) if (ui->rb_Db->isChecked())
{ {
modelStrings = sGui->getWebDataServices()->getModelStrings(); if (this->m_currentSourceWithData == DB) { return; }
modelStrings = sGui->getWebDataServices()->getModelCompleterStrings();
if (!modelStrings.isEmpty()) { sourceWithData = DB; }
} }
else if (ui->rb_ModelSet->isChecked()) else if (ui->rb_ModelSet->isChecked())
{ {
if (!this->m_completerOwnModels) if (this->m_currentSourceWithData == ModelSet) { return; }
{ modelStrings = sGui->getIContextSimulator()->getModelSetCompleterStrings(true);
const QStringList modelStrings = sGui->getIContextSimulator()->getModelSet().getModelStringList(); if (!modelStrings.isEmpty()) { sourceWithData = ModelSet; }
this->m_completerModelSet = new QCompleter(modelStrings, this);
setCompleterParameters(this->m_completerModelSet);
}
ui->le_modelString->setCompleter(this->m_completerOwnModels);
} }
else if (ui->rb_OwnModels->isChecked()) else if (ui->rb_OwnModels->isChecked())
{ {
if (!this->m_completerOwnModels) if (this->m_currentSourceWithData == OwnModels) { return; }
{ modelStrings = this->m_modelCaches.getCurrentCachedModels().toCompleterStrings();
const QStringList modelStrings = sGui->getIContextSimulator()->getModelSet().getModelStringList(); if (!modelStrings.isEmpty()) { sourceWithData = OwnModels; }
this->m_completerOwnModels = new QCompleter(modelStrings, this);
setCompleterParameters(this->m_completerOwnModels);
}
ui->le_modelString->setCompleter(this->m_completerOwnModels);
modelStrings = sGui->getIContextSimulator()->getModelSet().getModelStringList();
} }
this->m_currentSourceWithData = sourceWithData;
ui->le_modelString->setCompleter(new QCompleter(modelStrings, this)); 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)").arg(modelStrings.size()));
} }

View File

@@ -12,6 +12,7 @@
#ifndef BLACKGUI_COMPLETER_AIRCRAFTMODELSTRINGCOMPLETER_H #ifndef BLACKGUI_COMPLETER_AIRCRAFTMODELSTRINGCOMPLETER_H
#define BLACKGUI_COMPLETER_AIRCRAFTMODELSTRINGCOMPLETER_H #define BLACKGUI_COMPLETER_AIRCRAFTMODELSTRINGCOMPLETER_H
#include "blackmisc/simulation/data/modelcaches.h"
#include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/aircraftmodel.h"
#include <QFrame> #include <QFrame>
#include <QScopedPointer> #include <QScopedPointer>
@@ -33,10 +34,12 @@ namespace BlackGui
public: public:
//! Sources for string completion //! Sources for string completion
enum CompleterSourceFlag { enum CompleterSourceFlag
DB, {
ModelSet, None = 0, //!< normally used to indicate nothing was loaded
OwnModels DB = 1 << 0,
ModelSet = 1 << 1,
OwnModels = 1 << 2
}; };
Q_DECLARE_FLAGS(CompleterSource, CompleterSourceFlag) Q_DECLARE_FLAGS(CompleterSource, CompleterSourceFlag)
@@ -93,6 +96,8 @@ namespace BlackGui
private: private:
QScopedPointer <Ui::CAircraftModelStringCompleter> ui; QScopedPointer <Ui::CAircraftModelStringCompleter> ui;
BlackMisc::Simulation::Data::CModelCaches m_modelCaches { false, this }; //!< all models, works locally only
CompleterSourceFlag m_currentSourceWithData = None;
}; };
} // ns } // ns
} // ns } // ns

View File

@@ -12,6 +12,7 @@
#ifndef BLACKMISC_SIMULATION_DATA_MODELCACHES #ifndef BLACKMISC_SIMULATION_DATA_MODELCACHES
#define BLACKMISC_SIMULATION_DATA_MODELCACHES #define BLACKMISC_SIMULATION_DATA_MODELCACHES
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/datacache.h" #include "blackmisc/datacache.h"
#include "blackmisc/simulation/aircraftmodelinterfaces.h" #include "blackmisc/simulation/aircraftmodelinterfaces.h"
#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodellist.h"
@@ -140,7 +141,7 @@ namespace BlackMisc
}; };
//! Cache for multiple simulators specified by BlackMisc::Simulation::CSimulatorInfo //! Cache for multiple simulators specified by BlackMisc::Simulation::CSimulatorInfo
class IMultiSimulatorModelCaches : class BLACKMISC_EXPORT IMultiSimulatorModelCaches :
public QObject, public QObject,
public IModelsPerSimulatorSetable public IModelsPerSimulatorSetable
{ {
@@ -224,7 +225,7 @@ namespace BlackMisc
//! Bundle of caches for all simulators //! Bundle of caches for all simulators
//! \remark remembers its last simulator selection //! \remark remembers its last simulator selection
class CModelCaches : public IMultiSimulatorModelCaches class BLACKMISC_EXPORT CModelCaches : public IMultiSimulatorModelCaches
{ {
Q_OBJECT Q_OBJECT
@@ -255,7 +256,7 @@ namespace BlackMisc
//! Bundle of caches for model sets of all simulators //! Bundle of caches for model sets of all simulators
//! \remark remembers its last simulator selection //! \remark remembers its last simulator selection
class CModelSetCaches : public IMultiSimulatorModelCaches class BLACKMISC_EXPORT CModelSetCaches : public IMultiSimulatorModelCaches
{ {
Q_OBJECT Q_OBJECT