diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-04-19 17:57:08 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-04-22 18:21:52 -0300 |
commit | 1ec8bf6f1e745eea07c450b24dd1e6f6fb60f7db (patch) | |
tree | 5b1e62a0d5a6d5dd52968a79db79ea7a27c16693 | |
parent | 2c937c64420c414a33f76c8df8f1f72592469576 (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.h | 51 | ||||
-rw-r--r-- | PySide/QtGui/typesystem_gui_common.xml | 245 |
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 &)" 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&, QWidget*, const QString&, QFlags<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<Qt::AlignmentFlag>)"> - <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<Qt::AlignmentFlag>)"> - <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<Qt::AlignmentFlag>)"> - <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<Qt::AlignmentFlag>)"> - <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<Qt::AlignmentFlag>)"> - <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<Qt::AlignmentFlag>)"> - <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<Qt::AlignmentFlag>)"> - <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"/> |