/** * @RDE_HEADER@ * Evaluations - Criterium Create / Edit Dialog * $Id$ * $HeadURL$ * $Author$ * * Created by Hanna E. Rathje, SLSE, 2017-11-01 */ #include "evl_edit_dialog.h" #include "ui_evl_edit_dialog.h" #include #include #include #include #include #include #include namespace Evaluations { CriteriumEditDialog::CriteriumEditDialog(QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkCancel) , m_requestHelper(new LtsUtils::RequestHelper(this)) , m_ui(new Ui::CriteriumEditDialog) , m_logger(getLogger("CriteriumEditDialog")) { DEBUG_LOG(m_logger) << "CriteriumEditDialog ctor"; m_ui->setupUi(this); m_uiRequirements->addRequirement({ m_ui->lblName, [this]() { return !m_ui->leName->text().isEmpty(); } }); } CriteriumEditDialog::~CriteriumEditDialog() { delete m_ui; } void CriteriumEditDialog::retranslate() { translate(m_ui, m_dtc->evaluationCriterium(m_criteriumId), tr("Criterium")); } bool CriteriumEditDialog::init(int criteriumId, LtsSession::LtsSession *session, const std::shared_ptr &dtc, const std::shared_ptr &ftc, const std::shared_ptr &opmCbxDtc) { DEBUG_LOG(m_logger) << "CriteriumEditDialog::init"; m_criteriumId = criteriumId; m_dtc = dtc; m_ftc = ftc; m_session = session; opmCbxDtc->fillOperatorComboBox(m_ui->cbxOperators); if (m_criteriumId > 0) //edit { Evaluations::EvaluationCriterium eval = m_dtc->evaluationCriterium(m_criteriumId); m_ui->leName->setText(QString::fromStdString(eval.name())); m_ui->teDesc->setText(QString::fromStdString(eval.description())); m_ui->cbxOperators->setCurrentIndex(m_ui->cbxOperators->findData(eval.operatorId())); } else { m_ui->cbxOperators->setCurrentIndex(m_ui->cbxOperators->findData(LtsSessionData::LtsSessionData::getInstance()->getOperatorId())); } m_ui->leName->setFocus(); // Save/Load from Library Button m_buttonBox->connectLibraryButton(this, &CriteriumEditDialog::onImportButtonClicked, &CriteriumEditDialog::onExportButtonClicked); if (!m_session->getForeignGuiInterface(m_flmGui)) m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Library, false); return true; } bool CriteriumEditDialog::apply() { // prepare request EvlCriteriumModifyRequest req; req.id(m_criteriumId); req.name(m_ui->leName->text().toStdString()); req.description(m_ui->teDesc->toPlainText().toStdString()); req.operatorId(m_ui->cbxOperators->currentData().toInt()); return m_requestHelper->startSingleRequest([this, req]() { return m_ftc->evlCriteriumModifyRequest(req, this); }); } QByteArray CriteriumEditDialog::UiToJson() { QJsonObject obj; obj[QStringLiteral("XmlType")] = FileManagement::toString(FileManagement::XmlType::EVLCriteriumEdit); obj[QStringLiteral("Name")] = m_ui->leName->text(); obj[QStringLiteral("Description")] = m_ui->teDesc->toPlainText(); obj[QStringLiteral("OperatorId")] = m_ui->cbxOperators->currentData().toInt(); return QJsonDocument(obj).toJson(QJsonDocument::Compact); } // end UiToJson void CriteriumEditDialog::jsonToUi(const QByteArray &content) { // TODO: check for json error ... const QJsonDocument doc(QJsonDocument::fromJson(content)); const QJsonObject obj(doc.object()); QString name = obj[QStringLiteral("Name")].toString(); QString description = obj[QStringLiteral("Description")].toString();; int operatorId = obj[QStringLiteral("OperatorId")].toInt(); m_ui->leName->setText(name); m_ui->teDesc->setText(description); m_ui->cbxOperators->setCurrentIndex(m_ui->cbxOperators->findData(operatorId)); } // end jsonToUi void CriteriumEditDialog::onExportButtonClicked() { QByteArray byteArray = UiToJson(); int fileId = m_flmGui->saveFileContent(this, FileManagement::FileType::Xml, m_session->exerciseId(), byteArray); if (fileId > 0) DEBUG_LOG(m_logger) << "Saved file with id = " << fileId; else ERROR_LOG(m_logger) << "Could not save file in library "; } void CriteriumEditDialog::onImportButtonClicked() { QByteArray content; int fileId = m_flmGui->loadFileContent(this, content, {FileManagement::FileType::Xml}, m_session->exerciseId(), FileManagement::toString(FileManagement::XmlType::EVLCriteriumEdit)); if (fileId > 0) { if (!m_flmGui->isXmlType(content, FileManagement::toString(FileManagement::XmlType::EVLCriteriumEdit))) { QHash texts({{LtsWidgets::Button::Yes, tr("Ok")}}); LtsWidgets::LtsMessageDialog::showMessage(this, tr("Invalid xml file content"), windowTitle(), LtsWidgets::Behaviour::Modal, LtsWidgets::Button::Yes, texts); } else { jsonToUi(content); } } } // end onImportButtonClicked } // namespace Evaluations