/** *@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 #include #include #include #include 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 &dtc, const std::shared_ptr &pdmDtc, const std::shared_ptr &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