/** * @RDE_HEADER@ * PresentationManagement - Script Create / Edit Dialog * $Id$ * $HeadURL$ * $Author$ * * Created by Mike Wille, SLSE, 2017-03-20 */ #include "pre_edit_dialog.h" #include "ui_pre_edit_dialog.h" #include #include #include #include #include namespace PresentationManagement { PresentationEditDialog::PresentationEditDialog(QWidget *parent) : LtsWidgets::LtsFramelessDialog(parent, LtsWidgets::Behaviour::Modal) , m_dtc(nullptr) , m_ftc(nullptr) , m_opmDtc(nullptr) , m_presentationId(-1) , m_ui(new Ui::PresentationEditDialog) , m_logger(getLogger("PresentationEditDialog")) { DEBUG_LOG(m_logger) << "PresentationEditDialog ctor"; // setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint | Qt::Dialog); // hints.. m_ui->setupUi(this); setWindowFlags( Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint ); // hints.. connect(m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Close), &QPushButton::clicked, this, &PresentationEditDialog::close); connect(m_ui->leName, &QLineEdit::textChanged, this, &PresentationEditDialog::validate); connect(m_ui->leName, &QLineEdit::returnPressed, this, &PresentationEditDialog::onReturnPressed); // TODO: undo this all: m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Apply)->hide(); m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Ok)->hide(); m_ui->ltsDialogButtonBox->setText(LtsWidgets::DialogButton::Add, tr("OK")); m_ui->ltsDialogButtonBox->connectButton(LtsWidgets::DialogButton::Add, this, &PresentationEditDialog::onSavePresentation, Qt::UniqueConnection); } PresentationEditDialog::~PresentationEditDialog() { delete m_ui; } bool PresentationEditDialog::init(int presentationId, const std::shared_ptr &dtc, const std::shared_ptr &ftc, const std::shared_ptr &opmDtc) { DEBUG_LOG(m_logger) << "PresentationEditDialog::init"; m_presentationId = presentationId; m_dtc = dtc; m_ftc = ftc; m_opmDtc = opmDtc; m_ui->lblFileStatus->setVisible(false); m_ui->leFileStatus->setVisible(false); m_ui->lblLastModified->setVisible(false); m_ui->leLastModified->setVisible(false); m_ui->lblOperator->setVisible(false); m_ui->leOperator->setVisible(false); if (m_presentationId > 0) //edit { PresentationManagement::Presentation p = m_dtc->presentation(m_presentationId); m_ui->leName->setText(QString::fromStdString(p.name())); m_ui->teDesc->setText(QString::fromStdString(p.description())); m_ui->lblFileStatus->setVisible(true); m_ui->leFileStatus->setVisible(true); m_ui->lblLastModified->setVisible(true); m_ui->leLastModified->setVisible(true); m_ui->lblOperator->setVisible(true); m_ui->leOperator->setVisible(true); m_ui->leOperator->setText(QString::fromStdString(m_opmDtc->user(p.operatorId()).name())); m_ui->leLastModified->setText(DTG::toStringMSec(p.lastModified())); m_ui->leFileStatus->setText(PresentationManagement::toString(p.fileStatus())); } m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Add)->setDisabled(m_ui->leName->text().isEmpty()); //touchable #ifdef TABLET_MODE m_ui->leName->setFocusPolicy(Qt::ClickFocus); m_ui->teDesc->setFocusPolicy(Qt::ClickFocus); #else m_ui->leName->setFocus(); #endif return true; } void PresentationEditDialog::validate(const QString &fileName) { m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Add)->setDisabled(fileName.isEmpty()); } void PresentationEditDialog::onReturnPressed() { if (m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Add)->isEnabled()) m_ui->ltsDialogButtonBox->getButton(LtsWidgets::DialogButton::Add)->setFocus(); } void PresentationEditDialog::onSavePresentation() { if (apply()) close(); } bool PresentationEditDialog::apply() { PresentationModifyRequest req; req.id(m_presentationId); req.name(m_ui->leName->text().toStdString()); req.description(m_ui->teDesc->toPlainText().toStdString()); req.operatorId(LtsSessionData::LtsSessionData::getInstance()->getOperatorId()); req.lastModified(QDateTime::currentMSecsSinceEpoch()); req.fileStatus(FileStatus::Valid); try { if (m_presentationId > 0) // first request already saved content { auto reply(m_ftc->getPresentationContentRequest(GetPresentationContentRequest(m_presentationId))); m_content = reply.content(); if (m_content.empty()) { throw std::runtime_error(QStringLiteral("No content for presentation with id %1").arg(reply.id()).toStdString().c_str()); } } DEBUG_LOG(m_logger) << "Content size = " << m_content.size() << " for presentationId: " << m_presentationId; req.content(m_content); m_presentationId = m_ftc->presentationModifyRequest(req); } catch(...) { LtsWidgets::LtsMessageDialog::showMessage(this, tr("Failed to save the script. Please try again later.")); return false; } emit newScript(m_presentationId); return true; } } // namespace PresentationManagement