diff --git a/src/plugins/simulator/emulated/simulatoremulated.cpp b/src/plugins/simulator/emulated/simulatoremulated.cpp index 1ee7f1be4..dcc247935 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.cpp +++ b/src/plugins/simulator/emulated/simulatoremulated.cpp @@ -31,15 +31,17 @@ namespace BlackSimPlugin namespace Emulated { CSimulatorEmulated::CSimulatorEmulated(const CSimulatorPluginInfo &info, - IOwnAircraftProvider *ownAircraftProvider, - IRemoteAircraftProvider *remoteAircraftProvider, - IWeatherGridProvider *weatherGridProvider, - QObject *parent) : + IOwnAircraftProvider *ownAircraftProvider, + IRemoteAircraftProvider *remoteAircraftProvider, + IWeatherGridProvider *weatherGridProvider, + QObject *parent) : CSimulatorCommon(info, ownAircraftProvider, remoteAircraftProvider, weatherGridProvider, parent) { Q_ASSERT_X(sApp && sApp->getIContextSimulator(), Q_FUNC_INFO, "Need context"); CSimulatorEmulated::registerHelp(); + m_myAircraft = this->getOwnAircraft(); // sync with provider + m_monitorWidget.reset(new CSimulatorEmulatedMonitorDialog(this, sGui->mainApplicationWindow())); connect(qApp, &QApplication::aboutToQuit, this, &CSimulatorEmulated::closeMonitor); this->onSettingsChanged(); @@ -110,17 +112,32 @@ namespace BlackSimPlugin bool CSimulatorEmulated::updateOwnSimulatorCockpit(const CSimulatedAircraft &aircraft, const CIdentifier &originator) { if (canLog()) m_monitorWidget->appendFunctionCall(Q_FUNC_INFO, aircraft.toQString(), originator.toQString()); + if (originator == identifier()) { return false; } // myself + m_myAircraft.setCockpit(aircraft); + emit this->internalAircraftChanged(); + return true; + } + + bool CSimulatorEmulated::updateOwnSimulatorSelcal(const CSelcal &selcal, const CIdentifier &originator) + { + if (canLog()) m_monitorWidget->appendFunctionCall(Q_FUNC_INFO, selcal.toQString(), originator.toQString()); + if (originator == identifier()) { return false; } // myself + if (m_myAircraft.getSelcal() == selcal) { return false; } + m_myAircraft.setSelcal(selcal); + emit this->internalAircraftChanged(); return true; } void CSimulatorEmulated::displayStatusMessage(const CStatusMessage &message) const { if (canLog()) m_monitorWidget->appendFunctionCall(Q_FUNC_INFO, message.toQString()); + m_monitorWidget->displayStatusMessage(message); } void CSimulatorEmulated::displayTextMessage(const CTextMessage &message) const { if (canLog()) m_monitorWidget->appendFunctionCall(Q_FUNC_INFO, message.toQString()); + m_monitorWidget->displayTextMessage(message); } bool CSimulatorEmulated::setTimeSynchronization(bool enable, const CTime &offset) @@ -177,6 +194,40 @@ namespace BlackSimPlugin this->emitSimulatorCombinedStatus(); } + bool CSimulatorEmulated::changeInternalCom(const CSimulatedAircraft &aircraft) + { + bool changed = false; + if (aircraft.getCom1System() != m_myAircraft.getCom1System()) { changed = true; } + if (aircraft.getCom2System() != m_myAircraft.getCom2System()) { changed = true; } + if (aircraft.getTransponder() != m_myAircraft.getTransponder()) { changed = true; } + if (aircraft.getSelcal() != m_myAircraft.getSelcal()) { changed = true; } + + if (!changed) { return false; } + m_myAircraft.setCockpit(aircraft); + return this->updateCockpit(aircraft, this->identifier()); + } + + bool CSimulatorEmulated::changeInternalSelcal(const CSelcal &selcal) + { + if (m_myAircraft.getSelcal() == selcal) { return false; } + m_myAircraft.setSelcal(selcal); + return this->updateSelcal(selcal, identifier()); + } + + bool CSimulatorEmulated::changeInternalSituation(const CAircraftSituation &situation) + { + if (m_myAircraft.getSituation() == situation) { return false; } + m_myAircraft.setSituation(situation); + return this->updateOwnSituation(situation); + } + + bool CSimulatorEmulated::changeInternalParts(const CAircraftParts &parts) + { + if (m_myAircraft.getParts() == parts) { return false; } + m_myAircraft.setParts(parts); + return this->updateOwnParts(parts); + } + bool CSimulatorEmulated::isConnected() const { if (canLog()) m_monitorWidget->appendFunctionCall(Q_FUNC_INFO); @@ -247,20 +298,6 @@ namespace BlackSimPlugin } } - void CSimulatorEmulated::setOwnAircraftPosition(const QString &wgsLatitude, const QString &wgsLongitude, const CAltitude &altitude) - { - const CCoordinateGeodetic coordinate( - CLatitude::fromWgs84(wgsLatitude), - CLongitude::fromWgs84(wgsLongitude), - CAltitude(0, CLengthUnit::m())); - - CAircraftSituation s = this->getOwnAircraftSituation(); - s.setPosition(coordinate); - s.setAltitude(altitude); - - this->updateOwnSituation(s); - } - void CSimulatorEmulated::onSettingsChanged() { const CSwiftPluginSettings settings(m_settings.get()); diff --git a/src/plugins/simulator/emulated/simulatoremulated.h b/src/plugins/simulator/emulated/simulatoremulated.h index 1017dff81..767779ea5 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.h +++ b/src/plugins/simulator/emulated/simulatoremulated.h @@ -49,6 +49,7 @@ namespace BlackSimPlugin virtual bool changeRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) override; virtual bool changeRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) override; virtual bool updateOwnSimulatorCockpit(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator) override; + virtual bool updateOwnSimulatorSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) override; virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override; virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override; @@ -80,6 +81,30 @@ namespace BlackSimPlugin //! UI setter void setCombinedStatus(bool connected, bool simulating, bool paused); + //! Internal own aircraft + //! \remark normally used by corresponding BlackSimPlugin::Emulated::CSimulatorEmulatedMonitorDialog + const BlackMisc::Simulation::CSimulatedAircraft &getInternalOwnAircraft() const { return m_myAircraft; } + + //! Simulator internal change of COM values + //! \remark normally used by corresponding BlackSimPlugin::Emulated::CSimulatorEmulatedMonitorDialog + bool changeInternalCom(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Simulator internal change of SELCAL + //! \remark normally used by corresponding BlackSimPlugin::Emulated::CSimulatorEmulatedMonitorDialog + bool changeInternalSelcal(const BlackMisc::Aviation::CSelcal &selcal); + + //! Simulator internal change of situation + //! \remark normally used by corresponding BlackSimPlugin::Emulated::CSimulatorEmulatedMonitorDialog + bool changeInternalSituation(const BlackMisc::Aviation::CAircraftSituation &situation); + + //! Simulator internal change of parts + //! \remark normally used by corresponding BlackSimPlugin::Emulated::CSimulatorEmulatedMonitorDialog + bool changeInternalParts(const BlackMisc::Aviation::CAircraftParts &parts); + + signals: + //! Internal aircraft changed + void internalAircraftChanged(); + protected: virtual bool isConnected() const override; virtual bool isPaused() const override; @@ -100,9 +125,6 @@ namespace BlackSimPlugin //! Close window void closeMonitor(); - //! Set own aircraft position - void setOwnAircraftPosition(const QString &wgsLatitude, const QString &wgsLongitude, const BlackMisc::Aviation::CAltitude &altitude); - //! Settings changed void onSettingsChanged(); @@ -115,7 +137,8 @@ namespace BlackSimPlugin bool m_simulating = true; bool m_timeSyncronized = false; BlackMisc::PhysicalQuantities::CTime m_offsetTime; - BlackMisc::Simulation::CSimulatedAircraftList m_renderedAircraft; + BlackMisc::Simulation::CSimulatedAircraft m_myAircraft; //!< represents own aircraft of simulator + BlackMisc::Simulation::CSimulatedAircraftList m_renderedAircraft; //!< represents other aircraft of simulator QScopedPointer m_monitorWidget; //!< parent will be main window, so we need to destroy widget when destroyed BlackMisc::CSettingReadOnly m_settings { this, &CSimulatorEmulated::onSettingsChanged }; diff --git a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp index 45e66ab00..5e3b0366c 100644 --- a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp +++ b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp @@ -13,6 +13,7 @@ using namespace BlackMisc; using namespace BlackMisc::Aviation; +using namespace BlackMisc::Simulation; using namespace BlackGui::Editors; namespace BlackSimPlugin @@ -32,19 +33,24 @@ namespace BlackSimPlugin Q_ASSERT_X(simulator, Q_FUNC_INFO, "Need simulator"); m_simulator = simulator; + connect(m_simulator, &CSimulatorEmulated::internalAircraftChanged, this, &CSimulatorEmulatedMonitorDialog::setInteralAircraftUiValues, Qt::QueuedConnection); + ui->setupUi(this); ui->tw_SwiftMonitorDialog->setCurrentIndex(0); + ui->comp_LogComponent->setMaxLogMessages(500); this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(ui->cb_Connected, &QCheckBox::released, this, &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged); connect(ui->cb_Paused, &QCheckBox::released, this, &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged); connect(ui->cb_Simulating, &QCheckBox::released, this, &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged); - connect(ui->editor_Situation, &CSituationForm::changeAircraftSituation, this, &CSimulatorEmulatedMonitorDialog::changeSituation); - connect(ui->editor_AircraftParts, &CAircraftPartsForm::changeAircraftParts, this, &CSimulatorEmulatedMonitorDialog::changeParts); + connect(ui->editor_Situation, &CSituationForm::changeAircraftSituation, this, &CSimulatorEmulatedMonitorDialog::changeSituationFromUi); + connect(ui->editor_AircraftParts, &CAircraftPartsForm::changeAircraftParts, this, &CSimulatorEmulatedMonitorDialog::changePartsFromUi); + connect(ui->editor_Com, &CCockpitComForm::changedCockpitValues, this, &CSimulatorEmulatedMonitorDialog::changeComFromUi); + connect(ui->editor_Com, &CCockpitComForm::changedSelcal, this, &CSimulatorEmulatedMonitorDialog::changeSelcalFromUi); this->setSimulatorUiValues(); - ui->editor_Situation->setSituation(m_simulator->getOwnAircraftSituation()); + this->setInteralAircraftUiValues(); } CSimulatorEmulatedMonitorDialog::~CSimulatorEmulatedMonitorDialog() @@ -86,6 +92,16 @@ namespace BlackSimPlugin this->appendStatusMessageToList(msg); } + void CSimulatorEmulatedMonitorDialog::displayStatusMessage(const CStatusMessage &message) + { + ui->pte_StatusMessages->setPlainText(message.toQString(true)); + } + + void CSimulatorEmulatedMonitorDialog::displayTextMessage(const Network::CTextMessage &message) + { + ui->pte_TextMessages->setPlainText(message.toQString(true)); + } + void CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged() { m_simulator->setCombinedStatus( @@ -95,18 +111,30 @@ namespace BlackSimPlugin ); } - void CSimulatorEmulatedMonitorDialog::changeSituation() + void CSimulatorEmulatedMonitorDialog::changeComFromUi(const CSimulatedAircraft &aircraft) + { + if (!m_simulator) { return; } + m_simulator->changeInternalCom(aircraft); + } + + void CSimulatorEmulatedMonitorDialog::changeSelcalFromUi(const CSelcal &selcal) + { + if (!m_simulator) { return; } + m_simulator->changeInternalSelcal(selcal); + } + + void CSimulatorEmulatedMonitorDialog::changeSituationFromUi() { if (!m_simulator) { return; } const CAircraftSituation s(ui->editor_Situation->getSituation()); - m_simulator->updateOwnSituation(s); + m_simulator->changeInternalSituation(s); } - void CSimulatorEmulatedMonitorDialog::changeParts() + void CSimulatorEmulatedMonitorDialog::changePartsFromUi() { if (!m_simulator) { return; } const CAircraftParts p(ui->editor_AircraftParts->getAircraftPartsFromGui()); - m_simulator->updateOwnParts(p); + m_simulator->changeInternalParts(p); } void CSimulatorEmulatedMonitorDialog::setSimulatorUiValues() @@ -118,5 +146,13 @@ namespace BlackSimPlugin ui->le_Simulator->setText(m_simulator->getSimulatorInfo().toQString(true)); ui->le_SimulatorPlugin->setText(m_simulator->getSimulatorPluginInfo().toQString(true)); } + + void CSimulatorEmulatedMonitorDialog::setInteralAircraftUiValues() + { + const CSimulatedAircraft internal(m_simulator->getInternalOwnAircraft()); + ui->editor_Situation->setSituation(internal.getSituation()); + ui->editor_AircraftParts->setAircraftParts(internal.getParts()); + ui->editor_Com->setValue(internal); + } } // ns } // ns diff --git a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.h b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.h index 16f4b28e9..7a952f57b 100644 --- a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.h +++ b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.h @@ -14,6 +14,7 @@ #include #include +#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/statusmessagelist.h" #include "blackmisc/logcategorylist.h" @@ -50,19 +51,36 @@ namespace BlackSimPlugin //! Append a function call as status message void appendFunctionCall(const QString &function, const QString &p1 = {}, const QString &p2 = {}, const QString &p3 = {}); + //! Display status message + void displayStatusMessage(const BlackMisc::CStatusMessage &message); + + //! Display text message + void displayTextMessage(const BlackMisc::Network::CTextMessage &message); + private: + static int constexpr MaxLogMessages = 500; //!< desired log message number + //! UI values changed void onSimulatorValuesChanged(); + //! Cockpit COM values changed + void changeComFromUi(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! SELCAL values changed + void changeSelcalFromUi(const BlackMisc::Aviation::CSelcal &selcal); + //! Update aircraft situation - void changeSituation(); + void changeSituationFromUi(); //! Change the aircraft parts - void changeParts(); + void changePartsFromUi(); //! UI values void setSimulatorUiValues(); + //! Set values from internal aircraft + void setInteralAircraftUiValues(); + QScopedPointer ui; CSimulatorEmulated *m_simulator = nullptr; }; diff --git a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.ui b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.ui index 60e8c6b8a..69b798632 100644 --- a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.ui +++ b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.ui @@ -23,7 +23,19 @@ Situation - + + + 6 + + + 6 + + + 6 + + + 6 + @@ -36,12 +48,44 @@ - + - Parts + COM and Parts - - + + + + + COM + + + + + + + 0 + 75 + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + Parts @@ -66,7 +110,7 @@ Simulator - + @@ -146,6 +190,49 @@ + + + + Messages + + + + + + Received status messages + + + true + + + + + + + Received text messages + + + true + + + + + + + Text messages + + + + + + + Status messages + + + + + + @@ -238,6 +325,12 @@
blackgui/editors/aircraftpartsform.h
1 + + BlackGui::Editors::CCockpitComForm + QFrame +
blackgui/editors/cockpitcomform.h
+ 1 +