34 , mTransformContext( options.transformContext )
40 mPaintEffect->setEnabled(
false );
44 mDataProvider =
new QgsGroupLayerDataProvider( providerOptions, QgsDataProvider::ReadFlags() );
56 std::unique_ptr< QgsGroupLayer > layer = std::make_unique< QgsGroupLayer >(
name(), options );
58 layer->setChildLayers( _qgis_listRefToRaw( mChildren ) );
59 layer->setPaintEffect( mPaintEffect ? mPaintEffect->clone() :
nullptr );
60 return layer.release();
76 mDataProvider->setTransformContext( context );
78 mTransformContext = context;
89 const QList< QgsMapLayer * > currentLayers = _qgis_listRefToRaw( mChildren );
96 const QDomNodeList childLayersElements = layerNode.toElement().elementsByTagName( QStringLiteral(
"childLayers" ) );
97 const QDomNodeList children = childLayersElements.at( 0 ).childNodes();
98 for (
int i = 0; i < children.size(); ++i )
100 const QDomElement childElement = children.at( i ).toElement();
101 const QString
id = childElement.attribute( QStringLiteral(
"layerid" ) );
117 QDomElement mapLayerNode = layer_node.toElement();
119 if ( mapLayerNode.isNull() )
127 QDomElement childLayersElement = doc.createElement( QStringLiteral(
"childLayers" ) );
128 for (
auto it = mChildren.constBegin(); it != mChildren.constEnd(); ++it )
130 QDomElement childElement = doc.createElement( QStringLiteral(
"child" ) );
131 childElement.setAttribute( QStringLiteral(
"layerid" ), it->layerId );
132 childLayersElement.appendChild( childElement );
134 mapLayerNode.appendChild( childLayersElement );
146 QDomElement layerOpacityElem = doc.createElement( QStringLiteral(
"layerOpacity" ) );
147 const QDomText layerOpacityText = doc.createTextNode( QString::number(
opacity() ) );
148 layerOpacityElem.appendChild( layerOpacityText );
149 node.appendChild( layerOpacityElem );
153 QDomElement paintEffectElement = doc.createElement( QStringLiteral(
"paintEffect" ) );
154 mPaintEffect->saveProperties( doc, paintEffectElement );
155 node.appendChild( paintEffectElement );
162 QDomElement blendModeElem = doc.createElement( QStringLiteral(
"blendMode" ) );
164 blendModeElem.appendChild( blendModeText );
165 node.appendChild( blendModeElem );
175 const QDomNode layerOpacityNode = node.namedItem( QStringLiteral(
"layerOpacity" ) );
176 if ( !layerOpacityNode.isNull() )
178 const QDomElement e = layerOpacityNode.toElement();
183 const QDomElement effectElem = node.namedItem( QStringLiteral(
"paintEffect" ) ).toElement();
184 if ( !effectElem.isNull() )
186 const QDomElement effectPropertiesElem = effectElem.firstChildElement( QStringLiteral(
"effect" ) ).toElement();
192 mPaintEffect->setEnabled(
false );
199 const QDomNode blendModeNode = node.namedItem( QStringLiteral(
"blendMode" ) );
200 if ( !blendModeNode.isNull() )
202 const QDomElement e = blendModeNode.toElement();
212 return mDataProvider;
217 return mDataProvider;
222 QString
metadata = QStringLiteral(
"<html>\n<body>\n<h1>" ) + tr(
"General" ) + QStringLiteral(
"</h1>\n<hr>\n" ) + QStringLiteral(
"<table class=\"list-view\">\n" );
224 metadata += QStringLiteral(
"<tr><td class=\"highlight\">" ) + tr(
"Name" ) + QStringLiteral(
"</td><td>" ) +
name() + QStringLiteral(
"</td></tr>\n" );
227 metadata += QStringLiteral(
"<tr><td class=\"highlight\">" ) + tr(
"Extent" ) + QStringLiteral(
"</td><td>" ) +
extent().
toString() + QStringLiteral(
"</td></tr>\n" );
230 metadata += QLatin1String(
"\n</body>\n</html>\n" );
237 for (
int i = 0; i < mChildren.size(); ++i )
239 mChildren[i].resolve(
project );
241 if ( mChildren[i].layer )
248 setCrs( mChildren[i].layer->crs() );
249 mDataProvider->setCrs(
crs() );
258 const QList< QgsMapLayer * > currentLayers = _qgis_listRefToRaw( mChildren );
261 if ( !currentLayers.contains( layer ) )
268 if ( !layers.contains( layer ) )
273 mChildren = _qgis_listRawToRef( layers );
278 if ( layer->isValid() && layer->crs().isValid( ) )
281 mDataProvider->setCrs(
crs() );
291 return _qgis_listRefToRaw( mChildren );
296 return mPaintEffect.get();
301 mPaintEffect.reset( effect );
308QgsGroupLayerDataProvider::QgsGroupLayerDataProvider(
309 const ProviderOptions &options,
310 QgsDataProvider::ReadFlags flags )
324QString QgsGroupLayerDataProvider::name()
const
326 return QStringLiteral(
"annotation" );
329QString QgsGroupLayerDataProvider::description()
const
339bool QgsGroupLayerDataProvider::isValid()
const
static QgsPaintEffectRegistry * paintEffectRegistry()
Returns the application's paint effect registry, used for managing paint effects.
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
Implementation of threaded rendering for group layers.
A map layer which consists of a set of child layers, where all component layers are rendered as a sin...
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the renderer.
void resolveReferences(QgsProject *project) override
Resolve references to other layers (kept as layer IDs after reading XML) into layer objects.
bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) override
Read the symbology for the current layer from the DOM node supplied.
QgsGroupLayer(const QString &name, const QgsGroupLayer::LayerOptions &options)
Constructor for a new QgsGroupLayer with the specified layer name.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the group layer.
QgsGroupLayer * clone() const override
Returns a new instance equivalent to this one except for the id which is still unique.
QList< QgsMapLayer * > childLayers() const
Returns the child layers contained by the group.
~QgsGroupLayer() override
QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext) override
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
QgsDataProvider * dataProvider() override
Returns the layer's data provider, it may be nullptr.
void setChildLayers(const QList< QgsMapLayer * > &layers)
Sets the child layers contained by the group.
bool writeXml(QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context) const override
Called by writeLayerXML(), used by children to write state specific to them to project files.
void setTransformContext(const QgsCoordinateTransformContext &context) override
Sets the coordinate transform context to transformContext.
bool readXml(const QDomNode &layerNode, QgsReadWriteContext &context) override
Called by readLayerXML(), used by children to read state specific to them from project files.
bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &, StyleCategories categories=AllStyleCategories) const override
Write the style for the layer into the document provided.
QString htmlMetadata() const override
Obtain a formatted HTML string containing assorted metadata for this layer.
QgsRectangle extent() const override
Returns the extent of the layer.
static QString typeToString(QgsMapLayerType type)
Converts a map layer type to a string value.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
static QgsRectangle combinedExtent(const QList< QgsMapLayer * > &layers, const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &transformContext)
Returns the combined extent of a list of layers.
Base class for all map layer types.
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
QgsCoordinateReferenceSystem crs
void triggerRepaint(bool deferredUpdate=false)
Will advise the map canvas (and any other interested party) that this layer requires to be repainted.
QgsLayerMetadata metadata
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
virtual void resolveReferences(QgsProject *project)
Resolve references to other layers (kept as layer IDs after reading XML) into layer objects.
@ FlagDontResolveLayers
Don't resolve layer paths or create data providers for layers.
QgsMapLayer::ReadFlags mReadFlags
Read flags. It's up to the subclass to respect these when restoring state from XML.
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
QgsProject * project() const
Returns the parent project if this map layer is added to a project.
bool mValid
Indicates if the layer is valid and can be drawn.
@ Rendering
Rendering: scale visibility, simplify method, opacity.
void invalidateWgs84Extent()
Invalidates the WGS84 extent.
bool mShouldValidateCrs
true if the layer's CRS should be validated and invalid CRSes are not permitted.
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
Base class for visual effects which can be applied to QPicture drawings.
static QgsPainting::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
static QPainter::CompositionMode getCompositionMode(QgsPainting::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
QString toString(int precision=16) const
Returns a string representation of form xmin,ymin : xmax,ymax Coordinates will be truncated to the sp...
Contains information about the context of a rendering operation.
QgsMapLayerType
Types of layers that can be added to a map.
@ GroupLayer
Composite group layer. Added in QGIS 3.24.
#define QgsDebugMsgLevel(str, level)
_LayerRef< QgsMapLayer > QgsMapLayerRef
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
Setting options for loading group layers.
QgsCoordinateTransformContext transformContext
Coordinate transform context.