/** * @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 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 &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