Files
qt5-legatus-legacy/Lts/Plugins/ParticipantManagement/Gui/Uas/ppm_uas_edit_dialog.cpp
T
2026-08-13 18:33:10 +02:00

244 lines
6.2 KiB
C++
Executable File

/**
* @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 <ParticipantManagement/ppm_dtc.h>
#include <ParticipantManagement/ppm_ftc.h>
#include <ParticipantManagement/logger.h>
#include <Plugins/ParticipantManagement/ppm_data_plugin_interface.h>
#include <PluginInterfaces/gui_plugin_interface.h>
//FLM
#include <FileManagement/flm_data_plugin_interface.h>
#include <FileManagement/flm_translation.h>
#include <LtsUtils/LtsUtilsGui/LtsUtilsGuiDds/request_helper.h>
#include <LtsSession/lts_session.h>
#include <QInputDialog>
#include <QMessageBox>
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<DataInterface>(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<ExerciseManagement::DataInterface>(m_exmDtc);
m_session->getDtc<ParticipantManagement::DataInterface>(m_ppmDtc);
m_session->getDtc<FileManagement::DataInterface>(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<int>::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<int, Participant> 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