281 lines
10 KiB
C++
Executable File
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
|