Enable setting priority from the universe model tree

This commit is contained in:
Kevin Matz 2022-11-18 11:32:07 -05:00
parent 056063ab2c
commit d60721cf79
4 changed files with 74 additions and 2 deletions

View File

@ -211,7 +211,17 @@ QVariant MultiverseItem::data(int column, int role) const
return QVariant(); return QVariant();
case Qt::EditRole: case Qt::EditRole:
if (universe_) if (universe_)
return QVariant(QVariant::fromValue(universe_)); {
if (!universe_->isEditable())
return QVariant(QVariant::fromValue(universe_));
switch (static_cast<MultiverseModel::Column>(column))
{
case MultiverseModel::Priority:
return universe_->priority();
default:
return QVariant(QVariant::fromValue(universe_));
}
}
if (discovery_) if (discovery_)
return QVariant(QVariant::fromValue(discovery_)); return QVariant(QVariant::fromValue(discovery_));
return data(column, Qt::DisplayRole); 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<uint>())
return false;
auto p = value.toUInt();
if (p < 0 || p > 200)
return false;
universe_->setPriority(p);
return true;
}
default:
return false;
}
}
/** /**
* @brief MultiverseItem::flags * @brief MultiverseItem::flags
* @param column * @param column
@ -238,10 +282,14 @@ Qt::ItemFlags MultiverseItem::flags(int column, Qt::ItemFlags base) const
switch (static_cast<MultiverseModel::Column>(column)) switch (static_cast<MultiverseModel::Column>(column))
{ {
case MultiverseModel::Universe: case MultiverseModel::Universe:
case MultiverseModel::Priority:
case MultiverseModel::Channels: case MultiverseModel::Channels:
case MultiverseModel::Description: case MultiverseModel::Description:
return base; return base;
case MultiverseModel::Priority:
if (universe_ && universe_->isEditable())
return base | Qt::ItemIsEditable;
else
return base;
default: default:
return Qt::NoItemFlags; return Qt::NoItemFlags;
} }

View File

@ -30,6 +30,7 @@ public:
int childCount() const; int childCount() const;
int childRow(int column, const QVariant &data) const; int childRow(int column, const QVariant &data) const;
QVariant data(int column, int role = Qt::DisplayRole) 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; Qt::ItemFlags flags(int column, Qt::ItemFlags base) const;
int row() const; int row() const;
MultiverseItem * parentItem(); MultiverseItem * parentItem();

View File

@ -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<int>() << role);
return true;
}
return false;
}
/** /**
* @brief MultiverseModel::flags * @brief MultiverseModel::flags
* @param index * @param index

View File

@ -46,6 +46,8 @@ public:
int columnCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, QVariant data(const QModelIndex &index,
int role = Qt::DisplayRole) const override; 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; Qt::ItemFlags flags(const QModelIndex &index) const override;
// non-standard model operations // non-standard model operations