/** *@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 #include #include #include #include #include //DDS #include #include #include #include #include //SituationMap #include 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(m_bldDtc)) return false; if (!session->getDtc(m_ppmDtc)) return false; if (!session->getDtc(m_pdmDtc)) return false; if (!session->getDtc(m_aesDtc)) return false; session->getDtc(m_ismDtc); session->getForeignGuiInterface(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