202 lines
7.5 KiB
C++
Executable File
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
|