Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* @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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user