summaryrefslogtreecommitdiffstats
path: root/src/gui/itemmodels
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/itemmodels')
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp39
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.h2
2 files changed, 36 insertions, 5 deletions
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index cf905eae66..1d3dc1303f 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -968,13 +968,31 @@ void QStandardItem::clearData()
*/
QVariant QStandardItem::data(int role) const
{
+ QModelRoleData result(role);
+ multiData(result);
+ return result.data();
+}
+
+void QStandardItem::multiData(QModelRoleDataSpan roleDataSpan) const
+{
Q_D(const QStandardItem);
- const int r = (role == Qt::EditRole) ? Qt::DisplayRole : role;
- for (const auto &value : d->values) {
- if (value.role == r)
- return value.value;
+
+ const auto valuesBegin = d->values.begin();
+ const auto valuesEnd = d->values.end();
+
+ for (auto &roleData : roleDataSpan) {
+ const int role = (roleData.role() == Qt::EditRole) ? Qt::DisplayRole : roleData.role();
+ const auto hasSameRole = [role](const QStandardItemData &data)
+ {
+ return data.role == role;
+ };
+
+ auto dataIt = std::find_if(valuesBegin, valuesEnd, hasSameRole);
+ if (dataIt != valuesEnd)
+ roleData.setData(dataIt->value);
+ else
+ roleData.clearData();
}
- return QVariant();
}
/*!
@@ -2826,6 +2844,17 @@ QVariant QStandardItemModel::data(const QModelIndex &index, int role) const
/*!
\reimp
*/
+void QStandardItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
+{
+ Q_D(const QStandardItemModel);
+ QStandardItem *item = d->itemFromIndex(index);
+ if (item)
+ item->multiData(roleDataSpan);
+}
+
+/*!
+ \reimp
+*/
Qt::ItemFlags QStandardItemModel::flags(const QModelIndex &index) const
{
Q_D(const QStandardItemModel);
diff --git a/src/gui/itemmodels/qstandarditemmodel.h b/src/gui/itemmodels/qstandarditemmodel.h
index 3e0374d741..02274839cb 100644
--- a/src/gui/itemmodels/qstandarditemmodel.h
+++ b/src/gui/itemmodels/qstandarditemmodel.h
@@ -66,6 +66,7 @@ public:
virtual ~QStandardItem();
virtual QVariant data(int role = Qt::UserRole + 1) const;
+ virtual void multiData(QModelRoleDataSpan roleDataSpan) const;
virtual void setData(const QVariant &value, int role = Qt::UserRole + 1);
void clearData();
@@ -331,6 +332,7 @@ public:
bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
bool clearItemData(const QModelIndex &index) override;