/** * @RDE_HEADER@ * ExerciseManangement - Exercise Overview Dialog * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-02-29 */ #include "exm_dialog.h" #include "ui_exm_dialog.h" #include "exm_dialog_model.h" #include "exm_edit_dialog.h" #include "CustomViews/exm_exercise.h" #include #include #include #include #include #include namespace ExerciseManagement { //--------------------------------- // ExerciseManagementDialog //--------------------------------- ExerciseManagementDialog::ExerciseManagementDialog(const QString &menuGroup, QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly) , m_model(nullptr) , m_ui(new Ui::ExerciseManagementDialog) , m_session(nullptr) , m_ftc(nullptr) , m_menuGroup(menuGroup) , m_requestHelper(new LtsUtils::RequestHelper(this)) , m_logger(getLogger("ExerciseManagementDialog")) { m_ui->setupUi(this); setOnlineHelpFilename(QStringLiteral("Administrator-Exercises")); m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &ExerciseManagementDialog::onAddExercise); m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &ExerciseManagementDialog::onEditExercise); m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, this, &ExerciseManagementDialog::onRemoveExercise); connect(m_ui->widget, &LtsDataView::LtsDataView::signalDoubleClicked, this, &ExerciseManagementDialog::onEditExercise); } ExerciseManagementDialog::~ExerciseManagementDialog() { delete m_ui; } void ExerciseManagementDialog::retranslate() { translate(m_ui, tr("Exercises")); } void ExerciseManagementDialog::tableColumnOrganiserSetting() { //LtsColumnOrganiser m_ui->widget->setColumnsOrganiserEnabled(identifier(), true); } bool ExerciseManagementDialog::init(LtsSession::LtsSessionDataDds *session) { m_session = session; std::shared_ptr dtc; std::shared_ptr asmDtc; std::shared_ptr pdmDtc; if (!m_session->getDtc(dtc)) return false; if (!m_session->getFtc(m_ftc)) return false; if (!m_session->getDtc(pdmDtc)) return false; if (!m_session->getDtc(asmDtc)) return false; if (!m_session->getDtc(m_flmDtc)) return false; if (!m_session->getFtc(m_flmFtc)) return false; m_flmDtc->enableAll(); m_model = new ExerciseManagementDialogModel(this); m_model->initModel(dtc, m_ftc, asmDtc, pdmDtc, true); auto proxy = new ExerciseManagementProxyModel(this); proxy->setSourceModel(m_model); proxy->setAdminExerciseVisible(false); proxy->setVisibleExerciseIds({-1}); m_ui->widget->setModel(proxy, [this]() { return new CustomViewExercise(this); }); m_ui->widget->hideColumn(ExerciseManagementDialogModel::Image); const bool hasLinkedExercises = LtsUtils::ProjectSettings::isFunctionEnabled(QStringLiteral("Exercises"), QStringLiteral("CanBeLinked")); const bool hasHlaInterface = LtsUtils::ProjectSettings::isFunctionEnabled(QStringLiteral("Exercises"), QStringLiteral("HasHlaInterface")); m_ui->widget->setColumnHidden(ExerciseManagementDialogModel::LinkedId, !hasLinkedExercises); m_ui->widget->setColumnHidden(ExerciseManagementDialogModel::HasHlaInterface, !hasHlaInterface); connect(m_ui->widget, &LtsDataView::LtsDataView::signalSelectionChanged, this, &ExerciseManagementDialog::enaDisa); enaDisa(); LtsUtils::ProjectSettings *ps = LtsUtils::ProjectSettings::getInstance(); const bool enableEditPhases = ps->value(QStringLiteral("exm"), QStringLiteral("enableEditPhases")).toBool(); if (!enableEditPhases) m_ui->widget->hideColumn(ExerciseManagementDialogModel::ActivePhase); return true; } void ExerciseManagementDialog::enaDisa() { QModelIndexList selectedRows = m_ui->widget->selectedRows(); const int cntSelectedRows = selectedRows.size(); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, cntSelectedRows == 1); const QModelIndex curIdx = m_ui->widget->currentIndex(); const ExerciseManagement::ExerciseState state = m_model->getRowData(curIdx.row()).state(); const bool isRemovable = (state == ExerciseManagement::ExerciseState::Unknown || state == ExerciseManagement::ExerciseState::Created || state == ExerciseManagement::ExerciseState::Stopped || state == ExerciseManagement::ExerciseState::Terminated); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, curIdx.isValid() && isRemovable); } void ExerciseManagementDialog::onAddExercise() { ExerciseManagementEditDialog *dialog = new ExerciseManagementEditDialog(this); dialog->init(m_session, m_menuGroup, -1 /* new exercise */); addDialog(dialog, m_menuGroup, QStringLiteral("NewExercise")); } void ExerciseManagementDialog::onRemoveExercise() { const QModelIndex curIdx = m_ui->widget->currentIndex(); if (!curIdx.isValid()) return; const int exId = m_model->getRowData(curIdx.row()).id(); const int folderId = m_flmDtc->getExerciseFolderId(exId); if (folderId > 0) { Core::RemoveElementRequest req(folderId); m_requestHelper->startSingleRequest([req, this]() { return m_flmFtc->folderRemoveRequest(req, this); }); } ExerciseManagement::ExerciseRemoveRequest req(exId, false); m_requestHelper->startSingleRequest([req, this]() { m_ftc->enableExerciseRemove(); return m_ftc->exerciseRemoveRequest(req, this); }); } void ExerciseManagementDialog::onEditExercise() { const QModelIndex idx = m_ui->widget->currentIndex(); const Exercise ex = m_model->getRowData(idx.row()); if (ex.id() <= 0) return; DEBUG_LOG(m_logger) << "current EXId: " << ex.id(); ExerciseManagementEditDialog *dialog = new ExerciseManagementEditDialog(this); dialog->init(m_session, m_menuGroup, ex.id()); const QString identifier = QStringLiteral("EditExercise%1").arg(ex.id()); addDialog(dialog, m_menuGroup, identifier); } } // namespace ExerciseManagement