diff options
Diffstat (limited to 'sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml')
-rw-r--r-- | sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml b/sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml new file mode 100644 index 000000000..a74af0076 --- /dev/null +++ b/sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml @@ -0,0 +1,150 @@ +<?xml version="1.0"?> +<!-- +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of PySide2. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +--> + +<typesystem package="PySide2.QtUiTools"> + <load-typesystem name="typesystem_widgets.xml" generate="no" /> + <load-typesystem name="typesystem_xml.xml" generate="no" /> + + <object-type name="QUiLoader"> + <extra-includes> + <include file-name="glue/plugins.h" location="local"/> + </extra-includes> + <inject-code class="native" position="beginning" file="glue/uitools_loadui.cpp"/> + <inject-code> + Q_IMPORT_PLUGIN(PyCustomWidgets); + </inject-code> + <add-function signature="registerCustomWidget(PyObject*)" return-type="void"> + <modify-argument index="1"> + <rename to="customWidgetType" /> + </modify-argument> + <inject-documentation format="target" mode="append"> + Registers a Python created custom widget to QUiLoader, so it can be recognized when + loading a `.ui` file. The custom widget type is passed via the ``customWidgetType`` argument. + This is needed when you want to override a virtual method of some widget in the interface, + since duck punching will not work with widgets created by QUiLoader based on the contents + of the `.ui` file. + + (Remember that `duck punching virtual methods is an invitation for your own demise! + <http://www.pyside.org/docs/shiboken/wordsofadvice.html#duck-punching-and-virtual-methods>`_) + + Let's see an obvious example. If you want to create a new widget it's probable you'll end up + overriding :class:`~PySide2.QtGui.QWidget`'s :meth:`~PySide2.QtGui.QWidget.paintEvent` method. + + .. code-block:: python + + class Circle(QWidget): + def paintEvent(self, event): + painter = QPainter(self) + painter.setPen(self.pen) + painter.setBrush(QBrush(self.color)) + painter.drawEllipse(event.rect().center(), 20, 20) + + # ... + + loader = QUiLoader() + loader.registerCustomWidget(Circle) + circle = loader.load('circle.ui') + circle.show() + + # ... + </inject-documentation> + <inject-code class="target" position="beginning"> + registerCustomWidget(%PYARG_1); + %CPPSELF.addPluginPath(""); // force reload widgets + </inject-code> + </add-function> + <modify-function signature="createAction(QObject*, const QString&)"> + <modify-argument index="return"> + <parent index="1" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="createActionGroup(QObject*, const QString&)"> + <modify-argument index="return"> + <parent index="1" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="createLayout(const QString&, QObject*, const QString&)"> + <modify-argument index="return"> + <parent index="2" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="createWidget(const QString&, QWidget*, const QString&)"> + <modify-argument index="return"> + <parent index="2" action="add"/> + <define-ownership class="target" owner="default"/> + </modify-argument> + </modify-function> + + <modify-function signature="load(QIODevice*, QWidget*)"> + <modify-argument index="2"> + <replace-default-expression with="0" /> + <rename to="parentWidget" /> + </modify-argument> + <modify-argument index="return"> + <define-ownership class="target" owner="target"/> + </modify-argument> + <inject-code> + // Avoid calling the original function: %CPPSELF.%FUNCTION_NAME() + %PYARG_0 = QUiLoadedLoadUiFromDevice(%CPPSELF, %1, %2); + </inject-code> + </modify-function> + + <!-- Syntax sugar --> + <add-function signature="load(QString, QWidget*)" return-type="QWidget*"> + <modify-argument index="2"> + <replace-default-expression with="0" /> + <rename to="parentWidget" /> + </modify-argument> + <modify-argument index="return"> + <define-ownership class="target" owner="target"/> + </modify-argument> + <inject-code> + // Avoid calling the original function: %CPPSELF.%FUNCTION_NAME() + %PYARG_0 = QUiLoaderLoadUiFromFileName(%CPPSELF, %1, %2); + </inject-code> + </add-function> + </object-type> + +</typesystem> |