Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Common/LtsScriptTimeline/track_entry_painters.cpp
T
torstenandCopilot 7a6be7474e Qt6 migration: Fix BUILD_RTI=OFF build errors in TrainingAreaBase
- training_area_telegrams.cpp: Fixed QJsonObject initializer syntax (Qt6 requires {{}} not ({}))
- training_area_telegrams.cpp: Fixed fromJson() methods to access m_* members directly
- training_area_telegrams.cpp: Fixed brace mismatches in multiple toJson() methods
- training_area_telegrams.h: Changed Header struct to public members for consistency
- tx_mixin.cpp: Fixed getEquipmentNumber() template for direct member access
- lts_coordinate.cpp: Added missing #include <iomanip>
- MIGRATION_STATUS.md: Added migration progress tracking document

C++17 constraint enforced due to RTI Connext DDS 7.7.0 incompatibility with C++20+

Build status: BUILD_RTI=OFF successful (0 errors, warnings only)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-23 20:49:23 +02:00

329 lines
12 KiB
C++

#include "track_entry_painters.h"
#include "track_entry.h"
#include <QtCore/QDebug>
#include <QtCore/QObject>
namespace LtsScriptTimeline
{
QString translateTrackEntryType(const TrackEntryType& tet)
{
switch (tet)
{
case TrackEntryType::INVALID:
return QObject::tr("<unknown>");
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("<unknown>");
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<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Situation: {
painter = TrackEntryPainter(QColor(QStringLiteral("#b1c1cb")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::SituationReplay: {
painter = TrackEntryPainter(QColor(QStringLiteral("#c94c4c")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Audio: {
painter = TrackEntryPainter(QColor(QStringLiteral("#034f84")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Video: {
painter = TrackEntryPainter(QColor(QStringLiteral("#618685")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Image: {
painter = TrackEntryPainter(QColor(QStringLiteral("#fefbd8")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Evaluation: {
painter = TrackEntryPainter(QColor(QStringLiteral("#d6cbd3")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Pdf: {
painter = TrackEntryPainter(QColor(QStringLiteral("#80ced6")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Text: {
painter = TrackEntryPainter(QColor(QStringLiteral("#92a8d1")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Xml: {
painter = TrackEntryPainter(QColor(QStringLiteral("#eea29a")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::TacticalPlan: {
painter = TrackEntryPainter(QColor(QStringLiteral("#dac292")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::MSOffice: {
painter = TrackEntryPainter(QColor(QStringLiteral("#f7cac9")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::OpenOffice: {
painter = TrackEntryPainter(QColor(QStringLiteral("#b2b2b2")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Building: {
painter = TrackEntryPainter(QColor(QStringLiteral("#c6bcb6")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::SituationMapFilter: {
painter = TrackEntryPainter(QColor(QStringLiteral("#36486b")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Snapshot: {
painter = TrackEntryPainter(QColor(QStringLiteral("#f18973")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&painter);
break;
}
case TrackEntryType::Report: {
painter = TrackEntryPainter(QColor(QStringLiteral("#feb236")), translateTrackEntryType(type));
trackEntryPainter = static_cast<TrackEntryPainter*>(&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);
}
} // namespace LtsScriptTimeline