diff --git a/src/blackgui/components/aircraftcomponent.cpp b/src/blackgui/components/aircraftcomponent.cpp index 24fe6324d..9d22fad77 100644 --- a/src/blackgui/components/aircraftcomponent.cpp +++ b/src/blackgui/components/aircraftcomponent.cpp @@ -53,7 +53,6 @@ namespace BlackGui connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::modelDataChangedDigest, this, &CAircraftComponent::onRowCountChanged); connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::requestTextMessageWidget, this, &CAircraftComponent::requestTextMessageWidget); - connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::requestHighlightInSimulator, this, &CAircraftComponent::onMenuHighlightInSimulator); connect(ui->tvp_AirportsInRange, &CSimulatedAircraftView::modelDataChangedDigest, this, &CAircraftComponent::onRowCountChanged); connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CAircraftComponent::onConnectionStatusChanged); connect(&m_updateTimer, &QTimer::timeout, this, &CAircraftComponent::update); @@ -166,14 +165,6 @@ namespace BlackGui } } - void CAircraftComponent::onMenuHighlightInSimulator(const CSimulatedAircraft &aircraft) - { - if (sGui->getIContextSimulator()) - { - sGui->getIContextSimulator()->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime()); - } - } - void CAircraftComponent::onSettingsChanged() { const CViewUpdateSettings settings = m_settings.get(); diff --git a/src/blackgui/components/aircraftcomponent.h b/src/blackgui/components/aircraftcomponent.h index e82e008ec..77d2f31e6 100644 --- a/src/blackgui/components/aircraftcomponent.h +++ b/src/blackgui/components/aircraftcomponent.h @@ -85,9 +85,6 @@ namespace BlackGui //! Connection status has been changed void onConnectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to); - //! Highlight in simulator - void onMenuHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - //! Settings have been changed void onSettingsChanged(); diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 7d219a440..3805b2570 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -93,12 +93,6 @@ namespace BlackGui connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestUpdate, this, &CMappingComponent::tokenBucketUpdate); connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestTextMessageWidget, this, &CMappingComponent::requestTextMessageWidget); - connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestEnableAircraft, this, &CMappingComponent::onMenuToggleEnableAircraft); - connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestFastPositionUpdates, this, &CMappingComponent::onMenuChangeFastPositionUpdates); - connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestHighlightInSimulator, this, &CMappingComponent::onMenuHighlightInSimulator); - connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestFollowInSimulator, this, &CMappingComponent::onMenuFollowAircraftInSimulator); - connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestSupportingGndFlag, this, &CMappingComponent::onMenuSupportGndFLag); - connect(ui->pb_SaveAircraft, &QPushButton::clicked, this, &CMappingComponent::onSaveAircraft); connect(ui->pb_ResetAircraft, &QPushButton::clicked, this, &CMappingComponent::onResetAircraft); connect(ui->pb_LoadModels, &QPushButton::clicked, this, &CMappingComponent::onModelsUpdateRequested); @@ -406,38 +400,6 @@ namespace BlackGui } } - void CMappingComponent::onMenuChangeFastPositionUpdates(const CSimulatedAircraft &aircraft) - { - if (sGui && sGui->getIContextNetwork()) - { - sGui->getIContextNetwork()->updateFastPositionEnabled(aircraft.getCallsign(), aircraft.fastPositionUpdates()); - } - } - - void CMappingComponent::onMenuFollowAircraftInSimulator(const CSimulatedAircraft &aircraft) - { - if (sGui && sGui->getIContextSimulator()) - { - sGui->getIContextSimulator()->followAircraft(aircraft.getCallsign()); - } - } - - void CMappingComponent::onMenuSupportGndFLag(const CSimulatedAircraft &aircraft) - { - if (sGui && sGui->getIContextNetwork()) - { - sGui->getIContextNetwork()->updateAircraftSupportingGndFLag(aircraft.getCallsign(), aircraft.isSupportingGndFlag()); - } - } - - void CMappingComponent::onMenuHighlightInSimulator(const CSimulatedAircraft &aircraft) - { - if (sGui && sGui->getIContextSimulator()) - { - sGui->getIContextSimulator()->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime()); - } - } - CSimulatorInfo CMappingComponent::getConnectedOrSelectedSimulator() const { if (this->isSimulatorAvailable()) { return sGui->getIContextSimulator()->isSimulatorAvailable(); } @@ -458,8 +420,8 @@ namespace BlackGui QList newSizes({0, 0}); if (show) { - newSizes[0] = total * 0.8; - newSizes[1] = total * 0.2; + newSizes[0] = qRound(total * 0.8); + newSizes[1] = qRound(total * 0.2); } else { @@ -476,14 +438,6 @@ namespace BlackGui Q_UNUSED(message); } - void CMappingComponent::onMenuToggleEnableAircraft(const CSimulatedAircraft &aircraft) - { - if (sGui->getIContextNetwork()) - { - sGui->getIContextNetwork()->updateAircraftEnabled(aircraft.getCallsign(), aircraft.isEnabled()); - } - } - void CMappingComponent::onTabWidgetChanged(int index) { Q_UNUSED(index); diff --git a/src/blackgui/components/mappingcomponent.h b/src/blackgui/components/mappingcomponent.h index 60395aa87..c483d7fc6 100644 --- a/src/blackgui/components/mappingcomponent.h +++ b/src/blackgui/components/mappingcomponent.h @@ -126,24 +126,9 @@ namespace BlackGui //! Connection status has been changed void onConnectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to); - //! Fast position updates onf/off - void onMenuChangeFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Follow aircrft in simulator - void onMenuFollowAircraftInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Support gnd.flag - void onMenuSupportGndFLag(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Enable / disable aircraft - void onMenuToggleEnableAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - //! Widget changed void onTabWidgetChanged(int index); - //! Highlight in simulator - void onMenuHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - //! Selected or connected simulator BlackMisc::Simulation::CSimulatorInfo getConnectedOrSelectedSimulator() const; diff --git a/src/blackgui/views/simulatedaircraftview.cpp b/src/blackgui/views/simulatedaircraftview.cpp index 486f047a4..a34c4961f 100644 --- a/src/blackgui/views/simulatedaircraftview.cpp +++ b/src/blackgui/views/simulatedaircraftview.cpp @@ -13,6 +13,7 @@ #include "blackgui/menus/menuaction.h" #include "blackgui/guiapplication.h" #include "blackcore/context/contextsimulator.h" +#include "blackcore/context/contextnetwork.h" #include "blackmisc/simulation/simulatedaircraftlist.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/icons.h" @@ -63,90 +64,94 @@ namespace BlackGui if (this->hasSelection()) { - CSimulatedAircraft aircraft(selectedObject()); - Q_ASSERT(!aircraft.getCallsign().isEmpty()); - menuActions.addAction(CIcons::appTextMessages16(), "Show text messages", CMenuAction::pathClientCom(), { this, &CSimulatedAircraftView::requestTextMessage }); - if (m_withMenuEnableAircraft) + const bool hasContexts = sGui && sGui->supportsContexts(); + if (hasContexts) { - menuActions.addAction(CIcons::appAircraft16(), aircraft.isEnabled() ? "Disable aircraft" : "Enabled aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleEnabledAircraft }); - } - if (m_withMenuHighlightAndFollow) - { - menuActions.addAction(CIcons::appAircraft16(), "Follow in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::reqFollowInSimulator }); - menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::reqHighlightInSimulator }); - } - if (m_withMenuEnableGndFlag) - { - menuActions.addAction(CIcons::geoPosition16(), aircraft.isSupportingGndFlag() ? "Disable gnd.flag" : "Enabled gnd.flag", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleSupportingGndFlag }); - } - if (m_withMenuFastPosition) - { - menuActions.addAction(CIcons::globe16(), aircraft.fastPositionUpdates() ? "Normal updates" : "Fast position updates", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleFastPositionUpdates }); - } - const bool any = m_withMenuEnableAircraft || m_withMenuFastPosition || m_withMenuHighlightAndFollow || m_withMenuEnableGndFlag; - if (any && (sApp && sApp->isDeveloperFlagSet())) - { - menuActions.addAction(CIcons::appSimulator16(), "Show position log.", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::showPositionLogInSimulator }); - } + CSimulatedAircraft aircraft(this->selectedObject()); + Q_ASSERT(!aircraft.getCallsign().isEmpty()); + menuActions.addAction(CIcons::appTextMessages16(), "Show text messages", CMenuAction::pathClientCom(), { this, &CSimulatedAircraftView::requestTextMessage }); + if (m_withMenuEnableAircraft) + { + menuActions.addAction(CIcons::appAircraft16(), aircraft.isEnabled() ? "Disable aircraft" : "Enabled aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleEnabledAircraft }); + } + if (m_withMenuHighlightAndFollow) + { + menuActions.addAction(CIcons::appAircraft16(), "Follow in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::requestFollowInSimulator }); + menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::requestHighlightInSimulator }); + } + if (m_withMenuEnableGndFlag) + { + menuActions.addAction(CIcons::geoPosition16(), aircraft.isSupportingGndFlag() ? "Disable gnd.flag" : "Enabled gnd.flag", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleSupportingGndFlag }); + } + if (m_withMenuFastPosition) + { + menuActions.addAction(CIcons::globe16(), aircraft.fastPositionUpdates() ? "Normal updates" : "Fast position updates", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleFastPositionUpdates }); + } + const bool any = m_withMenuEnableAircraft || m_withMenuFastPosition || m_withMenuHighlightAndFollow || m_withMenuEnableGndFlag; + if (any && (sApp && sApp->isDeveloperFlagSet())) + { + menuActions.addAction(CIcons::appSimulator16(), "Show position log.", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::showPositionLogInSimulator }); + } + } // contexts } CViewBase::customMenu(menuActions); } void CSimulatedAircraftView::requestTextMessage() { - const CSimulatedAircraft aircraft(selectedObject()); + const CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } emit this->requestTextMessageWidget(aircraft.getCallsign()); } void CSimulatedAircraftView::toggleEnabledAircraft() { - CSimulatedAircraft aircraft(selectedObject()); + CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } aircraft.setEnabled(!aircraft.isEnabled()); - emit this->requestEnableAircraft(aircraft); + this->updateAircraftEnabled(aircraft); } void CSimulatedAircraftView::toggleFastPositionUpdates() { - CSimulatedAircraft aircraft(selectedObject()); + CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } - aircraft.setFastPositionUpdates(!aircraft.fastPositionUpdates()); - emit this->requestFastPositionUpdates(aircraft); + aircraft.toggleFastPositionUpdates(); + this->enableFastPositionUpdates(aircraft); } void CSimulatedAircraftView::toggleSupportingGndFlag() { - CSimulatedAircraft aircraft(selectedObject()); + CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } aircraft.setSupportingGndFlag(!aircraft.isSupportingGndFlag()); - emit this->requestSupportingGndFlag(aircraft); + this->updateAircraftSupportingGndFLag(aircraft); } - void CSimulatedAircraftView::reqHighlightInSimulator() + void CSimulatedAircraftView::requestHighlightInSimulator() { - const CSimulatedAircraft aircraft(selectedObject()); + const CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } - emit this->requestHighlightInSimulator(aircraft); + this->highlightInSimulator(aircraft); } - void CSimulatedAircraftView::reqFollowInSimulator() + void CSimulatedAircraftView::requestFollowInSimulator() { - const CSimulatedAircraft aircraft(selectedObject()); + const CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } - emit this->requestFollowInSimulator(aircraft); + this->followAircraftInSimulator(aircraft); } void CSimulatedAircraftView::showPositionLogInSimulator() { - if (!sGui || sGui->isShuttingDown()) { return; } - if (!sGui->getIContextSimulator()) { return; } - const CSimulatedAircraft aircraft(selectedObject()); + IContextSimulator *simContext = simulatorContext(); + if (!simContext) { return; } + const CSimulatedAircraft aircraft(this->selectedObject()); if (aircraft.getCallsign().isEmpty()) { return; } const CIdentifier i(this->objectName()); const QString dotCmd(".drv pos " + aircraft.getCallsignAsString()); - sGui->getIContextSimulator()->parseCommandLine(dotCmd, i); + simContext->parseCommandLine(dotCmd, i); } void CSimulatedAircraftView::enableAllDisabledAircraft() @@ -183,9 +188,56 @@ namespace BlackGui if (!sGui || sGui->isShuttingDown()) { return; } CSimulatedAircraft enabledAircraft(sa); enabledAircraft.setEnabled(newEnabled); - emit this->requestEnableAircraft(enabledAircraft); + this->updateAircraftEnabled(enabledAircraft); }); } } + + void CSimulatedAircraftView::followAircraftInSimulator(const CSimulatedAircraft &aircraft) + { + IContextSimulator *simContext = simulatorContext(); + if (!simContext) { return; } + simContext->followAircraft(aircraft.getCallsign()); + } + + void CSimulatedAircraftView::highlightInSimulator(const CSimulatedAircraft &aircraft) + { + IContextSimulator *simContext = simulatorContext(); + if (!simContext) { return; } + simContext->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime()); + } + + void CSimulatedAircraftView::enableFastPositionUpdates(const CSimulatedAircraft &aircraft) + { + IContextNetwork *nwContext = networkContext(); + if (!nwContext) { return; } + nwContext->updateFastPositionEnabled(aircraft.getCallsign(), aircraft.fastPositionUpdates()); + } + + void CSimulatedAircraftView::updateAircraftEnabled(const CSimulatedAircraft &aircraft) + { + IContextNetwork *nwContext = networkContext(); + if (!nwContext) { return; } + nwContext->updateAircraftEnabled(aircraft.getCallsign(), aircraft.isEnabled()); + } + + void CSimulatedAircraftView::updateAircraftSupportingGndFLag(const CSimulatedAircraft &aircraft) + { + IContextNetwork *nwContext = networkContext(); + if (!nwContext) { return; } + nwContext->updateAircraftSupportingGndFLag(aircraft.getCallsign(), aircraft.isSupportingGndFlag()); + } + + IContextSimulator *CSimulatedAircraftView::simulatorContext() + { + if (!sGui || sGui->isShuttingDown() || !sGui->getISimulator()) { return nullptr; } + return sGui->getIContextSimulator(); + } + + IContextNetwork *CSimulatedAircraftView::networkContext() + { + if (!sGui || sGui->isShuttingDown() || !sGui->getIContextNetwork()) { return nullptr; } + return sGui->getIContextNetwork(); + } } // ns } // ns diff --git a/src/blackgui/views/simulatedaircraftview.h b/src/blackgui/views/simulatedaircraftview.h index 87286f523..1f8d334dd 100644 --- a/src/blackgui/views/simulatedaircraftview.h +++ b/src/blackgui/views/simulatedaircraftview.h @@ -12,21 +12,26 @@ #ifndef BLACKGUI_VIEWS_SIMULATEDAIRCRAFTVIEW_H #define BLACKGUI_VIEWS_SIMULATEDAIRCRAFTVIEW_H -#include "blackgui/blackguiexport.h" #include "blackgui/views/viewcallsignobjects.h" #include "blackgui/models/simulatedaircraftlistmodel.h" +#include "blackgui/blackguiexport.h" #include "blackmisc/simulation/simulatedaircraftlist.h" - #include -class QWidget; - namespace BlackMisc { namespace Aviation { class CCallsign; } namespace Simulation { class CSimulatedAircraft; } } +namespace BlackCore +{ + namespace Context + { + class IContextSimulator; + class IContextNetwork; + } +} namespace BlackGui { namespace Menus { class CMenuActions; } @@ -52,21 +57,6 @@ namespace BlackGui //! Request a text message void requestTextMessageWidget(const BlackMisc::Aviation::CCallsign &callsign); - //! Request enable / disable fast position updates, \sa CSimulatedAircraft::fastPositionUpdates - void requestFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Request to enable / disable aircraft, \sa CSimulatedAircraft::isEnabled - void requestEnableAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Request to enable / disable gnd.flag, \sa CSimulatedAircraft::isSupportingGndFlag - void requestSupportingGndFlag(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Highlight given aircraft in simulator - void requestHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Highlight given aircraft in simulator - void requestFollowInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - protected: //! \copydoc CViewBase::customMenu virtual void customMenu(Menus::CMenuActions &menuActions) override; @@ -85,13 +75,10 @@ namespace BlackGui void toggleSupportingGndFlag(); //! Highlight aircraft in simulator - void reqHighlightInSimulator(); + void requestHighlightInSimulator(); //! Follow in simulator - void reqFollowInSimulator(); - - //! Enable gnd. flag capability for server - void reqEnableGndFlagForServer(); + void requestFollowInSimulator(); //! Show position log for selected aircraft void showPositionLogInSimulator(); @@ -108,10 +95,31 @@ namespace BlackGui //! Enable or disable aircraft void enableOrDisableAircraft(const BlackMisc::Simulation::CSimulatedAircraftList &aircraft, bool newEnabled); + //! Follow aircraft in simulator + void followAircraftInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Highlight in simulator + void highlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Enable fast position updates + void enableFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Update if aircraft is enabled + void updateAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Update the gnd.flag support + void updateAircraftSupportingGndFLag(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Simulator context + static BlackCore::Context::IContextSimulator *simulatorContext(); + + //! Network context + static BlackCore::Context::IContextNetwork *networkContext(); + bool m_withMenuHighlightAndFollow = true; - bool m_withMenuEnableAircraft = true; - bool m_withMenuEnableGndFlag = true; - bool m_withMenuFastPosition = true; + bool m_withMenuEnableAircraft = true; + bool m_withMenuEnableGndFlag = true; + bool m_withMenuFastPosition = true; }; } // ns } // ns diff --git a/src/blackmisc/simulation/simulatedaircraft.cpp b/src/blackmisc/simulation/simulatedaircraft.cpp index c9b9b1c93..3cf8b7d3e 100644 --- a/src/blackmisc/simulation/simulatedaircraft.cpp +++ b/src/blackmisc/simulation/simulatedaircraft.cpp @@ -124,6 +124,11 @@ namespace BlackMisc return true; } + bool CSimulatedAircraft::toggleFastPositionUpdates() + { + return this->setFastPositionUpdates(!this->fastPositionUpdates()); + } + bool CSimulatedAircraft::setRendered(bool rendered) { if (m_rendered == rendered) { return false; }