mirror of
https://github.com/qgis/QGIS.git
synced 2025-11-22 00:14:55 -05:00
Fixes in the QgsPolymorphicRelation
This commit is contained in:
parent
7feb0730f8
commit
89c07ff262
@ -207,11 +207,6 @@ Sets the ``expression`` to identify the parent layer
|
|||||||
QString referencedLayerExpression() const;
|
QString referencedLayerExpression() const;
|
||||||
%Docstring
|
%Docstring
|
||||||
Returns the expression to identify the parent layer
|
Returns the expression to identify the parent layer
|
||||||
%End
|
|
||||||
|
|
||||||
QgsExpressionContext getLayerContext() const;
|
|
||||||
%Docstring
|
|
||||||
Provide layer metadata as variables in an expression context
|
|
||||||
%End
|
%End
|
||||||
|
|
||||||
void setReferencedLayerIds( const QStringList &childRelationIds );
|
void setReferencedLayerIds( const QStringList &childRelationIds );
|
||||||
@ -227,6 +222,11 @@ Returns a list of layer ids to be used as potential referenced layers
|
|||||||
QList<QgsRelation> getGeneratedRelations() const;
|
QList<QgsRelation> getGeneratedRelations() const;
|
||||||
%Docstring
|
%Docstring
|
||||||
Returns a list of generated relations, based on the currently set :py:func:`~QgsPolymorphicRelation.referencedLayerIds`
|
Returns a list of generated relations, based on the currently set :py:func:`~QgsPolymorphicRelation.referencedLayerIds`
|
||||||
|
%End
|
||||||
|
|
||||||
|
QString layerRepresentation( const QgsVectorLayer *layer ) const;
|
||||||
|
%Docstring
|
||||||
|
Returns layer representation as evaluated string
|
||||||
%End
|
%End
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
#include "qgsproject.h"
|
#include "qgsproject.h"
|
||||||
#include "qgsvectorlayer.h"
|
#include "qgsvectorlayer.h"
|
||||||
#include "qgspolymorphicrelation_p.h"
|
#include "qgspolymorphicrelation_p.h"
|
||||||
|
#include "qgsexpressioncontextutils.h"
|
||||||
|
|
||||||
QgsPolymorphicRelation::QgsPolymorphicRelation()
|
QgsPolymorphicRelation::QgsPolymorphicRelation()
|
||||||
: d( new QgsPolymorphicRelationPrivate() )
|
: d( new QgsPolymorphicRelationPrivate() )
|
||||||
@ -225,6 +226,14 @@ bool QgsPolymorphicRelation::hasEqualDefinition( const QgsPolymorphicRelation &o
|
|||||||
|
|
||||||
void QgsPolymorphicRelation::updateRelationStatus()
|
void QgsPolymorphicRelation::updateRelationStatus()
|
||||||
{
|
{
|
||||||
|
const QMap<QString, QgsMapLayer *> &mapLayers = mContext.project()->mapLayers();
|
||||||
|
|
||||||
|
d->mValid = true;
|
||||||
|
d->mReferencingLayer = mapLayers.contains( d->mReferencingLayerId )
|
||||||
|
? qobject_cast<QgsVectorLayer *>( mapLayers[d->mReferencingLayerId] )
|
||||||
|
: nullptr;
|
||||||
|
d->mReferencedLayersMap.clear();
|
||||||
|
|
||||||
if ( d->mRelationId.isEmpty() )
|
if ( d->mRelationId.isEmpty() )
|
||||||
{
|
{
|
||||||
QgsDebugMsg( QStringLiteral( "Invalid relation: no ID" ) );
|
QgsDebugMsg( QStringLiteral( "Invalid relation: no ID" ) );
|
||||||
@ -232,13 +241,6 @@ void QgsPolymorphicRelation::updateRelationStatus()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QMap<QString, QgsMapLayer *> &mapLayers = mContext.project()->mapLayers();
|
|
||||||
|
|
||||||
d->mValid = true;
|
|
||||||
d->mReferencingLayer = qobject_cast<QgsVectorLayer *>( mapLayers[d->mReferencingLayerId] );
|
|
||||||
// TODO probably this map is not needed??
|
|
||||||
d->mReferencedLayersMap.clear();
|
|
||||||
|
|
||||||
if ( !d->mReferencingLayer )
|
if ( !d->mReferencingLayer )
|
||||||
{
|
{
|
||||||
QgsDebugMsgLevel( QStringLiteral( "Invalid relation: referencing layer does not exist. ID: %1" ).arg( d->mReferencingLayerId ), 4 );
|
QgsDebugMsgLevel( QStringLiteral( "Invalid relation: referencing layer does not exist. ID: %1" ).arg( d->mReferencingLayerId ), 4 );
|
||||||
@ -355,11 +357,6 @@ QStringList QgsPolymorphicRelation::referencedLayerIds() const
|
|||||||
return d->mReferencedLayerIds;
|
return d->mReferencedLayerIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsExpressionContext QgsPolymorphicRelation::getLayerContext() const
|
|
||||||
{
|
|
||||||
return QgsExpressionContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<QgsRelation> QgsPolymorphicRelation::getGeneratedRelations() const
|
QList<QgsRelation> QgsPolymorphicRelation::getGeneratedRelations() const
|
||||||
{
|
{
|
||||||
QList<QgsRelation> relations;
|
QList<QgsRelation> relations;
|
||||||
@ -391,3 +388,14 @@ QList<QgsRelation> QgsPolymorphicRelation::getGeneratedRelations() const
|
|||||||
|
|
||||||
return relations;
|
return relations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QgsPolymorphicRelation::layerRepresentation( const QgsVectorLayer *layer ) const
|
||||||
|
{
|
||||||
|
if ( !layer || !layer->isValid() )
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
QgsExpressionContext context = layer->createExpressionContext();
|
||||||
|
QgsExpression expr( d->mReferencedLayerExpression );
|
||||||
|
|
||||||
|
return expr.evaluate( &context ).toString();
|
||||||
|
}
|
||||||
|
|||||||
@ -254,11 +254,6 @@ class CORE_EXPORT QgsPolymorphicRelation
|
|||||||
*/
|
*/
|
||||||
QString referencedLayerExpression() const;
|
QString referencedLayerExpression() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Provide layer metadata as variables in an expression context
|
|
||||||
*/
|
|
||||||
QgsExpressionContext getLayerContext() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a list of layer ids to be used as potential referenced layers
|
* Sets a list of layer ids to be used as potential referenced layers
|
||||||
*/
|
*/
|
||||||
@ -274,6 +269,11 @@ class CORE_EXPORT QgsPolymorphicRelation
|
|||||||
*/
|
*/
|
||||||
QList<QgsRelation> getGeneratedRelations() const;
|
QList<QgsRelation> getGeneratedRelations() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns layer representation as evaluated string
|
||||||
|
*/
|
||||||
|
QString layerRepresentation( const QgsVectorLayer *layer ) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
mutable QExplicitlySharedDataPointer<QgsPolymorphicRelationPrivate> d;
|
mutable QExplicitlySharedDataPointer<QgsPolymorphicRelationPrivate> d;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user