QGIS API Documentation 4.1.0-Master (60fea48833c)
Loading...
Searching...
No Matches
qgspolymorphicrelation.h
Go to the documentation of this file.
1/***************************************************************************
2 qgspolymorphicrelation.h
3 --------------------------------------
4 Date : December 2020
5 Copyright : (C) 2020 Ivan Ivanov
6 Email : ivan at opengis dot ch
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSPOLYMORPHICRELATION_H
17#define QGSPOLYMORPHICRELATION_H
18
19#include "qgis_core.h"
20#include "qgis_sip.h"
21#include "qgsfields.h"
22#include "qgsreadwritecontext.h"
23#include "qgsrelation.h"
24#include "qgsrelationcontext.h"
25
26#include <QDomNode>
27#include <QList>
28#include <QPair>
29
31class QgsFeature;
33class QgsAttributes;
34class QgsVectorLayer;
35class QgsPolymorphicRelationPrivate;
37
51class CORE_EXPORT QgsPolymorphicRelation
52{
53 Q_GADGET
54
55 Q_PROPERTY( QString id READ id WRITE setId )
57 Q_PROPERTY( QString referencedLayerField READ referencedLayerField )
59 Q_PROPERTY( QString name READ name WRITE setName )
60 Q_PROPERTY( bool isValid READ isValid )
61
62 public:
68
73
81
87 QgsPolymorphicRelation &operator=( const QgsPolymorphicRelation &other );
89
99 static QgsPolymorphicRelation createFromXml( const QDomNode &node, QgsReadWriteContext &context, const QgsRelationContext &relationContext = QgsRelationContext() );
100
107 void writeXml( QDomNode &node, QDomDocument &doc ) const;
108
112 void setId( const QString &id );
113
117 void setName( const QString &name );
118
122 void setReferencingLayer( const QString &id );
123
132 void addFieldPair( const QString &referencingField, const QString &referencedField );
133
142 void addFieldPair( const QgsRelation::FieldPair &fieldPair ) SIP_SKIP;
143
151 QString name() const;
152
158 QString id() const;
159
163 void generateId();
164
171 QString referencingLayerId() const;
172
180
188#ifndef SIP_RUN
189 QList< QgsRelation::FieldPair > fieldPairs() const;
190#else
191 // clang-format off
192 QMap< QString, QString > fieldPairs() const;
193 % MethodCode
194 const QList< QgsRelation::FieldPair > &pairs = sipCpp->fieldPairs();
195 sipRes = new QMap< QString, QString >();
196 for ( const QgsRelation::FieldPair &pair : pairs )
197 {
198 sipRes->insert( pair.first, pair.second );
199 }
200 % End
201// clang-format on
202#endif
203
210 QgsAttributeList referencedFields( const QString &layerId ) const;
211
218 QgsAttributeList referencingFields() const;
219
226 bool isValid() const;
227
234 bool hasEqualDefinition( const QgsPolymorphicRelation &other ) const;
235
240 void updateRelationStatus();
241
245 void setReferencedLayerField( const QString &referencedLayerField );
246
250 QString referencedLayerField() const;
251
255 void setReferencedLayerExpression( const QString &expression );
256
260 QString referencedLayerExpression() const;
261
265 void setReferencedLayerIds( const QStringList &childRelationIds );
266
270 QStringList referencedLayerIds() const;
271
275 QList<QgsRelation> generateRelations() const;
276
280 QString layerRepresentation( const QgsVectorLayer *layer ) const;
281
285 Qgis::RelationshipStrength strength() const;
286
290 void setRelationStrength( Qgis::RelationshipStrength relationStrength );
291
292 private:
293 friend class QgsRelationManager;
294
296 QString upgradeGeneratedRelationId( const QString &oldRelationId ) const;
297
298 QExplicitlySharedDataPointer<QgsPolymorphicRelationPrivate> d;
299
300 QgsRelationContext mContext;
301};
302
303// Register QgsPolymorphicRelation for usage with QVariant
305
306#endif // QGSPOLYMORPHICRELATION_H
RelationshipStrength
Relationship strength.
Definition qgis.h:4549
A vector of attributes.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Wrapper for iterator of features from vector data provider or vector layer.
Wraps a request for features to a vector layer (or directly its vector data provider).
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:60
A relation where the referenced (parent) layer is calculated based on fields from the referencing (ch...
void generateId()
Generate a (project-wide) unique id for this relation.
void setReferencingLayer(const QString &id)
Set the referencing (child) layer id.
QList< QgsRelation::FieldPair > fieldPairs() const
Returns the field pairs which form this relation The first element of each pair are the field names o...
void writeXml(QDomNode &node, QDomDocument &doc) const
Writes a relation to an XML structure.
void addFieldPair(const QString &referencingField, const QString &referencedField)
Add a field pair which is part of this relation The first element of each pair are the field names of...
static QgsPolymorphicRelation createFromXml(const QDomNode &node, QgsReadWriteContext &context, const QgsRelationContext &relationContext=QgsRelationContext())
Creates a relation from an XML structure.
QString referencingLayerId() const
Access the referencing (child) layer's id This is the layer which has the field(s) which point to ano...
QgsPolymorphicRelation()
Default constructor.
void setName(const QString &name)
Set a name for this relation.
void setId(const QString &id)
Set an id for this relation.
A container for the context for various read/write operations on objects.
Context for relations.
Defines a relation between matching fields of the two involved tables of a relation.
Definition qgsrelation.h:71
Represents a relationship between two vector layers.
Definition qgsrelation.h:42
Represents a vector layer which manages a vector based dataset.
#define SIP_SKIP
Definition qgis_sip.h:133
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
QList< int > QgsAttributeList
Definition qgsfield.h:30