154 lines
4.4 KiB
C++
Executable File
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);
|
|
});
|
|
}
|
|
}
|
|
|
|
}
|