244 lines
6.2 KiB
C++
Executable File
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
|