/** * Exercise object * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include "aes_db.h" #include "object_base.h" #include namespace AreaEffectSimulation { class ObjectFunctionalArea final : public ObjectBaseTmpl { Q_OBJECT public: explicit ObjectFunctionalArea(MainHandler *mainHandler, QObject *parent = nullptr); ~ObjectFunctionalArea(); Core::FunctionReplyObject createObject(const Database::AesFunctionalArea &data); Core::FunctionReplyObject updateObject(const Database::AesFunctionalArea &data) override; Core::FunctionReplyObject removeObject() override; /*! * \brief removeObjectFromDb * \details Removes the object from db, Used if the object is created but there are too much objects (amount border) * \author Niklas Schmidt * \return bool if the deletion was working */ bool removeObjectFromDb(); std::vector form() const override { return m_aiv.form(); } QPolygonF generateForm() override; AesType aesType() const override { return AesType::AtFunctionalArea; } bool isCentral() const override { if (m_data.supplyMode == AesOperatingMode_def::OmWaitingTime) return true; return m_data.isCentral; } void removeTopics(); private: QPointF geographic2Utm(const Core::GeoPosition2D &geoPos, int *zone = nullptr); void updateTimer(); private slots: /** * Handle the signals from 'ParticipantManagement' */ void onParticipantPositionChanged(const ParticipantManagement::ParticipantPosition &data, DataModification modType); void myTimerSlot(); protected: void setEffectState(AesEffectState newState) override; void publishAiv(); protected Q_SLOTS: void onPublishData() override; private: AesItemView m_aiv; Database::AesFunctionalArea m_dataAesFunctionalArea; QTimer *m_timer = nullptr; bool m_activePosAvailable = false; Core::GeoPosition m_activatePos; }; }