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

221 lines
9.6 KiB
C++
Executable File

/**
* @RDE_HEADER@
* MeteoDataManagement - Static Meteo Data Edit Dialog
* $Id$
* $HeadURL$
* $Author$
* Created by hjl, SLSE, 2016-10-17
*/
#include "esc_order_edit.h"
#include "ui_esc_order_edit.h"
#include <EffectShowManagement/esm_translation.h>
namespace EffectShowClient
{
//=============================================================================
OrderEdit::OrderEdit(const Order &order, bool fireReadinessAvailable, QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkCancel)
, m_ftc(nullptr)
, m_ui(new Ui::OrderEdit)
, m_requestHelper(new LtsUtils::RequestHelper(this))
, m_order(order)
, m_fireReadinessAvailable(fireReadinessAvailable)
, m_logger(getLogger("OrderEdit"))
{
m_ui->setupUi(this);
}
//=============================================================================
OrderEdit::~OrderEdit()
{
delete m_ui;
}
//=============================================================================
bool OrderEdit::init(const std::shared_ptr<EffectShowClient::Interface::Ftc> &ftc, EffectShowManagement::OrderConfirmation_e order)
{
DEBUG_LOG(m_logger) << "OrderEdit::init()";
if (!ftc)
{
ERROR_LOG(m_logger) << "OrderEdit::init() Invalid shared_ptr!";
return false;
}
m_ftc = ftc;
// Set a consistent font size for the comboBox
QFont cbFont = m_ui->cbOrderConfirmation->font();
#ifdef TABLET_MODE
m_ui->cbxAnswer->setMinimumHeight(50);
cbFont.setPointSizeF(cbFont.pointSizeF()*1.5);
#endif
m_ui->cbOrderConfirmation->setFont(cbFont);
m_ui->cbxAnswer->setFont(cbFont);
createOrderList();
if (order == EffectShowManagement::OrderConfirmation_e::WaitingForAcceptance)
showOrder();
else
{
m_ui->cbOrderConfirmation->addItem(m_orderList[order.underlying()]);
m_ui->cbOrderConfirmation->setEnabled(false);
slotChangesMade();
setUnchangeable(true);
}
if (m_ui->cbxAnswer->lineEdit())
{
m_ui->cbxAnswer->lineEdit()->setFont(cbFont);
m_ui->cbxAnswer->lineEdit()->setMaxLength(39);
}
m_ui->cbxAnswer->addItem(QString());
m_ui->cbxAnswer->addItem(tr("Remaining time not sufficient"));
m_ui->cbxAnswer->addItem(tr("Not enough ammunition for order"));
m_ui->cbxAnswer->addItem(tr("Presentation vehicle has got stuck"));
m_ui->cbxAnswer->addItem(tr("Commanding a fixed restricted area"));
m_ui->cbxAnswer->addItem(tr("Command into a variable restricted area"));
m_ui->cbxAnswer->addItem(tr("Maximum permissible working time exceeded"));
m_ui->cbxAnswer->addItem(tr("Order executed, no confirmation"));
m_uiRequirements->addRequirement({m_ui->lblOrderConfirmation, [this]() { return (m_ui->cbOrderConfirmation->currentIndex() != -1); }});
m_uiRequirements->addRequirement({m_ui->lblAnswer, [this]() { return checkForAnswerUiRequirement(); }});
return true;
}
//=============================================================================
bool OrderEdit::apply()
{
// Send modified data via FTC call
return m_requestHelper->startSingleRequest([this]()
{
OrderModifyRequest orderModifyRequest;
int key = m_orderList.key(m_ui->cbOrderConfirmation->currentText());
EffectShowManagement::OrderConfirmation_e oc = EffectShowManagement::OrderConfirmation_e::inner_enum(key);
orderModifyRequest.orderConfirmation(oc);
orderModifyRequest.answerText(m_ui->cbxAnswer->currentText().toStdString());
orderModifyRequest.id(m_order.id());
return m_ftc->orderModifyRequest(orderModifyRequest, this);
});
}
//-----------------------------------------------------------------------------
void OrderEdit::retranslate()
{
if (m_order.typeOfOrder() == 0)
translate(m_ui, tr("Edit relocation order"));
else
translate(m_ui, tr("Edit Effectshow Order"));
}
//-----------------------------------------------------------------------------
bool OrderEdit::checkForAnswerUiRequirement() const
{
if (m_ui->cbOrderConfirmation->currentIndex() == -1)
return true;
int key = m_orderList.key(m_ui->cbOrderConfirmation->currentText());
return !(((key == EffectShowManagement::OrderConfirmation_e_def::Nonacceptance) ||
(key == EffectShowManagement::OrderConfirmation_e_def::Abort)) &&
m_ui->cbxAnswer->currentText().isEmpty());
}
//-----------------------------------------------------------------------------
void OrderEdit::showOrder()
{
QStringList orderList;
switch (m_order.orderConfirmation().underlying())
{
case EffectShowManagement::OrderConfirmation_e_def::WaitingForAcceptance:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::OrderAcceptance]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::DriveOff]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::PositionReached];
if (m_order.typeOfOrder() != 0 && m_fireReadinessAvailable)
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::FiringReadiness];
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Nonacceptance];
break;
case EffectShowManagement::OrderConfirmation_e_def::OrderAcceptance:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::DriveOff]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::InterruptRelocation]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::PositionReached];
if (m_order.typeOfOrder() != 0 && m_fireReadinessAvailable)
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::FiringReadiness];
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
case EffectShowManagement::OrderConfirmation_e_def::DriveOff:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::InterruptRelocation]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::PositionReached];
if (m_order.typeOfOrder() != 0 && m_fireReadinessAvailable)
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::FiringReadiness];
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
case EffectShowManagement::OrderConfirmation_e_def::PositionReached:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::InterruptRelocation];
if (m_fireReadinessAvailable)
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::FiringReadiness];
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
case EffectShowManagement::OrderConfirmation_e_def::FiringReadiness:
// orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::InterruptExecution]
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
case EffectShowManagement::OrderConfirmation_e_def::Execution:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
case EffectShowManagement::OrderConfirmation_e_def::InterruptRelocation:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::DriveOff]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::PositionReached];
if (m_order.typeOfOrder() != 0 && m_fireReadinessAvailable)
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::FiringReadiness];
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
case EffectShowManagement::OrderConfirmation_e_def::InterruptExecution:
//orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::FiringReadiness]
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::OrderCarriedOut]
<< m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
default:
orderList << m_orderList[EffectShowManagement::OrderConfirmation_e_def::Abort];
break;
}
m_ui->cbOrderConfirmation->addItems(orderList);
m_ui->cbOrderConfirmation->setCurrentIndex(-1);
}
//-----------------------------------------------------------------------------
void OrderEdit::createOrderList()
{
EffectShowManagement::OrderConfirmation_e oc = EffectShowManagement::OrderConfirmation_e_def::WaitingForAcceptance;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::OrderAcceptance;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::DriveOff;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::PositionReached;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::FiringReadiness;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::Execution;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::InterruptExecution;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::OrderCarriedOut;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::Abort;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::Nonacceptance;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
oc = EffectShowManagement::OrderConfirmation_e_def::InterruptRelocation;
m_orderList[oc.underlying()] = EffectShowManagement::toString(oc);
}
} // namespace EffectShowClient