/** * @RDE_HEADER@ * ExerciseManangement - Exercise Overview Dialog Model * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-02-29 */ #pragma once #include #include #include #include #include #include #include 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 { 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 &dtc, const std::shared_ptr &ftc, const std::shared_ptr &asmDtc, const std::shared_ptr &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 m_exmDtc; std::shared_ptr m_exmFtc; std::shared_ptr m_asmDtc; std::shared_ptr m_pdmDtc; QVector m_preloadImages; QMap 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 &visibleStates); void setVisibleExerciseIds(const QVector &exIds); void setSourceModel(QAbstractItemModel *sourceModel) override; protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; private: ExerciseManagementDialogModel *m_sourceModel = nullptr; QVector m_exIds; QVector m_visibleStates; bool m_bAdminVisible = false; }; }