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

281 lines
10 KiB
C++
Executable File

/**
* @RDE_HEADER@
* PresentationManagement - Script Overview Dialog
* $Id$
* $HeadURL$
* $Author$
*
* Created by Mike Wille, SLSE, 2017-03-15
*/
#include "pre_dialog.h"
#include "ui_pre_dialog.h"
#include <Plugins/PresentationManagement/Gui/Common/pre_edit_dialog.h>
#include <Plugins/PresentationManagement/Gui/Common/pre_model.h>
#include <LtsUtilsGuiDds/request_helper.h>
#include <LtsSession/lts_session_data.h>
#include <LtsWidgets/lts_base_layout_widget.h>
#include <QDateTime>
namespace PresentationManagement
{
PresentationManagementDialog::PresentationManagementDialog(QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
, m_model(new PresentationManagementDialogModel(this))
, m_ui(new Ui::PresentationManagementDialog)
, m_dtc(nullptr)
, m_ftc(nullptr)
, m_requestHelper(new LtsUtils::RequestHelper(this))
, m_logger(getLogger("PresentationManagementDialog"))
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog ctor";
m_ui->setupUi(this);
}
PresentationManagementDialog::~PresentationManagementDialog()
{
delete m_ui;
}
void PresentationManagementDialog::retranslate()
{
switch (m_modeDialog)
{
case ScriptsDialogMode::modeAdmin:
translate(m_ui, tr("Admin Scripts"));
break;
case ScriptsDialogMode::modeEdit:
translate(m_ui, tr("Edit Scripts"));
break;
case ScriptsDialogMode::modeView:
translate(m_ui, tr("View Scripts"));
break;
}
}
void PresentationManagementDialog::enaDisa()
{
int selected = m_ui->widget->selectedRows().size();
Presentation pre = m_model->getRowData(m_ui->widget->currentIndex().row());
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Add, false);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Edit, false);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Remove, false);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Load, false);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Save, false);
if (m_modeDialog == ScriptsDialogMode::modeAdmin)
{
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Add, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Edit, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Remove, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Load, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Save, true);
}
else if (m_modeDialog == ScriptsDialogMode::modeEdit)
{
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Add, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Edit, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Remove, false);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Load, true);
m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Save, false);
}
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Add, true);
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, (selected == 1));
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, (selected == 1 && pre.id() != m_loadedScriptId));
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Load, (selected == 1 && pre.id() != m_loadedScriptId && pre.fileStatus() == FileStatus::Valid) );
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Save, (selected == 1 && pre.fileStatus() == FileStatus::Deleted));
}
void PresentationManagementDialog::slotAdd()
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog::slotAdd";
PresentationEditDialog *dialog = new PresentationEditDialog(this);
if (!dialog->init(-1 /* new presentation */, m_dtc, m_ftc, m_opmDtc))
{
dialog->deleteLater();
return;
}
dialog->setAttribute(Qt::WA_DeleteOnClose);
QObject::connect(dialog, &PresentationEditDialog::rejected, dialog, &PresentationEditDialog::deleteLater);
dialog->show();
}
void PresentationManagementDialog::slotEdit()
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog::slotEdit";
PresentationEditDialog *dialog = new PresentationEditDialog(this);
if (!dialog->init(m_model->getRowData(m_ui->widget->currentIndex().row()).id() /* existing - edit presentation */, m_dtc, m_ftc, m_opmDtc))
{
dialog->deleteLater();
return;
}
dialog->setAttribute(Qt::WA_DeleteOnClose);
QObject::connect(dialog, &PresentationEditDialog::newScript, this, [this](int scriptId)
{
m_loadedScriptId = scriptId;
QString scriptName = QString::fromStdString(m_dtc->presentation(scriptId).name());
m_session->baseLayout()->setCustomText(tr("Script: %1").arg(scriptName));
});
QObject::connect(dialog, &PresentationEditDialog::rejected, dialog, &PresentationEditDialog::deleteLater);
dialog->show();
}
void PresentationManagementDialog::slotRemove()
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog::slotRemove";
QModelIndex selIndex = m_ui->widget->currentIndex();
if (!selIndex.isValid())
return;
Core::RemoveElementRequest req(m_model->getRowData(selIndex.row()).id());
DEBUG_LOG(m_logger) << "Removing presentation id = " << req.id();
m_requestHelper->startSingleRequest([req, this]()
{
return m_ftc->presentationRemoveRequest(req, this);
});
if (m_requestHelper->failed())
ERROR_LOG(m_logger) << "Failed to remove presentation";
}
void PresentationManagementDialog::slotDelete()
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog::slotDelete";
changeStatus(FileStatus::Deleted);
}
void PresentationManagementDialog::slotRestore()
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog::slotRestore";
changeStatus(FileStatus::Valid);
}
void PresentationManagementDialog::changeStatus(const FileStatus &fs)
{
QModelIndex selIndex = m_ui->widget->currentIndex();
if (!selIndex.isValid()) // no valid index
return;
Presentation pre = m_model->getRowData(m_ui->widget->currentIndex().row());
if (pre.fileStatus() == fs) // nothing to do
return;
PresentationChangeStatusRequest req;
req.id(pre.id());
req.fileStatus(fs);
req.operatorId(LtsSessionData::LtsSessionData::getInstance()->getOperatorId());
req.lastModified(QDateTime::currentMSecsSinceEpoch());
DEBUG_LOG(m_logger) << "Changing status for presentation id = " << pre.id();
m_requestHelper->startSingleRequest([this, req]()
{
return m_ftc->presentationChangeStatusRequest(PresentationChangeStatusRequest(req), this);
});
if (m_requestHelper->failed())
ERROR_LOG(m_logger) << "Failed to change status for presentation";
}
void PresentationManagementDialog::tableColumnOrganiserSetting()
{
//LtsColumnOrganiser
m_ui->widget->setColumnsOrganiserEnabled(identifier(), true);
}
bool PresentationManagementDialog::init(const ScriptsDialogMode &dlgMode,
const std::shared_ptr<Interface::Dtc> &dtc,
const std::shared_ptr<Interface::Ftc> &ftc,
const std::shared_ptr<OperatorManagement::Interface::Dtc> &opmDtc,
LtsSession::LtsSession *session)
{
DEBUG_LOG(m_logger) << "PresentationManagementDialog::init";
m_modeDialog = dlgMode;
m_dtc = dtc;
m_ftc = ftc;
m_opmDtc = opmDtc;
m_session = session;
m_model = new PresentationManagementDialogModel(this);
auto predicate = [](const PresentationManagement::Presentation & p)
{
return (!p.isDeleted());
};
m_model->initModel(dtc, opmDtc, predicate);
m_proxyModel = new PresentationManagementDialogProxyModel(this);
m_proxyModel->setSourceModel(m_model);
m_ui->widget->setModel(m_proxyModel);
#ifndef LTS_DEBUG
m_ui->widget->hideColumn(PresentationManagementDialogModel::Id);
#endif
m_ui->widget->setSortIndicator(PresentationManagementDialogModel::Name, Qt::AscendingOrder);
const QMap<qint32, PresentationManagement::Presentation> presentations = dtc->presentations();
for (const auto &p : presentations)
DEBUG_LOG(m_logger) << "Presentation: id = " << p.id() << ", name = " << p.name().c_str() << ", desc = " << p.description().c_str();
connect(m_ui->widget, &LtsDataView::LtsDataView::signalSelectionChanged, this, &PresentationManagementDialog::enaDisa, Qt::UniqueConnection);
m_loadedScriptId = m_session->getSavegame()[QStringLiteral("ScriptId")].toInt();
ERROR_LOG(m_logger) << "Loaded script id = " << m_loadedScriptId;
if (m_modeDialog != ScriptsDialogMode::modeView)
{
m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &PresentationManagementDialog::slotAdd, Qt::UniqueConnection);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &PresentationManagementDialog::slotEdit, Qt::UniqueConnection);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, this, &PresentationManagementDialog::slotRemove, Qt::UniqueConnection);
m_buttonBox->getButton(LtsWidgets::DialogButton::Remove)->setText(tr("Remove"));
m_buttonBox->connectButton(LtsWidgets::DialogButton::Load, this, &PresentationManagementDialog::slotDelete, Qt::UniqueConnection);
m_buttonBox->getButton(LtsWidgets::DialogButton::Load)->setText(tr("Delete"));
m_buttonBox->connectButton(LtsWidgets::DialogButton::Save, this, &PresentationManagementDialog::slotRestore, Qt::UniqueConnection);
m_buttonBox->getButton(LtsWidgets::DialogButton::Save)->setText(tr("Restore"));
connect(m_ui->widget, &LtsDataView::LtsDataView::signalDoubleClicked, this, &PresentationManagementDialog::slotEdit, Qt::UniqueConnection);
}
enaDisa();
switch (m_modeDialog)
{
case ScriptsDialogMode::modeAdmin:
setOnlineHelpFilename(QStringLiteral("Script_Editor-Administrator_Scripts"));
break;
case ScriptsDialogMode::modeEdit:
setOnlineHelpFilename(QStringLiteral("Script_Editor-Edit_Scripts"));
break;
case ScriptsDialogMode::modeView:
setOnlineHelpFilename(QStringLiteral("Script_Editor-View_Scripts"));
break;
}
return true;
}
void PresentationManagementDialog::slotSetScriptName(int scriptId)
{
m_loadedScriptId = scriptId;
QString scriptName = QString::fromStdString(m_dtc->presentation(scriptId).name());
m_session->baseLayout()->setCustomText(tr("Script: %1").arg(scriptName));
}
} // namespace PresentationManagement