Files
T
berrux-dev 598fc2560e Complete Qt6 migration: full clean build green across groups G1-G12 incl. runtime plugin set
new_docker_build.sh gains Group 12 (212 GUI/Data plugins); fixes LtsUtilsGuiDds visibility (LTO-stripped exports), LtsProjectionWorkstation unity name shadow, 6 unity-off dirs (dup file-scope statics, ddsftc INTERFACE sources) and reconfigures BUILD_FILTERMANAGEMENT/BUILD_PLUGINS_SERVICEMONITOR=ON
2026-10-20 09:36:57 +02:00

274 lines
9.8 KiB
C++
Executable File

#include "pre_dialog.h"
#include <NGLLogger/NGLLoggerBootstrap.h>
#include "ui_pre_dialog.h"
#include <PresentationManagement/Gui/Common/pre_edit_dialog.h>
#include <Plugins/PresentationManagement/Gui/Common/pre_model.h>
#include <LtsUtils/LtsUtilsGui/LtsUtilsGuiDds/request_helper.h>
#include <LtsSession/lts_session_data.h>
#include <LtsWidgets/lts_base_layout_widget.h>
#include <QtCore/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(NGL::NGLLoggerBootstrap::getNGLRootLogger())
{
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 , 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 , 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())
return;
Presentation pre = m_model->getRowData(m_ui->widget->currentIndex().row());
if (pre.fileStatus == fs)
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()
{
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));
}
}