#ifndef LEDDISPLAYTEXTMODEL_H #define LEDDISPLAYTEXTMODEL_H #include #include #include #include class LedDisplayTextModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged) Q_PROPERTY(int maximumTextSets READ getMaximumTextSets NOTIFY maximumTextSetsChanged) public: friend class LedDisplayBackend; enum LedDisplayTextModelRole { TextRole = Qt::DisplayRole, ActiveRole, RuntimeRole, ColorRole, AlignmentRole, ScrollRole, ScrollDirectionRole, ScrollSpeedRole, ScrollCountRole, IndexRole, LedDisplayTextModelRoleCount }; Q_ENUM(LedDisplayTextModelRole) enum OmobiDisplayTextAlignment { AlignLeft, AlignCenter, AlignRignt }; Q_INVOKABLE int rowCount(const QModelIndex & = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant data(int i, int role = Qt::DisplayRole) const; QHash roleNames() const; Q_INVOKABLE void append( QString text, bool active, unsigned int runtime, QString color, unsigned int alignment, bool scroll, unsigned int scrollDirection, unsigned int scrollSpeed, unsigned int scrollCount ); void append(const QMap &roles); bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); Q_INVOKABLE void remove(int row); Q_INVOKABLE int getMaximumTextSets(); protected: LedDisplayTextModel(QObject* parent = nullptr); bool setTexts(QList> json); QList> getTexts(); QMap getText(const QModelIndex &index); void clear(); private: QList> texts; int maximumTextSets; int maximumTextLength; const QMap roleDataTypes = { {TextRole, QVariant::String}, {ActiveRole, QVariant::Bool}, {RuntimeRole, QVariant::Int}, {ColorRole, QVariant::String}, {AlignmentRole, QVariant::Int}, {ScrollRole, QVariant::Bool}, {ScrollDirectionRole, QVariant::Int}, {ScrollSpeedRole, QVariant::Int}, {ScrollCountRole, QVariant::Int}, {IndexRole, QVariant::Int} }; signals: void rowCountChanged(); void maximumTextSetsChanged(); }; #endif // LEDDISPLAYTEXTMODEL_H