#include "omobidisplaytextmodel.h" OmobiDisplayTextModel::OmobiDisplayTextModel(QObject* parent) : QAbstractListModel(parent) { } int OmobiDisplayTextModel::rowCount(const QModelIndex &) const { return this->texts.length(); } QVariant OmobiDisplayTextModel::data(const QModelIndex &index, int role) const { if (index.row() < rowCount()) { if(role == IndexRole) return index.row(); else if(this->texts[index.row()].contains(role)) return this->texts[index.row()][role]; } return QVariant(); } QHash OmobiDisplayTextModel::roleNames() const { static const QHash roles { { TextRole, "text" }, { ActiveRole, "active" }, { RuntimeRole, "runtime" }, { ColorRole, "color" }, { AlignmentRole, "alignment" }, { ScrollRole, "scroll" }, { ScrollSpeedRole, "scrollSpeed" }, { ScrollCountRole, "scrollCount" }, { IndexRole, "index" } }; return roles; } void OmobiDisplayTextModel::append( QString text, bool active, unsigned int runtime, QString color, QString alignment, bool scroll, unsigned int scrollSpeed, unsigned int scrollCount ) { // the current Maximum is 5 if(this->texts.length() >= 5) return; QMap roles = { { TextRole, text }, { ActiveRole, active }, { RuntimeRole, runtime }, { ColorRole, color }, { AlignmentRole, alignment }, { ScrollRole, scroll }, { ScrollSpeedRole, scrollSpeed }, { ScrollCountRole, scrollCount } }; this->append(roles); } void OmobiDisplayTextModel::append(const QMap &roles) { int row = this->texts.length(); this->beginInsertRows(QModelIndex(), row, row); this->texts.insert(row, roles); this->endInsertRows(); } bool OmobiDisplayTextModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (index.row() >= rowCount() || !this->texts[index.row()].contains(role)) return false; if(this->texts[index.row()][role] == value) return true; this->texts[index.row()][role] = value; emit dataChanged(index, index); return QAbstractItemModel::setData(index, value, role); } void OmobiDisplayTextModel::remove(int row) { if (row < 0 || row >= this->rowCount()) return; beginRemoveRows(QModelIndex(), row, row); this->texts.removeAt(row); endRemoveRows(); } void OmobiDisplayTextModel::clear() { for(int i = 0; i < this->texts.length(); i++) this->remove(i); } bool OmobiDisplayTextModel::setTexts(QList> texts) { this->beginResetModel(); this->resetInternalData(); this->texts.clear(); this->endResetModel(); for(QMap text : texts) this->append(text); return true; } QList> OmobiDisplayTextModel::getTexts() { return this->texts; }