/** * @RDE_HEADER@ * AssignmentParticipantModel * $Id$ * $HeadURL$ * $Author$ * Created by Norbert Thoden, NLE, 2020-06-29 */ #pragma once #include "tgt_participant_handler.h" #include #include #include #include #include namespace TargetManagement { // Forward: class ParticipantHandler; bool isEqual(const ShootbackConfiguration &c1, const ShootbackConfiguration &c2); bool isDefault(const ShootbackConfiguration &c); bool isEqual(const TargetAreaAssignment &a1, const TargetAreaAssignment &a2, bool ignoringAreaIdAndParticipantId = false); // -------------------------------------------------------- // AssignmentParticipantModel // -------------------------------------------------------- class AssignmentParticipantModel final : public LtsWidgets::LtsAbstractTableModel { Q_OBJECT using BaseClass = LtsWidgets::LtsAbstractTableModel; public: enum Columns { Id, AssignmentName, IsActive, // associated target: TargetId, TargetName, // (associated participant): TargetPartipantId, TargetPartipantEquipmentNumber, Participant, // associated area AreaId, AreaName, // configuration Interval_1, Flash_1, Effect_1, Interval_2, Flash_2, Effect_2 }; explicit AssignmentParticipantModel(QObject *parent = nullptr); bool initModel(const std::shared_ptr &tgtDtc, const std::shared_ptr &ppmDtc, const std::shared_ptr &ppmGuiCbxIfc, LtsSession::LtsSession *session); QVariant headerData(int section, Qt::Orientation orientation, int role) const override final; QVariant data(const QModelIndex &, int) const override; bool setData(const QModelIndex &index, const QVariant &value, int role) override; Qt::ItemFlags flags(const QModelIndex &index) const override; const QHash &getParticipantHierarchies() const { return m_participantHandler->getParticipantHierarchies(); } const QHash &getParticipantDecorations() const { return m_participantHandler->getParticipantDecorations(); } QSet getAssociatedParticipantIds() const; QSet getAssociatedParticipantIdsForArea(int areaId) const; QSet getAssociatedAreasIdsForParticipantId(int participantId) const; int findRowForAreaTargetParticipantId(int areaId, int targetParticipantId); const QVector &getData() const { return m_vecData; } void addGapFillerForArea(int areaId); void addGapFillerForTargetParticipantId(int targetParticipantId); Q_SIGNALS: void signalParticipantNamesChanged(); void signalEditableItemChanged(); private Q_SLOTS: void onTargetAreaAssignmentChanged(const TargetManagement::TargetAreaAssignment &data, DataModification modType); void updateColumnFilter(); private: QString effectToString(const TargetManagement::Effect &effect) const; friend class AssignmentParticipantProxyModel; std::shared_ptr m_tgt_dtc; ParticipantHandler *m_participantHandler{nullptr}; LtsSession::LtsSession *m_session{nullptr}; QIcon m_yes{QLatin1String("icon:yes.svg")}; QIcon m_no{QLatin1String("icon:no.svg")}; // column filter QSet m_usedIsActive; // Assigned QSet m_usedAreaIds; QSet m_usedAreas; QSet m_usedTargetIds; QSet m_usedTargets; QSet m_usedTargetParticipantIds; QSet m_usedParticipantEqNo; QSet m_usedParticipants; // continue with all configuration data??? LOGGER_T m_logger; }; // -------------------------------------------------------- // AssignmentParticipantProxyModel // -------------------------------------------------------- class AssignmentParticipantProxyModel : public LtsWidgets::LtsColumnFilterProxyModel { Q_OBJECT using BaseClass = LtsWidgets::LtsColumnFilterProxyModel; public: using LtsWidgets::LtsColumnFilterProxyModel::LtsColumnFilterProxyModel; void setSourceModel(QAbstractItemModel *sourceModel) override; int getFilterToAreaId() const { return m_areaId; } void filterToAreaId(int areaId = -1); int getFilterToTargetParticpantId() const { return m_targetParticipantId; } void filterToTargetParticpantId(int targetParticpantId = -1); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override final; bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; protected: AssignmentParticipantModel *m_sourceModel{nullptr}; int m_areaId{-1}; int m_targetParticipantId{-1}; }; } //namespace TargetManagement