Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsattributeeditorrelation.h - QgsAttributeEditorElement 3 : : 4 : : --------------------- 5 : : begin : 12.01.2021 6 : : copyright : (C) 2021 by Denis Rouzaud 7 : : email : denis@opengis.ch 8 : : *************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : #ifndef QGSATTRIBUTEEDITORRELATION_H 17 : : #define QGSATTRIBUTEEDITORRELATION_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgsattributeeditorelement.h" 21 : : #include "qgsrelation.h" 22 : : #include "qgsoptionalexpression.h" 23 : : #include "qgspropertycollection.h" 24 : : #include <QColor> 25 : : 26 : : class QgsRelationManager; 27 : : 28 : : /** 29 : : * \ingroup core 30 : : * \brief This element will load a relation editor onto the form. 31 : : */ 32 : 0 : class CORE_EXPORT QgsAttributeEditorRelation : public QgsAttributeEditorElement 33 : : { 34 : : Q_GADGET 35 : : public: 36 : : 37 : : /** 38 : : * Possible buttons shown in the relation editor 39 : : * \since QGIS 3.16 40 : : */ 41 : : enum Button 42 : : { 43 : : Link = 1 << 1, //!< Link button 44 : : Unlink = 1 << 2, //!< Unlink button 45 : : SaveChildEdits = 1 << 3, //!< Save child edits button 46 : : AddChildFeature = 1 << 4, //!< Add child feature (as in some projects we only want to allow linking/unlinking existing features) 47 : : DuplicateChildFeature = 1 << 5, //!< Duplicate child feature 48 : : DeleteChildFeature = 1 << 6, //!< Delete child feature button 49 : : ZoomToChildFeature = 1 << 7, //!< Zoom to child feature 50 : : AllButtons = Link | Unlink | SaveChildEdits | AddChildFeature | DuplicateChildFeature | DeleteChildFeature | ZoomToChildFeature //!< All buttons 51 : : }; 52 : 0 : Q_ENUM( Button ) 53 : : Q_DECLARE_FLAGS( Buttons, Button ) 54 : 0 : Q_FLAG( Buttons ) 55 : : 56 : : /** 57 : : * \deprecated since QGIS 3.0.2. The name parameter is not used for anything and overwritten by the relationId internally. 58 : : */ 59 : : Q_DECL_DEPRECATED QgsAttributeEditorRelation( const QString &name, const QString &relationId, QgsAttributeEditorElement *parent ) 60 : : : QgsAttributeEditorElement( AeTypeRelation, name, parent ) 61 : : , mRelationId( relationId ) 62 : : {} 63 : : 64 : : /** 65 : : * \deprecated since QGIS 3.0.2. The name parameter is not used for anything and overwritten by the relationId internally. 66 : : */ 67 : : Q_DECL_DEPRECATED QgsAttributeEditorRelation( const QString &name, const QgsRelation &relation, QgsAttributeEditorElement *parent ) 68 : : : QgsAttributeEditorElement( AeTypeRelation, name, parent ) 69 : : , mRelationId( relation.id() ) 70 : : , mRelation( relation ) 71 : : {} 72 : : 73 : : /** 74 : : * Creates a new element which embeds a relation. 75 : : * 76 : : * \param relationId The id of the relation to embed 77 : : * \param parent The parent (used as container) 78 : : */ 79 : 0 : QgsAttributeEditorRelation( const QString &relationId, QgsAttributeEditorElement *parent ) 80 : 0 : : QgsAttributeEditorElement( AeTypeRelation, relationId, parent ) 81 : 0 : , mRelationId( relationId ) 82 : 0 : {} 83 : : 84 : : /** 85 : : * Creates a new element which embeds a relation. 86 : : * 87 : : * \param relation The relation to embed 88 : : * \param parent The parent (used as container) 89 : : */ 90 : : QgsAttributeEditorRelation( const QgsRelation &relation, QgsAttributeEditorElement *parent ) 91 : : : QgsAttributeEditorElement( AeTypeRelation, relation.id(), parent ) 92 : : , mRelationId( relation.id() ) 93 : : , mRelation( relation ) 94 : : {} 95 : : 96 : : 97 : : /** 98 : : * Gets the id of the relation which shall be embedded 99 : : * 100 : : * \returns the id 101 : : */ 102 : 0 : const QgsRelation &relation() const { return mRelation; } 103 : : 104 : : /** 105 : : * Initializes the relation from the id 106 : : * 107 : : * \param relManager The relation manager to use for the initialization 108 : : * \returns TRUE if the relation was found in the relationmanager 109 : : */ 110 : : bool init( QgsRelationManager *relManager ); 111 : : 112 : : QgsAttributeEditorElement *clone( QgsAttributeEditorElement *parent ) const override SIP_FACTORY; 113 : : 114 : : /** 115 : : * Determines the force suppress form popup status. 116 : : * \since QGIS 3.16 117 : : */ 118 : : bool forceSuppressFormPopup() const; 119 : : 120 : : /** 121 : : * Sets force suppress form popup status to \a forceSuppressFormPopup. 122 : : * This flag is to override the layer and general settings regarding the automatic 123 : : * opening of the attribute form dialog when digitizing is completed. 124 : : * \since QGIS 3.16 125 : : */ 126 : : void setForceSuppressFormPopup( bool forceSuppressFormPopup ); 127 : : 128 : : /** 129 : : * Determines the relation id of the second relation involved in an N:M relation. 130 : : * \since QGIS 3.16 131 : : */ 132 : : QVariant nmRelationId() const; 133 : : 134 : : /** 135 : : * Sets \a nmRelationId for the relation id of the second relation involved in an N:M relation. 136 : : * If it's empty, then it's considered as a 1:M relationship. 137 : : * \since QGIS 3.16 138 : : */ 139 : : void setNmRelationId( const QVariant &nmRelationId = QVariant() ); 140 : : 141 : : /** 142 : : * Determines the label of this element 143 : : * \since QGIS 3.16 144 : : */ 145 : : QString label() const; 146 : : 147 : : /** 148 : : * Sets \a label for this element 149 : : * If it's empty it takes the relation id as label 150 : : * \since QGIS 3.16 151 : : */ 152 : : void setLabel( const QString &label = QString() ); 153 : : 154 : : /** 155 : : * Returns the current relation widget type id 156 : : * \since QGIS 3.18 157 : : */ 158 : : QString relationWidgetTypeId() const; 159 : : 160 : : /** 161 : : * Sets the relation widget type 162 : : * \since QGIS 3.18 163 : : */ 164 : : void setRelationWidgetTypeId( const QString &relationWidgetTypeId ); 165 : : 166 : : /** 167 : : * Returns the relation editor widget configuration 168 : : * 169 : : * \since QGIS 3.18 170 : : */ 171 : : QVariantMap relationEditorConfiguration() const; 172 : : 173 : : /** 174 : : * Sets the relation editor configuration 175 : : * 176 : : * \since QGIS 3.18 177 : : */ 178 : : void setRelationEditorConfiguration( const QVariantMap &config ); 179 : : 180 : : private: 181 : : void saveConfiguration( QDomElement &elem, QDomDocument &doc ) const override; 182 : : void loadConfiguration( const QDomElement &element, const QString &layerId, const QgsReadWriteContext &context, const QgsFields &fields ) override; 183 : : QString typeIdentifier() const override; 184 : : QString mRelationId; 185 : : QgsRelation mRelation; 186 : 0 : Buttons mButtons = Buttons( Button::AllButtons ); 187 : 0 : bool mForceSuppressFormPopup = false; 188 : : QVariant mNmRelationId; 189 : : QString mLabel; 190 : : QString mRelationWidgetTypeId; 191 : : QVariantMap mRelationEditorConfig; 192 : : }; 193 : : 194 : : Q_DECLARE_OPERATORS_FOR_FLAGS( QgsAttributeEditorRelation::Buttons ) 195 : : 196 : : 197 : : #endif // QGSATTRIBUTEEDITORRELATION_H