aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/pyside2/tests/pysidetest/CMakeLists.txt3
-rw-r--r--sources/pyside2/tests/pysidetest/flagstest.cpp36
-rw-r--r--sources/pyside2/tests/pysidetest/flagstest.h55
-rw-r--r--sources/pyside2/tests/pysidetest/pysidetest_global.h1
-rw-r--r--sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml6
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.cpp27
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.h1
7 files changed, 117 insertions, 12 deletions
diff --git a/sources/pyside2/tests/pysidetest/CMakeLists.txt b/sources/pyside2/tests/pysidetest/CMakeLists.txt
index b760b767f..577b51815 100644
--- a/sources/pyside2/tests/pysidetest/CMakeLists.txt
+++ b/sources/pyside2/tests/pysidetest/CMakeLists.txt
@@ -12,12 +12,14 @@ add_definitions(-DRXX_ALLOCATOR_INIT_0)
find_package(Qt${QT_MAJOR_VERSION}Widgets)
set(pysidetest_SRC
+flagstest.cpp
testobject.cpp
testview.cpp
hiddenobject.cpp
)
set(pysidetest_MOC_HEADERS
+flagstest.h
testobject.h
testview.h
hiddenobject.h
@@ -30,6 +32,7 @@ else()
endif()
set(testbinding_SRC
+${CMAKE_CURRENT_BINARY_DIR}/testbinding/flagsnamespace_classforenum_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/testbinding/testobject_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/testbinding/intvalue_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/testbinding/pysidecpp_wrapper.cpp
diff --git a/sources/pyside2/tests/pysidetest/flagstest.cpp b/sources/pyside2/tests/pysidetest/flagstest.cpp
new file mode 100644
index 000000000..2bd0c454e
--- /dev/null
+++ b/sources/pyside2/tests/pysidetest/flagstest.cpp
@@ -0,0 +1,36 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** 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-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "flagstest.h"
+
+namespace FlagsNamespace
+{
+ ClassForEnum::ClassForEnum(FlagsNamespace::Options) {}
+
+ ClassForEnum::~ClassForEnum() = default;
+}
diff --git a/sources/pyside2/tests/pysidetest/flagstest.h b/sources/pyside2/tests/pysidetest/flagstest.h
new file mode 100644
index 000000000..7f070361c
--- /dev/null
+++ b/sources/pyside2/tests/pysidetest/flagstest.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** 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-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include "pysidetest_macros.h"
+
+#include <QtCore/QObject>
+
+namespace FlagsNamespace
+{
+
+enum Option {
+ NoOptions = 0x0,
+ ShowTabs = 0x1,
+ ShowAll = 0x2,
+ SqueezeBlank = 0x4
+};
+Q_DECLARE_FLAGS(Options, Option)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Options)
+
+class PYSIDETEST_API ClassForEnum : public QObject
+{
+ Q_OBJECT
+public:
+ ClassForEnum(FlagsNamespace::Options opt = FlagsNamespace::Option::NoOptions);
+ virtual ~ClassForEnum();
+};
+
+} // namespace FlagsNamespace
diff --git a/sources/pyside2/tests/pysidetest/pysidetest_global.h b/sources/pyside2/tests/pysidetest/pysidetest_global.h
index f65662cb5..6f9b187ba 100644
--- a/sources/pyside2/tests/pysidetest/pysidetest_global.h
+++ b/sources/pyside2/tests/pysidetest/pysidetest_global.h
@@ -32,6 +32,7 @@
// PySide global.h file
#include "testobject.h"
#include "testview.h"
+#include "flagstest.h"
#include "hiddenobject.h"
#endif // PYSIDETEST_GLOBAL_H
diff --git a/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml b/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml
index 1e777edd2..c959e7fd3 100644
--- a/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml
+++ b/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml
@@ -60,6 +60,12 @@
</modify-argument>
</modify-function>
</object-type>
+
+ <namespace-type name="FlagsNamespace" visible="no">
+ <enum-type name="Option" flags="Options"/>
+ <object-type name="ClassForEnum" />
+ </namespace-type>
+
<suppress-warning text="type 'QPyTextObject' is specified in typesystem, but not defined. This could potentially lead to compilation errors." />
<!-- Qt5: I never really understood this warning. Probably it is because there
is no way to instantiate the class. Anyway, why must this class emit this warning?
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
index 1ae1c72b4..69b070e7d 100644
--- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
+++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
@@ -745,18 +745,7 @@ void CppGenerator::generateClass(QTextStream &s, const GeneratorContext &classCo
if (metaClass->isPolymorphic() && metaClass->baseClass())
writeTypeDiscoveryFunction(s, metaClass);
-
- for (AbstractMetaEnum *cppEnum : qAsConst(classEnums)) {
- if (cppEnum->isAnonymous() || cppEnum->isPrivate())
- continue;
-
- bool hasFlags = cppEnum->typeEntry()->flags();
- if (hasFlags) {
- writeFlagsMethods(s, cppEnum);
- writeFlagsNumberMethodsDefinition(s, cppEnum);
- s << Qt::endl;
- }
- }
+ writeFlagsNumberMethodsDefinitions(s, classEnums);
s << Qt::endl;
writeConverterFunctions(s, metaClass, classContext);
@@ -5082,6 +5071,17 @@ void CppGenerator::writeFlagsNumberMethodsDefinition(QTextStream &s, const Abstr
s << "};\n\n";
}
+void CppGenerator::writeFlagsNumberMethodsDefinitions(QTextStream &s, const AbstractMetaEnumList &enums)
+{
+ for (AbstractMetaEnum *e : enums) {
+ if (!e->isAnonymous() && !e->isPrivate() && e->typeEntry()->flags()) {
+ writeFlagsMethods(s, e);
+ writeFlagsNumberMethodsDefinition(s, e);
+ s << '\n';
+ }
+ }
+}
+
void CppGenerator::writeFlagsBinaryOperator(QTextStream &s, const AbstractMetaEnum *cppEnum,
const QString &pyOpName, const QString &cppOpName)
{
@@ -5922,6 +5922,9 @@ bool CppGenerator::finishGeneration()
s << converterImpl << Qt::endl;
s << "} // namespace Shiboken\n\n";
}
+
+ writeFlagsNumberMethodsDefinitions(s, globalEnums);
+ s << '\n';
}
const QStringList &requiredModules = typeDb->requiredTargetImports();
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.h b/sources/shiboken2/generator/shiboken2/cppgenerator.h
index 8c56dd758..1d7894734 100644
--- a/sources/shiboken2/generator/shiboken2/cppgenerator.h
+++ b/sources/shiboken2/generator/shiboken2/cppgenerator.h
@@ -316,6 +316,7 @@ private:
void writeFlagsToLong(QTextStream &s, const AbstractMetaEnum *cppEnum);
void writeFlagsNonZero(QTextStream &s, const AbstractMetaEnum *cppEnum);
void writeFlagsNumberMethodsDefinition(QTextStream &s, const AbstractMetaEnum *cppEnum);
+ void writeFlagsNumberMethodsDefinitions(QTextStream &s, const AbstractMetaEnumList &enums);
void writeFlagsBinaryOperator(QTextStream &s, const AbstractMetaEnum *cppEnum,
const QString &pyOpName, const QString &cppOpName);
void writeFlagsUnaryOperator(QTextStream &s, const AbstractMetaEnum *cppEnum,