Files
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

262 lines
6.8 KiB
C++
Executable File

#include "tgt_telegrams.h"
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
namespace TargetManagement
{
JsonException::JsonException(const QJsonObject &obj, const QString &key)
: m_obj(obj)
, m_key(key)
, m_what("Could not find key '" + key.toUtf8() + "' in json ('" + QJsonDocument(obj).toJson(QJsonDocument::Compact) + "')")
{}
template <typename E>
QJsonValue enumToJson(E e)
{
static_assert(std::is_enum<E>::value, "Only useable with enumerations");
return static_cast<int>(e);
}
template <typename T>
bool get(const QJsonObject &obj, const QString &key, T &val, bool bOptional = false)
{
if (bOptional)
{
try
{
val = T::fromJson(obj[key].toObject());
}
catch (const JsonException &e)
{
Q_UNUSED(e);
return false;
}
}
else
val = T::fromJson(obj[key].toObject());
return true;
}
template <>
bool get(const QJsonObject &obj, const QString &key, bool &val, bool bOptional)
{
const auto jVal = obj[key];
if (!jVal.isBool())
{
if (bOptional)
return false;
throw JsonException(obj, key);
}
val = jVal.toBool();
return true;
}
template <>
bool get(const QJsonObject &obj, const QString &key, int &val, bool bOptional)
{
const auto jVal = obj[key];
if (!jVal.isDouble())
{
if (bOptional)
return false;
throw JsonException(obj, key);
}
val = jVal.toInt();
return true;
}
template <>
bool get(const QJsonObject &obj, const QString &key, double &val, bool bOptional)
{
const auto jVal = obj[key];
if (!jVal.isDouble())
{
if (bOptional)
return false;
throw JsonException(obj, key);
}
val = jVal.toDouble();
return true;
}
template <>
bool get(const QJsonObject &obj, const QString &key, QString &val, bool bOptional)
{
const auto jVal = obj[key];
if (!jVal.isString())
{
if (bOptional)
return false;
throw JsonException(obj, key);
}
val = jVal.toString();
return true;
}
template <>
bool get(const QJsonObject &obj, const QString &key, Effect &val, bool bOptional)
{
int iVal;
get(obj, key, iVal, bOptional);
switch (static_cast<Effect_def::type>(iVal))
{
case Effect_def::NearMiss:
case Effect_def::MobilityKill:
case Effect_def::WeaponKill:
val = Effect( static_cast<Effect_def::type>(iVal) );
return true;
}
throw JsonException(obj, key);
}
QJsonObject GeoPosition2D::toJson() const
{
return QJsonObject({{QStringLiteral("lat"), lat},
{QStringLiteral("lon"), lon},
});
}
GeoPosition2D GeoPosition2D::fromJson(const QJsonObject &obj)
{
GeoPosition2D ret;
get(obj, QStringLiteral("lat"), ret.lat);
get(obj, QStringLiteral("lon"), ret.lon);
return ret;
}
QJsonObject ShootbackTargetData::toJson() const
{
return QJsonObject({{QStringLiteral("id"), id},
{QStringLiteral("targetDataId"), targetDataId},
{QStringLiteral("name"), name},
{QStringLiteral("targetParticipantEquipmentNumber"), targetParticipantEquipmentNumber},
{QStringLiteral("activateLaserDesignation"), activateLaserDesignation},
{QStringLiteral("activateLights"), activateLights},
{QStringLiteral("activatePopupAutomatic"), activatePopupAutomatic},
{QStringLiteral("hitsToKill"), hitsToKill},
{QStringLiteral("permanentInstalledTarget"), permanentInstalledTarget},
});
}
ShootbackTargetData ShootbackTargetData::fromJson(const QJsonObject &obj)
{
ShootbackTargetData ret;
get(obj, QStringLiteral("id"), ret.id);
get(obj, QStringLiteral("targetDataId"), ret.targetDataId);
get(obj, QStringLiteral("name"), ret.name);
get(obj, QStringLiteral("targetParticipantEquipmentNumber"), ret.targetParticipantEquipmentNumber);
get(obj, QStringLiteral("activateLaserDesignation"), ret.activateLaserDesignation);
get(obj, QStringLiteral("activateLights"), ret.activateLights);
get(obj, QStringLiteral("activatePopupAutomatic"), ret.activatePopupAutomatic);
get(obj, QStringLiteral("hitsToKill"), ret.hitsToKill);
get(obj, QStringLiteral("permanentInstalledTarget"), ret.permanentInstalledTarget);
return ret;
}
QJsonObject ShootbackAreaData::toJson() const
{
return QJsonObject({{QStringLiteral("id"), id},
{QStringLiteral("name"), name},
{QStringLiteral("position"), position.toJson()},
{QStringLiteral("width"), width},
{QStringLiteral("height"), height},
});
}
ShootbackAreaData ShootbackAreaData::fromJson(const QJsonObject &obj)
{
ShootbackAreaData ret;
get(obj, QStringLiteral("id"), ret.id);
get(obj, QStringLiteral("name"), ret.name);
get(obj, QStringLiteral("position"), ret.position);
get(obj, QStringLiteral("width"), ret.width);
get(obj, QStringLiteral("height"), ret.height);
return ret;
}
QJsonObject ShootbackConfigurationData::toJson() const
{
return QJsonObject({{QStringLiteral("interval1"), interval1},
{QStringLiteral("flash1"), flash1},
{QStringLiteral("effect1"), enumToJson(effect1.underlying())},
{QStringLiteral("interval2"), interval2},
{QStringLiteral("flash2"), flash2},
{QStringLiteral("effect2"), enumToJson(effect2.underlying())},
});
}
ShootbackConfigurationData ShootbackConfigurationData::fromJson(const QJsonObject &obj)
{
ShootbackConfigurationData ret;
get(obj, QStringLiteral("interval1"), ret.interval1);
get(obj, QStringLiteral("flash1"), ret.flash1);
get(obj, QStringLiteral("effect1"), ret.effect1);
get(obj, QStringLiteral("interval2"), ret.interval2);
get(obj, QStringLiteral("flash2"), ret.flash2);
get(obj, QStringLiteral("effect2"), ret.effect2);
return ret;
}
QJsonObject TargetAreaAssignmentData::toJson() const
{
return QJsonObject({{QStringLiteral("id"), id},
{QStringLiteral("name"), name},
{QStringLiteral("areaId"), areaId},
{QStringLiteral("targetParticipantId"), targetParticipantId},
{QStringLiteral("configuration"), configuration.toJson()},
{QStringLiteral("isActive"), isActive},
});
}
TargetAreaAssignmentData TargetAreaAssignmentData::fromJson(const QJsonObject &obj)
{
TargetAreaAssignmentData ret;
get(obj, QStringLiteral("id"), ret.id);
get(obj, QStringLiteral("name"), ret.name);
get(obj, QStringLiteral("areaId"), ret.areaId);
get(obj, QStringLiteral("targetParticipantId"), ret.targetParticipantId);
get(obj, QStringLiteral("configuration"), ret.configuration);
get(obj, QStringLiteral("isActive"), ret.isActive);
return ret;
}
}