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

156 lines
3.9 KiB
C++
Executable File

/**
* @RDE_HEADER@
* ExerciseManangement - Exercise Overview Dialog Model
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2016-02-29
*/
#pragma once
#include <ExerciseManagement/logger.h>
#include <LtsWidgets/lts_abstract_table_model.h>
#include <LtsWidgets/lts_column_filter_proxy_model.h>
#include <AssetManagement/asm_dtc.h>
#include <ExerciseManagement/exm_dtc.h>
#include <ExerciseManagement/exm_ftc.h>
#include <ProjectDataManagement/pdm_dtc.h>
namespace ExerciseManagement
{
class AbstractRequester
: public QObject
{
Q_OBJECT
public:
AbstractRequester()
: QObject(nullptr)
{}
signals:
void signalDone();
};
// TODO: autogen!
class GetExerciseImageRequester
: public AbstractRequester
, public ExerciseManagement::Interface::Ftc::GetExerciseImageReplyHandler
{
Q_OBJECT
private:
GetExerciseImageRequester() = default;
public:
static GetExerciseImageRequester *createGetExerciseImageRequester()
{
return new GetExerciseImageRequester;
}
const GetExerciseImageReply &reply() const
{
return m_reply;
}
void onGetExerciseImageReply(const GetExerciseImageReply &reply) override final
{
m_reply = reply;
emit signalDone();
deleteLater();
}
private:
GetExerciseImageReply m_reply;
};
// --------------------------------------------------------
// ExerciseManagementModel
// --------------------------------------------------------
class ExerciseManagementDialogModel final
: public LtsWidgets::LtsAbstractTableModel<ExerciseManagement::Exercise>
{
Q_OBJECT
public:
enum Columns
{
Id,
Name,
TrainingArea,
Begin,
End,
Started,
Stopped,
Status,
RadioGroup,
ActivePhase,
Created,
TimeZone,
Forces,
Description,
LinkedId,
Transferred,
HasHlaInterface,
Image
};
explicit ExerciseManagementDialogModel(QObject *parent = nullptr);
bool initModel(const std::shared_ptr<ExerciseManagement::Interface::Dtc> &dtc,
const std::shared_ptr<ExerciseManagement::Interface::Ftc> &ftc,
const std::shared_ptr<AssetManagement::Interface::Dtc> &asmDtc,
const std::shared_ptr<ProjectDataManagement::Interface::Dtc> &pdmDtc,
bool addAdminExercise = false,
bool preloadExerciseImages = false);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override final;
void addImagePreload(int32_t exId);
void setImageSizeConstraints(const QSize &size);
protected:
int getId(const ExerciseManagement::Exercise &data) const override final;
private slots:
void preloadNextImage();
private:
GetExerciseImageRequester *createGetExerciseImageRequester();
std::shared_ptr<ExerciseManagement::Interface::Dtc> m_exmDtc;
std::shared_ptr<ExerciseManagement::Interface::Ftc> m_exmFtc;
std::shared_ptr<AssetManagement::Interface::Dtc> m_asmDtc;
std::shared_ptr<ProjectDataManagement::Interface::Dtc> m_pdmDtc;
QVector<int32_t> m_preloadImages;
QMap<int32_t /* exId */, QByteArray /* image */> m_exerciseImages;
bool m_imagePreloadPending { false };
QSize m_imageSize;
LOGGER_T m_logger;
friend class ExerciseManagementProxyModel;
};
class ExerciseManagementProxyModel final : public LtsWidgets::LtsColumnFilterProxyModel
{
Q_OBJECT
public:
using LtsWidgets::LtsColumnFilterProxyModel::LtsColumnFilterProxyModel;
void setAdminExerciseVisible(bool bAdminVisible);
void setVisibleExerciseStates(const QVector<ExerciseState> &visibleStates);
void setVisibleExerciseIds(const QVector<int> &exIds);
void setSourceModel(QAbstractItemModel *sourceModel) override;
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
private:
ExerciseManagementDialogModel *m_sourceModel = nullptr;
QVector<int> m_exIds;
QVector<ExerciseState> m_visibleStates;
bool m_bAdminVisible = false;
};
}