mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-26 02:35:38 +08:00
Allow to alter model set simulator in pilot client
* selector can be read only * functions in context to obtain model set from loader/matcher, this will not be used when a plugin driver is present * adjusted UI
This commit is contained in:
@@ -148,6 +148,13 @@ namespace BlackCore
|
|||||||
//! \note might be slow since list can be big
|
//! \note might be slow since list can be big
|
||||||
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const = 0;
|
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const = 0;
|
||||||
|
|
||||||
|
//! Get the model set loader simulator directly
|
||||||
|
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const = 0;
|
||||||
|
|
||||||
|
//! Set the model set loader simulator directly
|
||||||
|
//! \note for testing purposes
|
||||||
|
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) = 0;
|
||||||
|
|
||||||
//! Simulators which have an initialized model set
|
//! Simulators which have an initialized model set
|
||||||
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const = 0;
|
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,20 @@ namespace BlackCore
|
|||||||
return BlackMisc::Simulation::CSimulatorInfo();
|
return BlackMisc::Simulation::CSimulatorInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! \copydoc IContextSimulator::getModelSetLoaderSimulator
|
||||||
|
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override
|
||||||
|
{
|
||||||
|
logEmptyContextWarning(Q_FUNC_INFO);
|
||||||
|
return BlackMisc::Simulation::CSimulatorInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! \copydoc IContextSimulator::setModelSetLoaderSimulator
|
||||||
|
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override
|
||||||
|
{
|
||||||
|
Q_UNUSED(simulator);
|
||||||
|
logEmptyContextWarning(Q_FUNC_INFO);
|
||||||
|
}
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::getModelSetStrings
|
//! \copydoc IContextSimulator::getModelSetStrings
|
||||||
virtual QStringList getModelSetStrings() const override
|
virtual QStringList getModelSetStrings() const override
|
||||||
{
|
{
|
||||||
@@ -94,7 +108,7 @@ namespace BlackCore
|
|||||||
return QStringList();
|
return QStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::getModelSetStrings
|
//! \copydoc IContextSimulator::getModelSetCompleterStrings
|
||||||
virtual QStringList getModelSetCompleterStrings(bool sorted) const override
|
virtual QStringList getModelSetCompleterStrings(bool sorted) const override
|
||||||
{
|
{
|
||||||
Q_UNUSED(sorted);
|
Q_UNUSED(sorted);
|
||||||
|
|||||||
@@ -163,6 +163,21 @@ namespace BlackCore
|
|||||||
return m_aircraftMatcher.getModelSet();
|
return m_aircraftMatcher.getModelSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSimulatorInfo CContextSimulator::getModelSetLoaderSimulator() const
|
||||||
|
{
|
||||||
|
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||||
|
return m_modelSetLoader.getSimulator();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CContextSimulator::setModelSetLoaderSimulator(const CSimulatorInfo &simulator)
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Need single simulator");
|
||||||
|
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||||
|
if (this->isSimulatorAvailable()) { return; }
|
||||||
|
m_modelSetLoader.setSimulator(simulator);
|
||||||
|
m_aircraftMatcher.setModelSet(m_modelSetLoader.getAircraftModels(), simulator);
|
||||||
|
}
|
||||||
|
|
||||||
CSimulatorInfo CContextSimulator::simulatorsWithInitializedModelSet() const
|
CSimulatorInfo CContextSimulator::simulatorsWithInitializedModelSet() const
|
||||||
{
|
{
|
||||||
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ namespace BlackCore
|
|||||||
virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override;
|
virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override;
|
||||||
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 BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override;
|
||||||
|
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
|
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
|
||||||
virtual QStringList getModelSetStrings() const override;
|
virtual QStringList getModelSetStrings() const override;
|
||||||
virtual QStringList getModelSetCompleterStrings(bool sorted) const override;
|
virtual QStringList getModelSetCompleterStrings(bool sorted) const override;
|
||||||
|
|||||||
@@ -107,6 +107,16 @@ namespace BlackCore
|
|||||||
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatorInfo>(QLatin1String("simulatorsWithInitializedModelSet"));
|
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatorInfo>(QLatin1String("simulatorsWithInitializedModelSet"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSimulatorInfo CContextSimulatorProxy::getModelSetLoaderSimulator() const
|
||||||
|
{
|
||||||
|
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatorInfo>(QLatin1String("getModelSetLoaderSimulator"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CContextSimulatorProxy::setModelSetLoaderSimulator(const CSimulatorInfo &simulator)
|
||||||
|
{
|
||||||
|
m_dBusInterface->callDBus(QLatin1String("setModelSetLoaderSimulator"), simulator);
|
||||||
|
}
|
||||||
|
|
||||||
QStringList CContextSimulatorProxy::getModelSetStrings() const
|
QStringList CContextSimulatorProxy::getModelSetStrings() const
|
||||||
{
|
{
|
||||||
return m_dBusInterface->callDBusRet<QStringList>(QLatin1String("getModelSetStrings"));
|
return m_dBusInterface->callDBusRet<QStringList>(QLatin1String("getModelSetStrings"));
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ 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 BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
|
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
|
||||||
|
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override;
|
||||||
|
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual QStringList getModelSetStrings() const override;
|
virtual QStringList getModelSetStrings() const override;
|
||||||
virtual QStringList getModelSetCompleterStrings(bool sorted) 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;
|
||||||
|
|||||||
@@ -114,11 +114,19 @@ namespace BlackGui
|
|||||||
ui->tvp_AircraftModels->setDisplayAutomatically(false);
|
ui->tvp_AircraftModels->setDisplayAutomatically(false);
|
||||||
this->settingsChanged();
|
this->settingsChanged();
|
||||||
|
|
||||||
|
// selector
|
||||||
|
ui->comp_SimulatorSelector->setRememberSelection(false);
|
||||||
|
ui->comp_SimulatorSelector->setMode(CSimulatorSelector::RadioButtons);
|
||||||
|
this->setSimulatorSelector();
|
||||||
|
connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CMappingComponent::onModelSetSimulatorChanged);
|
||||||
|
|
||||||
|
// connect
|
||||||
connect(sGui->getIContextSimulator(), &IContextSimulator::modelSetChanged, this, &CMappingComponent::onModelSetChanged);
|
connect(sGui->getIContextSimulator(), &IContextSimulator::modelSetChanged, this, &CMappingComponent::onModelSetChanged);
|
||||||
connect(sGui->getIContextSimulator(), &IContextSimulator::modelMatchingCompleted, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
connect(sGui->getIContextSimulator(), &IContextSimulator::modelMatchingCompleted, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
||||||
connect(sGui->getIContextSimulator(), &IContextSimulator::aircraftRenderingChanged, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
connect(sGui->getIContextSimulator(), &IContextSimulator::aircraftRenderingChanged, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
||||||
connect(sGui->getIContextSimulator(), &IContextSimulator::airspaceSnapshotHandled, this, &CMappingComponent::tokenBucketUpdate);
|
connect(sGui->getIContextSimulator(), &IContextSimulator::airspaceSnapshotHandled, this, &CMappingComponent::tokenBucketUpdate);
|
||||||
connect(sGui->getIContextSimulator(), &IContextSimulator::addingRemoteModelFailed, this, &CMappingComponent::addingRemoteAircraftFailed);
|
connect(sGui->getIContextSimulator(), &IContextSimulator::addingRemoteModelFailed, this, &CMappingComponent::addingRemoteAircraftFailed);
|
||||||
|
connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorPluginChanged, this, &CMappingComponent::onPluginChanged);
|
||||||
connect(sGui->getIContextNetwork(), &IContextNetwork::changedRemoteAircraftModel, this, &CMappingComponent::onRemoteAircraftModelChanged);
|
connect(sGui->getIContextNetwork(), &IContextNetwork::changedRemoteAircraftModel, this, &CMappingComponent::onRemoteAircraftModelChanged);
|
||||||
connect(sGui->getIContextNetwork(), &IContextNetwork::changedRemoteAircraftEnabled, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
connect(sGui->getIContextNetwork(), &IContextNetwork::changedRemoteAircraftEnabled, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
||||||
connect(sGui->getIContextNetwork(), &IContextNetwork::changedFastPositionUpdates, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
connect(sGui->getIContextNetwork(), &IContextNetwork::changedFastPositionUpdates, this, &CMappingComponent::tokenBucketUpdateAircraft);
|
||||||
@@ -250,6 +258,45 @@ namespace BlackGui
|
|||||||
return callsign;
|
return callsign;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMappingComponent::setSimulatorSelector()
|
||||||
|
{
|
||||||
|
if (sGui && sGui->supportsContexts() && sGui->getIContextSimulator())
|
||||||
|
{
|
||||||
|
const CSimulatorPluginInfo pluginInfo = sGui->getIContextSimulator()->getSimulatorPluginInfo();
|
||||||
|
if (pluginInfo.isValid())
|
||||||
|
{
|
||||||
|
ui->comp_SimulatorSelector->setValue(pluginInfo.getSimulator());
|
||||||
|
ui->comp_SimulatorSelector->setReadOnly(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->comp_SimulatorSelector->setReadOnly(false);
|
||||||
|
const CSimulatorInfo simulator = sGui->getIContextSimulator()->getModelSetLoaderSimulator();
|
||||||
|
if (simulator.isSingleSimulator())
|
||||||
|
{
|
||||||
|
ui->comp_SimulatorSelector->setValue(simulator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->comp_SimulatorSelector->setReadOnly(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMappingComponent::onModelSetSimulatorChanged(const CSimulatorInfo &simulator)
|
||||||
|
{
|
||||||
|
if (!sGui || !sGui->supportsContexts()) { return; }
|
||||||
|
if (sGui->getIContextSimulator()->isSimulatorAvailable()) { return; }
|
||||||
|
sGui->getIContextSimulator()->setModelSetLoaderSimulator(simulator);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMappingComponent::onPluginChanged(const CSimulatorPluginInfo &pluginInfo)
|
||||||
|
{
|
||||||
|
Q_UNUSED(pluginInfo);
|
||||||
|
QTimer::singleShot(0, this, &CMappingComponent::setSimulatorSelector);
|
||||||
|
}
|
||||||
|
|
||||||
void CMappingComponent::onSaveAircraft()
|
void CMappingComponent::onSaveAircraft()
|
||||||
{
|
{
|
||||||
if (!sGui->getIContextSimulator()->isSimulatorSimulating()) { return; }
|
if (!sGui->getIContextSimulator()->isSimulatorSimulating()) { return; }
|
||||||
@@ -334,6 +381,7 @@ namespace BlackGui
|
|||||||
|
|
||||||
void CMappingComponent::onModelsUpdateRequested()
|
void CMappingComponent::onModelsUpdateRequested()
|
||||||
{
|
{
|
||||||
|
Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui");
|
||||||
const CAircraftModelList ml(sGui->getIContextSimulator()->getModelSet());
|
const CAircraftModelList ml(sGui->getIContextSimulator()->getModelSet());
|
||||||
ui->tvp_AircraftModels->updateContainerMaybeAsync(ml);
|
ui->tvp_AircraftModels->updateContainerMaybeAsync(ml);
|
||||||
}
|
}
|
||||||
@@ -432,7 +480,7 @@ namespace BlackGui
|
|||||||
m_updateTimer.setInterval(ms);
|
m_updateTimer.setInterval(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMappingComponent::connectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to)
|
void CMappingComponent::connectionStatusChanged(INetwork::ConnectionStatus from, INetwork::ConnectionStatus to)
|
||||||
{
|
{
|
||||||
Q_UNUSED(from);
|
Q_UNUSED(from);
|
||||||
if (INetwork::isDisconnectedStatus(to))
|
if (INetwork::isDisconnectedStatus(to))
|
||||||
@@ -442,6 +490,7 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
else if (INetwork::isConnectedStatus(to))
|
else if (INetwork::isConnectedStatus(to))
|
||||||
{
|
{
|
||||||
|
ui->comp_SimulatorSelector->setReadOnly(true);
|
||||||
m_updateTimer.start();
|
m_updateTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,6 +148,15 @@ namespace BlackGui
|
|||||||
//! Check callsign entered
|
//! Check callsign entered
|
||||||
BlackMisc::Aviation::CCallsign validateRenderedCallsign();
|
BlackMisc::Aviation::CCallsign validateRenderedCallsign();
|
||||||
|
|
||||||
|
//! Set the status of the simulator
|
||||||
|
void setSimulatorSelector();
|
||||||
|
|
||||||
|
//! Changed selector
|
||||||
|
void onModelSetSimulatorChanged(const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
||||||
|
|
||||||
|
//! Plugin info has been changed
|
||||||
|
void onPluginChanged(const BlackMisc::Simulation::CSimulatorPluginInfo &pluginInfo);
|
||||||
|
|
||||||
static constexpr int OverlayMessageMs = 5000;
|
static constexpr int OverlayMessageMs = 5000;
|
||||||
QScopedPointer<Ui::CMappingComponent> ui;
|
QScopedPointer<Ui::CMappingComponent> ui;
|
||||||
bool m_missedRenderedAircraftUpdate = true; //! Rendered aircraft need update
|
bool m_missedRenderedAircraftUpdate = true; //! Rendered aircraft need update
|
||||||
|
|||||||
@@ -288,6 +288,16 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="2" colspan="2">
|
||||||
|
<widget class="BlackGui::Components::CSimulatorSelector" name="comp_SimulatorSelector">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
@@ -295,6 +305,12 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>BlackGui::Components::CSimulatorSelector</class>
|
||||||
|
<extends>QFrame</extends>
|
||||||
|
<header>blackgui/components/simulatorselector.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>BlackGui::Views::CSimulatedAircraftView</class>
|
<class>BlackGui::Views::CSimulatedAircraftView</class>
|
||||||
<extends>QTableView</extends>
|
<extends>QTableView</extends>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blackgui/components/simulatorselector.h"
|
#include "blackgui/components/simulatorselector.h"
|
||||||
|
#include "blackgui/guiutility.h"
|
||||||
#include "blackmisc/compare.h"
|
#include "blackmisc/compare.h"
|
||||||
#include "ui_simulatorselector.h"
|
#include "ui_simulatorselector.h"
|
||||||
|
|
||||||
@@ -182,6 +183,15 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorSelector::setReadOnly(bool readOnly)
|
||||||
|
{
|
||||||
|
CGuiUtility::checkBoxesReadOnly(this, readOnly);
|
||||||
|
ui->cb_FSX->setEnabled(!readOnly);
|
||||||
|
ui->cb_FS9->setEnabled(!readOnly);
|
||||||
|
ui->cb_XPlane->setEnabled(!readOnly);
|
||||||
|
ui->cb_P3D->setEnabled(!readOnly);
|
||||||
|
}
|
||||||
|
|
||||||
void CSimulatorSelector::radioButtonChanged(bool checked)
|
void CSimulatorSelector::radioButtonChanged(bool checked)
|
||||||
{
|
{
|
||||||
if (m_mode != RadioButtons) { return; }
|
if (m_mode != RadioButtons) { return; }
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ namespace BlackGui
|
|||||||
//! Clear values
|
//! Clear values
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
|
//! Set read only
|
||||||
|
void setReadOnly(bool readOnly);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
//! Value has been changed
|
//! Value has been changed
|
||||||
void changed(const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
void changed(const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
||||||
|
|||||||
Reference in New Issue
Block a user