diff --git a/example/sACN Explorer/multiverseitem.cpp b/example/sACN Explorer/multiverseitem.cpp index 0f0ea15..9269908 100644 --- a/example/sACN Explorer/multiverseitem.cpp +++ b/example/sACN Explorer/multiverseitem.cpp @@ -211,7 +211,17 @@ QVariant MultiverseItem::data(int column, int role) const return QVariant(); case Qt::EditRole: if (universe_) - return QVariant(QVariant::fromValue(universe_)); + { + if (!universe_->isEditable()) + return QVariant(QVariant::fromValue(universe_)); + switch (static_cast(column)) + { + case MultiverseModel::Priority: + return universe_->priority(); + default: + return QVariant(QVariant::fromValue(universe_)); + } + } if (discovery_) return QVariant(QVariant::fromValue(discovery_)); return data(column, Qt::DisplayRole); @@ -221,6 +231,40 @@ QVariant MultiverseItem::data(int column, int role) const } +/** + * @brief MultiverseItem::setData + * @param column + * @param value + * @param role + * @return + */ +bool MultiverseItem::setData(int column, const QVariant &value, int role) +{ + if (!universe_->isEditable()) + return false; + + if (role != Qt::EditRole) + return false; + + switch (column) + { + case MultiverseModel::Priority: + { + if (!value.canConvert()) + return false; + auto p = value.toUInt(); + if (p < 0 || p > 200) + return false; + universe_->setPriority(p); + return true; + } + default: + return false; + } +} + + + /** * @brief MultiverseItem::flags * @param column @@ -238,10 +282,14 @@ Qt::ItemFlags MultiverseItem::flags(int column, Qt::ItemFlags base) const switch (static_cast(column)) { case MultiverseModel::Universe: - case MultiverseModel::Priority: case MultiverseModel::Channels: case MultiverseModel::Description: return base; + case MultiverseModel::Priority: + if (universe_ && universe_->isEditable()) + return base | Qt::ItemIsEditable; + else + return base; default: return Qt::NoItemFlags; } diff --git a/example/sACN Explorer/multiverseitem.h b/example/sACN Explorer/multiverseitem.h index b8d6f60..ddaa816 100644 --- a/example/sACN Explorer/multiverseitem.h +++ b/example/sACN Explorer/multiverseitem.h @@ -30,6 +30,7 @@ public: int childCount() const; int childRow(int column, const QVariant &data) const; QVariant data(int column, int role = Qt::DisplayRole) const; + bool setData(int column, const QVariant &value, int role = Qt::EditRole); Qt::ItemFlags flags(int column, Qt::ItemFlags base) const; int row() const; MultiverseItem * parentItem(); diff --git a/example/sACN Explorer/multiversemodel.cpp b/example/sACN Explorer/multiversemodel.cpp index dd9731e..6c8b051 100644 --- a/example/sACN Explorer/multiversemodel.cpp +++ b/example/sACN Explorer/multiversemodel.cpp @@ -185,6 +185,27 @@ QVariant MultiverseModel::data(const QModelIndex &index, int role) const } +/** + * @brief MultiverseModel::setData + * @param index + * @param value + * @param role + * @return + */ +bool MultiverseModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (!checkIndex(index, CheckIndexOption::IndexIsValid)) + return false; + + if (getItem(index)->setData(index.column(), value, role)) + { + emit dataChanged(index, index, QVector() << role); + return true; + } + return false; +} + + /** * @brief MultiverseModel::flags * @param index diff --git a/example/sACN Explorer/multiversemodel.h b/example/sACN Explorer/multiversemodel.h index f032712..1621aac 100644 --- a/example/sACN Explorer/multiversemodel.h +++ b/example/sACN Explorer/multiversemodel.h @@ -46,6 +46,8 @@ public: 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; // non-standard model operations