From 0d66a995cea2d0039be94d88156b9a0832bc36a7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 15 Apr 2020 05:33:20 +0200 Subject: [PATCH] Context menus to temp.disable parts (for single aircraft) and "0" zero pitch --- src/blackgui/views/simulatedaircraftview.cpp | 71 +++++++++++++++++++- src/blackgui/views/simulatedaircraftview.h | 21 ++++++ 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/src/blackgui/views/simulatedaircraftview.cpp b/src/blackgui/views/simulatedaircraftview.cpp index 8ba2d8388..2e9c7d9d7 100644 --- a/src/blackgui/views/simulatedaircraftview.cpp +++ b/src/blackgui/views/simulatedaircraftview.cpp @@ -24,6 +24,7 @@ using namespace BlackConfig; using namespace BlackMisc; +using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Aviation; using namespace BlackMisc::Simulation; using namespace BlackCore::Context; @@ -112,9 +113,18 @@ namespace BlackGui } if (m_withMenuHighlightAndFollow) { - menuActions.addAction(CIcons::appAircraft16(), "Follow in simulator", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestFollowInSimulator }); + menuActions.addAction(CIcons::appAircraft16(), "Follow in simulator", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestFollowInSimulator }); if (!menuActions.isEmpty()) { menuActions.addSeparator(CMenuAction::pathClientSimulationDisplay()); } - menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestHighlightInSimulator }); + if (aircraft.isPartsSynchronized()) + { + menuActions.addAction(CIcons::appAircraft16(), "Temp.disable parts", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestDisableParts }); + menuActions.addAction(CIcons::appAircraft16(), "Re/enabled parts", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestEnableParts }); + } + menuActions.addAction(CIcons::appAircraft16(), "Zero 0 pitch on ground", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::request0PitchOnGround }); + menuActions.addAction(CIcons::appAircraft16(), "Remove pitch manipulation", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestNullPitchOnGround }); + + if (!menuActions.isEmpty()) { menuActions.addSeparator(CMenuAction::pathClientSimulationDisplay()); } + menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::requestHighlightInSimulator }); } if (m_withMenuEnableGndFlag) { @@ -180,6 +190,34 @@ namespace BlackGui this->followAircraftInSimulator(aircraft); } + void CSimulatedAircraftView::requestEnableParts() + { + const CSimulatedAircraft aircraft(this->selectedObject()); + if (aircraft.getCallsign().isEmpty()) { return; } + this->enableParts(aircraft, true); + } + + void CSimulatedAircraftView::requestDisableParts() + { + const CSimulatedAircraft aircraft(this->selectedObject()); + if (aircraft.getCallsign().isEmpty()) { return; } + this->enableParts(aircraft, false); + } + + void CSimulatedAircraftView::request0PitchOnGround() + { + const CSimulatedAircraft aircraft(this->selectedObject()); + if (aircraft.getCallsign().isEmpty()) { return; } + this->setPitchOnGround(aircraft, CAngle(0, CAngleUnit::deg())); + } + + void CSimulatedAircraftView::requestNullPitchOnGround() + { + const CSimulatedAircraft aircraft(this->selectedObject()); + if (aircraft.getCallsign().isEmpty()) { return; } + this->setPitchOnGround(aircraft, CAngle::null()); + } + void CSimulatedAircraftView::requestTempDisable() { if (!m_menus.testFlag(MenuDisableModelsTemp)) { return; } @@ -247,6 +285,35 @@ namespace BlackGui simContext->followAircraft(aircraft.getCallsign()); } + void CSimulatedAircraftView::enableParts(const CSimulatedAircraft &aircraft, bool enabled) + { + IContextSimulator *simContext = simulatorContext(); + if (!simContext || !aircraft.hasCallsign()) { return; } + CInterpolationAndRenderingSetupPerCallsign setup = simContext->getInterpolationAndRenderingSetupPerCallsignOrDefault(aircraft.getCallsign()); + if (setup.isAircraftPartsEnabled() == enabled) { return; } + setup.setEnabledAircraftParts(enabled); + setup.setCallsign(aircraft.getCallsign()); + simContext->setInterpolationAndRenderingSetupsPerCallsign(setup, true); + } + + void CSimulatedAircraftView::setPitchOnGround(const CSimulatedAircraft &aircraft, const PhysicalQuantities::CAngle &pitch) + { + IContextSimulator *simContext = simulatorContext(); + if (!simContext || !aircraft.hasCallsign()) { return; } + CInterpolationAndRenderingSetupPerCallsign setup = simContext->getInterpolationAndRenderingSetupPerCallsignOrDefault(aircraft.getCallsign()); + if (setup.getPitchOnGround() == pitch) { return; } + setup.setPitchOnGround(pitch); + setup.setCallsign(aircraft.getCallsign()); + simContext->setInterpolationAndRenderingSetupsPerCallsign(setup, true); + } + + bool CSimulatedAircraftView::isSupportingAircraftParts(const CCallsign &cs) const + { + const IContextNetwork *netContext = networkContext(); + if (!netContext) { return false; } + return netContext->isRemoteAircraftSupportingParts(cs); + } + void CSimulatedAircraftView::highlightInSimulator(const CSimulatedAircraft &aircraft) { IContextSimulator *simContext = simulatorContext(); diff --git a/src/blackgui/views/simulatedaircraftview.h b/src/blackgui/views/simulatedaircraftview.h index 6844ebe20..f80ac5f63 100644 --- a/src/blackgui/views/simulatedaircraftview.h +++ b/src/blackgui/views/simulatedaircraftview.h @@ -15,6 +15,8 @@ #include "blackgui/models/simulatedaircraftlistmodel.h" #include "blackgui/blackguiexport.h" #include "blackmisc/simulation/simulatedaircraftlist.h" +#include "blackmisc/pq/angle.h" + #include namespace BlackMisc @@ -87,6 +89,16 @@ namespace BlackGui //! Follow in simulator void requestFollowInSimulator(); + //! Enable/disable parts @{ + void requestEnableParts(); + void requestDisableParts(); + //! @} + + //! Enable/disable parts @{ + void request0PitchOnGround(); + void requestNullPitchOnGround(); + //! @} + //! Request temp disabling of matching models void requestTempDisable(); @@ -108,6 +120,15 @@ namespace BlackGui //! Follow aircraft in simulator void followAircraftInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Enable aircraft parts + void enableParts(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool enabled); + + //! Set pitch + void setPitchOnGround(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::PhysicalQuantities::CAngle &pitch); + + //! Aircraft supporting parts? + bool isSupportingAircraftParts(const BlackMisc::Aviation::CCallsign &cs) const; + //! Highlight in simulator void highlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);