aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PySide/QtGui/typesystem_gui_common.xml63
-rw-r--r--tests/QtGui/qstandarditemmodel_test.py41
2 files changed, 92 insertions, 12 deletions
diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml
index 36493e301..7308f009f 100644
--- a/PySide/QtGui/typesystem_gui_common.xml
+++ b/PySide/QtGui/typesystem_gui_common.xml
@@ -3617,7 +3617,6 @@
</extra-includes>
</object-type>
<object-type name="QStandardItemModel" polymorphic-id-expression="qobject_cast&lt;QStandardItemModel*&gt;(%1)">
- <modify-function signature="parent()const" remove="all"/>
<extra-includes>
<include file-name="QStringList" location="global"/>
<include file-name="QSize" location="global"/>
@@ -3703,15 +3702,59 @@
</modify-argument>
</modify-function>
- <!-- Inject code -->
- <modify-function signature="takeColumn(int)" remove="all"/>
- <modify-function signature="takeRow(int)" remove="all"/>
- <modify-function signature="findItems(const QString&amp;, QFlags&lt;Qt::MatchFlag&gt;, int) const" remove="all"/>
- <modify-function signature="insertColumn(int, const QList&lt;QStandardItem *&gt;&amp;)" remove="all"/>
- <modify-function signature="insertRow(int, const QList&lt;QStandardItem *&gt;&amp;)" remove="all"/>
- <modify-function signature="appendRow(const QList&lt;QStandardItem *&gt;&amp;)" remove="all"/>
- <modify-function signature="appendColumn(const QList&lt;QStandardItem *&gt;&amp;)" remove="all"/>
- <modify-function signature="clear()" remove="all"/>
+ <modify-function signature="takeColumn(int)">
+ <modify-argument index="return">
+ <parent index="this" action="remove" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="takeRow(int)">
+ <modify-argument index="return">
+ <parent index="this" action="remove" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="findItems(const QString&amp;, QFlags&lt;Qt::MatchFlag&gt;, int) const">
+ <modify-argument index="return">
+ <parent index="this" action="add" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="insertColumn(int, const QList&lt;QStandardItem *&gt;&amp;)">
+ <modify-argument index="2">
+ <parent index="this" action="add" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="insertRow(int, const QList&lt;QStandardItem *&gt;&amp;)">
+ <modify-argument index="2">
+ <parent index="this" action="add" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="appendRow(const QList&lt;QStandardItem *&gt;&amp;)">
+ <modify-argument index="1">
+ <parent index="this" action="add" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="appendColumn(const QList&lt;QStandardItem *&gt;&amp;)">
+ <modify-argument index="1">
+ <parent index="this" action="add" />
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="clear()">
+ <inject-code class="target" position="beginning">
+ for(int r=0, r_max = %CPPSELF.rowCount(); r &lt; r_max; r++) {
+ QList&lt;QStandardItem *&gt; ri = %CPPSELF.takeRow(0);
+
+ PyObject *pyResult = %CONVERTTOPYTHON[QList&lt;QStandardItem * &gt;](ri);
+ Shiboken::setParent(Py_None, pyResult);
+ Py_XDECREF(pyResult);
+ }
+ </inject-code>
+ </modify-function>
</object-type>
<object-type name="QRadioButton" />
<object-type name="QScrollBar" />
diff --git a/tests/QtGui/qstandarditemmodel_test.py b/tests/QtGui/qstandarditemmodel_test.py
index d83d856da..6ab86dd04 100644
--- a/tests/QtGui/qstandarditemmodel_test.py
+++ b/tests/QtGui/qstandarditemmodel_test.py
@@ -1,7 +1,7 @@
import unittest
+import sys
-from PySide.QtGui import *
-from PySide.QtCore import *
+from PySide.QtGui import QStandardItemModel, QWidget, QStandardItem
from helper import UsesQApplication
@@ -21,6 +21,43 @@ class QStandardItemModelTest(UsesQApplication):
# bug #227
self.model.insertRow(0)
+
+class QStandardItemModelRef(UsesQApplication):
+ def testRefCount(self):
+ model = QStandardItemModel(5, 5)
+ items = []
+ for r in range(5):
+ row = []
+ for c in range(5):
+ row.append(QStandardItem("%d,%d" % (r,c)) )
+ self.assertEqual(sys.getrefcount(row[c]), 2)
+
+ model.insertRow(r, row)
+
+ for c in range(5):
+ ref_after = sys.getrefcount(row[c])
+ # check if the ref count was incremented after insertRow
+ self.assertEqual(ref_after, 3)
+
+ items.append(row)
+ row = None
+
+ for r in range(3):
+ my_row = model.takeRow(0)
+ my_row = None
+ for c in range(5):
+ # only rest 1 reference
+ self.assertEqual(sys.getrefcount(items[r][c]), 2)
+
+ my_i = model.item(0,0)
+ # ref(my_i) + parent_ref + items list ref
+ self.assertEqual(sys.getrefcount(my_i), 4)
+
+ model.clear()
+ # ref(my_i)
+ self.assertEqual(sys.getrefcount(my_i), 3)
+
+
if __name__ == '__main__':
unittest.main()