#include "track_entry_painters.h" #include "track_entry.h" #include #include namespace LtsScriptTimeline { QString translateTrackEntryType(const TrackEntryType &tet) { switch (tet) { case TrackEntryType::INVALID: return QObject::tr(""); case TrackEntryType::SituationMap: return QObject::tr("Map"); case TrackEntryType::Situation: return QObject::tr("Situation"); case TrackEntryType::SituationReplay: return QObject::tr("Replay"); case TrackEntryType::Snapshot: return QObject::tr("Snapshot"); case TrackEntryType::Image: return QObject::tr("Image"); case TrackEntryType::Text: return QObject::tr("Text"); case TrackEntryType::Pdf: return QObject::tr("Pdf"); case TrackEntryType::Xml: return QObject::tr("Xml"); case TrackEntryType::MSOffice: return QObject::tr("MS Office"); case TrackEntryType::OpenOffice: return QObject::tr("Open Office"); case TrackEntryType::Audio: return QObject::tr("Audio"); case TrackEntryType::Video: return QObject::tr("Video"); case TrackEntryType::Building: return QObject::tr("Building"); case TrackEntryType::Evaluation: return QObject::tr("Evaluation"); case TrackEntryType::Report: return QObject::tr("Report"); case TrackEntryType::TacticalPlan: return QObject::tr("Tactical Plan Map Filter"); case TrackEntryType::SituationMapFilter: return QObject::tr("Map Filter"); } return QString(); } QString trackEntryTypeName(const TrackEntryType &tet) { switch (tet) { case TrackEntryType::INVALID: return QStringLiteral(""); case TrackEntryType::SituationMap: return QStringLiteral("SituationMap"); case TrackEntryType::Situation: return QStringLiteral("SituationReplayAndMap"); case TrackEntryType::SituationReplay: return QStringLiteral("SituationReplay"); case TrackEntryType::Image: return QStringLiteral("Image"); case TrackEntryType::Text: return QStringLiteral("Text"); case TrackEntryType::Pdf: return QStringLiteral("Pdf"); case TrackEntryType::Xml: return QStringLiteral("Xml"); case TrackEntryType::TacticalPlan: return QStringLiteral("TacticalPlan"); case TrackEntryType::MSOffice: return QStringLiteral("MSOffice"); case TrackEntryType::OpenOffice: return QStringLiteral("OpenOffice"); case TrackEntryType::Audio: return QStringLiteral("Audio"); case TrackEntryType::Video: return QStringLiteral("Video"); case TrackEntryType::Building: return QStringLiteral("Building"); case TrackEntryType::SituationMapFilter: return QStringLiteral("SituationMapFilter"); case TrackEntryType::Snapshot: return QStringLiteral("Snapshot"); case TrackEntryType::Evaluation: return QStringLiteral("Evaluation"); case TrackEntryType::Report: return QStringLiteral("Report"); } return QString(); } QIcon appToIcon(const TrackEntryType type) { switch (type) { case LtsScriptTimeline::TrackEntryType::INVALID: return QIcon(); case LtsScriptTimeline::TrackEntryType::SituationMap: return QIcon(QLatin1String("icon:add_situation.svg")); case LtsScriptTimeline::TrackEntryType::Situation: return QIcon(QLatin1String("icon:add_situation_combined.svg")); case LtsScriptTimeline::TrackEntryType::SituationReplay: return QIcon(QLatin1String("icon:add_restart.svg")); case LtsScriptTimeline::TrackEntryType::Image: return QIcon(QLatin1String("icon:create_image_topic.svg")); case LtsScriptTimeline::TrackEntryType::Text: return QIcon(QLatin1String("icon:document-new-txt.svg")); case LtsScriptTimeline::TrackEntryType::Pdf: return QIcon(QLatin1String("icon:create_pdf_topic.svg")); case LtsScriptTimeline::TrackEntryType::Xml: return QIcon(QLatin1String("icon:document-new-xml.svg")); case LtsScriptTimeline::TrackEntryType::TacticalPlan: return QIcon(QLatin1String("icon:tactical_organization.svg")); case LtsScriptTimeline::TrackEntryType::MSOffice: return QIcon(QLatin1String("icon:ms_office.svg")); case LtsScriptTimeline::TrackEntryType::OpenOffice: return QIcon(QLatin1String("icon:documents.svg")); case LtsScriptTimeline::TrackEntryType::Audio: return QIcon(QLatin1String("icon:create_lecture_topic.svg")); case LtsScriptTimeline::TrackEntryType::Video: return QIcon(QLatin1String("icon:add_video_menu.svg")); case LtsScriptTimeline::TrackEntryType::Building: return QIcon(QLatin1String("icon:configure_buildings.svg")); case LtsScriptTimeline::TrackEntryType::SituationMapFilter: return QIcon(QLatin1String("icon:filter_player.svg")); case LtsScriptTimeline::TrackEntryType::Snapshot: return QIcon(QLatin1String("icon:create_snapshot.svg")); case LtsScriptTimeline::TrackEntryType::Evaluation: return QIcon(QLatin1String("icon:add_evaluation_elements.svg")); case LtsScriptTimeline::TrackEntryType::Report: return QIcon(QLatin1String("icon:add_reports_display.svg")); } return QIcon(); } TrackEntryPainter *getTrackEntryPainter(const TrackEntryType &type) { TrackEntryPainter *trackEntryPainter = nullptr; static TrackEntryPainter painter; switch (type) { case TrackEntryType::SituationMap: { painter = TrackEntryPainter(QColor(QStringLiteral("#b1cbbb")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Situation: { painter = TrackEntryPainter(QColor(QStringLiteral("#b1c1cb")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::SituationReplay: { painter = TrackEntryPainter(QColor(QStringLiteral("#c94c4c")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Audio: { painter = TrackEntryPainter(QColor(QStringLiteral("#034f84")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Video: { painter = TrackEntryPainter(QColor(QStringLiteral("#618685")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Image: { painter = TrackEntryPainter(QColor(QStringLiteral("#fefbd8")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Evaluation: { painter = TrackEntryPainter(QColor(QStringLiteral("#d6cbd3")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Pdf: { painter = TrackEntryPainter(QColor(QStringLiteral("#80ced6")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Text: { painter = TrackEntryPainter(QColor(QStringLiteral("#92a8d1")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Xml: { painter = TrackEntryPainter(QColor(QStringLiteral("#eea29a")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::TacticalPlan: { painter = TrackEntryPainter(QColor(QStringLiteral("#dac292")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::MSOffice: { painter = TrackEntryPainter(QColor(QStringLiteral("#f7cac9")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::OpenOffice: { painter = TrackEntryPainter(QColor(QStringLiteral("#b2b2b2")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Building: { painter = TrackEntryPainter(QColor(QStringLiteral("#c6bcb6")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::SituationMapFilter: { painter = TrackEntryPainter(QColor(QStringLiteral("#36486b")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Snapshot: { painter = TrackEntryPainter(QColor(QStringLiteral("#f18973")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } case TrackEntryType::Report: { painter = TrackEntryPainter(QColor(QStringLiteral("#feb236")), translateTrackEntryType(type)); trackEntryPainter = static_cast(&painter); break; } default: { qWarning() << "no painter found for type" << (int)type; trackEntryPainter = nullptr; break; } } return trackEntryPainter; } void drawTrackEntry(TrackEntry *te, QPainter &painter, const QRect &trackRect, bool isSelected, bool isEnabled) { TrackEntryPainter *trackEntryPainter = getTrackEntryPainter(te->m_type); if (!trackEntryPainter) return; QColor trackEntryBgColor = trackEntryPainter->bgColor(); if (isSelected) { int r = trackEntryBgColor.red(); int g = trackEntryBgColor.green(); int b = trackEntryBgColor.blue(); trackEntryBgColor = trackEntryBgColor.lighter(); painter.setPen(QColor(255 - r, 255 - g, 255 - b)); } else if (!isEnabled) { trackEntryBgColor = QColor(200, 200, 200); painter.setPen(QColor("white")); } else painter.setPen(QColor(36, 36, 36)); painter.setBrush(trackEntryBgColor); painter.drawRect(trackRect); if (trackRect.width() < 20) return; QRect trackEntryPainterRect(trackRect.adjusted(1, 1, -1, -1)); painter.save(); painter.setClipping(true); painter.setClipRect(trackEntryPainterRect, Qt::ReplaceClip); trackEntryPainter->paintEvent(painter, trackEntryPainterRect ); painter.drawText(trackEntryPainterRect.adjusted(3, 16, 5000, 0), te->m_description); painter.restore(); if (trackRect.width() < 12) return; int trackRectEnd = trackRect.right(); int gradientLength = 12; QRect gradientRect(trackRectEnd - gradientLength, 2, gradientLength, trackRect.height() - 2); QLinearGradient gradient(gradientRect.bottomRight(), gradientRect.bottomLeft()); int r = trackEntryBgColor.red(); int g = trackEntryBgColor.green(); int b = trackEntryBgColor.blue(); gradient.setColorAt(0, QColor(r, g, b, 255)); gradient.setColorAt(1, QColor(r, g, b, 0)); painter.fillRect(gradientRect, gradient); } }