Skip to content

Commit 1e5a93b

Browse files
committedFeb 1, 2017
Add method to determine layers participating in a label engine
1 parent 0438afc commit 1e5a93b

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed
 

‎src/core/qgslabelingengine.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,22 @@ QgsLabelingEngine::~QgsLabelingEngine()
8888
qDeleteAll( mSubProviders );
8989
}
9090

91+
QStringList QgsLabelingEngine::participatingLayerIds() const
92+
{
93+
QSet< QString > ids;
94+
Q_FOREACH ( QgsAbstractLabelProvider* provider, mProviders )
95+
{
96+
if ( !provider->layerId().isEmpty() )
97+
ids << provider->layerId();
98+
}
99+
Q_FOREACH ( QgsAbstractLabelProvider* provider, mSubProviders )
100+
{
101+
if ( !provider->layerId().isEmpty() )
102+
ids << provider->layerId();
103+
}
104+
return ids.toList();
105+
}
106+
91107
void QgsLabelingEngine::addProvider( QgsAbstractLabelProvider* provider )
92108
{
93109
provider->setEngine( this );

‎src/core/qgslabelingengine.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ class CORE_EXPORT QgsLabelingEngine
186186
//! Get associated map settings
187187
const QgsMapSettings& mapSettings() const { return mMapSettings; }
188188

189+
/**
190+
* Returns a list of layer IDs for layers with providers in the engine.
191+
* @note added in QGIS 3.0
192+
*/
193+
QStringList participatingLayerIds() const;
194+
189195
//! Add provider of label features. Takes ownership of the provider
190196
void addProvider( QgsAbstractLabelProvider* provider );
191197

‎tests/src/core/testqgslabelingengine.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class TestQgsLabelingEngine : public QObject
4545
void testEncodeDecodePositionOrder();
4646
void testSubstitutions();
4747
void testCapitalization();
48+
void testParticipatingLayers();
4849

4950
private:
5051
QgsVectorLayer* vl;
@@ -534,6 +535,35 @@ void TestQgsLabelingEngine::testCapitalization()
534535
QCOMPARE( provider4->mLabels.at( 0 )->labelText(), QString( "A TeSt LABEL" ) );
535536
}
536537

538+
void TestQgsLabelingEngine::testParticipatingLayers()
539+
{
540+
QgsLabelingEngine engine;
541+
QVERIFY( engine.participatingLayerIds().isEmpty() );
542+
543+
QgsPalLayerSettings settings1;
544+
QgsVectorLayerLabelProvider* provider = new QgsVectorLayerLabelProvider( vl, QStringLiteral( "test" ), true, &settings1 );
545+
engine.addProvider( provider );
546+
QCOMPARE( engine.participatingLayerIds(), QStringList() << vl->id() );
547+
548+
QgsVectorLayer* layer2 = new QgsVectorLayer( QStringLiteral( "Point?field=col1:integer" ), QStringLiteral( "layer2" ), QStringLiteral( "memory" ) );
549+
QgsPalLayerSettings settings2;
550+
QgsVectorLayerLabelProvider* provider2 = new QgsVectorLayerLabelProvider( layer2, QStringLiteral( "test2" ), true, &settings2 );
551+
engine.addProvider( provider2 );
552+
QCOMPARE( engine.participatingLayerIds().toSet(), QSet< QString >() << vl->id() << layer2->id() );
553+
554+
// add a rule-based labeling node
555+
QgsRuleBasedLabeling::Rule* root = new QgsRuleBasedLabeling::Rule( 0 );
556+
QgsPalLayerSettings s1;
557+
root->appendChild( new QgsRuleBasedLabeling::Rule( new QgsPalLayerSettings( s1 ) ) );
558+
QgsPalLayerSettings s2;
559+
root->appendChild( new QgsRuleBasedLabeling::Rule( new QgsPalLayerSettings( s2 ) ) );
560+
561+
QgsVectorLayer* layer3 = new QgsVectorLayer( QStringLiteral( "Point?field=col1:integer" ), QStringLiteral( "layer3" ), QStringLiteral( "memory" ) );
562+
QgsRuleBasedLabelProvider* ruleProvider = new QgsRuleBasedLabelProvider( QgsRuleBasedLabeling( root ), layer3 );
563+
engine.addProvider( ruleProvider );
564+
QCOMPARE( engine.participatingLayerIds().toSet(), QSet< QString >() << vl->id() << layer2->id() << layer3->id() );
565+
}
566+
537567
bool TestQgsLabelingEngine::imageCheck( const QString& testName, QImage &image, int mismatchCount )
538568
{
539569
//draw background

0 commit comments

Comments
 (0)
Please sign in to comment.