/** * @RDE_HEADER@ * base class for received events * $Id$ * $HeadURL$ * $Author$ * Created by Mike Wille, SLSE, 2014-10-01 */ #pragma once #include #include #include #include #include class QPainter; class QRect; namespace LtsSession { class LtsSession; } namespace LtsTimelineClassic { /** * base container class for received events (event sets and markers) * to avoid a total rewrite, Event class still exists and the getters access the EventSet class */ class LTSTIMELINECLASSIC_EXPORT Event // contains informations about an event, which is visualisized in the second column of the treeview, and can be painted on something { public: enum ButtonType { ActiveEvent, EventBlock, }; typedef void (*EventPaintFunc)(QPainter *, const QRect &); static void drawCustomEventGraphicTriangle(QPainter *painter, const QRect &rect); static void drawCustomEventGraphicInvertTriangle(QPainter *painter, const QRect &rect); static void drawCustomEventGraphicEllipse(QPainter *painter, const QRect &rect); static void drawCustomEventGraphicRect(QPainter *painter, const QRect &rect); static void drawCustomEventGraphicRoundedRect(QPainter *painter, const QRect &rect); static void drawMultipleEventGraphic(QPainter *painter, const QRect &rect); Event() = default; Event(int uniqueId, int typeId, qint64 startTime, qint64 endTime, int playerId, int partyId, int equipmentId, const QStringList &path, const EventPaintFunc &paintFunc, const QColor &paintColor, const QJsonObject &detailData, int subEventId = -1, const LtsUtils::QPoint3D &pos = LtsUtils::QPoint3D(), LtsSession::LtsSession *session = nullptr); /** * @brief returns event actuator * @return actuator string list */ QStringList getActuator() const { return m_path; } int typeId() const { return m_typeId; } int uniqueId() const { return m_uniqueId; } int getSubEventID() const; QColor getColor() const { return m_eventColor; } EventPaintFunc getPaintFunc() const { return m_paintFunc; } /** * @brief returns event start time as qint64 * @return start time as msecssinceepoch */ qint64 startTime() const { return m_startTime; } qint64 endTime() const { return m_endTime; } /** * @brief returns a manipulated version of event end time as qint64 (returns current time, when end time equals -1) * @return end time as msecssinceepoch */ //qint64 endTime() const; /** * @brief other than getEndT, this method returns the real end time (can be 0 or -1) * @return */ //qint64 realEndTime() const { return m_endTime; } const QJsonObject &detailData() const { return m_detailData; } void setDetailData(const QJsonObject &detailData) { m_detailData = detailData; } void setEndT(qint64 newEnd); /** * @brief returns event duration in seconds * @return duration in seconds */ qint64 duration(bool ignoreLiveEvents = false) const; int playerId() const { return m_playerId; } void setPlayerId(int playerId) { m_playerId = playerId; } int partyId() const { return m_partyId; } void setPartyId(int teamId) { m_partyId = teamId; } int equipmentId() const { return m_equipmentId; } void setEquipmentId(int eqId) { m_equipmentId = eqId; } QString getShortActuator() const; bool positionValid() const { return !std::isnan(m_position.x()) && !std::isnan(m_position.y()); } const LtsUtils::QPoint3D &position() const { return m_position; } QPointF pos2d() const { return QPointF(m_position.x(), m_position.y()); } void setPosition(const LtsUtils::QPoint3D &pos) { m_position = pos; } /** * @brief hide tells the model to not be shown on the view */ void hide(); /** * @brief show tells the model to be shown on the view */ void show(); /** * @brief tells if this event should be shown or not * @return true for show, false for hide */ bool isVisible() const { return m_visible; } /** * @brief sets the visibility on the value of 'visibility' * @param visibility true if visible, false if hidden */ void setVisible(bool visibility = true); void setDeleted() { m_deleted = true; } bool isDeleted() const { return m_deleted; } protected: QStringList m_path; QJsonObject m_detailData; // geo pos: LtsUtils::QPoint3D m_position; EventPaintFunc m_paintFunc = nullptr; // TODO: replace me with a more secure std::function ! LtsSession::LtsSession *m_session = nullptr; QColor m_eventColor; qint64 m_startTime = -1; qint64 m_endTime = -1; mutable qint64 m_duration = -1; int m_uniqueId = -1; int m_typeId = -1; int m_subEventId = -1; // for events which are one sub-events of many (sub-event-lists) int m_playerId = -1; int m_partyId = -1; int m_equipmentId = -1; bool m_deleted = false; // would take a while to implement a real free, so this is a quick workaround (do not draw if deleted) bool m_visible = false; private: //NGL::INGLLogger &m_logger; static bool checkDuration(); // currently not needed.. }; }