#pragma once #include #include "qsacnuniverse.h" #include "multiverseitem.h" class QSacnNode; // forward declare node class /** * @brief The MultiverseModel class */ class MultiverseModel : public QAbstractItemModel { Q_OBJECT public: /// @brief The Catagory enum enum Catagory { Discovery, Receiver, Source }; Q_ENUM(Catagory) /// @brief The Column enum enum Column { Universe, Priority, Description }; Q_ENUM(Column) explicit MultiverseModel(QObject *parent = nullptr, QSacnNode *node = nullptr); virtual ~MultiverseModel(); // Model overrides: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; // non-standard model operations MultiverseItem * root(); void insert(const QModelIndex &parent, QSacnUniverse *universe = nullptr, discoveredUniverse *discovery = nullptr); QMap categoryIndexes; public slots: void doDiscovery(); void doDiscovered(sACN::EXTENDED::DISCOVERY::discoveredUniverse*); void doSubscription(QSacnUniverse*); void doCreation(QSacnUniverse*); private: MultiverseItem * getItem(const QModelIndex &index) const; QSacnNode * node_; MultiverseItem * rootItem_; };