19#include "moc_qgsgrouplayer.cpp" 
   33  , mTransformContext( options.transformContext )
 
   39  mPaintEffect->setEnabled( 
false );
 
 
   57  auto layer = std::make_unique< QgsGroupLayer >( 
name(), options );
 
   59  layer->setChildLayers( _qgis_listRefToRaw( mChildren ) );
 
   60  layer->setPaintEffect( mPaintEffect ? mPaintEffect->clone() : nullptr );
 
   61  return layer.release();
 
 
   83    mDataProvider->setTransformContext( context );
 
   85  mTransformContext = context;
 
 
   98  const QList< QgsMapLayer * > currentLayers = _qgis_listRefToRaw( mChildren );
 
  105  const QDomNodeList childLayersElements = layerNode.toElement().elementsByTagName( QStringLiteral( 
"childLayers" ) );
 
  106  const QDomNodeList children = childLayersElements.at( 0 ).childNodes();
 
  107  for ( 
int i = 0; i < children.size(); ++i )
 
  109    const QDomElement childElement = children.at( i ).toElement();
 
  110    const QString 
id = childElement.attribute( QStringLiteral( 
"layerid" ) );
 
 
  128  QDomElement mapLayerNode = layer_node.toElement();
 
  130  if ( mapLayerNode.isNull() )
 
  138  QDomElement childLayersElement = doc.createElement( QStringLiteral( 
"childLayers" ) );
 
  139  for ( 
auto it = mChildren.constBegin(); it != mChildren.constEnd(); ++it )
 
  141    QDomElement childElement = doc.createElement( QStringLiteral( 
"child" ) );
 
  142    childElement.setAttribute( QStringLiteral( 
"layerid" ), it->layerId );
 
  143    childLayersElement.appendChild( childElement );
 
  145  mapLayerNode.appendChild( childLayersElement );
 
 
  159    QDomElement layerOpacityElem  = doc.createElement( QStringLiteral( 
"layerOpacity" ) );
 
  160    const QDomText layerOpacityText = doc.createTextNode( QString::number( 
opacity() ) );
 
  161    layerOpacityElem.appendChild( layerOpacityText );
 
  162    node.appendChild( layerOpacityElem );
 
  166      QDomElement paintEffectElement = doc.createElement( QStringLiteral( 
"paintEffect" ) );
 
  167      mPaintEffect->saveProperties( doc, paintEffectElement );
 
  168      node.appendChild( paintEffectElement );
 
  175    QDomElement blendModeElem  = doc.createElement( QStringLiteral( 
"blendMode" ) );
 
  177    blendModeElem.appendChild( blendModeText );
 
  178    node.appendChild( blendModeElem );
 
 
  190    const QDomNode layerOpacityNode = node.namedItem( QStringLiteral( 
"layerOpacity" ) );
 
  191    if ( !layerOpacityNode.isNull() )
 
  193      const QDomElement e = layerOpacityNode.toElement();
 
  198    const QDomElement effectElem = node.namedItem( QStringLiteral( 
"paintEffect" ) ).toElement();
 
  199    if ( !effectElem.isNull() )
 
  201      const QDomElement effectPropertiesElem = effectElem.firstChildElement( QStringLiteral( 
"effect" ) ).toElement();
 
  207      mPaintEffect->setEnabled( 
false );
 
  214    const QDomNode blendModeNode = node.namedItem( QStringLiteral( 
"blendMode" ) );
 
  215    if ( !blendModeNode.isNull() )
 
  217      const QDomElement e = blendModeNode.toElement();
 
 
  229  return mDataProvider.get();
 
 
  236  return mDataProvider.get();
 
 
  243  QString 
metadata = QStringLiteral( 
"<html>\n<body>\n<h1>" ) + tr( 
"General" ) + QStringLiteral( 
"</h1>\n<hr>\n" ) + QStringLiteral( 
"<table class=\"list-view\">\n" );
 
  245  metadata += QStringLiteral( 
"<tr><td class=\"highlight\">" ) + tr( 
"Name" ) + QStringLiteral( 
"</td><td>" ) + 
name() + QStringLiteral( 
"</td></tr>\n" );
 
  248  metadata += QStringLiteral( 
"<tr><td class=\"highlight\">" ) + tr( 
"Extent" ) + QStringLiteral( 
"</td><td>" ) + 
extent().
toString() + QStringLiteral( 
"</td></tr>\n" );
 
  251  metadata += QLatin1String( 
"\n</body>\n</html>\n" );
 
 
  260  for ( 
int i = 0; i < mChildren.size(); ++i )
 
  262    mChildren[i].resolve( 
project );
 
  264    if ( mChildren[i].layer )
 
  271        setCrs( mChildren[i].layer->crs() );
 
  272        mDataProvider->setCrs( 
crs() );
 
 
  283  const QList< QgsMapLayer * > currentLayers = _qgis_listRefToRaw( mChildren );
 
  286    if ( !currentLayers.contains( layer ) )
 
  289      if ( layer->blendMode() == QPainter::CompositionMode_SourceOver && layer->customProperty( QStringLiteral( 
"_prevGroupBlendMode" ) ).
isValid() )
 
  292        layer->setBlendMode( 
static_cast< QPainter::CompositionMode 
>( layer->customProperty( QStringLiteral( 
"_prevGroupBlendMode" ) ).toInt() ) );
 
  298    if ( layer && !layers.contains( layer ) )
 
  303      const QPainter::CompositionMode groupBlendMode = layer->blendMode();
 
  306        layer->setBlendMode( QPainter::CompositionMode_SourceOver );
 
  307        layer->setCustomProperty( QStringLiteral( 
"_prevGroupBlendMode" ), 
static_cast< int >( groupBlendMode ) );
 
  311        layer->removeCustomProperty( QStringLiteral( 
"_prevGroupBlendMode" ) );
 
  315  mChildren = _qgis_listRawToRef( layers );
 
  320    if ( layer->isValid() && layer->crs().isValid( ) )
 
  323      mDataProvider->setCrs( 
crs() );
 
 
  335  return _qgis_listRefToRaw( mChildren );
 
 
  342  return mPaintEffect.get();
 
 
  349  mPaintEffect.reset( effect );
 
 
  358      child->setBlendMode( QPainter::CompositionMode_SourceOver );
 
 
  367QgsGroupLayerDataProvider::QgsGroupLayerDataProvider(
 
  368  const ProviderOptions &options,
 
  387QString QgsGroupLayerDataProvider::name()
 const 
  391  return QStringLiteral( 
"annotation" );
 
  394QString QgsGroupLayerDataProvider::description()
 const 
  408bool QgsGroupLayerDataProvider::isValid()
 const 
Provides global constants and enumerations for use throughout the application.
 
BlendMode
Blending modes defining the available composition modes that can be used when painting.
 
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
 
@ Group
Composite group layer. Added in QGIS 3.24.
 
static QgsPaintEffectRegistry * paintEffectRegistry()
Returns the application's paint effect registry, used for managing paint effects.
 
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.
 
void prepareLayersForRemovalFromGroup()
Prepares all child layers in the group prior to removal from the group.
 
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(Qgis::LayerType 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....
 
QFlags< StyleCategory > StyleCategories
 
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 Qgis::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a Qgis::BlendMode corresponding to a QPainter::CompositionMode.
 
static bool isClippingMode(Qgis::BlendMode mode)
Returns true if mode is a clipping blend mode.
 
static QPainter::CompositionMode getCompositionMode(Qgis::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a Qgis::BlendMode.
 
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
 
A container for the context for various read/write operations on objects.
 
A rectangle specified with double values.
 
Q_INVOKABLE 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.
 
#define QgsDebugMsgLevel(str, level)
 
_LayerRef< QgsMapLayer > QgsMapLayerRef
 
#define QGIS_PROTECT_QOBJECT_THREAD_ACCESS
 
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.