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

167 lines
6.9 KiB
C++
Executable File

/**
* @RDE_HEADER@
* ExerciseManangement - Exercise Edit Dialog
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2016-02-29
*/
#pragma once
#include <ExerciseManagement/exm_ftc.h>
#include <ExerciseManagement/exm_dtc.h>
#include <ExerciseManagement/logger.h>
#include <LtsWidgets/lts_dialog.h>
#include <LtsUtilsGuiDds/request_helper.h>
#include <LtsSession/lts_session_data_dds.h>
#include <Plugins/OperatorManagement/opm_data_plugin_interface.h>
#include <Plugins/AssetManagement/asm_data_plugin_interface.h>
#include <Plugins/ProjectDataManagement/pdm_data_plugin_interface.h>
#include <Plugins/ParticipantManagement/ppm_data_plugin_interface.h>
#include <Plugins/FileManagement/flm_data_plugin_interface.h>
#include <Plugins/FileManagement/flm_explorer_gui_plugin_interface.h>
#include <FileManagement/flm_translation.h>
namespace Ui
{
class ExerciseManagementEditDialog;
}
namespace ExerciseManagement
{
namespace JsonKeys
{
// general
inline QString XMLTYPE() { return QStringLiteral("XmlType"); }
inline QString XMLTYPEVALUE() { return FileManagement::toString(FileManagement::XmlType::EXMExerciseDescription); }
// Exercise
inline QString PHASES() { return QStringLiteral("phases"); }
inline QString OPERATORS() { return QStringLiteral("operators"); }
inline QString FORCES() { return QStringLiteral("forces"); }
inline QString DESCRIPTION() { return QStringLiteral("description"); }
// ExercisePhase:
inline QString PID() { return QStringLiteral("phaseId"); }
inline QString PNAME() { return QStringLiteral("phaseName"); }
inline QString PISDELETED() { return QStringLiteral("phaseIsDeleted"); }
inline QString PISUSED() { return QStringLiteral("phaseIsUsed"); }
inline QString PBEGINTIME() { return QStringLiteral("phaseBeginTime"); }
inline QString PENDTIME() { return QStringLiteral("phaseEndTime"); }
inline QString PDESCRIPTION() { return QStringLiteral("phaseDescription"); }
inline QString PEXERCISEID() { return QStringLiteral("phaseExerciseId"); }
} // namespace JsonKeys
class ExercisePhaseModel;
class ExercisePhaseProxyModel;
class ExerciseOperatorModel;
// --------------------------------------------------------
// ExerciseManagementEditDialog
// --------------------------------------------------------
class ExerciseManagementEditDialog final : public LtsWidgets::LtsDialog
, protected ExerciseManagement::Interface::Ftc::ExerciseCreateReplyHandler
, protected ExerciseManagement::Interface::Ftc::ExerciseModifyReplyHandler
, protected ExerciseManagement::Interface::Ftc::ExerciseImageModifyReplyHandler
, protected ExerciseManagement::Interface::Ftc::GetExerciseImageReplyHandler
, protected ExerciseManagement::Interface::Ftc::ExercisePhaseRemoveReplyHandler
, protected OperatorManagement::Interface::Ftc::OperatorCreateModifyReplyHandler
, protected FileManagement::Interface::Ftc::FolderModifyReplyHandler
, protected FileManagement::Interface::Ftc::FolderRemoveReplyHandler
{
Q_OBJECT
public:
explicit ExerciseManagementEditDialog(QWidget *parent = nullptr);
bool init(LtsSession::LtsSessionDataDds *session,
const QString &menuGroup,
const int exerciseId);
~ExerciseManagementEditDialog();
protected:
void onExerciseCreateReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); }
void onExerciseModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); }
void onExerciseImageModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); imageModifyError(); }
void onGetExerciseImageReply(const GetExerciseImageReply &reply) override final;
void onExercisePhaseRemoveReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); }
void onOperatorCreateModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); }
void onFolderModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); }
void onFolderRemoveReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); }
private slots:
void slotChangeImage();
void enaDisaOperatorsButtons();
void enaDisaPhaseButtons();
void onAddExercisePhase();
void onEditVisibleParties();
void onEditExercisePhase();
void onRemoveExercisePhase();
void onExport();
void onImport();
void onCreateFolders();
void onExerciseChanged(const Exercise &data, DataModification modType);
void onExercisePhaseChanged(const ExercisePhase &data, DataModification modType);
void onContextMenuRequested(const QPoint &position);
void onSelectAllUsers();
void onUnselectAllUsers();
void onTimeZoneChanged();
signals:
void sendData(const ExerciseManagement::Exercise &data);
private:
void retranslate() override;
bool apply() override final;
void enaDisa();
void fillStateCbx();
void fillTrainingAreaCbx();
void fillActivePhaseCbx();
void fillRadioGroupCbx();
void fillLinkedExercisesCbx();
void fillAllCbx();
void imageModifyError();
void sendModifiedOperators(int thisExerciseId);
int createFolder(int parentFolderId, const QString &folderName, bool isHidden = false);
bool createFolders(int newExId);
bool createExerciseFolders(int parentFolderId, const QStringList &folderNames);
ExerciseModifyRequest setRequestContent() const;
QByteArray exerciseToJson() const;
ExerciseModifyRequest jsonToExercise(const QByteArray &content) const;
void requestImage();
const QPixmap getPixmap() const;
int getExerciseFolder();
Ui::ExerciseManagementEditDialog *m_ui{nullptr};
LtsSession::LtsSessionDataDds *m_session{nullptr};
ExercisePhaseModel *m_phaseModel{nullptr};
ExercisePhaseProxyModel *m_phaseProxyModel{nullptr};
ExerciseOperatorModel *m_operatorModel{nullptr};
bool m_pictureChanged{false};
int m_exerciseId{-1};
QVariant m_initialRadioGroupId;
ExerciseState m_currentState;
std::shared_ptr<Interface::Dtc> m_dtc;
std::shared_ptr<Interface::Ftc> m_ftc;
std::shared_ptr<OperatorManagement::Interface::Dtc> m_opmDtc;
std::shared_ptr<AssetManagement::Interface::Dtc> m_asmDtc;
std::shared_ptr<ProjectDataManagement::Interface::Dtc> m_pdmDtc;
std::shared_ptr<ParticipantManagement::Interface::Dtc> m_ppmDtc;
std::shared_ptr<FileManagement::Interface::Dtc> m_flmDtc;
std::shared_ptr<FileManagement::Interface::Ftc> m_flmFtc;
std::shared_ptr<FileManagement::ForeignGuiInterface> m_flmGui;
QString m_menuGroup;
LtsUtils::RequestHelper *m_requestHelper{nullptr};
LOGGER_T m_logger;
template<class T>
bool removeElement(std::vector<T> &vec, T elem);
bool hasVisibleParties(const std::vector<OperatorManagement::PartiesByExercise> vpbe) const;
};
}