QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
36 #include <QDomDocument>
37 #include <QDomElement>
43 , mLegendModel( new
QgsLegendModel( layout->project()->layerTreeRoot(), this ) )
45 #if 0 //no longer required?
46 connect( &
layout->atlasComposition(), &QgsAtlasComposition::renderEnded,
this, &QgsLayoutItemLegend::onAtlasEnded );
49 mTitle = mSettings.
title();
89 if ( mFilterAskedForUpdate )
91 mFilterAskedForUpdate =
false;
92 doUpdateFilterByMap();
95 int dpi = painter->device()->logicalDpiX();
96 double dotsPerMM = dpi / 25.4;
114 QSizeF mapSizePixels = QSizeF( mMap->rect().width() * dotsPerMM, mMap->rect().height() * dotsPerMM );
124 mInitialMapScaleCalculated =
true;
127 legendRenderer.
setLegendSize( mForceResize && mSizeToContents ? QSize() : rect().size() );
130 if ( mSizeToContents )
135 QSizeF size = legendRenderer.
minimumSize( &context );
138 mForceResize =
false;
144 else if ( size.height() > rect().height() || size.width() > rect().width() )
147 QSizeF targetSize = rect().size();
148 if ( size.height() > targetSize.height() )
149 targetSize.setHeight( size.height() );
150 if ( size.width() > targetSize.width() )
151 targetSize.setWidth( size.width() );
164 if ( !mMapUuid.isEmpty() )
166 setLinkedMap( qobject_cast< QgsLayoutItemMap * >(
mLayout->itemByUuid( mMapUuid,
true ) ) );
173 clearLegendCachedData();
189 painter->setPen( QPen( QColor( 0, 0, 0 ) ) );
191 if ( !mSizeToContents )
194 QRectF thisPaintRect = QRectF( 0, 0, rect().width(), rect().height() );
195 painter->setClipRect( thisPaintRect );
217 if ( !mSizeToContents )
220 if ( !mInitialMapScaleCalculated )
233 QSizeF size = legendRenderer.
minimumSize( &context );
234 QgsDebugMsg( QStringLiteral(
"width = %1 height = %2" ).arg( size.width() ).arg( size.height() ) );
235 if ( size.isValid() )
245 mSizeToContents = enabled;
250 return mSizeToContents;
253 void QgsLayoutItemLegend::setCustomLayerTree(
QgsLayerTree *rootGroup )
255 mLegendModel->setRootGroup( rootGroup ? rootGroup : (
mLayout ?
mLayout->project()->layerTreeRoot() :
nullptr ) );
257 mCustomLayerTree.reset( rootGroup );
266 setCustomLayerTree( autoUpdate ?
nullptr :
mLayout->project()->layerTreeRoot()->clone() );
271 void QgsLayoutItemLegend::nodeCustomPropertyChanged(
QgsLayerTreeNode *,
const QString &key )
273 if ( key == QLatin1String(
"cached_name" ) )
286 return !mCustomLayerTree;
291 mLegendFilterByMap = enabled;
300 if (
mLayout &&
id().isEmpty() )
303 mLayout->itemsModel()->updateItemDisplayName(
this );
323 return mSettings.
rstyle( s );
328 return mSettings.
style( s );
547 legendElem.setAttribute( QStringLiteral(
"title" ), mTitle );
548 legendElem.setAttribute( QStringLiteral(
"titleAlignment" ), QString::number(
static_cast< int >( mSettings.
titleAlignment() ) ) );
549 legendElem.setAttribute( QStringLiteral(
"columnCount" ), QString::number( mColumnCount ) );
550 legendElem.setAttribute( QStringLiteral(
"splitLayer" ), QString::number( mSettings.
splitLayer() ) );
551 legendElem.setAttribute( QStringLiteral(
"equalColumnWidth" ), QString::number( mSettings.
equalColumnWidth() ) );
553 legendElem.setAttribute( QStringLiteral(
"boxSpace" ), QString::number( mSettings.
boxSpace() ) );
554 legendElem.setAttribute( QStringLiteral(
"columnSpace" ), QString::number( mSettings.
columnSpace() ) );
556 legendElem.setAttribute( QStringLiteral(
"symbolWidth" ), QString::number( mSettings.
symbolSize().width() ) );
557 legendElem.setAttribute( QStringLiteral(
"symbolHeight" ), QString::number( mSettings.
symbolSize().height() ) );
558 legendElem.setAttribute( QStringLiteral(
"maxSymbolSize" ), QString::number( mSettings.
maximumSymbolSize() ) );
559 legendElem.setAttribute( QStringLiteral(
"minSymbolSize" ), QString::number( mSettings.
minimumSymbolSize() ) );
561 legendElem.setAttribute( QStringLiteral(
"symbolAlignment" ), mSettings.
symbolAlignment() );
563 legendElem.setAttribute( QStringLiteral(
"symbolAlignment" ), mSettings.
symbolAlignment() );
564 legendElem.setAttribute( QStringLiteral(
"lineSpacing" ), QString::number( mSettings.
lineSpacing() ) );
566 legendElem.setAttribute( QStringLiteral(
"rasterBorder" ), mSettings.
drawRasterStroke() );
568 legendElem.setAttribute( QStringLiteral(
"rasterBorderWidth" ), QString::number( mSettings.
rasterStrokeWidth() ) );
570 legendElem.setAttribute( QStringLiteral(
"wmsLegendWidth" ), QString::number( mSettings.
wmsLegendSize().width() ) );
571 legendElem.setAttribute( QStringLiteral(
"wmsLegendHeight" ), QString::number( mSettings.
wmsLegendSize().height() ) );
572 legendElem.setAttribute( QStringLiteral(
"wrapChar" ), mSettings.
wrapChar() );
573 legendElem.setAttribute( QStringLiteral(
"fontColor" ), mSettings.
fontColor().name() );
575 legendElem.setAttribute( QStringLiteral(
"resizeToContents" ), mSizeToContents );
579 legendElem.setAttribute( QStringLiteral(
"map_uuid" ), mMap->
uuid() );
582 QDomElement legendStyles = doc.createElement( QStringLiteral(
"styles" ) );
583 legendElem.appendChild( legendStyles );
591 if ( mCustomLayerTree )
594 mCustomLayerTree->writeXml( legendElem, context );
597 if ( mLegendFilterByMap )
599 legendElem.setAttribute( QStringLiteral(
"legendFilterByMap" ), QStringLiteral(
"1" ) );
601 legendElem.setAttribute( QStringLiteral(
"legendFilterByAtlas" ), mFilterOutAtlas ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
609 mTitle = itemElem.attribute( QStringLiteral(
"title" ) );
611 if ( !itemElem.attribute( QStringLiteral(
"titleAlignment" ) ).isEmpty() )
613 mSettings.
setTitleAlignment(
static_cast< Qt::AlignmentFlag
>( itemElem.attribute( QStringLiteral(
"titleAlignment" ) ).toInt() ) );
615 int colCount = itemElem.attribute( QStringLiteral(
"columnCount" ), QStringLiteral(
"1" ) ).toInt();
616 if ( colCount < 1 ) colCount = 1;
617 mColumnCount = colCount;
619 mSettings.
setSplitLayer( itemElem.attribute( QStringLiteral(
"splitLayer" ), QStringLiteral(
"0" ) ).toInt() == 1 );
620 mSettings.
setEqualColumnWidth( itemElem.attribute( QStringLiteral(
"equalColumnWidth" ), QStringLiteral(
"0" ) ).toInt() == 1 );
622 QDomNodeList stylesNodeList = itemElem.elementsByTagName( QStringLiteral(
"styles" ) );
623 if ( !stylesNodeList.isEmpty() )
625 QDomNode stylesNode = stylesNodeList.at( 0 );
626 for (
int i = 0; i < stylesNode.childNodes().size(); i++ )
628 QDomElement styleElem = stylesNode.childNodes().at( i ).toElement();
631 QString name = styleElem.attribute( QStringLiteral(
"name" ) );
645 fontClr.setNamedColor( itemElem.attribute( QStringLiteral(
"fontColor" ), QStringLiteral(
"#000000" ) ) );
649 mSettings.
setBoxSpace( itemElem.attribute( QStringLiteral(
"boxSpace" ), QStringLiteral(
"2.0" ) ).toDouble() );
650 mSettings.
setColumnSpace( itemElem.attribute( QStringLiteral(
"columnSpace" ), QStringLiteral(
"2.0" ) ).toDouble() );
652 mSettings.
setSymbolSize( QSizeF( itemElem.attribute( QStringLiteral(
"symbolWidth" ), QStringLiteral(
"7.0" ) ).toDouble(), itemElem.attribute( QStringLiteral(
"symbolHeight" ), QStringLiteral(
"14.0" ) ).toDouble() ) );
653 mSettings.
setSymbolAlignment(
static_cast< Qt::AlignmentFlag
>( itemElem.attribute( QStringLiteral(
"symbolAlignment" ), QString::number( Qt::AlignLeft ) ).toInt() ) );
655 mSettings.
setMaximumSymbolSize( itemElem.attribute( QStringLiteral(
"maxSymbolSize" ), QStringLiteral(
"0.0" ) ).toDouble() );
656 mSettings.
setMinimumSymbolSize( itemElem.attribute( QStringLiteral(
"minSymbolSize" ), QStringLiteral(
"0.0" ) ).toDouble() );
658 mSettings.
setWmsLegendSize( QSizeF( itemElem.attribute( QStringLiteral(
"wmsLegendWidth" ), QStringLiteral(
"50" ) ).toDouble(), itemElem.attribute( QStringLiteral(
"wmsLegendHeight" ), QStringLiteral(
"25" ) ).toDouble() ) );
659 mSettings.
setLineSpacing( itemElem.attribute( QStringLiteral(
"lineSpacing" ), QStringLiteral(
"1.0" ) ).toDouble() );
661 mSettings.
setDrawRasterStroke( itemElem.attribute( QStringLiteral(
"rasterBorder" ), QStringLiteral(
"1" ) ) != QLatin1String(
"0" ) );
663 mSettings.
setRasterStrokeWidth( itemElem.attribute( QStringLiteral(
"rasterBorderWidth" ), QStringLiteral(
"0" ) ).toDouble() );
665 mSettings.
setWrapChar( itemElem.attribute( QStringLiteral(
"wrapChar" ) ) );
667 mSizeToContents = itemElem.attribute( QStringLiteral(
"resizeToContents" ), QStringLiteral(
"1" ) ) != QLatin1String(
"0" );
670 mLegendFilterByMap = itemElem.attribute( QStringLiteral(
"legendFilterByMap" ), QStringLiteral(
"0" ) ).toInt();
673 if ( !itemElem.attribute( QStringLiteral(
"map_uuid" ) ).isEmpty() )
675 mMapUuid = itemElem.attribute( QStringLiteral(
"map_uuid" ) );
678 setupMapConnections( mMap,
false );
681 mFilterOutAtlas = itemElem.attribute( QStringLiteral(
"legendFilterByAtlas" ), QStringLiteral(
"0" ) ).toInt();
684 QDomElement layerTreeElem = itemElem.firstChildElement( QStringLiteral(
"layer-tree" ) );
685 if ( layerTreeElem.isNull() )
686 layerTreeElem = itemElem.firstChildElement( QStringLiteral(
"layer-tree-group" ) );
688 if ( !layerTreeElem.isNull() )
692 tree->resolveReferences(
mLayout->project(),
true );
693 setCustomLayerTree( tree.release() );
696 setCustomLayerTree(
nullptr );
703 if ( !
id().isEmpty() )
709 QString text = mSettings.
title();
710 if ( text.isEmpty() )
712 return tr(
"<Legend>" );
714 if ( text.length() > 25 )
716 return tr(
"%1…" ).arg( text.left( 25 ) );
725 void QgsLayoutItemLegend::setupMapConnections(
QgsLayoutItemMap *map,
bool connectSlots )
732 disconnect( map, &QObject::destroyed,
this, &QgsLayoutItemLegend::invalidateCurrentMap );
741 connect( map, &QObject::destroyed,
this, &QgsLayoutItemLegend::invalidateCurrentMap );
754 setupMapConnections( mMap,
false );
761 setupMapConnections( mMap,
true );
768 void QgsLayoutItemLegend::invalidateCurrentMap()
777 bool forceUpdate =
false;
793 if ( ok && cols >= 0 )
809 void QgsLayoutItemLegend::updateFilterByMapAndRedraw()
814 void QgsLayoutItemLegend::setModelStyleOverrides(
const QMap<QString, QString> &overrides )
816 mLegendModel->setLayerStyleOverrides( overrides );
817 const QList< QgsLayerTreeLayer * > layers = mLegendModel->rootGroup()->findLayers();
819 mLegendModel->refreshLayerLegend( nodeLayer );
823 void QgsLayoutItemLegend::clearLegendCachedData()
828 mLegendModel->clearCachedData( node );
832 const QList< QgsLayerTreeNode * > children = group->
children();
835 clearNodeCache( child );
840 clearNodeCache( mLegendModel->rootGroup() );
843 void QgsLayoutItemLegend::mapLayerStyleOverridesChanged()
849 if ( mLegendFilterByMap )
865 void QgsLayoutItemLegend::mapThemeChanged(
const QString &theme )
867 if ( mThemeName == theme )
873 if ( mLegendFilterByMap )
881 if ( mThemeName.isEmpty() )
883 setModelStyleOverrides( QMap<QString, QString>() );
888 const QMap<QString, QString> overrides =
mLayout->project()->mapThemeCollection()->mapThemeStyleOverrides( mThemeName );
889 setModelStyleOverrides( overrides );
903 mFilterAskedForUpdate =
true;
909 void QgsLayoutItemLegend::doUpdateFilterByMap()
913 if ( !mThemeName.isEmpty() )
916 const QMap<QString, QString> overrides =
mLayout->project()->mapThemeCollection()->mapThemeStyleOverrides( mThemeName );
917 mLegendModel->setLayerStyleOverrides( overrides );
925 mLegendModel->setLayerStyleOverrides( QMap<QString, QString>() );
930 if ( mMap && ( mLegendFilterByMap || filterByExpression || mInAtlas ) )
932 double dpi =
mLayout->renderContext().dpi();
936 QSizeF size( requestRectangle.
width(), requestRectangle.
height() );
944 filterPolygon =
mLayout->reportContext().currentGeometry( mMap->
crs() );
946 mLegendModel->setLegendFilter( &ms, mInAtlas || mLegendFilterByMap, filterPolygon,
true );
949 mLegendModel->setLegendFilterByMap(
nullptr );
951 clearLegendCachedData();
962 mFilterOutAtlas = doFilter;
967 return mFilterOutAtlas;
970 void QgsLayoutItemLegend::onAtlasFeature()
972 if ( !
mLayout->reportContext().feature().isValid() )
974 mInAtlas = mFilterOutAtlas;
978 void QgsLayoutItemLegend::onAtlasEnded()
1018 const QList<QgsLayerTreeNode *> childNodes = group->
children();
1024 if ( !visit( nodeGroup ) )
1036 const QList<QgsLayerTreeModelLegendNode *> legendNodes = mLegendModel->layerLegendNodes( nodeLayer );
1041 if ( !symbolNode->patchShape().isNull() )
1053 return visit( mLegendModel->rootGroup( ) );
1064 , mLayoutLegend( layout )
1072 , mLayoutLegend( layout )
1084 if ( nodeLayer && ( role == Qt::DisplayRole || role == Qt::EditRole ) )
1086 QString name = node->
customProperty( QStringLiteral(
"cached_name" ) ).toString();
1087 if ( !name.isEmpty() )
1093 name = nodeLayer->
customProperty( QStringLiteral(
"legend/title-label" ) ).toString();
1094 if ( name.isEmpty() )
1095 name = nodeLayer->
name();
1096 if ( name.isEmpty() )
1097 name = node->
customProperty( QStringLiteral(
"legend/title-label" ) ).toString();
1098 if ( name.isEmpty() )
1099 name = node->
name();
1100 if ( nodeLayer->
customProperty( QStringLiteral(
"showFeatureCount" ), 0 ).toInt() )
1104 name += QStringLiteral(
" [%1]" ).arg( vlayer->
featureCount() );
1110 const bool evaluate = ( vlayer && !nodeLayer->
labelExpression().isEmpty() ) || name.contains(
"[%" );
1121 if ( mLayoutLegend )
1124 const QList<QgsLayerTreeModelLegendNode *> legendnodes =
layerLegendNodes( nodeLayer,
false );
1125 if ( legendnodes.count() > 1 )
1130 symnode->evaluateLabel( expressionContext );
1133 else if (
QgsSymbolLegendNode *symnode = qobject_cast<QgsSymbolLegendNode *>( legendnodes.first() ) )
1134 name = symnode->evaluateLabel( expressionContext );
1153 if ( !
mLegend.contains( nodeLayer ) )
1154 return QList<QgsLayerTreeModelLegendNode *>();
1157 QList<QgsLayerTreeModelLegendNode *> lst(
data.activeNodes );
1158 if ( !skipNodeEmbeddedInParent &&
data.embeddedNodeInParent )
1159 lst.prepend(
data.embeddedNodeInParent );
1168 void QgsLegendModel::forceRefresh()
@ FlagUseAdvancedEffects
Enable advanced effects such as blend modes.
void setSymbolAlignment(Qt::AlignmentFlag alignment)
Sets the alignment for placement of legend symbols.
void setEqualColumnWidth(bool s)
Sets whether all columns should have equal widths.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QString labelExpression() const
Returns the expression member of the LayerTreeNode.
QString id() const
Returns the item's ID name.
const QgsLayout * layout() const
Returns the layout the object is attached to.
@ Symbol
Symbol icon (excluding label)
Qt::AlignmentFlag symbolAlignment() const
Returns the alignment for placement of legend symbols.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
QString title() const
Returns the title for the legend, which will be rendered above all legend items.
Style
Component of legends which can be styled.
static QString encodeColor(const QColor &color)
void setTitleAlignment(Qt::AlignmentFlag alignment)
Sets the alignment of the legend title.
This class is a base class for nodes in a layer tree.
QgsLegendPatchShape patchShape() const
Returns the symbol patch shape to use when rendering the legend node symbol.
void setLegendSize(QSizeF s)
Sets the preferred resulting legend size.
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
QColor rasterStrokeColor() const
Returns the stroke color for the stroke drawn around raster symbol items.
int valueAsInt(int key, const QgsExpressionContext &context, int defaultValue=0, bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as an integer.
double maximumSymbolSize() const
Returns the maximum symbol size (in mm).
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
QgsExpressionContextScope * popScope()
Removes the last scope from the expression context and return it.
double rasterStrokeWidth() const
Returns the stroke width (in layout units) for the stroke drawn around raster symbol items.
The class is used as a container of context for various read/write operations on other objects.
QMap< QString, QString > layerStyleOverrides() const
Returns stored overrides of styles for layers.
QIcon icon() const override
Returns the item's icon.
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
void setSymbolSize(QSizeF s)
Sets the default symbol size (in millimeters) used for legend items.
Qt::AlignmentFlag titleAlignment() const
Returns the alignment of the legend title.
Q_DECL_DEPRECATED void drawLegend(QPainter *painter)
Draws the legend with given painter.
void setStyleMargin(QgsLegendStyle::Style component, double margin)
Set the margin for a legend component.
QVariant data(const QModelIndex &index, int role) const override
void setTitle(const QString &title)
Sets the legend title.
void setSplitLayer(bool s)
Sets whether layer components can be split over multiple columns.
void setFont(const QFont &font)
Sets the font used for rendering this legend component.
double minimumSymbolSize() const
Returns the minimum symbol size (in mm).
void extentChanged()
Emitted when the map's extent changes.
@ AllowLegendChangeState
Allow check boxes for legend nodes (if supported by layer's legend)
QHash< QgsLayerTreeLayer *, LayerLegendData > mLegend
Per layer data about layer's legend nodes.
void layerStyleOverridesChanged()
Emitted when layer style overrides are changed...
int type() const override
Contains settings and helpers relating to a render of a QgsLayoutItem.
@ LegendColumnCount
Legend column count.
void setMargin(Side side, double margin)
Sets the margin (in mm) for the specified side of the component.
QgsMapSettings mapSettings(const QgsRectangle &extent, QSizeF size, double dpi, bool includeLayerSettings) const
Returns map settings that will be used for drawing of the map.
QgsPropertyCollection mDataDefinedProperties
Contains information about the context of a rendering operation.
Q_DECL_DEPRECATED void setMmPerMapUnit(double mmPerMapUnit)
QgsLegendStyle style(QgsLegendStyle::Style s) const
Returns the style for a legend component.
An interface for classes which can visit style entity (e.g.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
void setBoxSpace(double s)
Sets the legend box space (in millimeters), which is the empty margin around the inside of the legend...
virtual void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
void writeXml(const QString &name, QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const
Writes the component's style definition to an XML element.
void setFontColor(const QColor &color)
Sets the legend font color.
void customPropertyChanged(QgsLayerTreeNode *node, const QString &key)
Emitted when a custom property of a node within the tree has been changed or removed.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
QString name() const override
Returns the layer's name.
The QgsLayerTreeModel class is model implementation for Qt item views framework.
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
QColor rasterStrokeColor() const
Returns the stroke color for the stroke drawn around raster symbol items.
QgsLegendStyle & rstyle(QgsLegendStyle::Style s)
Returns reference to modifiable legend style.
@ SymbolLabel
Symbol label (excluding icon)
long featureCount(const QString &legendKey) const
Number of features rendered with specified legend key.
void changed()
Emitted when the object's properties change.
static QColor decodeColor(const QString &str)
bool legendFilterOutAtlas() const
Returns whether to filter out legend elements outside of the current atlas feature.
double wmsLegendWidth() const
Returns the WMS legend width.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
A rectangle specified with double values.
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
Contains information relating to the style entity currently being visited.
bool drawRasterStroke() const
Returns whether a stroke will be drawn around raster symbol items.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
void refreshLegend()
Emitted to refresh the legend.
virtual void redraw()
Triggers a redraw (update) of the item.
A layout item subclass for map legends.
void finalizeRestoreFromXml() override
Called after all pending items have been restored from XML.
QString displayName() const override
Gets item display name.
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
#define Q_NOWARN_DEPRECATED_POP
static QgsLayerTreeModelLegendNode * index2legendNode(const QModelIndex &index)
Returns legend node for given index.
@ AllProperties
All properties for item.
double wmsLegendHeight() const
Returns the WMS legend height.
void setResizeToContents(bool enabled)
Sets whether the legend should automatically resize to fit its contents.
bool legendFilterByMapEnabled() const
Find out whether legend items are filtered to show just the ones visible in the associated map.
static bool hasLegendFilterExpression(const QgsLayerTreeGroup &group)
Test if one of the layers in a group has an expression filter.
Namespace with helper functions for layer tree operations.
static QgsLayoutItemLegend * create(QgsLayout *layout)
Returns a new legend item for the specified layout.
void clearCachedData(QgsLayerTreeNode *node) const
Clears any previously cached data for the specified node.
void setAutoUpdateModel(bool autoUpdate)
Sets whether the legend content should auto update to reflect changes in the project's layer tree.
void setLegendFilterOutAtlas(bool doFilter)
When set to true, during an atlas rendering, it will filter out legend elements where features are ou...
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
ExportLayerBehavior
Behavior of item when exporting to layered outputs.
double rasterStrokeWidth() const
Returns the stroke width (in millimeters) for the stroke drawn around raster symbol items.
void setLineSpacing(double spacing)
Sets the spacing in-between multiple lines.
void setStyle(QgsLegendStyle::Style component, const QgsLegendStyle &style)
Sets the style of component to style for the legend.
QgsLayoutItem::Flags itemFlags() const override
Returns the item's flags, which indicate how the item behaves.
void setSplitLayer(bool enabled)
Sets whether the legend items from a single layer can be split over multiple columns.
QFont styleFont(QgsLegendStyle::Style component) const
Returns the font settings for a legend component.
void setTitle(const QString &t)
Sets the title for the legend, which will be rendered above all legend items.
void setRasterStrokeWidth(double width)
Sets the stroke width for the stroke drawn around raster symbol items.
double minimumSymbolSize() const
Returns the minimum symbol size (in mm).
void setEqualColumnWidth(bool equalize)
Sets whether column widths should be equalized.
Layer tree node points to a map layer.
void setRasterStrokeColor(const QColor &color)
Sets the stroke color for the stroke drawn around raster symbol items.
double boxSpace() const
Returns the legend box space (in millimeters), which is the empty margin around the inside of the leg...
@ FlagOverridesPaint
Item overrides the default layout item painting method.
void projectColorsChanged()
Emitted whenever the project's color scheme has been changed.
Structure that stores all data associated with one map layer.
void setColumnSpace(double s)
Sets the margin space between adjacent columns (in millimeters).
Qt::AlignmentFlag symbolAlignment() const
Returns the alignment for placement of legend symbols.
QSizeF wmsLegendSize() const
Returns the size (in millimeters) of WMS legend graphics shown in the legend.
Layer tree group node serves as a container for layers and further groups.
QgsRectangle extent() const
Returns the current map extent.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
void setBoxSpace(double space)
Sets the legend box space.
void paint(QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget) override
Handles preparing a paint surface for the layout item and painting the item's content.
double maximumSymbolSize() const
Returns the maximum symbol size (in mm).
@ MustPlaceInOwnLayer
Item must be placed in its own individual layer.
double scale() const
Returns the calculated map scale.
bool drawRasterStroke() const
Returns whether a stroke will be drawn around raster symbol items.
Base class for graphical items within a QgsLayout.
Qt::AlignmentFlag titleAlignment() const
Returns the alignment of the legend title.
Scoped object for saving and restoring a QPainter object's state.
void updateFilterByMap(bool redraw=true)
Updates the legend content when filtered by map.
static QgsRenderContext createRenderContextForMap(QgsLayoutItemMap *map, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout map and painter destination.
ExportLayerBehavior exportLayerBehavior() const override
Returns the behavior of this item during exporting to layered exports (e.g.
void setLineSpacing(double s)
Sets the line spacing to use between lines of legend text.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
QgsRectangle requestedExtent() const
Calculates the extent to request and the yShift of the top-left point in case of rotation.
Q_DECL_DEPRECATED void setDpi(int dpi)
double symbolWidth() const
Returns the legend symbol width.
QgsLayoutItemLegend(QgsLayout *layout)
Constructor for QgsLayoutItemLegend, with the specified parent layout.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used for rendering the map.
double mapUnitsToLayoutUnits() const
Returns the conversion factor from map units to layout units.
void setLinkedMap(QgsLayoutItemMap *map)
Sets the map to associate with the legend.
void setDrawRasterStroke(bool enabled)
Sets whether a stroke will be drawn around raster symbol items.
Single scope for storing variables and functions for use within a QgsExpressionContext.
QList< QgsLayerTreeModelLegendNode * > layerLegendNodes(QgsLayerTreeLayer *nodeLayer, bool skipNodeEmbeddedInParent=false) const
Returns filtered list of active legend nodes attached to a particular layer node (by default it retur...
Q_DECL_DEPRECATED void setMapScale(double scale)
Sets the legend map scale.
QString valueAsString(int key, const QgsExpressionContext &context, const QString &defaultString=QString(), bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a string.
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
QColor fontColor() const
Returns the legend font color.
double symbolHeight() const
Returns the legend symbol height.
void setSymbolWidth(double width)
Sets the legend symbol width.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
void refresh() override
Refreshes the item, causing a recalculation of any property overrides and recalculation of its positi...
QString themeName() const
Returns the name of the theme currently linked to the legend.
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Returns layer tree node for given index.
Layout graphical items for displaying a map.
@ LegendTitle
Legend title.
void setMinimumSymbolSize(double size)
Set the minimum symbol size for symbol (in millimeters).
int columnCount() const
Returns the legend column count.
double boxSpace() const
Returns the legend box space.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
void setStyle(QgsLegendStyle::Style s, const QgsLegendStyle &style)
Sets the style for a legend component.
void paint(QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget) override
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
virtual QString uuid() const
Returns the item identification string.
QgsLegendStyle style(QgsLegendStyle::Style s) const
Returns legend style.
void themeChanged(const QString &theme)
Emitted when the map's associated theme is changed.
void setColumnCount(int count)
Sets the legend column count.
void setFontColor(const QColor &c)
Sets the font color used for legend items.
void setDrawRasterStroke(bool enabled)
Sets whether a stroke will be drawn around raster symbol items.
void setColumnCount(int c)
Sets the desired minimum number of columns to show in the legend.
void setWmsLegendHeight(double height)
Sets the WMS legend height.
QPointer< QgsLayout > mLayout
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
A geometry is the spatial representation of a feature.
void setFlag(Flag f, bool on=true)
Enable or disable a model flag.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
void adjustBoxSize()
Sets the legend's item bounds to fit the whole legend content.
void setCustomProperty(const QString &key, const QVariant &value)
Sets a custom property for the node. Properties are stored in a map and saved in project file.
Represents a vector layer which manages a vector based data sets.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
void mapRotationChanged(double newRotation)
Emitted when the map's rotation changes.
QFont font() const
Returns the font used for rendering this legend component.
void setTitleAlignment(Qt::AlignmentFlag alignment)
Sets the alignment of the legend title.
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.
Flags flags() const
Returns OR-ed combination of model flags.
bool splitLayer() const
Returns true if layer components can be split over multiple columns.
void setStyleFont(QgsLegendStyle::Style component, const QFont &font)
Sets the style font for a legend component.
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
virtual void attemptResize(const QgsLayoutSize &size, bool includesFrame=false)
Attempts to resize the item to a specified target size.
QSizeF symbolSize() const
Returns the default symbol size (in millimeters) used for legend items.
void setMinimumSymbolSize(double size)
Set the minimum symbol size for symbol (in millimeters).
void symbolFeatureCountMapChanged()
Emitted when the feature count for symbols on this layer has been recalculated.
virtual QString name() const =0
Returns name of the node.
void setColumnSpace(double spacing)
Sets the legend column spacing.
QgsVectorLayerFeatureCounter * countSymbolFeatures(bool storeSymbolFids=false)
Count features for symbols.
bool splitLayer() const
Returns whether the legend items from a single layer can be split over multiple columns.
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
bool equalColumnWidth() const
Returns true if all columns should have equal widths.
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
void setRasterStrokeWidth(double width)
Sets the stroke width for the stroke drawn around raster symbol items.
void setWmsLegendWidth(double width)
Sets the WMS legend width.
void setWmsLegendSize(QSizeF s)
Sets the desired size (in millimeters) of WMS legend graphics shown in the legend.
The QgsLegendRenderer class handles automatic layout and rendering of legend.
QColor fontColor() const
Returns the font color used for legend items.
double lineSpacing() const
Returns the line spacing to use between lines of legend text.
Q_DECL_DEPRECATED void setUseAdvancedEffects(bool use)
@ LayoutMillimeters
Millimeters.
@ AllowNodeReorder
Allow reordering with drag'n'drop.
QgsLegendStyle & rstyle(QgsLegendStyle::Style s)
Returns modifiable reference to the style for a legend component.
A legend patch shape entity for QgsStyle databases.
QString title() const
Returns the legend title.
void setRasterStrokeColor(const QColor &color)
Sets the stroke color for the stroke drawn around raster symbol items.
QSizeF minimumSize(QgsRenderContext *renderContext=nullptr)
Runs the layout algorithm and returns the minimum size required for the legend.
void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties) override
bool resizeToContents() const
Returns whether the legend should automatically resize to fit its contents.
QPainter * painter()
Returns the destination QPainter for the render operation.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
void setSymbolHeight(double height)
Sets the legend symbol height.
Single variable definition for use within a QgsExpressionContextScope.
double lineSpacing() const
Returns the spacing in-between lines in layout units.
Item model implementation based on layer tree model for layout legend.
The QgsMapSettings class contains configuration for rendering of the map.
static QgsLayerTree * readXml(QDomElement &element, const QgsReadWriteContext &context)
Load the layer tree from an XML element.
Implementation of legend node interface for displaying preview of vector symbols and their labels and...
void removeCustomProperty(const QString &key)
Remove a custom property from layer. Properties are stored in a map and saved in project file.
QgsLegendModel(QgsLayerTree *rootNode, QObject *parent=nullptr, QgsLayoutItemLegend *layout=nullptr)
Construct the model based on the given layer tree.
#define Q_NOWARN_DEPRECATED_PUSH
void readXml(const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext())
Reads the component's style definition from an XML element.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
@ LayoutLegend
Legend item.
double columnSpace() const
Returns the margin space between adjacent columns (in millimeters).
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
@ Group
Legend group title.
QString wrapString() const
Returns the legend text wrapping string.
@ Subgroup
Legend subgroup title.
void setSymbolAlignment(Qt::AlignmentFlag alignment)
Sets the alignment for placement of legend symbols.
double columnSpace() const
Returns the legend column spacing.
void setWrapChar(const QString &t)
Sets a string to use as a wrapping character.
void updateLegend()
Updates the model and all legend entries.
bool equalColumnWidth() const
Returns whether column widths should be equalized.
void setMaximumSymbolSize(double size)
Set the maximum symbol size for symbol (in millimeters).
void setWrapString(const QString &string)
Sets the legend text wrapping string.
DataDefinedProperty
Data defined properties for different item types.
QString wrapChar() const
Returns the string used as a wrapping character.
bool autoUpdateModel() const
Returns whether the legend content should auto update to reflect changes in the project's layer tree.
void setMaximumSymbolSize(double size)
Set the maximum symbol size for symbol (in millimeters).
Contains detailed styling information relating to how a layout legend should be rendered.
void setLegendFilterByMapEnabled(bool enabled)
Set whether legend items should be filtered to show just the ones visible in the associated map.
bool isNull() const
Returns true if the patch shape is a null QgsLegendPatchShape, which indicates that the default legen...
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...