/** * @RDE_HEADER@ * HMI Plugin for ParticipantManagement - Participant Organisation Model * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, SLSE, 2016-10-05 */ #pragma once #include #include #include #include #include namespace ParticipantManagement { //---------------------------------------------------------------------------- class ParticipantOrgaModel final : public ParticipantIconModelBase { Q_OBJECT public: enum Columns { ColDescription, ColParticipantId }; enum class PartyOrganisationType { Party, Attached, Detached, Cooperate }; ParticipantOrgaModel(PartyOrganisationType orgType, const std::shared_ptr &ppmDtc, const std::shared_ptr &asbIfc, QObject *parent); QVector participantData(int partyId) const; QVector rootParticipantIds() const; QVariant data(const QModelIndex &index, int role) const override; int columnCount(const QModelIndex &parent) const override; // We can only move Units around but not copy them here Qt::DropActions supportedDropActions() const override { return Qt::MoveAction; } Qt::DropActions supportedDragActions() const override { return Qt::MoveAction; } Qt::ItemFlags flags(const QModelIndex &index) const override; QStringList mimeTypes()const override; QMimeData *mimeData(const QModelIndexList &indexes) const override; bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; void onReinitModel(int partyId); // for ProxyModel bool isParticipantType(int source_row, const QModelIndex &source_parent) const; public Q_SLOTS: void onParticipantOrganisationChanged(const ParticipantOrganisation &data, DataModification modType); Q_SIGNALS: void participantDataChanged(int addedParticipantId); private: void insertChildrenOf(int parentId, NGLTreeItem *parent, const QModelIndex &parentIdx, const QHash> &parentId2id, const QHash &tmap); QVector inferiorParticipants(int partId) const; QVector getChildrenOf(NGLTreeItem *parentItem, int parentId, int hierarchyNumber, int &highestModId) const; static QString headerFromOrganisationType(PartyOrganisationType orgType); bool isRootParticipantRelevant(const Participant &participant, int partyId) const; NGLTreeItem *createItem(const QVariant &data, const QIcon &icon) const override; private: int m_partyId; PartyOrganisationType m_orgType; QHash m_participantOrganization; }; class ParticipantOrgaProxyModel final : public QSortFilterProxyModel { Q_OBJECT public: using QSortFilterProxyModel::QSortFilterProxyModel; void onReinitModel(int partyId); void setSourceModel(QAbstractItemModel *sourceModel) override; protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; ParticipantOrgaModel *m_sourceModel; }; } //namespace ParticipantManagement