#pragma once #include "tln_utils.h" #include #include #include class QPainter; class QStyleOptionViewItem; class QModelIndex; class QFormLayout; namespace Timeline { class AbstractEventFactory; class AbstractEventItem : public LtsTimeline::Item { public: static int s_defaultWidth; static int s_defaultHeight; explicit AbstractEventItem(AbstractEventFactory *factory, qint64 startTime, int duration, const QJsonObject &properties, const QColor &color = Qt::black, EventType type = EventType::Unknown, const LtsUtils::QPoint3D &position = LtsUtils::QPoint3D(0.0,0.0,0.0) ); const QJsonObject &properties() const { return m_properties; } void setProperties(const QJsonObject &properties) { m_properties = properties; } bool isPositionValid() const { return !std::isnan(m_position.x()) && !std::isnan(m_position.y()); } const LtsUtils::QPoint3D &position() const { return m_position; } QPointF position2D() const { return QPointF(m_position.x(), m_position.y()); } void setPosition(const LtsUtils::QPoint3D &position) { m_position = position; } int dbId() const { return m_dbId; } int markerDbId() const { return m_markerDbId; } EventType type() const { return m_type; } virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, bool) const override = 0; virtual void addItemInfoRows(QFormLayout *form) = 0; int m_dbId { -1 }; int m_markerDbId { -1 }; protected: AbstractEventFactory *m_factory{nullptr}; LtsUtils::QPoint3D m_position; QJsonObject m_properties; private: EventType m_type { EventType::Unknown }; }; typedef AbstractEventItem EventItem; typedef std::unique_ptr EventItemPtr; typedef std::reference_wrapper EventItemRef; typedef std::reference_wrapper EventItemPtrRef; typedef std::vector EventItemPtrs; typedef std::vector > EventItemPtrRefs; typedef std::map TickItemPtrNCVRefs; typedef std::pair TickItemPtrNCVRefsPair; typedef std::map SectorItemPtrNCVRefs; // Sector = Track + Tick (and contains Items) typedef std::pair SectorItemPtrNCVRefsPair; typedef std::map TickEventItemPtrs; typedef std::pair TickEventItemPtrsPair; typedef std::map SectorEventItemPtrs; // Sector = Track + Tick (and contains Items) typedef std::pair SectorEventItemPtrsPair; } // namespace Timeline