aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/plugins
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-22 16:44:51 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-22 18:22:49 +0200
commit427c7147d23fa21c6e8bd08407b1badc48b49c3c (patch)
treed2742c7ffdfa167bcf6e68f06ce7524bc441102d /sources/pyside2/plugins
parent4ec9cfa3c6b895c0cf50227c189cfa542de88b64 (diff)
move everying into sources/pyside2 (5.9 edition)
in preparation for a subtree merge. this should not be necessary to do in a separate commit, but git is a tad stupid about following history correctly without it.
Diffstat (limited to 'sources/pyside2/plugins')
-rw-r--r--sources/pyside2/plugins/CMakeLists.txt36
-rw-r--r--sources/pyside2/plugins/customwidget.cpp148
-rw-r--r--sources/pyside2/plugins/customwidget.h81
-rw-r--r--sources/pyside2/plugins/customwidgets.cpp84
-rw-r--r--sources/pyside2/plugins/customwidgets.h71
5 files changed, 420 insertions, 0 deletions
diff --git a/sources/pyside2/plugins/CMakeLists.txt b/sources/pyside2/plugins/CMakeLists.txt
new file mode 100644
index 000000000..0933cebbc
--- /dev/null
+++ b/sources/pyside2/plugins/CMakeLists.txt
@@ -0,0 +1,36 @@
+project(plugins)
+
+set(ui_plugin_src
+ customwidgets.cpp
+ customwidget.cpp
+)
+
+set(ui_plugin_moc
+ customwidget.h
+ customwidgets.h
+)
+
+include_directories(${Qt5Designer_INCLUDE_DIRS}
+ ${SHIBOKEN_INCLUDE_DIR}
+ ${SHIBOKEN_PYTHON_INCLUDE_DIR})
+
+qt5_wrap_cpp(MOC_FILES ${ui_plugin_moc})
+add_library(uiplugin STATIC ${ui_plugin_src} ${MOC_FILES})
+if(CMAKE_HOST_UNIX AND NOT CYGWIN)
+ add_definitions(-fPIC)
+endif()
+add_definitions(-DQT_STATICPLUGIN)
+
+if(Qt5Core_VERSION VERSION_GREATER "5.7.1")
+ set_property(TARGET uiplugin PROPERTY CXX_STANDARD 11)
+endif()
+
+target_link_libraries(uiplugin
+ ${Qt5UiTools_LIBRARY}
+ ${SHIBOKEN_LIBRARY}
+ ${SHIBOKEN_PYTHON_LIBRARY})
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_DEBUG_POSTFIX})
+else()
+ set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_RELEASE_POSTFIX})
+endif()
diff --git a/sources/pyside2/plugins/customwidget.cpp b/sources/pyside2/plugins/customwidget.cpp
new file mode 100644
index 000000000..771867796
--- /dev/null
+++ b/sources/pyside2/plugins/customwidget.cpp
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+
+#include "customwidget.h"
+
+
+struct PyCustomWidgetPrivate
+{
+ PyObject* pyObject;
+ bool initialized;
+};
+
+PyCustomWidget::PyCustomWidget(PyObject* objectType)
+ : m_data(new PyCustomWidgetPrivate())
+{
+ m_data->pyObject = objectType;
+ m_name = QString(reinterpret_cast<PyTypeObject*>(objectType)->tp_name);
+}
+
+PyCustomWidget::~PyCustomWidget()
+{
+ delete m_data;
+}
+
+bool PyCustomWidget::isContainer() const
+{
+ return false;
+}
+
+bool PyCustomWidget::isInitialized() const
+{
+ return m_data->initialized;
+}
+
+QIcon PyCustomWidget::icon() const
+{
+ return QIcon();
+}
+
+QString PyCustomWidget::domXml() const
+{
+ return QString();
+}
+
+QString PyCustomWidget::group() const
+{
+ return QString();
+}
+
+QString PyCustomWidget::includeFile() const
+{
+ return QString();
+}
+
+QString PyCustomWidget::name() const
+{
+ return m_name;
+}
+
+QString PyCustomWidget::toolTip() const
+{
+ return QString();
+}
+
+QString PyCustomWidget::whatsThis() const
+{
+ return QString();
+}
+
+QWidget* PyCustomWidget::createWidget(QWidget* parent)
+{
+ //Create a python instance and return cpp object
+ PyObject* pyParent;
+ bool unkowParent = false;
+ if (parent) {
+ pyParent = reinterpret_cast<PyObject*>(Shiboken::BindingManager::instance().retrieveWrapper(parent));
+ if (pyParent) {
+ Py_INCREF(pyParent);
+ } else {
+ static Shiboken::Conversions::SpecificConverter converter("QWidget*");
+ pyParent = converter.toPython(&parent);
+ unkowParent = true;
+ }
+ } else {
+ Py_INCREF(Py_None);
+ pyParent = Py_None;
+ }
+
+ Shiboken::AutoDecRef pyArgs(PyTuple_New(1));
+ PyTuple_SET_ITEM(pyArgs, 0, pyParent); //tuple will keep pyParent reference
+
+ //Call python constructor
+ SbkObject* result = reinterpret_cast<SbkObject*>(PyObject_CallObject(m_data->pyObject, pyArgs));
+
+ QWidget* widget = 0;
+ if (result) {
+ if (unkowParent) //if parent does not exists in python, transfer the ownership to cpp
+ Shiboken::Object::releaseOwnership(result);
+ else
+ Shiboken::Object::setParent(pyParent, reinterpret_cast<PyObject*>(result));
+
+ widget = reinterpret_cast<QWidget*>(Shiboken::Object::cppPointer(result, Py_TYPE(result)));
+ }
+
+ return widget;
+}
+
+void PyCustomWidget::initialize(QDesignerFormEditorInterface* core)
+{
+ m_data->initialized = true;
+}
diff --git a/sources/pyside2/plugins/customwidget.h b/sources/pyside2/plugins/customwidget.h
new file mode 100644
index 000000000..1b854c69a
--- /dev/null
+++ b/sources/pyside2/plugins/customwidget.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef _PY_CUSTOM_WIDGET_H_
+#define _PY_CUSTOM_WIDGET_H_
+
+#include <shiboken.h>
+
+#include <QtCore/QtGlobal>
+#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0))
+ #include <QtDesigner/QDesignerCustomWidgetInterface>
+#else
+ #include <QtUiPlugin/QDesignerCustomWidgetInterface>
+#endif
+
+
+struct PyCustomWidgetPrivate;
+
+class PyCustomWidget: public QObject, public QDesignerCustomWidgetInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(QDesignerCustomWidgetInterface)
+
+public:
+ PyCustomWidget(PyObject* objectType);
+ ~PyCustomWidget();
+
+ bool isContainer() const;
+ bool isInitialized() const;
+ QIcon icon() const;
+ QString domXml() const;
+ QString group() const;
+ QString includeFile() const;
+ QString name() const;
+ QString toolTip() const;
+ QString whatsThis() const;
+ QWidget *createWidget(QWidget *parent);
+ void initialize(QDesignerFormEditorInterface *core);
+
+private:
+ PyCustomWidgetPrivate* m_data;
+ QString m_name;
+};
+
+#endif
diff --git a/sources/pyside2/plugins/customwidgets.cpp b/sources/pyside2/plugins/customwidgets.cpp
new file mode 100644
index 000000000..01ef392b0
--- /dev/null
+++ b/sources/pyside2/plugins/customwidgets.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include "customwidget.h"
+#include "customwidgets.h"
+
+
+struct PyCustomWidgetPrivate
+{
+ PyObject* pyObject;
+ bool initialized;
+};
+
+struct PyCustomWidgetsPrivate
+{
+ QList<QDesignerCustomWidgetInterface*> widgets;
+ ~PyCustomWidgetsPrivate();
+};
+
+
+PyCustomWidgetsPrivate::~PyCustomWidgetsPrivate()
+{
+ foreach(QDesignerCustomWidgetInterface* iface, widgets)
+ delete iface;
+ widgets.clear();
+}
+
+PyCustomWidgets::PyCustomWidgets(QObject *parent)
+ : QObject(parent), m_data(new PyCustomWidgetsPrivate)
+{
+}
+
+PyCustomWidgets::~PyCustomWidgets()
+{
+ delete m_data;
+}
+
+void PyCustomWidgets::registerWidgetType(PyObject* widget)
+{
+ m_data->widgets.append(new PyCustomWidget(widget));
+}
+
+QList<QDesignerCustomWidgetInterface*> PyCustomWidgets::customWidgets() const
+{
+ return m_data->widgets;
+}
+
+
diff --git a/sources/pyside2/plugins/customwidgets.h b/sources/pyside2/plugins/customwidgets.h
new file mode 100644
index 000000000..a666f66dd
--- /dev/null
+++ b/sources/pyside2/plugins/customwidgets.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef _PY_CUSTOM_WIDGETS_H_
+#define _PY_CUSTOM_WIDGETS_H_
+
+#include <shiboken.h>
+
+#include <QtCore/QtGlobal>
+#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0))
+ #include <QtDesigner/QDesignerCustomWidgetInterface>
+#else
+ #include <QtUiPlugin/QDesignerCustomWidgetInterface>
+#endif
+
+
+struct PyCustomWidgetsPrivate;
+
+class PyCustomWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.PySide.PyCustomWidgetsInterface")
+
+public:
+ PyCustomWidgets(QObject *parent = 0);
+ ~PyCustomWidgets();
+ virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
+ void registerWidgetType(PyObject* widget);
+
+private:
+ PyCustomWidgetsPrivate* m_data;
+};
+
+#endif