#include "EventGraphic.h" #include #include #include #include #include #include #include namespace LtsTimelineClassic { EventGraphic::EventGraphic(Event *event) : m_lowest(0) , m_duration(-1) , m_isMultipleEvent(false) { m_eventList += event; } void EventGraphic::addEvent(Event *event) { if (event == nullptr) return; m_eventList += event; m_isMultipleEvent = true; m_lowest = 0; m_duration = -1; } void EventGraphic::addEventList(const QVector &eventList) { if (eventList.isEmpty()) return; m_eventList += eventList; m_isMultipleEvent = true; m_lowest = 0; m_duration = -1; } qint64 EventGraphic::getDuration() { if (m_duration != -1) return m_duration; qint64 highestDuration = 0; qint64 lowest = lowestTime(); for (Event *event : qAsConst(m_eventList)) { qint64 duration = (event->startTime() - lowest) + event->duration(); if (duration > highestDuration) highestDuration = duration; } if (highestDuration < 0) { qWarning() << "duration < 0 !!" << highestDuration; Q_ASSERT(false); return 0; } m_duration = highestDuration; return m_duration; } qint64 EventGraphic::lowestTime() const { if (m_lowest != 0) return m_lowest; auto i = std::min_element(m_eventList.begin(), m_eventList.end(), [](const Event *a, const Event *b) { return a->startTime() < b->startTime(); }); if (i == m_eventList.end()) return 0; m_lowest = (*i)->startTime(); return m_lowest; } bool EventGraphic::isMultipleEvent() const { return m_isMultipleEvent; } void EventGraphic::drawEventGraphic(QPainter *painter, const QRect &rect) const { painter->save(); painter->setPen(QPen(QBrush(QGuiApplication::palette().text()), 1.0)); if (isMultipleEvent()) Event::drawMultipleEventGraphic(painter, rect); else { Event *e = m_eventList.first(); if (e == nullptr) { painter->restore(); return; } painter->setBrush(QBrush(e->getColor())); if (e->getPaintFunc() == nullptr) { painter->restore(); return; } e->getPaintFunc()(painter, rect); } painter->restore(); } void EventGraphic::drawDurationBackground(QPainter *painter, const QRect &rect) const { painter->save(); if (!isMultipleEvent()) { Event *e = m_eventList.first(); if (e == nullptr) { painter->restore(); return; } painter->setBrush(QBrush(e->getColor())); painter->setPen(QPen(QBrush(e->getColor()), 0)); } else { painter->setBrush(QBrush(QColor("white"))); } painter->drawRect(rect.adjusted(0, 0, -2, 0)); painter->setPen(QPen(QBrush(QGuiApplication::palette().text()), 1.0)); painter->drawLine(rect.topLeft(), rect.topRight()); painter->drawLine(rect.bottomLeft() + QPoint(0, 1), rect.bottomRight() + QPoint(1, 1)); painter->restore(); } }