156 lines
3.9 KiB
C++
Executable File
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;
|
|
};
|
|
}
|