diff options
-rw-r--r-- | PySide/QtGui/typesystem_gui_common.xml | 63 | ||||
-rw-r--r-- | tests/QtGui/qstandarditemmodel_test.py | 41 |
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<QStandardItemModel*>(%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&, QFlags<Qt::MatchFlag>, int) const" remove="all"/> - <modify-function signature="insertColumn(int, const QList<QStandardItem *>&)" remove="all"/> - <modify-function signature="insertRow(int, const QList<QStandardItem *>&)" remove="all"/> - <modify-function signature="appendRow(const QList<QStandardItem *>&)" remove="all"/> - <modify-function signature="appendColumn(const QList<QStandardItem *>&)" 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&, QFlags<Qt::MatchFlag>, int) const"> + <modify-argument index="return"> + <parent index="this" action="add" /> + </modify-argument> + </modify-function> + + <modify-function signature="insertColumn(int, const QList<QStandardItem *>&)"> + <modify-argument index="2"> + <parent index="this" action="add" /> + </modify-argument> + </modify-function> + + <modify-function signature="insertRow(int, const QList<QStandardItem *>&)"> + <modify-argument index="2"> + <parent index="this" action="add" /> + </modify-argument> + </modify-function> + + <modify-function signature="appendRow(const QList<QStandardItem *>&)"> + <modify-argument index="1"> + <parent index="this" action="add" /> + </modify-argument> + </modify-function> + + <modify-function signature="appendColumn(const QList<QStandardItem *>&)"> + <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 < r_max; r++) { + QList<QStandardItem *> ri = %CPPSELF.takeRow(0); + + PyObject *pyResult = %CONVERTTOPYTHON[QList<QStandardItem * >](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() |