Files
qt5-legatus-legacy/Lts/Plugins/ExerciseManagement/Gui/ExerciseEdit/exm_operator_edit.cpp
T
2026-08-13 18:33:10 +02:00

154 lines
4.4 KiB
C++
Executable File

/**
* @RDE_HEADER@
* ExerciseManangement - Operator Edit Dialog
* $Id: exm_edit_dialog.h 41137 2018-04-20 08:50:55Z schroeder_m $
* $HeadURL: svn://slssvn/TDS/branches/product/devel/trunk/Lts/Plugins/ExerciseManagement/Gui/ExerciseEdit/exm_edit_dialog.h $
* $Author: schroeder_m $
* Created by Malte Schröder, SLSE, 2018-04-25
*/
#include "exm_operator_edit.h"
#include "ui_exm_operator_edit.h"
#include <Plugins/ExerciseManagement/exm_data_plugin_interface.h>
#include <QMenu>
namespace ExerciseManagement
{
ExerciseManagementOperatorEdit::ExerciseManagementOperatorEdit(const QString &menuGroup, QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkApplyCancel)
, m_ui(new Ui::ExerciseManagementOperatorEdit)
, m_opmDtc(nullptr)
, m_session(nullptr)
, m_operatorModel(nullptr)
, m_menuGroup(menuGroup)
, m_exercise()
, m_requestHelper(new LtsUtils::RequestHelper(this))
, m_logger(getLogger("ExerciseManagementOperatorEdit"))
{
m_ui->setupUi(this);
#ifdef LTS_DEBUG
m_ui->dvOperators->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_ui->dvOperators, &LtsDataView::LtsDataView::customContextMenuRequested, this, &ExerciseManagementOperatorEdit::onContextMenuRequested);
#endif
setOnlineHelpFilename(QStringLiteral("Situation-Operators"));
}
ExerciseManagementOperatorEdit::~ExerciseManagementOperatorEdit()
{
delete m_ui;
}
bool ExerciseManagementOperatorEdit::init(LtsSession::LtsSessionDataDds *session)
{
m_session = session;
if (!m_session->getDtc<OperatorManagement::DataInterface>(m_opmDtc))
return false;
std::shared_ptr<Interface::Dtc> dtc;
if (!m_session->getDtc<ExerciseManagement::DataInterface>(dtc))
return false;
m_exercise = dtc->exercise(m_session->exerciseId());
m_operatorModel = new ExerciseOperatorModel(m_session, m_exercise.id(), this);
m_ui->dvOperators->setModel(m_operatorModel);
m_ui->dvOperators->seamless();
connect(m_operatorModel, &ExerciseOperatorModel::dataChanged, this, &ExerciseManagementOperatorEdit::slotChangesMade);
return true;
}
void ExerciseManagementOperatorEdit::onContextMenuRequested(const QPoint &position)
{
QMenu menu(m_ui->dvOperators);
menu.addAction(tr("Select All"), this, &ExerciseManagementOperatorEdit::onSelectAllUsers);
menu.addAction(tr("Unselect All"), this, &ExerciseManagementOperatorEdit::onUnselectAllUsers);
menu.exec(m_ui->dvOperators->mapToGlobal(position));
}
void ExerciseManagementOperatorEdit::onSelectAllUsers()
{
m_operatorModel->selectAll();
m_operatorModel->update();
}
void ExerciseManagementOperatorEdit::onUnselectAllUsers()
{
m_operatorModel->unselectAll();
m_operatorModel->update();
}
void ExerciseManagementOperatorEdit::retranslate()
{
translate(m_ui, m_exercise, tr("Exercise Operators"));
}
bool ExerciseManagementOperatorEdit::apply()
{
if (m_exercise.id() > 0)
{
sendModifiedOperators(m_exercise.id());
return true;
}
return false;
}
template<class T>
bool ExerciseManagementOperatorEdit::removeElement(std::vector<T> &vec, T elem)
{
for (auto it = vec.begin(); it != vec.end(); ++it)
{
if (*it == elem)
{
vec.erase(it);
return true;
}
}
return false;
}
void ExerciseManagementOperatorEdit::sendModifiedOperators(int thisExerciseId)
{
std::shared_ptr<OperatorManagement::Interface::Ftc> opmFtc;
if (!m_session->getFtc<OperatorManagement::DataInterface>(opmFtc))
{
ERROR_LOG(m_logger) << "Cannot change add/remove Operators to/from Exercise as the OPM-FTC could not be fetched." ;
return;
}
for (int row = 0; row < m_operatorModel->rowCount(); ++row)
{
const auto rowData = m_operatorModel->getRowData(row);
bool found = false;
OperatorManagement::User user = m_opmDtc->user(rowData.second.id());
for (auto ex : user.exerciseIds())
if (ex == thisExerciseId)
found = true;
if (found == rowData.first) // Nothing changed
continue;
if (rowData.first)
user.exerciseIds().resize(user.exerciseIds().size() + 1, thisExerciseId);
else
removeElement(user.exerciseIds(), thisExerciseId);
OperatorManagement::OperatorCreateModifyRequest req;
req.id(user.id());
req.visibleExercises() = user.exerciseIds();
req.visiblePartiesByExercise() = user.visiblePartiesByExercise();
m_requestHelper->startSingleRequest([this, req, opmFtc]()
{
return opmFtc->operatorCreateModifyRequest(req, this);
});
}
}
}