/** * @RDE_HEADER@ * Dialog for Editing UASs * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Fritsche, ESZS, 2025-07-01 */ #include "ppm_uas_edit_dialog.h" #include "ui_ppm_uas_edit_dialog.h" #include #include #include #include #include //FLM #include #include #include #include #include #include namespace ParticipantManagement { UasEditDialog::UasEditDialog(QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkApplyCancel) , m_ui(new Ui::UasEditDialog) , m_requestHelper(new LtsUtils::RequestHelper(this)) { m_ui->setupUi(this); connect(m_ui->pbUnlink, &QPushButton::clicked, this, &UasEditDialog::onUnlinkClicked); } UasEditDialog::~UasEditDialog() { delete m_ui; } void UasEditDialog::init(LtsSession::LtsSession *session, const UAS &data) { if (!session) return; m_session = session; if(!m_session->getFtc(m_ppmFtc)) return; m_data = data; if ( m_session->exerciseId() > 0) setOnlineHelpFilename(QStringLiteral("Situation-UAS-Linking-Edit")); else setOnlineHelpFilename(QStringLiteral("Administrator-UAS-List-Edit")); if (!m_ppmFtc->isCreateModifyUasEnabled()) m_ppmFtc->enableCreateModifyUas(); m_session->getDtc(m_exmDtc); m_session->getDtc(m_ppmDtc); m_session->getDtc(m_flmDtc); if (m_session->isExercisePartition()) { m_ui->lblPort->hide(); m_ui->lePort->hide(); m_ui->lblHost->hide(); m_ui->leHost->hide(); m_ui->leIdentifier->setEnabled(false); m_ui->pbUnlink->hide(); m_ui->udpRadioBtn->hide(); m_ui->tcpRadioBtn->hide(); m_ui->connectionModeLabel->hide(); connect(m_ui->cbParticpant, QOverload::of(&QComboBox::currentIndexChanged), this, &UasEditDialog::onUAVParticipantChanged); } fillData(); } QString UasEditDialog::dialogIdentifier() const { return m_data.id() <= 0 ? tr("Add UAS") : tr("Edit UAS %1").arg(m_data.id()); } void UasEditDialog::retranslate() { translate(m_ui, tr("UAS Edit")); } bool UasEditDialog::apply() { return sendData(); } void UasEditDialog::onCreateModifyUasReply(const Core::FunctionReplyObject &reply) { m_requestHelper->requestReply(reply); if (m_data.id() <= 0) return; const auto &newData = m_ppmDtc->uAS(m_data.id()); m_data = newData; fillData(); } void UasEditDialog::fillParticipantCbx() { QSignalBlocker s(m_ui->cbParticpant); m_ui->cbParticpant->clear(); m_ui->cbParticpant->insertItem(0, QStringLiteral("-")); //find uas Types that are not deleted QMap part_map; for (const auto &part : m_ppmDtc->participants()) { if (m_ppmDtc->isTypeUas(part.typeId()) && !part.isDeleted()) { part_map.insert(part.id(), part); } } //then filter out used for (const auto &uav : m_ppmDtc->uASs()) { if (uav.exerciseId() == m_session->exerciseId() && uav.participantId() != m_data.participantId()) { part_map.remove(uav.participantId()); } } //next fill cbx with color for (const auto &uavPart : part_map) { QPixmap pix = QPixmap(10,10); pix.fill(QColor::fromRgb(m_ppmDtc->party(uavPart.partyId()).color())); m_ui->cbParticpant->insertItem(uavPart.id(), pix, m_ppmDtc->hierarchyFromParticipant(uavPart.id()), uavPart.id()); } } void UasEditDialog::fillData() { if (m_session->isExercisePartition()) { if (!m_ppmDtc) { ERROR_LOG(m_logger) << "No PPM DTC; No Participant Assignmend"; } else { fillParticipantCbx(); if (m_data.participantId() > 0) { m_ui->cbParticpant->setCurrentIndex(m_ui->cbParticpant->findData(m_data.participantId())); } } } else { QSignalBlocker s(m_ui->cbParticpant); m_ui->cbParticpant->clear(); if(m_data.participantId() == 0 || m_data.exerciseId() == 0) { m_ui->cbParticpant->insertItem(0, QStringLiteral("-")); } else if (m_data.exerciseId() != m_session->exerciseId()) { // we assume, that the exercise id is set, because the participant id is set m_ui->cbParticpant->insertItem(0, tr("Participant from exercise %1").arg(QString::fromStdString(m_exmDtc->exercise(m_data.exerciseId()).name()))); } m_ui->cbParticpant->setEnabled(false); } m_ui->leIdentifier->setText(QString::fromStdString(m_data.deviceIdentifier())); m_ui->leHost->setText(QString::fromStdString(m_data.hostname())); m_ui->lePort->setText(QString::number(m_data.hostport())); m_ui->pbUnlink->setEnabled(m_data.exerciseId() > 0); m_ui->tcpRadioBtn->setChecked(m_data.useTcp()); m_ui->udpRadioBtn->setChecked(!m_data.useTcp()); } bool UasEditDialog::sendData() { CreateModifyUasRequest req; req.id(m_data.id()); req.deviceIdentifier(m_ui->leIdentifier->text().toStdString()); req.participantId(m_data.participantId()); req.exerciseId(m_data.exerciseId()); req.hostname(m_ui->leHost->text().toStdString()); req.hostport(m_ui->lePort->text().toInt()); req.useTcp(m_ui->tcpRadioBtn->isChecked()); m_requestHelper->addRequest([this, req]() { return m_ppmFtc->createModifyUasRequest(req, this); }); return m_requestHelper->startRequests(); } void UasEditDialog::onUnlinkClicked() { int ret = QMessageBox::warning(this, tr("Unlink UAS"), tr("Do you really want to unlink selected uas?"), QMessageBox::Yes | QMessageBox::Cancel); if(ret == QMessageBox::Yes) { m_data.exerciseId() = 0; m_data.participantId() = 0; sendData(); } } void UasEditDialog::onUAVParticipantChanged() { if (m_ui->cbParticpant->currentData().toInt() > 0) { m_data.exerciseId() = m_session->exerciseId(); m_data.participantId() = m_ui->cbParticpant->currentData().toInt(); } else { m_data.exerciseId() = 0; m_data.participantId() = 0; } } } //namespace ParticipantManagement