28#include "moc_qgslayertreemapcanvasbridge.cpp"
34 , mHasLayersLoaded( !root->findLayers().isEmpty() )
47 QList<QgsMapLayer *> canvasLayers, overviewLayers, allLayerOrder;
49 if ( mRoot->hasCustomLayerOrder() )
51 const QList<QgsMapLayer *> customOrderLayers = mRoot->customLayerOrder();
52 for (
const QgsMapLayer *layer : customOrderLayers )
60 allLayerOrder << nodeLayer->
layer();
62 canvasLayers << nodeLayer->
layer();
63 if ( nodeLayer->
customProperty( QStringLiteral(
"overview" ), 0 ).toInt() )
64 overviewLayers << nodeLayer->
layer();
73 const QList<QgsLayerTreeLayer *> layerNodes = mRoot->findLayers();
74 int currentSpatialLayerCount = 0;
75 int currentValidSpatialLayerCount = 0;
78 if ( layerNode->layer() && layerNode->layer()->isSpatial() )
80 currentSpatialLayerCount++;
81 if ( layerNode->layer()->isValid() )
82 currentValidSpatialLayerCount++;
86 const bool firstLayers = mAutoSetupOnFirstLayer && !mHasLayersLoaded && currentSpatialLayerCount != 0;
87 const bool firstValidLayers = mAutoSetupOnFirstLayer && !mHasValidLayersLoaded && currentValidSpatialLayerCount != 0;
89 mCanvas->setLayers( canvasLayers );
90 if ( mOverviewCanvas )
91 mOverviewCanvas->setLayers( overviewLayers );
93 if ( firstValidLayers )
96 mCanvas->zoomToProjectExtent();
99 if ( !mFirstCRS.isValid() )
104 if ( layerNode->layer() && layerNode->layer()->crs().isValid() )
106 mFirstCRS = layerNode->layer()->crs();
112 if ( mFirstCRS.isValid() && firstLayers )
115 switch ( projectCrsBehavior )
135 mHasLayersLoaded = currentSpatialLayerCount;
136 mHasValidLayersLoaded = currentValidSpatialLayerCount;
137 if ( currentSpatialLayerCount == 0 )
140 mPendingCanvasUpdate =
false;
152 allLayers << nodeLayer->
layer();
154 canvasLayers << nodeLayer->
layer();
155 if ( nodeLayer->
customProperty( QStringLiteral(
"overview" ), 0 ).toInt() )
156 overviewLayers << nodeLayer->
layer();
160 const QList<QgsLayerTreeNode *> children = node->
children();
161 for ( QgsLayerTreeNode *child : children )
167 if ( child->isVisible() )
168 canvasLayers << groupLayer;
176void QgsLayerTreeMapCanvasBridge::deferredSetCanvasLayers()
178 if ( mPendingCanvasUpdate )
181 mPendingCanvasUpdate =
true;
182 QMetaObject::invokeMethod(
this,
"setCanvasLayers", Qt::QueuedConnection );
185void QgsLayerTreeMapCanvasBridge::nodeVisibilityChanged()
187 deferredSetCanvasLayers();
190void QgsLayerTreeMapCanvasBridge::nodeCustomPropertyChanged(
QgsLayerTreeNode *node,
const QString &key )
193 if ( key == QLatin1String(
"overview" ) )
194 deferredSetCanvasLayers();
197void QgsLayerTreeMapCanvasBridge::layersAdded(
const QList<QgsMapLayer *> &layers )
199 for ( QgsMapLayer *l : layers )
204 if ( l->isValid() && l->isSpatial() && mAutoSetupOnFirstLayer && !mHasValidLayersLoaded )
206 mHasValidLayersLoaded =
true;
208 mCanvas->zoomToProjectExtent();
210 deferredSetCanvasLayers();
Represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
QgsCoordinateReferenceSystem verticalCrs() const
Returns the vertical CRS associated with this CRS object.
ProjectCrsBehavior
Defines the behavior to use when setting the CRS for a newly created project.
@ UseCrsOfFirstLayerAdded
Set the project CRS to the CRS of the first layer added to a new project.
@ UsePresetCrs
Always set new projects to use a preset default CRS.
Layer tree node points to a map layer.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
Q_INVOKABLE void setCanvasLayers()
force update of canvas layers from the layer tree. Normally this should not be needed to be called.
void canvasLayersChanged(const QList< QgsMapLayer * > &layers)
Emitted when the set of layers (or order of layers) visible in the canvas changes.
QgsLayerTreeMapCanvasBridge(QgsLayerTree *root, QgsMapCanvas *canvas, QObject *parent SIP_TRANSFERTHIS=nullptr)
Constructor: does not take ownership of the layer tree nor canvas.
Base class for nodes in a layer tree.
bool isVisible() const
Returns whether a node is really visible (ie checked and all its ancestors checked as well).
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer. Properties are stored in a map and saved in project file.
void customPropertyChanged(QgsLayerTreeNode *node, const QString &key)
Emitted when a custom property of a node within the tree has been changed or removed.
void visibilityChanged(QgsLayerTreeNode *node)
Emitted when check state of a node within the tree has been changed.
Namespace with helper functions for layer tree operations.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
void layerOrderChanged()
Emitted when the layer order has changed.
Map canvas is a class for displaying all GIS data types on a canvas.
Base class for all map layer types.
virtual bool isSpatial() const
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
void dataSourceChanged()
Emitted whenever the layer's data source has been changed.
void setCrs(const QgsCoordinateReferenceSystem &crs, bool adjustEllipsoid=false)
Sets the project's native coordinate reference system.
static QgsProject * instance()
Returns the QgsProject singleton instance.
bool setVerticalCrs(const QgsCoordinateReferenceSystem &crs, QString *errorMessage=nullptr)
Sets the project's vertical coordinate reference system.
void layersAdded(const QList< QgsMapLayer * > &layers)
Emitted when one or more layers were added to the registry.
Stores settings for use within QGIS.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
T enumValue(const QString &key, const T &defaultValue, const Section section=NoSection)
Returns the setting value for a setting based on an enum.