aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-04-19 17:57:08 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-04-22 18:21:52 -0300
commit1ec8bf6f1e745eea07c450b24dd1e6f6fb60f7db (patch)
tree5b1e62a0d5a6d5dd52968a79db79ea7a27c16693
parent2c937c64420c414a33f76c8df8f1f72592469576 (diff)
Fixed QLayout family return policy.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>, Luciano Wolf <luciano.wolf@openbossa.org>
-rw-r--r--PySide/QtGui/glue/qlayout_help_functions.h51
-rw-r--r--PySide/QtGui/typesystem_gui_common.xml245
2 files changed, 200 insertions, 96 deletions
diff --git a/PySide/QtGui/glue/qlayout_help_functions.h b/PySide/QtGui/glue/qlayout_help_functions.h
new file mode 100644
index 000000000..186e0ecd2
--- /dev/null
+++ b/PySide/QtGui/glue/qlayout_help_functions.h
@@ -0,0 +1,51 @@
+#ifndef QLAYOUT_HELP_FUNCTIONS
+#define QLAYOUT_HELP_FUNCTIONS
+
+void addLayoutOwnership(QLayout *layout, QLayoutItem *item);
+
+inline void addLayoutOwnership(QLayout *layout, QWidget *widget)
+{
+ //transfer ownership to parent widget
+ QWidget *parent = layout->parentWidget();
+ if (!parent)
+ return;
+
+ Shiboken::AutoDecRef pyParent(Shiboken::Converter<QWidget*>::toPython(parent));
+ Shiboken::AutoDecRef pyChild(Shiboken::Converter<QWidget*>::toPython(widget));
+ Shiboken::setParent(pyParent, pyChild);
+}
+
+inline void addLayoutOwnership(QLayout *layout, QLayout *other)
+{
+ //transfer all children widgetes from other to layout parent widget
+ QWidget *parent = layout->parentWidget();
+ if (!parent)
+ return;
+
+ for (int i=0, i_max=layout->count(); i < i_max; i++) {
+ addLayoutOwnership(layout, layout->itemAt(i));
+ }
+
+ Shiboken::AutoDecRef pyParent(Shiboken::Converter<QLayout*>::toPython(layout));
+ Shiboken::AutoDecRef pyChild(Shiboken::Converter<QLayout*>::toPython(other));
+ Shiboken::setParent(pyParent, pyChild);
+
+}
+
+inline void addLayoutOwnership(QLayout *layout, QLayoutItem *item)
+{
+ QWidget *w = item->widget();
+ if (w)
+ addLayoutOwnership(layout, w);
+ else {
+ QLayout *l = item->layout();
+ if (l)
+ addLayoutOwnership(layout, l);
+ }
+
+ Shiboken::AutoDecRef pyParent(Shiboken::Converter<QLayout*>::toPython(layout));
+ Shiboken::AutoDecRef pyChild(Shiboken::Converter<QLayoutItem*>::toPython(item));
+ Shiboken::setParent(pyParent, pyChild);
+}
+
+#endif
diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml
index 08efe3db5..b9012292e 100644
--- a/PySide/QtGui/typesystem_gui_common.xml
+++ b/PySide/QtGui/typesystem_gui_common.xml
@@ -1180,7 +1180,27 @@
<value-type name="QPrinterInfo">
<modify-function signature="operator=(const QPrinterInfo &amp;)" remove="all"/>
</value-type>
- <object-type name="QLayoutItem"/>
+ <object-type name="QLayoutItem">
+
+ <modify-function signature="widget()">
+ <modify-argument index="return">
+ <define-ownership class="target" owner="default"/>
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="layout()">
+ <modify-argument index="return">
+ <define-ownership class="target" owner="default"/>
+ </modify-argument>
+ </modify-function>
+
+ <modify-function signature="spacerItem()">
+ <modify-argument index="return">
+ <define-ownership class="target" owner="default"/>
+ </modify-argument>
+ </modify-function>
+
+ </object-type>
<object-type name="QPaintDevice"/>
<object-type name="QGraphicsItem">
<inject-code class="target" position="end">
@@ -2262,171 +2282,204 @@
<modify-function signature="getColor(const QColor&amp;, QWidget*, const QString&amp;, QFlags&lt;QColorDialog::ColorDialogOption>)" allow-thread="yes" />
</object-type>
<object-type name="QLayout">
- <modify-function signature="addItem(QLayoutItem*)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
+
+ <extra-includes>
+ <include file-name="glue/qlayout_help_functions.h" location="local"/>
+ </extra-includes>
+
+ <modify-function signature="itemAt(int)const">
+ <modify-argument index="return">
+ <define-ownership owner="default"/>
</modify-argument>
+ <inject-code class="target" position="end">
+ addLayoutOwnership(%CPPSELF, %0);
+ </inject-code>
</modify-function>
- <modify-function signature="removeItem(QLayoutItem*)">
- <modify-argument index="1">
- <parent index="this" action="remove"/>
+
+ <modify-function signature="parentWidget()const">
+ <modify-argument index="this">
+ <parent index="return" action="add"/>
</modify-argument>
</modify-function>
+
<modify-function signature="takeAt(int)">
<modify-argument index="return">
<parent index="this" action="remove"/>
</modify-argument>
</modify-function>
+
+ <modify-function signature="addItem(QLayoutItem*)">
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
+ </modify-function>
+
<modify-function signature="addWidget(QWidget *)">
- <modify-argument index="1">
- <no-null-pointer/>
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addChildWidget(QWidget *)">
- <modify-argument index="1">
- <no-null-pointer/>
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addChildLayout(QLayout*)">
- <modify-argument index="1">
- <no-null-pointer/>
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="removeWidget(QWidget *)">
- <modify-argument index="1">
- <no-null-pointer/>
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="setMenuBar(QWidget*)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
+
<modify-function signature="getContentsMargins(int*,int*,int*,int*)const" remove="all" />
<!--### Obsolete in 4.3-->
<!-- <modify-function signature="setMargin(int)" remove="all"/> -->
<!--### Obsolete in 4.3-->
</object-type>
+
<object-type name="QStackedLayout">
+ <extra-includes>
+ <include file-name="glue/qlayout_help_functions.h" location="local"/>
+ </extra-includes>
+
<modify-function signature="addItem(QLayoutItem *)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
- <modify-function signature="itemAt(int) const">
+
+ <modify-function signature="itemAt(int)const">
<modify-argument index="return">
- <parent index="this" action="add"/>
+ <define-ownership owner="default"/>
</modify-argument>
+ <inject-code class="target" position="end">
+ addLayoutOwnership(%CPPSELF, %0);
+ </inject-code>
</modify-function>
+
<modify-function signature="addWidget(QWidget *)">
<rename to="addStackedWidget"/>
- <modify-argument index="1">
- <no-null-pointer/>
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="insertWidget(int,QWidget*)">
- <modify-argument index="2">
- <no-null-pointer/>
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %2);
+ </inject-code>
</modify-function>
- <modify-function signature="takeAt(int)">
+ </object-type>
+
+ <object-type name="QBoxLayout">
+ <extra-includes>
+ <include file-name="glue/qlayout_help_functions.h" location="local"/>
+ </extra-includes>
+
+ <modify-function signature="itemAt(int)const">
<modify-argument index="return">
- <parent index="this" action="remove"/>
+ <define-ownership owner="default"/>
</modify-argument>
+
+ <inject-code class="target" position="end">
+ addLayoutOwnership(%CPPSELF, %0);
+ </inject-code>
</modify-function>
- </object-type>
- <object-type name="QBoxLayout">
+
<modify-function signature="addWidget(QWidget *, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addLayout(QLayout *, int)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addItem(QLayoutItem *)">
- <modify-argument index="1">
- <define-ownership owner="c++"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="insertWidget(int, QWidget *, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %2);
+ </inject-code>
</modify-function>
<modify-function signature="insertLayout(int, QLayout *, int)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %2);
+ </inject-code>
</modify-function>
<modify-function signature="insertItem(int, QLayoutItem *)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %2);
+ </inject-code>
</modify-function>
<modify-function signature="addSpacerItem(QSpacerItem*)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="insertSpacerItem(int,QSpacerItem*)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="takeAt(int)">
- <modify-argument index="return">
- <parent index="this" action="remove"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %2);
+ </inject-code>
</modify-function>
</object-type>
+
<object-type name="QGridLayout">
+ <extra-includes>
+ <include file-name="glue/qlayout_help_functions.h" location="local"/>
+ </extra-includes>
+
<modify-function signature="addWidget(QWidget *)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addWidget(QWidget *, int, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addWidget(QWidget *, int, int, int, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addLayout(QLayout *, int, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addLayout(QLayout *, int, int, int, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="takeAt(int)">
- <modify-argument index="return">
- <parent index="this" action="remove"/>
- </modify-argument>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
</modify-function>
<modify-function signature="addItem(QLayoutItem *, int, int, int, int, QFlags&lt;Qt::AlignmentFlag&gt;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
+ <inject-code class="target" position="beginning">
+ addLayoutOwnership(%CPPSELF, %1);
+ </inject-code>
+ </modify-function>
+
+ <modify-function signature="itemAt(int)const">
+ <modify-argument index="return">
+ <define-ownership owner="default"/>
</modify-argument>
+
+ <inject-code class="target" position="end">
+ addLayoutOwnership(%CPPSELF, %0);
+ </inject-code>
</modify-function>
<modify-function signature="getItemPosition(int,int*,int*,int*,int*)" remove="all" />
</object-type>
+
<object-type name="QGraphicsView">
<extra-includes>
<include file-name="QPainterPath" location="global"/>