Ref T528, avoid crash (assert) if simulator object is not accessible (remote UI)

Also disable some UI elements in that case + display an info
This commit is contained in:
Klaus Basan
2019-02-08 01:25:15 +01:00
committed by Mat Sutcliffe
parent ddd44edebd
commit 2031ba3d8b
2 changed files with 22 additions and 2 deletions

View File

@@ -69,6 +69,7 @@ namespace BlackSimPlugin
void CFsxSettingsComponent::refresh()
{
const CSimulatorFsxCommon *fsxOrP3D = this->getFsxOrP3DSimulator();
const bool localSim = fsxOrP3D;
if (fsxOrP3D)
{
ui->cb_TraceSimConnectCalls->setChecked(fsxOrP3D->isTracingSendId());
@@ -77,6 +78,12 @@ namespace BlackSimPlugin
ui->cb_UseFsuipc->setChecked(fsxOrP3D->isFsuipcOpened());
}
ui->lbl_NoLocalSimulator->setVisible(!localSim);
ui->cb_TraceSimConnectCalls->setEnabled(localSim);
ui->cb_EnableTerrainProbe->setEnabled(localSim);
ui->cb_SBOffsets->setEnabled(localSim);
ui->cb_UseFsuipc->setEnabled(localSim);
const bool terrainProbe = CBuildConfig::isRunningOnWindowsNtPlatform() && (CBuildConfig::buildWordSize() == 32);
ui->cb_EnableTerrainProbe->setEnabled(terrainProbe);
ui->pb_CopyTerrainProbe->setVisible(terrainProbe);
@@ -134,10 +141,13 @@ namespace BlackSimPlugin
CSimulatorFsxCommon *CFsxSettingsComponent::getFsxOrP3DSimulator() const
{
if (!sGui || sGui->isShuttingDown() || !sGui->getIContextSimulator() || !sGui->getISimulator()) { return nullptr; }
if (!sGui || sGui->isShuttingDown() || !sGui->getIContextSimulator()) { return nullptr; }
const CSimulatorPluginInfo plugin = sGui->getIContextSimulator()->getSimulatorPluginInfo();
if (plugin.isEmulatedPlugin()) { return nullptr; } // cast would fail
// ISimulator can only be obtained in local environment, not distributed UI
if (!sGui->hasSimulator()) { return nullptr; }
ISimulator *simulator = sGui->getISimulator().data();
if (!simulator || simulator->isEmulatedDriver()) { return nullptr; }
if (!simulator->getSimulatorInfo().isFsxP3DFamily()) { return nullptr; }