Files
qt5-legatus-legacy/Lts/Plugins/Buildings/Gui/BuildingInfo/bld_hitline_info_dialog.cpp
T
2026-08-13 18:33:10 +02:00

202 lines
7.5 KiB
C++
Executable File

/**
*@RDE_HEADER@
* GUI Plugin for Building HitLine - Info
* $Id$
* $HeadURL$
* $Author$
* Created by hjl, NLE, 2018-09-13
*/
#include "bld_hitline_info_dialog.h"
#include "ui_bld_hitline_info_dialog.h"
#include <ParticipantManagement/ppm_translation.h>
#include <ProjectDataManagement/pdm_to_string.h>
#include <LtsSession/lts_session.h>
#include <PluginInterfaces/gui_plugin_interface.h>
#include <LtsCoordTrans/lts_coord_trans.h>
#include <ngltools/ngltools_dtg.h>
//DDS
#include <InfrastructureManagement/ism_data_plugin_interface.h>
#include <ProjectDataManagement/pdm_data_plugin_interface.h>
#include <ParticipantManagement/ppm_data_plugin_interface.h>
#include <AreaEffectSimulation/aes_data_plugin_interface.h>
#include <Buildings/bld_data_plugin_interface.h>
//SituationMap
#include <SituationMapPlugin/situation_map_gui_plugin_interface.h>
namespace Buildings
{
HitLineInfoDialog::HitLineInfoDialog(int hitLineId, QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
, m_hitLineId(hitLineId)
, m_ui(new Ui::HitLineInfoDialog)
, m_logger(getLogger("BuildingHitLineInfoDialog"))
{
m_ui->setupUi(this);
connect(m_ui->pbOriginatorFindOnMap, &QToolButton::clicked,
this, &HitLineInfoDialog::onFindOriginatorOnMap);
connect(m_ui->pbBuildingFindOnMap, &QToolButton::clicked,
this, &HitLineInfoDialog::onFindBuildingOnMap);
// Debug Infos
#ifndef LTS_DEBUG
m_ui->lbHitLineId->hide();
m_ui->lblHitLineId->hide();
m_ui->lbChargeTypeId->hide();
m_ui->lblChargeTypeId->hide();
m_ui->lbBuildingId->hide();
m_ui->lblBuildingId->hide();
// m_ui->lbChargeType->hide();
// m_ui->lblChargeType->hide();
#endif
setOnlineHelpFilename(QStringLiteral("Info_Dialog-Building_Hitline"));
} // end of ctor()
//-----------------------------------------------------------------------------
HitLineInfoDialog::~HitLineInfoDialog()
{
delete m_ui;
} // end of dtor()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::retranslate()
{
translate(m_ui, tr("Building Hit Line Info"));
}
//-----------------------------------------------------------------------------
bool HitLineInfoDialog::init(LtsSession::LtsSession *session)
{
if (!session->getDtc<Buildings::DataInterface>(m_bldDtc))
return false;
if (!session->getDtc<ParticipantManagement::DataInterface>(m_ppmDtc))
return false;
if (!session->getDtc<ProjectDataManagement::DataInterface>(m_pdmDtc))
return false;
if (!session->getDtc<AreaEffectSimulation::DataInterface>(m_aesDtc))
return false;
session->getDtc<InfrastructureManagement::DataInterface>(m_ismDtc);
session->getForeignGuiInterface<SituationMap::ForeignGuiInterface>(m_sitMapGuiIfc);
// Geht ueber alle BuildingHitLineInfos in der Map
m_bldDtc->buildingHitLineInfos([this](const BuildingHitLineInfo &data)
{
if (data.id() == m_hitLineId)
{
DEBUG_LOG(m_logger) << "Found Building HitLine Id: " << data.id();
m_hitLineInfo = data;
m_participantOriginator = m_ppmDtc->participant(data.originatorParticipantId());
showHitLineInfos();
}
});
if (!m_isInitialized)
WARNING_LOG(m_logger) << "Non Building 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_hitLineInfo.buildingId() <= 0 || m_hitLineInfo.originatorParticipantId() <= 0)
return;
m_ui->lblHitLineId->setText(QString::number(m_hitLineId));
// SampleTime
m_ui->lblSampleTime->setText(DTG::toStringMSec(m_hitLineInfo.sampleTime()));
// Originator
m_ui->lblOriginatorEquipNr->setText(QString::number(m_participantOriginator.equipmentNumber().get()));
m_ui->lblOriginatorParty->setText(ParticipantManagement::trPartyName(m_ppmDtc->party(m_hitLineInfo.originatorPartyId()).name()));
m_ui->lblOriginatorDesignator->setText(QString::fromStdString(m_participantOriginator.designator()));
m_ui->lblOriginatorTactIdentifier->setText(QString::fromStdString(m_participantOriginator.tacticalIdentifier()));
m_ui->lblOriginatorType->setText(ParticipantManagement::trTypeName(m_ppmDtc->type(m_participantOriginator.typeId()).name()));
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()));
// Building
m_ui->lblBuildingId->setText(QString::number(m_hitLineInfo.buildingId()));
if (m_ismDtc)
m_ui->lblBuildingName->setText(m_ismDtc->getBuildingDisplayName(m_hitLineInfo.buildingId()));
mgrs = LtsCoordTrans::mgrsFromGeographic(m_hitLineInfo.buildingPos().lon(), m_hitLineInfo.buildingPos().lat());
if (qFuzzyIsNull(m_hitLineInfo.buildingPos().z()))
m_ui->lblBuildingPos->setText(tr("Position: %1").arg(mgrs));
else
m_ui->lblBuildingPos->setText(tr("Position: %1 %2").arg(mgrs).arg(m_hitLineInfo.buildingPos().z()));
Buildings::BuildingState bldState = m_bldDtc->buildingState((m_hitLineInfo.buildingId()));
ProjectDataManagement::VulnerabilityState st = bldState.vulnerabilityState();
m_ui->lblBuildingStatus->setText(toString(st));
m_ui->lblBuildingDamagePercent->setText(QString::number(bldState.damagePercent()));
m_ui->lblBuildingDamageOldPercent->setText(QString::number(bldState.damagePercentOld()));
m_ui->lblChargeTypeId->setText(QString::number(m_hitLineInfo.chargeTypeId()));
m_ui->lblChargeType->setText(m_pdmDtc->trChargeTypeShortName(m_hitLineInfo.chargeTypeId()));
const QString contamination = getContaminations(m_hitLineInfo.contaminationStates());
m_ui->lbContamination->setHidden(contamination.isEmpty());
m_ui->lblContamination->setHidden(contamination.isEmpty());
m_ui->lblContamination->setText(contamination.isEmpty() ? QStringLiteral("-") : contamination);
m_isInitialized = true;
}
QString HitLineInfoDialog::getContaminations(const std::vector< Buildings::ContaminationState > &contaminationStates) const
{
QStringList contaminationList;
for(const auto &cs : contaminationStates){
AreaEffectSimulation::AesItem item;
m_aesDtc->aesItemFromId(cs.aesId(), item);
const ProjectDataManagement::GearClass &gc = m_pdmDtc->gearClassFromChargeTypeId(item.chargeStruct().chargeTypeId());
if (gc == ProjectDataManagement::GearClass::Unknown)
continue;
QString gearClassName = ProjectDataManagement::toString(gc).trimmed();
gearClassName.chop(gearClassName.size()-1); // get only the First letter: Nuclear -> 'N'
if (!contaminationList.contains(gearClassName))
contaminationList.append(gearClassName);
}
return contaminationList.join(QStringLiteral("+"));
}
// end of showHitLineInfos()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::onFindOriginatorOnMap()
{
if (m_sitMapGuiIfc)
m_sitMapGuiIfc->centerMapToParticipant(m_participantOriginator.id());
} // end of onFindOriginatorOnMap()
//-----------------------------------------------------------------------------
void HitLineInfoDialog::onFindBuildingOnMap()
{
if (m_sitMapGuiIfc)
m_sitMapGuiIfc->centerMapToBuildingObject(m_hitLineInfo.buildingId());
} // end of onFindBuildingOnMap()
//-----------------------------------------------------------------------------
} // namespace Buildings