/** * @RDE_HEADER@ * Dialog to edit drone Simulation * $Id$ * $HeadURL$ * $Author$ * Created by Steve Kemayou, ESZS, 2025-04-08 */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include "logger.h" #include namespace Ui { class MissionPlanEdit; } namespace CentralEffectSimulation { struct WayPointParam { double lon; double lat; double z = 0.0; int idleTime = 0; double speed = 0.0; int chargeTypeId = -1; QString identifier; }; class MissionPlanEdit : public LtsWidgets::LtsDialog , protected ParticipantManagement::Interface::Ftc::ModifyMissionPlanReplyHandler , protected ParticipantManagement::Interface::Ftc::SetMissionActionFulfilledReplyHandler { Q_OBJECT public: enum SegmentColumns { Name, Position, Altitude, IdleTime, // [sec] Charges }; explicit MissionPlanEdit(QWidget *parent = nullptr); ~MissionPlanEdit(); bool init(const int missionPlanId, LtsSession::LtsSessionDataDds *session, bool asCopy = false); void retranslate() override; void onModifyMissionPlanReply(const Core::FunctionReplyObject &replyObject) override; void onSetMissionActionFulfilledReply(const Core::FunctionReplyObject &replyObject) override; QStringList tableColLabelList() const; void setAllUiElementsEnabled(bool enable); ParticipantManagement::MissionPlan missionPlan() const; bool isUiEnabled() const; signals: void editUasDialogClosed(const int participantId); private: void enaDisa(); bool apply() override; void clearCoordinates(); void clearContent(); void enableUiElements(bool enable); bool hasValidEffectStart(LtsWidgets::LtsDateTimeEdit *dte) const; void initTableHeader(); void insertPos(const WayPointParam &wpp); void showPreview(bool show); const std::vector itemsRequestContent(); void setUASCharges(); void setData(int mpId); void fillParties(); void fillParticipants(); void gatherUASParticipants(int partyId, QVector &participant); void setReady(bool isReady); private slots: void onParticipantTimerTimedout(); void onParticipantChanged(const ParticipantManagement::Participant &data, DataModification modType); void onPartyChanged(); void onGetPolyline(); void onPolylineData(const QPolygonF &polyline); // callback for onGetPolyline() void onFocus(); void onApplyNow(); void onUasChanged(const ParticipantManagement::UAS &uas); void onDynamicParticipantDataChanged(const ParticipantManagement::DynamicParticipantData &data, DataModification modType); void onMissionPlanChanged(const ParticipantManagement::MissionPlan &data, const DataModification modType); private: std::shared_ptr m_flmGui; std::shared_ptr m_pdmDtc; std::shared_ptr m_ppmDtc; std::shared_ptr m_ppmFtc; LtsSession::LtsSessionDataDds *m_session; ParticipantManagement::Participant m_participantData; ParticipantManagement::MissionPlan m_missionPlan; int m_missionPlanId; bool m_uiEnabled; QSet m_usedUasSet; std::shared_ptr m_sitMapGuiIfc; std::shared_ptr m_ppmCbxGui; LtsUtils::RequestHelper *m_requestHelper; QMap m_uasCharges; QTimer *m_participantTimer; // used when participant were updated QPolygonF m_polyline; ParticipantManagement::Participant m_participant; bool m_participantReady { false }; LOGGER_T m_logger; Ui::MissionPlanEdit *m_ui; }; }