Skip to content

Commit 1906de1

Browse files
committed
Add possibility to temporarily disable layer tree to registry bridge
This is useful during the project load where the updates from map layer registry would make the layers appear twice in the tree
1 parent 129d295 commit 1906de1

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

src/core/layertree/qgslayertreeregistrybridge.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
QgsLayerTreeRegistryBridge::QgsLayerTreeRegistryBridge(QgsLayerTreeGroup *root, QObject *parent)
88
: QObject(parent)
99
, mRoot(root)
10+
, mEnabled(true)
1011
{
1112
connect(QgsMapLayerRegistry::instance(), SIGNAL(layersAdded(QList<QgsMapLayer*>)), this, SLOT(layersAdded(QList<QgsMapLayer*>)));
1213
connect(QgsMapLayerRegistry::instance(), SIGNAL(layersWillBeRemoved(QStringList)), this, SLOT(layersWillBeRemoved(QStringList)));
@@ -16,6 +17,9 @@ QgsLayerTreeRegistryBridge::QgsLayerTreeRegistryBridge(QgsLayerTreeGroup *root,
1617

1718
void QgsLayerTreeRegistryBridge::layersAdded(QList<QgsMapLayer*> layers)
1819
{
20+
if (!mEnabled)
21+
return;
22+
1923
foreach (QgsMapLayer* layer, layers)
2024
{
2125
mRoot->addLayer(layer);
@@ -24,6 +28,9 @@ void QgsLayerTreeRegistryBridge::layersAdded(QList<QgsMapLayer*> layers)
2428

2529
void QgsLayerTreeRegistryBridge::layersWillBeRemoved(QStringList layerIds)
2630
{
31+
if (!mEnabled)
32+
return;
33+
2734
foreach (QString layerId, layerIds)
2835
{
2936
QgsLayerTreeLayer* nodeLayer = mRoot->findLayer(layerId);

src/core/layertree/qgslayertreeregistrybridge.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class CORE_EXPORT QgsLayerTreeRegistryBridge : public QObject
1717
public:
1818
explicit QgsLayerTreeRegistryBridge(QgsLayerTreeGroup* root, QObject *parent = 0);
1919

20+
void setEnabled(bool enabled) { mEnabled = enabled; }
21+
bool isEnabled() const { return mEnabled; }
22+
2023
signals:
2124

2225
protected slots:
@@ -33,6 +36,7 @@ protected slots:
3336
protected:
3437
QgsLayerTreeGroup* mRoot;
3538
QStringList mLayerIdsForRemoval;
39+
bool mEnabled;
3640
};
3741

3842
#endif // QGSLAYERTREEREGISTRYBRIDGE_H

src/core/qgsproject.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ QgsProject::QgsProject()
342342
// bind the layer tree to the map layer registry.
343343
// whenever layers are added to or removed from the registry,
344344
// layer tree will be updated
345-
new QgsLayerTreeRegistryBridge(mRootGroup, this);
345+
mLayerTreeRegistryBridge = new QgsLayerTreeRegistryBridge(mRootGroup, this);
346346

347347
} // QgsProject ctor
348348

@@ -915,6 +915,8 @@ bool QgsProject::read()
915915

916916
QgsDebugMsg( "Loaded layer tree:\n " + mRootGroup->dump() );
917917

918+
mLayerTreeRegistryBridge->setEnabled( false );
919+
918920
// get the map layers
919921
QPair< bool, QList<QDomNode> > getMapLayersResults = _getMapLayers( *doc );
920922

@@ -935,6 +937,8 @@ bool QgsProject::read()
935937
mBadLayerHandler->handleBadLayers( getMapLayersResults.second, *doc );
936938
}
937939

940+
mLayerTreeRegistryBridge->setEnabled( true );
941+
938942
// read the project: used by map canvas and legend
939943
emit readProject( *doc );
940944

src/core/qgsproject.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class QDomElement;
4040
class QDomNode;
4141

4242
class QgsLayerTreeGroup;
43+
class QgsLayerTreeRegistryBridge;
4344
class QgsMapLayer;
4445
class QgsProjectBadLayerHandler;
4546
class QgsRelationManager;
@@ -417,6 +418,8 @@ class CORE_EXPORT QgsProject : public QObject
417418

418419
QgsLayerTreeGroup* mRootGroup;
419420

421+
QgsLayerTreeRegistryBridge* mLayerTreeRegistryBridge;
422+
420423
}; // QgsProject
421424

422425

0 commit comments

Comments
 (0)