Files
qt5-legatus-legacy/Lts/Plugins/ParticipantManagement/Gui/ParticipantInfo/participant_hitline_info_dialog.cpp
T
2026-08-13 18:33:10 +02:00

185 lines
7.2 KiB
C++
Executable File

/**
*@RDE_HEADER@
* GUI Plugin for HitLine - Info
* $Id$
* $HeadURL$
* $Author$
* Created by hjl, NLSE, 2018-01-19
*/
#include "participant_hitline_info_dialog.h"
#include "ui_participant_hitline_info_dialog.h"
#include <ParticipantManagement/ppm_translation.h>
#include <ProjectDataManagement/pdm_to_string.h>
#include <Plugins/SituationMapPlugin/situation_map_gui_plugin_interface.h>
#include <LtsCoordTrans/lts_coord_trans.h>
#include <ngltools/ngltools_dtg.h>
namespace ParticipantManagement
{
HitLineInfoDialog::HitLineInfoDialog(int hitLineId, QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
, m_hitLineId(hitLineId)
, m_typeClass(TypeClass::Human)
, m_isInitialized(false)
, m_dtc(nullptr)
, m_pdmDtc(nullptr)
, m_sitMapGuiIfc(nullptr)
, m_ui(new Ui::HitLineInfoDialog)
, m_logger(getLogger("ParticipantHitLineInfoDialog"))
{
m_ui->setupUi(this);
connect(m_ui->pbOriginatorFindOnMap, &QToolButton::clicked,
this, &HitLineInfoDialog::onFindOriginatorOnMap);
connect(m_ui->pbInjuryFindOnMap, &QToolButton::clicked,
this, &HitLineInfoDialog::onFindInjuryOnMap);
// Debug Infos
#ifndef LTS_DEBUG
m_ui->lbHitLineId->hide();
m_ui->lblHitLineId->hide();
m_ui->lbChargeTypeId->hide();
m_ui->lblChargeTypeId->hide();
// m_ui->lbChargeType->hide();
// m_ui->lblChargeType->hide();
#endif
setOnlineHelpFilename(QStringLiteral("Info_Dialog-Hitline"));
} // end of ctor()
//-----------------------------------------------------------------------------
HitLineInfoDialog::~HitLineInfoDialog()
{
delete m_ui;
} // end of dtor()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::retranslate()
{
translate(m_ui, tr("Hit Line Info"));
}
//-----------------------------------------------------------------------------
bool HitLineInfoDialog::init(const std::shared_ptr<ParticipantManagement::Interface::Dtc> &dtc,
const std::shared_ptr<ProjectDataManagement::Interface::Dtc> &pdmDtc,
const std::shared_ptr<SituationMap::ForeignGuiInterface> &sitMapGuiIfc)
{
m_dtc = dtc;
m_pdmDtc = pdmDtc;
m_sitMapGuiIfc = sitMapGuiIfc;
// Geht ueber alle HitLineInfos in der Map
m_dtc->hitLineInfos([this](const ParticipantManagement::HitLineInfo & data)
{
if (data.id() == m_hitLineId)
{
DEBUG_LOG(m_logger) << "Found HitLine Id: " << data.id();
m_hitLineInfo = data;
// Daten der Participants beschaffen
m_participantOriginator = m_dtc->participant(data.originatorParticipantId());
m_participantInjury = m_dtc->participant(data.injuryParticipantId());
showHitLineInfos();
}
});
if (!m_isInitialized)
WARNING_LOG(m_logger) << "Non HitLineInfo data found for id: " << m_hitLineId;
return m_isInitialized;
} // end of init()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::showHitLineInfos()
{
DEBUG_LOG(m_logger) << LOGFUNCTION << " id:" << m_hitLineId;
if (m_participantOriginator.id() <= 0 || m_participantInjury.id() <= 0)
return;
m_ui->lblHitLineId->setText(QString::number(m_hitLineId));
// SampleTime
m_ui->lblSampleTime->setText(DTG::toStringMSec(m_hitLineInfo.sampleTime()));
// Originator Id
Participant participant = m_dtc->participant(m_participantOriginator.id());
m_ui->lblOriginatorEquipNr->setText(QString::number(participant.equipmentNumber().get()));
// Originator Party
m_ui->lblOriginatorParty->setText(ParticipantManagement::trPartyName(m_dtc->party(m_hitLineInfo.originatorPartyId()).name()));
// Originator Designator
m_ui->lblOriginatorDesignator->setText(QString::fromStdString(m_participantOriginator.designator()));
// Originator Tact.Identifier
m_ui->lblOriginatorTactIdentifier->setText(QString::fromStdString(m_participantOriginator.tacticalIdentifier()));
// Originator Type
m_ui->lblOriginatorType->setText(ParticipantManagement::trTypeName(m_dtc->type(m_participantOriginator.typeId()).name()));
// Originator Position
QString mgrs = LtsCoordTrans::mgrsFromGeographic(m_hitLineInfo.originatorPos().lon(), m_hitLineInfo.originatorPos().lat());
if (qFuzzyIsNull(m_hitLineInfo.originatorPos().z()))
m_ui->lblOriginatorPos->setText(tr("Position: %1").arg(mgrs));
else
m_ui->lblOriginatorPos->setText(tr("Position: %1 %2").arg(mgrs).arg(m_hitLineInfo.originatorPos().z()));
// Injury Id
participant = m_dtc->participant(m_participantInjury.id());
m_ui->lblInjuryEquipNr->setText(QString::number(participant.equipmentNumber().get()));
// Injury Party
m_ui->lblInjuryParty->setText(ParticipantManagement::trPartyName(m_dtc->party(m_participantInjury.partyId()).name()));
// Injury Designator
m_ui->lblInjuryDesignator->setText(QString::fromStdString(m_participantInjury.designator()));
// Injury Tact.Identifier
m_ui->lblInjuryTactIdentifier->setText(QString::fromStdString(m_participantInjury.tacticalIdentifier()));
// Injury Type
m_ui->lblInjuryType->setText(ParticipantManagement::trTypeName(m_dtc->type(m_participantInjury.typeId()).name()));
// Injury Position
mgrs = LtsCoordTrans::mgrsFromGeographic(m_hitLineInfo.injuryPos().lon(), m_hitLineInfo.injuryPos().lat());
if (qFuzzyIsNull(m_hitLineInfo.injuryPos().z()))
m_ui->lblInjuryPos->setText(tr("Position: %1").arg(mgrs));
else
m_ui->lblInjuryPos->setText(tr("Position: %1 %2").arg(mgrs).arg(m_hitLineInfo.injuryPos().z()));
// Injury State
m_typeClass = m_dtc->type(m_participantInjury.typeId()).typeClass();
ParticipantManagement::DynamicParticipantData data = m_dtc->dynamicParticipantData(m_participantInjury.id());
const ProjectDataManagement::VulnerabilityClass vc = m_typeClass == TypeClass::Human ?
ProjectDataManagement::VulnerabilityClass_def::SoldierInjuries :
ProjectDataManagement::VulnerabilityClass_def::VehicleDamages;
const StateInformation &lastState = m_dtc->youngestStateInformation(data.stateHistory());
m_ui->lblInjuryStatus->setText(ProjectDataManagement::toString(lastState.vulnerabilityState(), vc));
// Charge Type
m_ui->lblChargeTypeId->setText(QString::number(m_hitLineInfo.chargeTypeId()));
m_ui->lblChargeType->setText(m_pdmDtc->trChargeTypeShortName(m_hitLineInfo.chargeTypeId()));
m_ui->lblChargeType->setToolTip(m_pdmDtc->trChargeTypeName(m_hitLineInfo.chargeTypeId()));
m_isInitialized = true;
} // end of showHitLineInfos()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::onFindOriginatorOnMap()
{
findOnMap(m_participantOriginator.id());
} // end of onFindOriginatorOnMap()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::onFindInjuryOnMap()
{
findOnMap(m_participantInjury.id());
} // end of onFindInjuryOnMap()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::findOnMap(int id)
{
if (m_sitMapGuiIfc)
m_sitMapGuiIfc->centerMapToParticipant(id);
} // end of onFindOnMap()
//-----------------------------------------------------------------------------
} // namespace ParticipantManagement