#pragma once #include #include "multiverseitem.h" #include "qsacn_global.h" #include "qsacnuniverse.h" class QSacnNode; // forward declare node class /** * @brief The MultiverseModel class */ class QT_EXPORT MultiverseModel : public QAbstractItemModel { Q_OBJECT public: explicit MultiverseModel(QObject *parent = nullptr, QSacnNode *node = nullptr); virtual ~MultiverseModel(); // QAbstractItemModel 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; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex &index) const override; /// @brief The Catagory enum enum Catagory { Discovery, Receiver, Source }; Q_ENUM(Catagory) /// @brief The Column enum enum Column { Universe, Status, Priority, Channels, SourceName }; Q_ENUM(Column) private slots: void doDiscovery(); private: MultiverseItem * getItem(const QModelIndex &index) const; QMap categoryIndexes; QSacnNode *node_; MultiverseItem *rootItem_; void insert_(const QModelIndex &parent, QSacnUniverse *universe = nullptr, QSacnDiscoveredUniverse *discovery = nullptr); void remove_(const QModelIndex &parent, const QSacnUniverse *universe); };