/** * @RDE_HEADER@ * AreaEffectSimulation - Explosions Edit Dialog * $Id$ * $HeadURL$ * $Author$ * Created by Steve Tougnia, SLTE, 2023-09-05 */ #pragma once #include #include #include #include #include #include #include #include namespace Ui { class ExplosionsEditAdler; } class QSpinBox; namespace AdvancedSymbology { class SymbolResultWatcherLabel; class ForeignDataInterface; } // namespace AdvancedSymbology namespace AreaEffectSimulation { class ExplosionsEditAdler final : public BaseEdit , protected AreaEffectSimulation::Interface::Ftc::EffectClusterModifyReplyHandler , protected AreaEffectSimulation::Interface::Ftc::EffectClusterModifyActorReplyHandler , protected AreaEffectSimulation::Interface::Ftc::SetAesItemEffectorStateReplyHandler , protected AreaEffectSimulation::Interface::Ftc::AcknowledgeExternalAesItemReplyHandler { Q_OBJECT public: using BaseClass = BaseEdit; enum class FlighDurationOrPeakHeight { FDPH_flightDuration, FDPH_peakHeight }; QString toString(FlighDurationOrPeakHeight val); explicit ExplosionsEditAdler(const QString &menuGroup, QWidget *parent = nullptr); ~ExplosionsEditAdler(); bool init(int aesItemId, bool copy, LtsSession::LtsSession *session); void setEffectClusterData(const EffectCluster &ecData); void setEffector(int participantId, const AreaEffectSimulation::AesEffectorState &effectorState); void setEffectClusterDataFromJson(const std::string &properties); void setOWUWFromTrajectory(const std::vector &vecGeometry); QString dialogIdentifier() const override; void onEffectClusterModifyReply(const Core::FunctionReplyObject &replyObject) override final { onAesItemModifyReply(replyObject); } void onEffectClusterModifyActorReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onAcknowledgeExternalAesItemReply(const Core::FunctionReplyObject &replyObject) override final; void onSetAesItemEffectorStateReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onEffectClusterChanged(const AreaEffectSimulation::EffectCluster &ecData, DataModification modType); QPointF centerOfFiringUnitGeo(int particpantUnitId); void showCenterOfFiringUnit(int particpantUnitId); void showPreviewObject() override; private Q_SLOTS: bool isDataSufficiant(); bool apply() override final; void onPbStateChangeClicked(); void onEffectorChanged(const AreaEffectSimulation::Effector &data, DataModification modType); private: friend class doCalculationsAdlerStandAloneExitGuard; void retranslate() override; void enableUiElements(); void enableUiElements(bool enable) override; void setPbStateChangeName(); private: bool isOnlyNameModifiable() const override; struct Charges { Charges() {} explicit Charges(const ProjectDataManagement::ChargeType &type) : chargeType(type) {} ProjectDataManagement::ChargeType chargeType; QMap available; // PartyId }; QVector m_gearClassFilter; std::shared_ptr m_pdmDtc; std::shared_ptr m_ppmDtc; std::shared_ptr m_asbIfc; std::shared_ptr m_esmActorCbx; std::shared_ptr m_pdmCbx; EffectCluster m_effectClusterData; QPointF m_coord; // doCalculationsAdler will update following: struct temporaryData { qint64 m_estimatedFlightDurationMsec{-1}; qint64 m_distanceFiringToTarget{-1}; Core::GeoPosition m_idealTapAbsoluteGeoOut; QString m_remainingTimeStr; QString m_annotationStringFiring4Dlg; QStringList m_annotationString4Dlg; void reset() { m_estimatedFlightDurationMsec = -1; m_distanceFiringToTarget = -1; m_remainingTimeStr.clear(); m_annotationStringFiring4Dlg.clear(); m_annotationString4Dlg.clear(); } } m_temporaryData; void resetTempAndAnnotationStr(); void addAnnotationStr(const QString &newAnno); void updateAnnotationStr(); QMap m_chargeTypeMap; // ChargeTypeId QPointF m_previewCircleCenter; double m_previewCircleRadius; QPolygonF m_previewPolygon; QButtonGroup *m_geometrieButtonGroup; AreaEffectSimulation::AesExplosionGeometry m_currentGeometry; // safe_enum is initialized by itself Ui::ExplosionsEditAdler *m_ui; bool m_initDone{false}; Core::GeoPosition m_coordGeo; int m_maxColumns{4}; int m_effectorNumber{0}; }; } // namespace AreaEffectSimulation