76 mRelations.remove(
id );
82 mRelations.remove( relation.
id() );
88 return mRelations.value(
id );
97 if ( QString::compare( rel.
name(), name, Qt::CaseInsensitive ) == 0 )
114 return mRelations.values();
123 if ( fieldIdx != -2 )
125 bool containsField =
false;
130 containsField =
true;
135 if ( !containsField )
140 relations.append( rel );
151 return mRelations.values();
160 relations.append( rel );
167 void QgsRelationManager::readProject(
const QDomDocument &doc,
QgsReadWriteContext &context )
171 QDomNodeList nodes = doc.elementsByTagName( QStringLiteral(
"relations" ) );
174 QDomNode node = nodes.item( 0 );
175 QDomNodeList relationNodes = node.childNodes();
176 int relCount = relationNodes.count();
177 for (
int i = 0; i < relCount; ++i )
184 QgsDebugMsg( QStringLiteral(
"No relations data present in this document" ) );
191 void QgsRelationManager::writeProject( QDomDocument &doc )
193 QDomNodeList nl = doc.elementsByTagName( QStringLiteral(
"qgis" ) );
196 QgsDebugMsg( QStringLiteral(
"Unable to find qgis element in project file" ) );
199 QDomNode qgisNode = nl.item( 0 );
201 QDomElement relationsNode = doc.createElement( QStringLiteral(
"relations" ) );
202 qgisNode.appendChild( relationsNode );
206 relation.
writeXml( relationsNode, doc );
210 void QgsRelationManager::layersRemoved(
const QStringList &layers )
212 bool relationsChanged =
false;
213 Q_FOREACH (
const QString &layer, layers )
215 QMapIterator<QString, QgsRelation> it( mRelations );
217 while ( it.hasNext() )
221 if ( it.value().referencedLayerId() == layer
222 || it.value().referencingLayerId() == layer )
224 mRelations.remove( it.key() );
225 relationsChanged =
true;
229 if ( relationsChanged )
235 static bool hasRelationWithEqualDefinition(
const QList<QgsRelation> &existingRelations,
const QgsRelation &
relation )
237 Q_FOREACH (
const QgsRelation &cur, existingRelations )
246 QList<QgsRelation> result;
251 if ( !hasRelationWithEqualDefinition( existingRelations, relation ) )
253 result.append( relation );
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
void setDirty(bool b=true)
Flag the project as dirty (modified).
The class is used as a container of context for various read/write operations on other objects...
QList< QgsRelation > referencingRelations(const QgsVectorLayer *layer=nullptr, int fieldIdx=-2) const
Gets all relations where the specified layer (and field) is the referencing part (i.e.
void layersRemoved(const QStringList &layerIds)
Emitted after one or more layers were removed from the registry.
QgsVectorLayer referencingLayer
static QgsRelation createFromXml(const QDomNode &node, QgsReadWriteContext &context)
Creates a relation from an XML structure.
void updateRelationsStatus()
Updates relations status.
void clear()
Remove any relation managed by this class.
void setRelations(const QList< QgsRelation > &relations)
Will set the specified relations and remove any relation currently set.
void readProjectWithContext(const QDomDocument &, QgsReadWriteContext &context)
Emitted when a project is being read.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
Defines a relation between matching fields of the two involved tables of a relation.
QList< QgsRelation > relationsByName(const QString &name) const
Returns a list of relations with matching names.
QMap< QString, QgsRelation > relations() const
Gets access to the relations managed by this class.
Reads and writes project states.
QgsVectorLayer referencedLayer
QList< QgsRelation > referencedRelations(QgsVectorLayer *layer=nullptr) const
Gets all relations where this layer is the referenced part (i.e.
bool hasEqualDefinition(const QgsRelation &other) const
Compares the two QgsRelation, ignoring the name and the 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 relationsLoaded()
This signal is emitted when the relations were loaded after reading a project.
void writeProject(QDomDocument &)
Emitted when the project is being written.
void changed()
Emitted when relations are added or removed to the manager.
static QList< QgsRelation > discoverRelations(const QList< QgsRelation > &existingRelations, const QList< QgsVectorLayer *> &layers)
Discover all the relations available from the current layers.
void removeRelation(const QString &id)
Remove a relation.
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be null.
QgsRelationManager(QgsProject *project=nullptr)
Constructor for QgsRelationManager.
Q_INVOKABLE QgsRelation relation(const QString &id) const
Gets access to a relation by its id.
Represents a vector layer which manages a vector based data sets.
QString referencingField() const
Gets the name of the referencing (child) field.
void writeXml(QDomNode &node, QDomDocument &doc) const
Writes a relation to an XML structure.
void updateRelationStatus()
Updates the validity status of this relation.
void addRelation(const QgsRelation &relation)
Add a relation.
virtual QList< QgsRelation > discoverRelations(const QgsVectorLayer *self, const QList< QgsVectorLayer *> &layers) const
Discover the available relations with the given layers.