/** * @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 #include #include #include #include #include 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 &dtc, const std::shared_ptr &ftc, const std::shared_ptr &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 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