aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/PySide6
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-09-09 14:07:57 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-09-11 11:21:16 +0200
commitba83ea75449f7e86525adcc796ccce800e86fb92 (patch)
tree439ceaaf1ba59021029b01e01bdcbbec3b7c0573 /sources/pyside6/PySide6
parent8b08cebf577964e164c9fe2fa776e18d53cfe8d6 (diff)
PySide6: Add QModelRoleDataSpan
Implement QModelRoleDataSpan with an index operator returning QModelRoleData* for modification. This enables QAbstractItemModel::multiData(). [ChangeLog][PySide6] QModelRoleDataSpan for implementing QAbstractItemModel.multiData() has been added. Fixes: PYSIDE-2859 Change-Id: I35e4812bd999538f6dbd9e63a623791640287bab Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/PySide6')
-rw-r--r--sources/pyside6/PySide6/QtCore/CMakeLists.txt1
-rw-r--r--sources/pyside6/PySide6/QtCore/typesystem_core_common.xml19
-rw-r--r--sources/pyside6/PySide6/glue/qtcore.cpp20
3 files changed, 39 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/QtCore/CMakeLists.txt b/sources/pyside6/PySide6/QtCore/CMakeLists.txt
index 369e81865..d985b9778 100644
--- a/sources/pyside6/PySide6/QtCore/CMakeLists.txt
+++ b/sources/pyside6/PySide6/QtCore/CMakeLists.txt
@@ -118,6 +118,7 @@ ${QtCore_GEN_DIR}/qmimedatabase_wrapper.cpp
${QtCore_GEN_DIR}/qmimetype_wrapper.cpp
${QtCore_GEN_DIR}/qmodelindex_wrapper.cpp
${QtCore_GEN_DIR}/qmodelroledata_wrapper.cpp
+${QtCore_GEN_DIR}/qmodelroledataspan_wrapper.cpp
${QtCore_GEN_DIR}/qmutex_wrapper.cpp
${QtCore_GEN_DIR}/qnativeipckey_wrapper.cpp
${QtCore_GEN_DIR}/qobject_wrapper.cpp
diff --git a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
index f93f1b49e..c830bf852 100644
--- a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
+++ b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
@@ -1643,7 +1643,24 @@
<modify-function signature="exit(int)" allow-thread="yes"/>
</object-type>
- <value-type name="QModelRoleData"/>
+ <value-type name="QModelRoleData">
+ <add-function signature="setData(const QVariant &amp;@data@)">
+ <inject-code class="target" position="beginning" file="../glue/qtcore.cpp"
+ snippet="qmodelroledata-setdata"/>
+ </add-function>
+ </value-type>
+
+ <value-type name="QModelRoleDataSpan">
+ <modify-function signature="dataForRole(int)const" remove="all"/>
+ <add-function signature="__len__">
+ <inject-code class="target" position="beginning" file="../glue/qtcore.cpp"
+ snippet="qmodelroledataspan-len"/>
+ </add-function>
+ <add-function signature="__getitem__">
+ <inject-code class="target" position="beginning" file="../glue/qtcore.cpp"
+ snippet="qmodelroledataspan-getitem"/>
+ </add-function>
+ </value-type>
<!-- Register meta type for QML properties -->
<object-type name="QAbstractItemModel" qt-register-metatype="yes">
diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp
index 4f0556d54..56d813b7e 100644
--- a/sources/pyside6/PySide6/glue/qtcore.cpp
+++ b/sources/pyside6/PySide6/glue/qtcore.cpp
@@ -565,6 +565,26 @@ Py_XDECREF(result);
return !result ? -1 : 0;
// @snippet qbitarray-setitem
+// @snippet qmodelroledata-setdata
+// Call template <typename T> void QModelRoleData::setData(T &&value)
+%CPPSELF.%FUNCTION_NAME(%1);
+// @snippet qmodelroledata-setdata
+
+// @snippet qmodelroledataspan-len
+return %CPPSELF.size();
+// @snippet qmodelroledataspan-len
+
+// @snippet qmodelroledataspan-getitem
+const Py_ssize_t size = %CPPSELF.size();
+if (_i < 0 || _i >= size) {
+ Shiboken::Errors::setIndexOutOfBounds(_i, 0, size);
+ return nullptr;
+}
+// Return a pointer to allow for modification using QModelRoleData::setData()
+QModelRoleData *item = &((*%CPPSELF)[_i]);
+return %CONVERTTOPYTHON[QModelRoleData *](item);
+// @snippet qmodelroledataspan-getitem
+
// @snippet default-enter
Py_INCREF(%PYSELF);
pyResult = %PYSELF;