#include "topic_editor_utils.h" #include #include #include #include #include #include #include namespace TopicEditorBase { QString topicTypeTranslation(TopicType topicType) { switch (topicType) { case TopicType::SituationMap: return QLabel::tr("SituationMap"); case TopicType::SituationReplay: return QLabel::tr("SituationReplay"); case TopicType::Image: return QLabel::tr("Image"); case TopicType::Text: return QLabel::tr("Text"); case TopicType::Pdf: return QLabel::tr("Pdf"); case TopicType::Xml: return QLabel::tr("Xml"); case TopicType::TacticalPlan: return QLabel::tr("TacticalPlan"); case TopicType::MSOffice: return QLabel::tr("MSOffice"); case TopicType::OpenOffice: return QLabel::tr("OpenOffice"); case TopicType::Audio: return QLabel::tr("Audio"); case TopicType::Video: return QLabel::tr("Video"); case TopicType::Building: return QLabel::tr("Building"); case TopicType::SituationMapFilter: return QLabel::tr("SituationMapFilter"); case TopicType::Snapshot: return QLabel::tr("Snapshot"); case TopicType::Evaluation: return QLabel::tr("Evaluation"); case TopicType::Report: return QLabel::tr("Report"); case TopicType::Situation: return QLabel::tr("Situation"); case TopicType::Invalid: default: return QLabel::tr("Invalid"); } Q_UNREACHABLE(); } QString topicTypeString(TopicType topicType) { switch (topicType) { case TopicType::SituationMap: return QStringLiteral("SituationMap"); case TopicType::SituationReplay: return QStringLiteral("SituationReplay"); case TopicType::Image: return QStringLiteral("Image"); case TopicType::Text: return QStringLiteral("Text"); case TopicType::Pdf: return QStringLiteral("Pdf"); case TopicType::Xml: return QStringLiteral("Xml"); case TopicType::TacticalPlan: return QStringLiteral("TacticalPlan"); case TopicType::MSOffice: return QStringLiteral("MSOffice"); case TopicType::OpenOffice: return QStringLiteral("OpenOffice"); case TopicType::Audio: return QStringLiteral("Audio"); case TopicType::Video: return QStringLiteral("Video"); case TopicType::Building: return QStringLiteral("Building"); case TopicType::SituationMapFilter: return QStringLiteral("SituationMapFilter"); case TopicType::Snapshot: return QStringLiteral("Snapshot"); case TopicType::Evaluation: return QStringLiteral("Evaluation"); case TopicType::Report: return QStringLiteral("Report"); case TopicType::Situation: return QStringLiteral("Situation"); case TopicType::Invalid: default: return QStringLiteral("Invalid"); } Q_UNREACHABLE(); } TopicType topicTypeFromString(const QString &topicName) { static const QHash topics = { { QStringLiteral("Invalid"), TopicType::Invalid }, { QStringLiteral("SituationMap"), TopicType::SituationMap }, { QStringLiteral("SituationReplay"), TopicType::SituationReplay }, { QStringLiteral("Image"), TopicType::Image }, { QStringLiteral("Text"), TopicType::Text }, { QStringLiteral("Pdf"), TopicType::Pdf }, { QStringLiteral("Xml"), TopicType::Xml }, { QStringLiteral("TacticalPlan"), TopicType::TacticalPlan }, { QStringLiteral("MSOffice"), TopicType::MSOffice }, { QStringLiteral("OpenOffice"), TopicType::OpenOffice }, { QStringLiteral("Audio"), TopicType::Audio }, { QStringLiteral("Video"), TopicType::Video }, { QStringLiteral("Building"), TopicType::Building }, { QStringLiteral("SituationMapFilter"), TopicType::SituationMapFilter }, { QStringLiteral("Snapshot"), TopicType::Snapshot }, { QStringLiteral("Evaluation"), TopicType::Evaluation }, { QStringLiteral("Report"), TopicType::Report }, { QStringLiteral("Situation"), TopicType::Situation }, }; return topics.contains(topicName) ? topics.value(topicName) : TopicType::Invalid; } QIcon topicIcon(const TopicType topicType) { switch (topicType) { case TopicType::SituationMap: return QIcon(QLatin1String("icon:add_situation.svg")); case TopicType::Situation: return QIcon(QLatin1String("icon:add_situation_combined.svg")); case TopicType::SituationReplay: return QIcon(QLatin1String("icon:add_restart.svg")); case TopicType::Image: return QIcon(QLatin1String("icon:create_image_topic.svg")); case TopicType::Text: return QIcon(QLatin1String("icon:document-new-txt.svg")); case TopicType::Pdf: return QIcon(QLatin1String("icon:create_pdf_topic.svg")); case TopicType::Xml: return QIcon(QLatin1String("icon:document-new-xml.svg")); case TopicType::TacticalPlan: return QIcon(QLatin1String("icon:tactical_organization.svg")); case TopicType::MSOffice: return QIcon(QLatin1String("icon:ms_office.svg")); case TopicType::OpenOffice: return QIcon(QLatin1String("icon:documents.svg")); case TopicType::Audio: return QIcon(QLatin1String("icon:create_lecture_topic.svg")); case TopicType::Video: return QIcon(QLatin1String("icon:add_video_menu.svg")); case TopicType::Building: return QIcon(QLatin1String("icon:configure_buildings.svg")); case TopicType::SituationMapFilter: return QIcon(QLatin1String("icon:filter_player.svg")); case TopicType::Snapshot: return QIcon(QLatin1String("icon:create_snapshot.svg")); case TopicType::Evaluation: return QIcon(QLatin1String("icon:add_evaluation_elements.svg")); case TopicType::Report: return QIcon(QLatin1String("icon:add_reports_display.svg")); case TopicType::Invalid: default: return QIcon(); } Q_UNREACHABLE(); } QColor topicTypeColor(TopicType topicType) { switch (topicType) { case TopicType::SituationMap: return QRgb(0xb1cbbb); case TopicType::SituationReplay: return QRgb(0xc94c4c); case TopicType::Image: return QRgb(0xfefbd8); case TopicType::Text: return QRgb(0x92a8d1); case TopicType::Pdf: return QRgb(0x80ced6); case TopicType::Xml: return QRgb(0xeea29a); case TopicType::TacticalPlan: return QRgb(0xdac292); case TopicType::MSOffice: return QRgb(0xf7cac9); case TopicType::OpenOffice: return QRgb(0xb2b2b2); case TopicType::Audio: return QRgb(0x034f84); case TopicType::Video: return QRgb(0x618685); case TopicType::Building: return QRgb(0xc6bcb6); case TopicType::SituationMapFilter: return QRgb(0x36486b); case TopicType::Snapshot: return QRgb(0xf18973); case TopicType::Evaluation: return QRgb(0xd6cbd3); case TopicType::Report: return QRgb(0xfeb236); case TopicType::Situation: return QRgb(0xb1c1cb); case TopicType::Invalid: default: return Qt::black; } Q_UNREACHABLE(); return {}; } std::ostream& operator<<(std::ostream& stream, TopicType topicType) { stream << "TopicType::" << topicTypeString(topicType).toStdString().c_str(); return stream; } /////////////////////////////////////////////////////////////////////////////// // TOPICDATA // /////////////////////////////////////////////////////////////////////////////// const QString TopicData::mime = QStringLiteral("application/rheinmetall.topiceditorbase.topicdata"); TopicData::TopicData(TopicType topicType) : topicType(topicType) {} TopicData::TopicData(TopicType topicType, int duration) : topicType(topicType) , duration(duration) {} TopicData::TopicData( int id, TopicType topicType, int startTime, int duration, const QString &description, const QString &channel, const QJsonObject &properties ) : topicType(topicType) , id(id) , startTime(startTime) , duration(duration) , properties(properties) , description(description) , channel(channel) {} void TopicData::fromJson(const QJsonObject &obj) { id = obj[QStringLiteral("topicId")].toInt(); topicType = static_cast(obj[QStringLiteral("type")].toInt()); startTime = obj[QStringLiteral("startTime")].toInt(-1); duration = obj[QStringLiteral("length")].toInt(-1); state = obj[QStringLiteral("isSet")].toBool(); index = obj[QStringLiteral("index")].toInt(); properties = obj[QStringLiteral("detailData")].toObject(); description = obj[QStringLiteral("description")].toString(); channel = obj[QStringLiteral("channelName")].toString(); parentChannel = obj[QStringLiteral("filterParentChannel")].toString(); x = obj[QStringLiteral("x")].toDouble(); y = obj[QStringLiteral("y")].toDouble(); w = obj[QStringLiteral("w")].toDouble(); h = obj[QStringLiteral("h")].toDouble(); } QJsonObject TopicData::toJson() const { return QJsonObject({ { QStringLiteral("topicId"), id }, { QStringLiteral("startTime"), startTime }, { QStringLiteral("length"), duration }, { QStringLiteral("type"), static_cast(topicType) }, { QStringLiteral("isSet"), state }, { QStringLiteral("index"), index }, { QStringLiteral("detailData"), properties }, { QStringLiteral("description"), description }, { QStringLiteral("channelName"), channel }, { QStringLiteral("filterParentChannel"), parentChannel }, { QStringLiteral("x"), x }, { QStringLiteral("y"), y }, { QStringLiteral("w"), w }, { QStringLiteral("h"), h } }); } QDataStream &operator<<(QDataStream &stream, const TopicData &data) { const QByteArray properties = QJsonDocument(data.properties).toBinaryData(); stream << data.id << static_cast(data.topicType) << data.startTime << data.duration << data.state << data.index << properties << data.description << data.channel << data.parentChannel << data.x << data.y << data.w << data.h; return stream; } QDataStream &operator >>(QDataStream &stream, TopicData &data) { QByteArray properties; quint8 topicType; stream >> data.id >> topicType >> data.startTime >> data.duration >> data.state >> data.index >> properties >> data.description >> data.channel >> data.parentChannel >> data.x >> data.y >> data.w >> data.h; data.topicType = static_cast(topicType); data.properties = QJsonDocument::fromBinaryData(properties).object(); return stream; } }