36 #include <QDomDocument> 
   37 #include <QDomElement> 
   43   , mLegendModel( new 
QgsLegendModel( layout->project()->layerTreeRoot(), this ) )
 
   46   connect( &
layout->atlasComposition(), &QgsAtlasComposition::renderEnded, 
this, &QgsLayoutItemLegend::onAtlasEnded );
 
   49   mTitle = mSettings.
title();
 
   89   if ( mFilterAskedForUpdate )
 
   91     mFilterAskedForUpdate = 
false;
 
   92     doUpdateFilterByMap();
 
   95   const int dpi = painter->device()->logicalDpiX();
 
   96   const double dotsPerMM = dpi / 25.4;
 
  114     const 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     const 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();
 
  191   painter->setPen( QPen( QColor( 0, 0, 0 ) ) );
 
  193   if ( !mSizeToContents )
 
  196     const QRectF thisPaintRect = QRectF( 0, 0, rect().width(), rect().height() );
 
  197     painter->setClipRect( thisPaintRect );
 
  219   if ( !mSizeToContents )
 
  222   if ( !mInitialMapScaleCalculated )
 
  235   const QSizeF size = legendRenderer.
minimumSize( &context );
 
  236   QgsDebugMsg( QStringLiteral( 
"width = %1 height = %2" ).arg( size.width() ).arg( size.height() ) );
 
  237   if ( size.isValid() )
 
  247   mSizeToContents = enabled;
 
  252   return mSizeToContents;
 
  255 void QgsLayoutItemLegend::setCustomLayerTree( 
QgsLayerTree *rootGroup )
 
  257   mLegendModel->setRootGroup( rootGroup ? rootGroup : ( 
mLayout ? 
mLayout->project()->layerTreeRoot() : 
nullptr ) );
 
  259   mCustomLayerTree.reset( rootGroup );
 
  268   setCustomLayerTree( autoUpdate ? 
nullptr : 
mLayout->project()->layerTreeRoot()->clone() );
 
  273 void QgsLayoutItemLegend::nodeCustomPropertyChanged( 
QgsLayerTreeNode *, 
const QString &key )
 
  275   if ( key == QLatin1String( 
"cached_name" ) )
 
  288   return !mCustomLayerTree;
 
  293   mLegendFilterByMap = enabled;
 
  302   if ( 
mLayout && 
id().isEmpty() )
 
  305     mLayout->itemsModel()->updateItemDisplayName( 
this );
 
  325   return mSettings.
rstyle( s );
 
  330   return mSettings.
style( s );
 
  549   legendElem.setAttribute( QStringLiteral( 
"title" ), mTitle );
 
  550   legendElem.setAttribute( QStringLiteral( 
"titleAlignment" ), QString::number( 
static_cast< int >( mSettings.
titleAlignment() ) ) );
 
  551   legendElem.setAttribute( QStringLiteral( 
"columnCount" ), QString::number( mColumnCount ) );
 
  552   legendElem.setAttribute( QStringLiteral( 
"splitLayer" ), QString::number( mSettings.
splitLayer() ) );
 
  553   legendElem.setAttribute( QStringLiteral( 
"equalColumnWidth" ), QString::number( mSettings.
equalColumnWidth() ) );
 
  555   legendElem.setAttribute( QStringLiteral( 
"boxSpace" ), QString::number( mSettings.
boxSpace() ) );
 
  556   legendElem.setAttribute( QStringLiteral( 
"columnSpace" ), QString::number( mSettings.
columnSpace() ) );
 
  558   legendElem.setAttribute( QStringLiteral( 
"symbolWidth" ), QString::number( mSettings.
symbolSize().width() ) );
 
  559   legendElem.setAttribute( QStringLiteral( 
"symbolHeight" ), QString::number( mSettings.
symbolSize().height() ) );
 
  560   legendElem.setAttribute( QStringLiteral( 
"maxSymbolSize" ), QString::number( mSettings.
maximumSymbolSize() ) );
 
  561   legendElem.setAttribute( QStringLiteral( 
"minSymbolSize" ), QString::number( mSettings.
minimumSymbolSize() ) );
 
  563   legendElem.setAttribute( QStringLiteral( 
"symbolAlignment" ), mSettings.
symbolAlignment() );
 
  565   legendElem.setAttribute( QStringLiteral( 
"symbolAlignment" ), mSettings.
symbolAlignment() );
 
  566   legendElem.setAttribute( QStringLiteral( 
"lineSpacing" ), QString::number( mSettings.
lineSpacing() ) );
 
  568   legendElem.setAttribute( QStringLiteral( 
"rasterBorder" ), mSettings.
drawRasterStroke() );
 
  570   legendElem.setAttribute( QStringLiteral( 
"rasterBorderWidth" ), QString::number( mSettings.
rasterStrokeWidth() ) );
 
  572   legendElem.setAttribute( QStringLiteral( 
"wmsLegendWidth" ), QString::number( mSettings.
wmsLegendSize().width() ) );
 
  573   legendElem.setAttribute( QStringLiteral( 
"wmsLegendHeight" ), QString::number( mSettings.
wmsLegendSize().height() ) );
 
  574   legendElem.setAttribute( QStringLiteral( 
"wrapChar" ), mSettings.
wrapChar() );
 
  575   legendElem.setAttribute( QStringLiteral( 
"fontColor" ), mSettings.
fontColor().name() );
 
  577   legendElem.setAttribute( QStringLiteral( 
"resizeToContents" ), mSizeToContents );
 
  581     legendElem.setAttribute( QStringLiteral( 
"map_uuid" ), mMap->
uuid() );
 
  584   QDomElement legendStyles = doc.createElement( QStringLiteral( 
"styles" ) );
 
  585   legendElem.appendChild( legendStyles );
 
  593   if ( mCustomLayerTree )
 
  596     mCustomLayerTree->writeXml( legendElem, context );
 
  599   if ( mLegendFilterByMap )
 
  601     legendElem.setAttribute( QStringLiteral( 
"legendFilterByMap" ), QStringLiteral( 
"1" ) );
 
  603   legendElem.setAttribute( QStringLiteral( 
"legendFilterByAtlas" ), mFilterOutAtlas ? QStringLiteral( 
"1" ) : QStringLiteral( 
"0" ) );
 
  611   mTitle = itemElem.attribute( QStringLiteral( 
"title" ) );
 
  613   if ( !itemElem.attribute( QStringLiteral( 
"titleAlignment" ) ).isEmpty() )
 
  615     mSettings.
setTitleAlignment( 
static_cast< Qt::AlignmentFlag 
>( itemElem.attribute( QStringLiteral( 
"titleAlignment" ) ).toInt() ) );
 
  617   int colCount = itemElem.attribute( QStringLiteral( 
"columnCount" ), QStringLiteral( 
"1" ) ).toInt();
 
  618   if ( colCount < 1 ) colCount = 1;
 
  619   mColumnCount = colCount;
 
  621   mSettings.
setSplitLayer( itemElem.attribute( QStringLiteral( 
"splitLayer" ), QStringLiteral( 
"0" ) ).toInt() == 1 );
 
  622   mSettings.
setEqualColumnWidth( itemElem.attribute( QStringLiteral( 
"equalColumnWidth" ), QStringLiteral( 
"0" ) ).toInt() == 1 );
 
  624   const QDomNodeList stylesNodeList = itemElem.elementsByTagName( QStringLiteral( 
"styles" ) );
 
  625   if ( !stylesNodeList.isEmpty() )
 
  627     const QDomNode stylesNode = stylesNodeList.at( 0 );
 
  628     for ( 
int i = 0; i < stylesNode.childNodes().size(); i++ )
 
  630       const QDomElement styleElem = stylesNode.childNodes().at( i ).toElement();
 
  633       const QString name = styleElem.attribute( QStringLiteral( 
"name" ) );
 
  647   fontClr.setNamedColor( itemElem.attribute( QStringLiteral( 
"fontColor" ), QStringLiteral( 
"#000000" ) ) );
 
  651   mSettings.
setBoxSpace( itemElem.attribute( QStringLiteral( 
"boxSpace" ), QStringLiteral( 
"2.0" ) ).toDouble() );
 
  652   mSettings.
setColumnSpace( itemElem.attribute( QStringLiteral( 
"columnSpace" ), QStringLiteral( 
"2.0" ) ).toDouble() );
 
  654   mSettings.
setSymbolSize( QSizeF( itemElem.attribute( QStringLiteral( 
"symbolWidth" ), QStringLiteral( 
"7.0" ) ).toDouble(), itemElem.attribute( QStringLiteral( 
"symbolHeight" ), QStringLiteral( 
"14.0" ) ).toDouble() ) );
 
  655   mSettings.
setSymbolAlignment( 
static_cast< Qt::AlignmentFlag 
>( itemElem.attribute( QStringLiteral( 
"symbolAlignment" ), QString::number( Qt::AlignLeft ) ).toInt() ) );
 
  657   mSettings.
setMaximumSymbolSize( itemElem.attribute( QStringLiteral( 
"maxSymbolSize" ), QStringLiteral( 
"0.0" ) ).toDouble() );
 
  658   mSettings.
setMinimumSymbolSize( itemElem.attribute( QStringLiteral( 
"minSymbolSize" ), QStringLiteral( 
"0.0" ) ).toDouble() );
 
  660   mSettings.
setWmsLegendSize( QSizeF( itemElem.attribute( QStringLiteral( 
"wmsLegendWidth" ), QStringLiteral( 
"50" ) ).toDouble(), itemElem.attribute( QStringLiteral( 
"wmsLegendHeight" ), QStringLiteral( 
"25" ) ).toDouble() ) );
 
  661   mSettings.
setLineSpacing( itemElem.attribute( QStringLiteral( 
"lineSpacing" ), QStringLiteral( 
"1.0" ) ).toDouble() );
 
  663   mSettings.
setDrawRasterStroke( itemElem.attribute( QStringLiteral( 
"rasterBorder" ), QStringLiteral( 
"1" ) ) != QLatin1String( 
"0" ) );
 
  665   mSettings.
setRasterStrokeWidth( itemElem.attribute( QStringLiteral( 
"rasterBorderWidth" ), QStringLiteral( 
"0" ) ).toDouble() );
 
  667   mSettings.
setWrapChar( itemElem.attribute( QStringLiteral( 
"wrapChar" ) ) );
 
  669   mSizeToContents = itemElem.attribute( QStringLiteral( 
"resizeToContents" ), QStringLiteral( 
"1" ) ) != QLatin1String( 
"0" );
 
  672   mLegendFilterByMap = itemElem.attribute( QStringLiteral( 
"legendFilterByMap" ), QStringLiteral( 
"0" ) ).toInt();
 
  675   if ( !itemElem.attribute( QStringLiteral( 
"map_uuid" ) ).isEmpty() )
 
  677     mMapUuid = itemElem.attribute( QStringLiteral( 
"map_uuid" ) );
 
  680   setupMapConnections( mMap, 
false );
 
  683   mFilterOutAtlas = itemElem.attribute( QStringLiteral( 
"legendFilterByAtlas" ), QStringLiteral( 
"0" ) ).toInt();
 
  686   QDomElement layerTreeElem = itemElem.firstChildElement( QStringLiteral( 
"layer-tree" ) );
 
  687   if ( layerTreeElem.isNull() )
 
  688     layerTreeElem = itemElem.firstChildElement( QStringLiteral( 
"layer-tree-group" ) );
 
  690   if ( !layerTreeElem.isNull() )
 
  694       tree->resolveReferences( 
mLayout->project(), 
true );
 
  695     setCustomLayerTree( tree.release() );
 
  698     setCustomLayerTree( 
nullptr );
 
  705   if ( !
id().isEmpty() )
 
  711   QString text = mSettings.
title();
 
  712   if ( text.isEmpty() )
 
  714     return tr( 
"<Legend>" );
 
  716   if ( text.length() > 25 )
 
  718     return tr( 
"%1…" ).arg( text.left( 25 ) );
 
  727 void QgsLayoutItemLegend::setupMapConnections( 
QgsLayoutItemMap *map, 
bool connectSlots )
 
  734     disconnect( map, &QObject::destroyed, 
this, &QgsLayoutItemLegend::invalidateCurrentMap );
 
  743     connect( map, &QObject::destroyed, 
this, &QgsLayoutItemLegend::invalidateCurrentMap );
 
  756     setupMapConnections( mMap, 
false );
 
  763     setupMapConnections( mMap, 
true );
 
  770 void QgsLayoutItemLegend::invalidateCurrentMap()
 
  779   bool forceUpdate = 
false;
 
  795     if ( ok && cols >= 0 )
 
  811 void QgsLayoutItemLegend::updateFilterByMapAndRedraw()
 
  816 void QgsLayoutItemLegend::setModelStyleOverrides( 
const QMap<QString, QString> &overrides )
 
  818   mLegendModel->setLayerStyleOverrides( overrides );
 
  819   const QList< QgsLayerTreeLayer * > layers =  mLegendModel->rootGroup()->findLayers();
 
  821     mLegendModel->refreshLayerLegend( nodeLayer );
 
  825 void QgsLayoutItemLegend::clearLegendCachedData()
 
  830     mLegendModel->clearCachedData( node );
 
  834       const QList< QgsLayerTreeNode * > children = group->
children();
 
  837         clearNodeCache( child );
 
  842   clearNodeCache( mLegendModel->rootGroup() );
 
  845 void QgsLayoutItemLegend::mapLayerStyleOverridesChanged()
 
  851   if ( mLegendFilterByMap )
 
  867 void QgsLayoutItemLegend::mapThemeChanged( 
const QString &theme )
 
  869   if ( mThemeName == theme )
 
  875   if ( mLegendFilterByMap )
 
  883     if ( mThemeName.isEmpty() )
 
  885       setModelStyleOverrides( QMap<QString, QString>() );
 
  890       const QMap<QString, QString> overrides = 
mLayout->project()->mapThemeCollection()->mapThemeStyleOverrides( mThemeName );
 
  891       setModelStyleOverrides( overrides );
 
  905   mFilterAskedForUpdate = 
true;
 
  911 void QgsLayoutItemLegend::doUpdateFilterByMap()
 
  915     if ( !mThemeName.isEmpty() )
 
  918       const QMap<QString, QString> overrides = 
mLayout->project()->mapThemeCollection()->mapThemeStyleOverrides( mThemeName );
 
  919       mLegendModel->setLayerStyleOverrides( overrides );
 
  927     mLegendModel->setLayerStyleOverrides( QMap<QString, QString>() );
 
  932   if ( mMap && ( mLegendFilterByMap || filterByExpression || mInAtlas ) )
 
  934     const double dpi = 
mLayout->renderContext().dpi();
 
  938     QSizeF size( requestRectangle.
width(), requestRectangle.
height() );
 
  946       filterPolygon = 
mLayout->reportContext().currentGeometry( mMap->
crs() );
 
  948     mLegendModel->setLegendFilter( &ms,  mInAtlas || mLegendFilterByMap, filterPolygon,  
true );
 
  951     mLegendModel->setLegendFilterByMap( 
nullptr );
 
  953   clearLegendCachedData();
 
  964   mFilterOutAtlas = doFilter;
 
  969   return mFilterOutAtlas;
 
  972 void QgsLayoutItemLegend::onAtlasFeature()
 
  976   mInAtlas = mFilterOutAtlas;
 
  980 void QgsLayoutItemLegend::onAtlasEnded()
 
 1020     const QList<QgsLayerTreeNode *> childNodes = group->
children();
 
 1026         if ( !visit( nodeGroup ) )
 
 1038         const QList<QgsLayerTreeModelLegendNode *> legendNodes = mLegendModel->layerLegendNodes( nodeLayer );
 
 1043             if ( !symbolNode->patchShape().isNull() )
 
 1055   return visit( mLegendModel->rootGroup( ) );
 
 1066   , mLayoutLegend( layout )
 
 1075   , mLayoutLegend( layout )
 
 1088   if ( nodeLayer && ( role == Qt::DisplayRole || role == Qt::EditRole ) )
 
 1090     QString name = node->
customProperty( QStringLiteral( 
"cached_name" ) ).toString();
 
 1091     if ( !name.isEmpty() )
 
 1097     name = nodeLayer->
customProperty( QStringLiteral( 
"legend/title-label" ) ).toString();
 
 1098     if ( name.isEmpty() )
 
 1099       name = nodeLayer->
name();
 
 1100     if ( name.isEmpty() )
 
 1101       name = node->
customProperty( QStringLiteral( 
"legend/title-label" ) ).toString();
 
 1102     if ( name.isEmpty() )
 
 1103       name = node->
name();
 
 1104     if ( nodeLayer->
customProperty( QStringLiteral( 
"showFeatureCount" ), 0 ).toInt() )
 
 1108         name += QStringLiteral( 
" [%1]" ).arg( vlayer->
featureCount() );
 
 1114     const bool evaluate = ( vlayer && !nodeLayer->
labelExpression().isEmpty() ) || name.contains( 
"[%" );
 
 1125       if ( mLayoutLegend )
 
 1128       const QList<QgsLayerTreeModelLegendNode *> legendnodes = 
layerLegendNodes( nodeLayer, 
false );
 
 1129       if ( legendnodes.count() > 1 ) 
 
 1134             symnode->evaluateLabel( expressionContext );
 
 1137       else if ( 
QgsSymbolLegendNode *symnode = qobject_cast<QgsSymbolLegendNode *>( legendnodes.first() ) )
 
 1138         name = symnode->evaluateLabel( expressionContext );
 
 1157   if ( !
mLegend.contains( nodeLayer ) )
 
 1158     return QList<QgsLayerTreeModelLegendNode *>();
 
 1161   QList<QgsLayerTreeModelLegendNode *> lst( 
data.activeNodes );
 
 1162   if ( !skipNodeEmbeddedInParent && 
data.embeddedNodeInParent )
 
 1163     lst.prepend( 
data.embeddedNodeInParent );
 
 1172 void QgsLegendModel::forceRefresh()
 
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.
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.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
Single scope for storing variables and functions for use within a QgsExpressionContext.
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsExpressionContextScope * popScope()
Removes the last scope from the expression context and return it.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
A geometry is the spatial representation of a feature.
Layer tree group node serves as a container for layers and further groups.
Layer tree node points to a map layer.
QString labelExpression() const
Returns the expression member of the LayerTreeNode.
QgsLegendPatchShape patchShape() const
Returns the symbol patch shape to use when rendering the legend node symbol.
QString name() const override
Returns the layer's name.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
The QgsLayerTreeModel class is model implementation for Qt item views framework.
Flags flags() const
Returns OR-ed combination of model flags.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
void setFlag(Flag f, bool on=true)
Enable or disable a model flag.
QHash< QgsLayerTreeLayer *, LayerLegendData > mLegend
Per layer data about layer's legend nodes.
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Returns layer tree node for given index.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
static QgsLayerTreeModelLegendNode * index2legendNode(const QModelIndex &index)
Returns legend node for given index.
@ AllowNodeReorder
Allow reordering with drag'n'drop.
@ AllowLegendChangeState
Allow check boxes for legend nodes (if supported by layer's legend)
This class is a base class for nodes in a layer tree.
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.
void removeCustomProperty(const QString &key)
Remove a custom property from layer. Properties are stored in a map and saved in project file.
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.
virtual QString name() const =0
Returns name of the node.
void customPropertyChanged(QgsLayerTreeNode *node, const QString &key)
Emitted when a custom property of a node within the tree has been changed or removed.
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
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 bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
static QgsLayerTree * readXml(QDomElement &element, const QgsReadWriteContext &context)
Load the layer tree from an XML element.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
A layout item subclass for map legends.
bool autoUpdateModel() const
Returns whether the legend content should auto update to reflect changes in the project's layer tree.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
void setStyleMargin(QgsLegendStyle::Style component, double margin)
Set the margin for a legend component.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
QString title() const
Returns the legend title.
void setSplitLayer(bool enabled)
Sets whether the legend items from a single layer can be split over multiple columns.
void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties) override
void adjustBoxSize()
Sets the legend's item bounds to fit the whole legend content.
double wmsLegendWidth() const
Returns the WMS legend width.
void setColumnSpace(double spacing)
Sets the legend column spacing.
void setBoxSpace(double space)
Sets the legend box space.
bool splitLayer() const
Returns whether the legend items from a single layer can be split over multiple columns.
double symbolHeight() const
Returns the legend symbol height.
void updateFilterByMap(bool redraw=true)
Updates the legend content when filtered by map.
void setEqualColumnWidth(bool equalize)
Sets whether column widths should be equalized.
void setDrawRasterStroke(bool enabled)
Sets whether a stroke will be drawn around raster symbol items.
QFont styleFont(QgsLegendStyle::Style component) const
Returns the font settings for a legend component.
static QgsLayoutItemLegend * create(QgsLayout *layout)
Returns a new legend item for the specified layout.
void setLegendFilterOutAtlas(bool doFilter)
When set to true, during an atlas rendering, it will filter out legend elements where features are ou...
void setSymbolWidth(double width)
Sets the legend symbol width.
QString wrapString() const
Returns the legend text wrapping string.
bool resizeToContents() const
Returns whether the legend should automatically resize to fit its contents.
void setResizeToContents(bool enabled)
Sets whether the legend should automatically resize to fit its contents.
void updateLegend()
Updates the model and all legend entries.
QgsLayoutItemLegend(QgsLayout *layout)
Constructor for QgsLayoutItemLegend, with the specified parent layout.
void setLinkedMap(QgsLayoutItemMap *map)
Sets the map to associate with the legend.
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
void setSymbolAlignment(Qt::AlignmentFlag alignment)
Sets the alignment for placement of legend symbols.
QgsLegendStyle & rstyle(QgsLegendStyle::Style s)
Returns reference to modifiable legend style.
QColor fontColor() const
Returns the legend font color.
Qt::AlignmentFlag symbolAlignment() const
Returns the alignment for placement of legend symbols.
double maximumSymbolSize() const
Returns the maximum symbol size (in mm).
void setWmsLegendWidth(double width)
Sets the WMS legend width.
void setTitle(const QString &title)
Sets the legend title.
void setFontColor(const QColor &color)
Sets the legend font color.
double boxSpace() const
Returns the legend box space.
void setRasterStrokeColor(const QColor &color)
Sets the stroke color for the stroke drawn around raster symbol items.
QString displayName() const override
Gets item display name.
void paint(QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget) override
double symbolWidth() const
Returns the legend symbol width.
QColor rasterStrokeColor() const
Returns the stroke color for the stroke drawn around raster symbol items.
bool drawRasterStroke() const
Returns whether a stroke will be drawn around raster symbol items.
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
void finalizeRestoreFromXml() override
Called after all pending items have been restored from XML.
int type() const override
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
bool legendFilterOutAtlas() const
Returns whether to filter out legend elements outside of the current atlas feature.
void setStyle(QgsLegendStyle::Style component, const QgsLegendStyle &style)
Sets the style of component to style for the legend.
ExportLayerBehavior exportLayerBehavior() const override
Returns the behavior of this item during exporting to layered exports (e.g.
void setLineSpacing(double spacing)
Sets the spacing in-between multiple lines.
double columnSpace() const
Returns the legend column spacing.
QgsLayoutItem::Flags itemFlags() const override
Returns the item's flags, which indicate how the item behaves.
Qt::AlignmentFlag titleAlignment() const
Returns the alignment of the legend title.
void setLegendFilterByMapEnabled(bool enabled)
Set whether legend items should be filtered to show just the ones visible in the associated map.
void setSymbolHeight(double height)
Sets the legend symbol height.
void setMinimumSymbolSize(double size)
Set the minimum symbol size for symbol (in millimeters).
void setAutoUpdateModel(bool autoUpdate)
Sets 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).
QIcon icon() const override
Returns the item's icon.
double wmsLegendHeight() const
Returns the WMS legend height.
void setWmsLegendHeight(double height)
Sets the WMS legend height.
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).
double rasterStrokeWidth() const
Returns the stroke width (in layout units) for the stroke drawn around raster symbol items.
double lineSpacing() const
Returns the spacing in-between lines in layout units.
void setStyleFont(QgsLegendStyle::Style component, const QFont &font)
Sets the style font for a legend component.
QgsLegendStyle style(QgsLegendStyle::Style s) const
Returns legend style.
void setTitleAlignment(Qt::AlignmentFlag alignment)
Sets the alignment of the legend title.
void setWrapString(const QString &string)
Sets the legend text wrapping string.
QString themeName() const
Returns the name of the theme currently linked to the legend.
void setColumnCount(int count)
Sets the legend column count.
bool equalColumnWidth() const
Returns whether column widths should be equalized.
int columnCount() const
Returns the legend column count.
bool legendFilterByMapEnabled() const
Find out whether legend items are filtered to show just the ones visible in the associated map.
Layout graphical items for displaying a map.
void extentChanged()
Emitted when the map's extent changes.
QgsMapSettings mapSettings(const QgsRectangle &extent, QSizeF size, double dpi, bool includeLayerSettings) const
Returns map settings that will be used for drawing of the map.
void layerStyleOverridesChanged()
Emitted when layer style overrides are changed...
void mapRotationChanged(double newRotation)
Emitted when the map's rotation changes.
QMap< QString, QString > layerStyleOverrides() const
Returns stored overrides of styles for layers.
QgsRectangle requestedExtent() const
Calculates the extent to request and the yShift of the top-left point in case of rotation.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
double mapUnitsToLayoutUnits() const
Returns the conversion factor from map units to layout units.
void themeChanged(const QString &theme)
Emitted when the map's associated theme is changed.
QgsRectangle extent() const
Returns the current map extent.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used for rendering the map.
@ LayoutLegend
Legend item.
Contains settings and helpers relating to a render of a QgsLayoutItem.
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
Base class for graphical items within a QgsLayout.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
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.
virtual void redraw()
Triggers a redraw (update) of the item.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
virtual void attemptResize(const QgsLayoutSize &size, bool includesFrame=false)
Attempts to resize the item to a specified target size.
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...
@ FlagOverridesPaint
Item overrides the default layout item painting method.
virtual QString uuid() const
Returns the item identification string.
QString id() const
Returns the item's ID name.
ExportLayerBehavior
Behavior of item when exporting to layered outputs.
@ MustPlaceInOwnLayer
Item must be placed in its own individual layer.
void refresh() override
Refreshes the item, causing a recalculation of any property overrides and recalculation of its positi...
QgsPropertyCollection mDataDefinedProperties
const QgsLayout * layout() const
Returns the layout the object is attached to.
void changed()
Emitted when the object's properties change.
QPointer< QgsLayout > mLayout
DataDefinedProperty
Data defined properties for different item types.
@ LegendTitle
Legend title.
@ AllProperties
All properties for item.
@ LegendColumnCount
Legend column count.
@ FlagUseAdvancedEffects
Enable advanced effects such as blend modes.
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
static QgsRenderContext createRenderContextForMap(QgsLayoutItemMap *map, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout map and painter destination.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Item model implementation based on layer tree model for layout legend.
void clearCachedData(QgsLayerTreeNode *node) const
Clears any previously cached data for the specified node.
void refreshLegend()
Emitted to refresh the legend.
QgsLegendModel(QgsLayerTree *rootNode, QObject *parent=nullptr, QgsLayoutItemLegend *layout=nullptr)
Construct the model based on the given layer tree.
QVariant data(const QModelIndex &index, int role) const override
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...
bool isNull() const
Returns true if the patch shape is a null QgsLegendPatchShape, which indicates that the default legen...
The QgsLegendRenderer class handles automatic layout and rendering of legend.
QSizeF minimumSize(QgsRenderContext *renderContext=nullptr)
Runs the layout algorithm and returns the minimum size required for the legend.
void setLegendSize(QSizeF s)
Sets the preferred resulting legend size.
Q_DECL_DEPRECATED void drawLegend(QPainter *painter)
Draws the legend with given painter.
void setSymbolAlignment(Qt::AlignmentFlag alignment)
Sets the alignment for placement of legend symbols.
QString wrapChar() const
Returns the string used as a wrapping character.
void setFontColor(const QColor &c)
Sets the font color used for legend items.
void setWrapChar(const QString &t)
Sets a string to use as a wrapping character.
void setRasterStrokeColor(const QColor &color)
Sets the stroke color for the stroke drawn around raster symbol items.
void setStyle(QgsLegendStyle::Style s, const QgsLegendStyle &style)
Sets the style for a legend component.
void setColumnSpace(double s)
Sets the margin space between adjacent columns (in millimeters).
Q_DECL_DEPRECATED void setMapScale(double scale)
Sets the legend map scale.
QgsLegendStyle style(QgsLegendStyle::Style s) const
Returns the style for a legend component.
void setTitle(const QString &t)
Sets the title for the legend, which will be rendered above all legend items.
bool drawRasterStroke() const
Returns whether a stroke will be drawn around raster symbol items.
void setDrawRasterStroke(bool enabled)
Sets whether a stroke will be drawn around raster symbol items.
QSizeF wmsLegendSize() const
Returns the size (in millimeters) of WMS legend graphics shown in the legend.
double minimumSymbolSize() const
Returns the minimum symbol size (in mm).
double rasterStrokeWidth() const
Returns the stroke width (in millimeters) for the stroke drawn around raster symbol items.
void setLineSpacing(double s)
Sets the line spacing to use between lines of legend text.
void setColumnCount(int c)
Sets the desired minimum number of columns to show in the legend.
void setTitleAlignment(Qt::AlignmentFlag alignment)
Sets the alignment of the legend title.
Q_DECL_DEPRECATED void setMmPerMapUnit(double mmPerMapUnit)
Q_DECL_DEPRECATED void setDpi(int dpi)
QgsLegendStyle & rstyle(QgsLegendStyle::Style s)
Returns modifiable reference to the style for a legend component.
Qt::AlignmentFlag titleAlignment() const
Returns the alignment of the legend title.
QSizeF symbolSize() const
Returns the default symbol size (in millimeters) used for legend items.
QColor fontColor() const
Returns the font color used for legend items.
double maximumSymbolSize() const
Returns the maximum symbol size (in mm).
QString title() const
Returns the title for the legend, which will be rendered above all legend items.
QColor rasterStrokeColor() const
Returns the stroke color for the stroke drawn around raster symbol items.
Q_DECL_DEPRECATED void setUseAdvancedEffects(bool use)
void setSplitLayer(bool s)
Sets whether layer components can be split over multiple columns.
double columnSpace() const
Returns the margin space between adjacent columns (in millimeters).
void setEqualColumnWidth(bool s)
Sets whether all columns should have equal widths.
void setBoxSpace(double s)
Sets the legend box space (in millimeters), which is the empty margin around the inside of the legend...
double boxSpace() const
Returns the legend box space (in millimeters), which is the empty margin around the inside of the leg...
void setMaximumSymbolSize(double size)
Set the maximum symbol size for symbol (in millimeters).
double lineSpacing() const
Returns the line spacing to use between lines of legend text.
bool splitLayer() const
Returns true if layer components can be split over multiple columns.
void setMinimumSymbolSize(double size)
Set the minimum symbol size for symbol (in millimeters).
void setRasterStrokeWidth(double width)
Sets the stroke width for the stroke drawn around raster symbol items.
Qt::AlignmentFlag symbolAlignment() const
Returns the alignment for placement of legend symbols.
bool equalColumnWidth() const
Returns true if all columns should have equal widths.
void setSymbolSize(QSizeF s)
Sets the default symbol size (in millimeters) used for legend items.
void setWmsLegendSize(QSizeF s)
Sets the desired size (in millimeters) of WMS legend graphics shown in the legend.
Contains detailed styling information relating to how a layout legend should be rendered.
QFont font() const
Returns the font used for rendering this legend component.
void setMargin(Side side, double margin)
Sets the margin (in mm) for the specified side of the component.
void readXml(const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext())
Reads the component's style definition from an XML element.
Style
Component of legends which can be styled.
@ Group
Legend group title.
@ Symbol
Symbol icon (excluding label)
@ Subgroup
Legend subgroup title.
@ SymbolLabel
Symbol label (excluding icon)
void setFont(const QFont &font)
Sets the font used for rendering this legend component.
void writeXml(const QString &name, QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const
Writes the component's style definition to an XML element.
The QgsMapSettings class contains configuration for rendering of the map.
double scale() const
Returns the calculated map scale.
void projectColorsChanged()
Emitted whenever the project's color scheme has been changed.
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
Contains information about the context of a rendering operation.
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
QPainter * painter()
Returns the destination QPainter for the render operation.
QgsExpressionContext & expressionContext()
Gets the expression context.
Scoped object for saving and restoring a QPainter object's state.
An interface for classes which can visit style entity (e.g.
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
A legend patch shape entity for QgsStyle databases.
static QColor decodeColor(const QString &str)
static QString encodeColor(const QColor &color)
Implementation of legend node interface for displaying preview of vector symbols and their labels and...
@ LayoutMillimeters
Millimeters.
Represents a vector layer which manages a vector based data sets.
QgsVectorLayerFeatureCounter * countSymbolFeatures(bool storeSymbolFids=false)
Count features for symbols.
long long featureCount(const QString &legendKey) const
Number of features rendered with specified legend key.
void symbolFeatureCountMapChanged()
Emitted when the feature count for symbols on this layer has been recalculated.
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
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
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
Single variable definition for use within a QgsExpressionContextScope.
Structure that stores all data associated with one map layer.
Contains information relating to the style entity currently being visited.