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

167 lines
5.3 KiB
C++
Executable File

/**
* @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 <LtsSession/lts_session.h>
#include <LtsSession/lts_session_data.h>
#include <ngltools/ngltools_dtg.h>
#include <PresentationManagement/pre_translation.h>
#include <QDateTime>
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<Interface::Dtc> &dtc,
const std::shared_ptr<Interface::Ftc> &ftc,
const std::shared_ptr<OperatorManagement::Interface::Dtc> &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