From 727a9a865c8aa90531057a1dc8e58804fbf4e833 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Jun 2021 07:18:53 +0200 Subject: [PATCH 1/5] add dox to duplicated enum in QgsAttributeEditorRelation and QgsRelationEditorWidget also remove leftover --- .../editform/qgsattributeeditorrelation.sip.in | 1 - src/core/editform/qgsattributeeditorrelation.cpp | 4 ++++ src/core/editform/qgsattributeeditorrelation.h | 10 ++++++++-- src/gui/qgsrelationeditorwidget.h | 1 + src/gui/vector/qgsattributesformproperties.h | 1 - 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/python/core/auto_generated/editform/qgsattributeeditorrelation.sip.in b/python/core/auto_generated/editform/qgsattributeeditorrelation.sip.in index 6e6702a1b5dc..76ac86851918 100644 --- a/python/core/auto_generated/editform/qgsattributeeditorrelation.sip.in +++ b/python/core/auto_generated/editform/qgsattributeeditorrelation.sip.in @@ -165,7 +165,6 @@ Sets the relation editor configuration QFlags operator|(QgsAttributeEditorRelation::Button f1, QFlags f2); - /************************************************************************ * This file has been generated automatically from * * * diff --git a/src/core/editform/qgsattributeeditorrelation.cpp b/src/core/editform/qgsattributeeditorrelation.cpp index 0fa9694ff655..b783a2610bba 100644 --- a/src/core/editform/qgsattributeeditorrelation.cpp +++ b/src/core/editform/qgsattributeeditorrelation.cpp @@ -66,16 +66,20 @@ void QgsAttributeEditorRelation::loadConfiguration( const QDomElement &element, { if ( element.hasAttribute( "buttons" ) ) { + Q_NOWARN_DEPRECATED_PUSH QString buttonString = element.attribute( QStringLiteral( "buttons" ), qgsFlagValueToKeys( QgsAttributeEditorRelation::Button::AllButtons ) ); config.insert( "buttons", qgsFlagValueToKeys( qgsFlagKeysToValue( buttonString, QgsAttributeEditorRelation::Button::AllButtons ) ) ); + Q_NOWARN_DEPRECATED_POP } else { // pre QGIS 3.16 compatibility + Q_NOWARN_DEPRECATED_PUSH QgsAttributeEditorRelation::Buttons buttons = QgsAttributeEditorRelation::Button::AllButtons; buttons.setFlag( QgsAttributeEditorRelation::Button::Link, element.attribute( QStringLiteral( "showLinkButton" ), QStringLiteral( "1" ) ).toInt() ); buttons.setFlag( QgsAttributeEditorRelation::Button::Unlink, element.attribute( QStringLiteral( "showUnlinkButton" ), QStringLiteral( "1" ) ).toInt() ); buttons.setFlag( QgsAttributeEditorRelation::Button::SaveChildEdits, element.attribute( QStringLiteral( "showSaveChildEditsButton" ), QStringLiteral( "1" ) ).toInt() ); + Q_NOWARN_DEPRECATED_POP config.insert( "buttons", qgsFlagValueToKeys( buttons ) ); } } diff --git a/src/core/editform/qgsattributeeditorrelation.h b/src/core/editform/qgsattributeeditorrelation.h index bbd75c0e89a7..059bf7d3c5b6 100644 --- a/src/core/editform/qgsattributeeditorrelation.h +++ b/src/core/editform/qgsattributeeditorrelation.h @@ -36,9 +36,10 @@ class CORE_EXPORT QgsAttributeEditorRelation : public QgsAttributeEditorElement /** * Possible buttons shown in the relation editor + * \deprecated since QGIS 3.18 use QgsRelationEditorWidget::Button instead * \since QGIS 3.16 */ - enum Button + enum Q_DECL_DEPRECATED Button { Link = 1 << 1, //!< Link button Unlink = 1 << 2, //!< Unlink button @@ -49,9 +50,11 @@ class CORE_EXPORT QgsAttributeEditorRelation : public QgsAttributeEditorElement ZoomToChildFeature = 1 << 7, //!< Zoom to child feature AllButtons = Link | Unlink | SaveChildEdits | AddChildFeature | DuplicateChildFeature | DeleteChildFeature | ZoomToChildFeature //!< All buttons }; + Q_NOWARN_DEPRECATED_PUSH Q_ENUM( Button ) Q_DECLARE_FLAGS( Buttons, Button ) Q_FLAG( Buttons ) + Q_NOWARN_DEPRECATED_POP /** * \deprecated since QGIS 3.0.2. The name parameter is not used for anything and overwritten by the relationId internally. @@ -183,7 +186,9 @@ class CORE_EXPORT QgsAttributeEditorRelation : public QgsAttributeEditorElement QString typeIdentifier() const override; QString mRelationId; QgsRelation mRelation; + Q_NOWARN_DEPRECATED_PUSH Buttons mButtons = Buttons( Button::AllButtons ); + Q_NOWARN_DEPRECATED_POP bool mForceSuppressFormPopup = false; QVariant mNmRelationId; QString mLabel; @@ -191,7 +196,8 @@ class CORE_EXPORT QgsAttributeEditorRelation : public QgsAttributeEditorElement QVariantMap mRelationEditorConfig; }; +Q_NOWARN_DEPRECATED_PUSH Q_DECLARE_OPERATORS_FOR_FLAGS( QgsAttributeEditorRelation::Buttons ) - +Q_NOWARN_DEPRECATED_POP #endif // QGSATTRIBUTEEDITORRELATION_H diff --git a/src/gui/qgsrelationeditorwidget.h b/src/gui/qgsrelationeditorwidget.h index c36eb4ee63d7..f2d4aa5d7082 100644 --- a/src/gui/qgsrelationeditorwidget.h +++ b/src/gui/qgsrelationeditorwidget.h @@ -95,6 +95,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsAbstractRelationEditorWidge /** * Possible buttons shown in the relation editor + * \since QGIS 3.18 */ enum Button { diff --git a/src/gui/vector/qgsattributesformproperties.h b/src/gui/vector/qgsattributesformproperties.h index 615b42df1df6..9a9ba74f66ab 100644 --- a/src/gui/vector/qgsattributesformproperties.h +++ b/src/gui/vector/qgsattributesformproperties.h @@ -71,7 +71,6 @@ class GUI_EXPORT QgsAttributesFormProperties : public QWidget, public QgsExpress { operator QVariant(); - QgsAttributeEditorRelation::Buttons buttons = QgsAttributeEditorRelation::Button::AllButtons; QString mRelationWidgetType; QVariantMap mRelationWidgetConfig; QVariant nmRelationId; From bb1693b31423d9af0bdbdd000979c3a67c551d32 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Jun 2021 07:32:57 +0200 Subject: [PATCH 2/5] add extra enum NoButton to avoid saving an empty string when using qgsFlagsValueToKeys fixes #43123 --- python/gui/auto_generated/qgsrelationeditorwidget.sip.in | 1 + src/gui/qgsrelationeditorwidget.h | 1 + 2 files changed, 2 insertions(+) diff --git a/python/gui/auto_generated/qgsrelationeditorwidget.sip.in b/python/gui/auto_generated/qgsrelationeditorwidget.sip.in index ea65ad680d23..195229887361 100644 --- a/python/gui/auto_generated/qgsrelationeditorwidget.sip.in +++ b/python/gui/auto_generated/qgsrelationeditorwidget.sip.in @@ -36,6 +36,7 @@ The default relation widget in QGIS. enum Button { + NoButton, Link, Unlink, SaveChildEdits, diff --git a/src/gui/qgsrelationeditorwidget.h b/src/gui/qgsrelationeditorwidget.h index f2d4aa5d7082..4c27e6a69ea7 100644 --- a/src/gui/qgsrelationeditorwidget.h +++ b/src/gui/qgsrelationeditorwidget.h @@ -99,6 +99,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsAbstractRelationEditorWidge */ enum Button { + NoButton = 0, //!< No button Link = 1 << 1, //!< Link button Unlink = 1 << 2, //!< Unlink button SaveChildEdits = 1 << 3, //!< Save child edits button From 084a2b8659b886b4b007ee4e7eeca46f988c38c8 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Jun 2021 08:21:13 +0200 Subject: [PATCH 3/5] fix test by using non deprecated enum --- tests/src/core/testqgis.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/src/core/testqgis.cpp b/tests/src/core/testqgis.cpp index 23a874a8887c..da586dc4fe96 100644 --- a/tests/src/core/testqgis.cpp +++ b/tests/src/core/testqgis.cpp @@ -24,7 +24,7 @@ #include "qgis.h" #include "qgsmaplayermodel.h" #include "qgsattributeeditorelement.h" -#include "qgsattributeeditorrelation.h" +#include "qgsfieldproxymodel.h" /** * \ingroup UnitTests @@ -451,13 +451,13 @@ void TestQgis::testQgsEnumKeyToValue() void TestQgis::testQgsFlagValueToKeys() { - QgsAttributeEditorRelation::Buttons buttons = QgsAttributeEditorRelation::Button::Link | QgsAttributeEditorRelation::Button::AddChildFeature; - QCOMPARE( qgsFlagValueToKeys( buttons ), QStringLiteral( "Link|AddChildFeature" ) ); + QgsFieldProxyModel::Filters filters = QgsFieldProxyModel::Filter::String | QgsFieldProxyModel::Filter::Double; + QCOMPARE( qgsFlagValueToKeys( filters ), QStringLiteral( "String|Double" ) ); } void TestQgis::testQgsFlagKeysToValue() { - QCOMPARE( qgsFlagKeysToValue( QStringLiteral( "Link|AddChildFeature" ), QgsAttributeEditorRelation::Buttons( QgsAttributeEditorRelation::Button::AllButtons ) ), QgsAttributeEditorRelation::Button::Link | QgsAttributeEditorRelation::Button::AddChildFeature ); - QCOMPARE( qgsFlagKeysToValue( QStringLiteral( "UnknownKey" ), QgsAttributeEditorRelation::Buttons( QgsAttributeEditorRelation::Button::AllButtons ) ), QgsAttributeEditorRelation::Buttons( QgsAttributeEditorRelation::Button::AllButtons ) ); + QCOMPARE( qgsFlagKeysToValue( QStringLiteral( "String|Double" ), QgsFieldProxyModel::Filters( QgsFieldProxyModel::Filter::AllTypes ) ), QgsFieldProxyModel::Filter::String | QgsFieldProxyModel::Filter::Double ); + QCOMPARE( qgsFlagKeysToValue( QStringLiteral( "UnknownKey" ), QgsFieldProxyModel::Filters( QgsFieldProxyModel::Filter::AllTypes ) ), QgsFieldProxyModel::Filters( QgsFieldProxyModel::Filter::AllTypes ) ); } void TestQgis::testQMapQVariantList() From 76ddb599d28c89b8feaa38c45e4394342867dc92 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Jun 2021 08:30:46 +0200 Subject: [PATCH 4/5] add comment --- src/core/editform/qgsattributeeditorrelation.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/editform/qgsattributeeditorrelation.cpp b/src/core/editform/qgsattributeeditorrelation.cpp index b783a2610bba..172dd5e511ff 100644 --- a/src/core/editform/qgsattributeeditorrelation.cpp +++ b/src/core/editform/qgsattributeeditorrelation.cpp @@ -67,6 +67,10 @@ void QgsAttributeEditorRelation::loadConfiguration( const QDomElement &element, if ( element.hasAttribute( "buttons" ) ) { Q_NOWARN_DEPRECATED_PUSH + // QgsAttributeEditorRelation::Button has been deprecated in favor of QgsRelationEditorWidget::Button + // we cannot use it here since the new flags are in gui, while the current code is in core + // TODO: remove this compatibility code in QGIS 4 + // or make the enum private if we really want to keep the backward compatibility (but not worth it!) QString buttonString = element.attribute( QStringLiteral( "buttons" ), qgsFlagValueToKeys( QgsAttributeEditorRelation::Button::AllButtons ) ); config.insert( "buttons", qgsFlagValueToKeys( qgsFlagKeysToValue( buttonString, QgsAttributeEditorRelation::Button::AllButtons ) ) ); Q_NOWARN_DEPRECATED_POP From b9277cd3eb49214df06a9f666db1b7f1c56a1c52 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Jun 2021 09:18:53 +0200 Subject: [PATCH 5/5] add since --- src/gui/qgsrelationeditorwidget.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qgsrelationeditorwidget.h b/src/gui/qgsrelationeditorwidget.h index 4c27e6a69ea7..45652251c802 100644 --- a/src/gui/qgsrelationeditorwidget.h +++ b/src/gui/qgsrelationeditorwidget.h @@ -99,7 +99,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsAbstractRelationEditorWidge */ enum Button { - NoButton = 0, //!< No button + NoButton = 0, //!< No button (since QGIS 3.20) Link = 1 << 1, //!< Link button Unlink = 1 << 2, //!< Unlink button SaveChildEdits = 1 << 3, //!< Save child edits button