diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 432893772..4dc98596f 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -38,6 +38,7 @@ #include #include #include +#include using namespace BlackMisc; using namespace BlackMisc::Simulation; @@ -46,7 +47,6 @@ using namespace BlackMisc::Aviation; using namespace BlackMisc::PhysicalQuantities; using namespace BlackCore; using namespace BlackCore::Context; -using namespace BlackGui; using namespace BlackGui::Views; using namespace BlackGui::Models; using namespace BlackGui::Filters; @@ -82,7 +82,7 @@ namespace BlackGui ui->tvp_RenderedAircraft->setAircraftMode(CSimulatedAircraftListModel::RenderedMode); ui->tvp_RenderedAircraft->setResizeMode(CAircraftModelView::ResizingOnce); - connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CMappingComponent::connectionStatusChanged); + connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CMappingComponent::onNetworkConnectionStatusChanged); connect(ui->tvp_AircraftModels, &CAircraftModelView::requestUpdate, this, &CMappingComponent::onModelsUpdateRequested); connect(ui->tvp_AircraftModels, &CAircraftModelView::modelDataChanged, this, &CMappingComponent::onRowCountChanged); @@ -132,7 +132,7 @@ namespace BlackGui connect(sGui->getIContextSimulator(), &IContextSimulator::aircraftRenderingChanged, this, &CMappingComponent::tokenBucketUpdateAircraft); connect(sGui->getIContextSimulator(), &IContextSimulator::airspaceSnapshotHandled, this, &CMappingComponent::tokenBucketUpdate); connect(sGui->getIContextSimulator(), &IContextSimulator::addingRemoteModelFailed, this, &CMappingComponent::addingRemoteAircraftFailed); - connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorPluginChanged, this, &CMappingComponent::onPluginChanged); + connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorPluginChanged, this, &CMappingComponent::onSimulatorPluginChanged); connect(sGui->getIContextNetwork(), &IContextNetwork::changedRemoteAircraftModel, this, &CMappingComponent::onRemoteAircraftModelChanged); connect(sGui->getIContextNetwork(), &IContextNetwork::changedRemoteAircraftEnabled, this, &CMappingComponent::tokenBucketUpdateAircraft); connect(sGui->getIContextNetwork(), &IContextNetwork::changedFastPositionUpdates, this, &CMappingComponent::tokenBucketUpdateAircraft); @@ -145,9 +145,13 @@ namespace BlackGui connect(ui->tvp_RenderedAircraft, &CAircraftModelView::objectChanged, this, &CMappingComponent::onChangedSimulatedAircraftInView); // with external core models might be already available - const CSimulatorInfo sim(ui->comp_SimulatorSelector->getValue()); - this->onModelSetSimulatorChanged(sim); - this->onModelSetChanged(sim); + QPointer myself(this); + QTimer::singleShot(2500, this, [ = ] + { + const CSimulatorInfo simulator(myself->getConnectedOrSelectedSimulator()); + myself->onModelSetSimulatorChanged(simulator); + myself->onModelSetChanged(simulator); + }); } CMappingComponent::~CMappingComponent() @@ -272,8 +276,8 @@ namespace BlackGui const CSimulatorPluginInfo pluginInfo = sGui->getIContextSimulator()->getSimulatorPluginInfo(); if (pluginInfo.isValid()) { - ui->comp_SimulatorSelector->setValue(pluginInfo.getSimulator()); ui->comp_SimulatorSelector->setReadOnly(true); + ui->comp_SimulatorSelector->setValue(pluginInfo.getSimulator()); } else { @@ -293,18 +297,21 @@ namespace BlackGui void CMappingComponent::onModelSetSimulatorChanged(const CSimulatorInfo &simulator) { - if (!sGui || !sGui->supportsContexts()) { return; } - if (sGui->isShuttingDown()) { return; } - if (sGui->getIContextSimulator()->isSimulatorAvailable()) { return; } + if (this->isSimulatorAvailable()) { return; } sGui->getIContextSimulator()->setModelSetLoaderSimulator(simulator); // completer will be changed in onModelSetChanged } - void CMappingComponent::onPluginChanged(const CSimulatorPluginInfo &pluginInfo) + void CMappingComponent::onSimulatorPluginChanged(const CSimulatorPluginInfo &pluginInfo) { Q_UNUSED(pluginInfo); - QTimer::singleShot(0, this, &CMappingComponent::setSimulatorSelector); + QPointer myself(this); + QTimer::singleShot(25, this, [ = ] + { + if (myself.isNull()) { return; } + myself->setSimulatorSelector(); + }); } void CMappingComponent::onSaveAircraft() @@ -422,12 +429,24 @@ namespace BlackGui void CMappingComponent::onMenuHighlightInSimulator(const CSimulatedAircraft &aircraft) { - if (sGui->getIContextSimulator()) + if (sGui && sGui->getIContextSimulator()) { sGui->getIContextSimulator()->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime()); } } + CSimulatorInfo CMappingComponent::getConnectedOrSelectedSimulator() const + { + if (this->isSimulatorAvailable()) { return sGui->getIContextSimulator()->isSimulatorAvailable(); } + return ui->comp_SimulatorSelector->getValue(); + } + + bool CMappingComponent::isSimulatorAvailable() const + { + if (!sGui || !sGui->getIContextSimulator()) { return false; } + return sGui->getIContextSimulator()->isSimulatorAvailable(); + } + void CMappingComponent::showAircraftModelDetails(bool show) { QList sizes = ui->sp_MappingComponentSplitter->sizes(); @@ -517,7 +536,7 @@ namespace BlackGui m_updateTimer.setInterval(ms); } - void CMappingComponent::connectionStatusChanged(INetwork::ConnectionStatus from, INetwork::ConnectionStatus to) + void CMappingComponent::onNetworkConnectionStatusChanged(INetwork::ConnectionStatus from, INetwork::ConnectionStatus to) { Q_UNUSED(from); if (INetwork::isDisconnectedStatus(to)) diff --git a/src/blackgui/components/mappingcomponent.h b/src/blackgui/components/mappingcomponent.h index 80c7d3d99..450d995fb 100644 --- a/src/blackgui/components/mappingcomponent.h +++ b/src/blackgui/components/mappingcomponent.h @@ -56,7 +56,8 @@ namespace BlackGui public: //! Tab widget - enum TabWidget { + enum TabWidget + { TabRenderedAircraft = 0, TabAircraftModels, TabInterpolatorSetup, @@ -134,6 +135,12 @@ namespace BlackGui //! Highlight in simulator void onMenuHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Selected or connected simulator + BlackMisc::Simulation::CSimulatorInfo getConnectedOrSelectedSimulator() const; + + //! Is simulator avialable? + bool isSimulatorAvailable() const; + //! Show / hide model details void showAircraftModelDetails(bool show); @@ -153,7 +160,7 @@ namespace BlackGui void settingsChanged(); //! Connection status has been changed - void connectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to); + void onNetworkConnectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to); //! Identifier for data send from this component const BlackMisc::CIdentifier &mappingIdentifier() const { return m_identifier; } @@ -171,7 +178,7 @@ namespace BlackGui void onModelSetSimulatorChanged(const BlackMisc::Simulation::CSimulatorInfo &simulator); //! Plugin info has been changed - void onPluginChanged(const BlackMisc::Simulation::CSimulatorPluginInfo &pluginInfo); + void onSimulatorPluginChanged(const BlackMisc::Simulation::CSimulatorPluginInfo &pluginInfo); static constexpr int OverlayMessageMs = 5000; QScopedPointer ui; diff --git a/src/blackgui/components/simulatorselector.cpp b/src/blackgui/components/simulatorselector.cpp index 0ba9b0014..02d06a038 100644 --- a/src/blackgui/components/simulatorselector.cpp +++ b/src/blackgui/components/simulatorselector.cpp @@ -186,10 +186,11 @@ 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); + ui->rb_FSX->setEnabled(!readOnly); + ui->rb_FS9->setEnabled(!readOnly); + ui->rb_XPlane->setEnabled(!readOnly); + ui->rb_P3D->setEnabled(!readOnly); + this->setEnabled(!readOnly); } void CSimulatorSelector::radioButtonChanged(bool checked) diff --git a/src/blackgui/share/qss/stdwidget.qss b/src/blackgui/share/qss/stdwidget.qss index 731e9e25f..c9568770c 100644 --- a/src/blackgui/share/qss/stdwidget.qss +++ b/src/blackgui/share/qss/stdwidget.qss @@ -167,6 +167,10 @@ BlackGui--Components--CDBusServerAddressSelector::disabled { background: rgba(4, 105, 105, 105); } +BlackGui--Components--CSimulatorSelector::disabled { + background: rgba(4, 105, 105, 105); +} + BlackGui--Components--CDownloadComponent, BlackGui--Components--CDownloadDialog, BlackGui--Components--CRawFsdMessagesComponent,