322 lines
11 KiB
C++
Executable File
322 lines
11 KiB
C++
Executable File
|
|
|
|
|
|
#include "track_entry_painters.h"
|
|
#include "track_entry.h"
|
|
|
|
#include <QObject>
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
|
|
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);
|
|
}
|
|
|
|
}
|