47  , mEmbeddedInParent( false )
 
   53  return qobject_cast<QgsLayerTreeModel *>( parent() );
 
   58  return Qt::ItemIsEnabled;
 
   93  const double itemHeight = std::max( 
static_cast< double >( ctx && ctx->
patchSize.height() > 0 ? ctx->
patchSize.height() : settings.
symbolSize().height() ), textHeight );
 
  104  const QString text = 
data( Qt::DisplayRole ).toString();
 
  105  json[ QStringLiteral( 
"title" ) ] = text;
 
  111  const QIcon symbolIcon = 
data( Qt::DecorationRole ).value<QIcon>();
 
  112  if ( symbolIcon.isNull() )
 
  119      size.setWidth( ctx->
patchSize.width( ) );
 
  121      size.setHeight( ctx->
patchSize.height( ) );
 
  130        symbolIcon.paint( ctx->
painter,
 
  132                          static_cast< int >( ctx->
top + ( itemHeight - size.height() ) / 2 ),
 
  133                          static_cast< int >( size.width() ),
 
  134                          static_cast< int >( size.height() ) );
 
  138        symbolIcon.paint( ctx->
painter,
 
  139                          static_cast< int >( ctx->
columnRight - size.width() ),
 
  140                          static_cast< int >( ctx->
top + ( itemHeight - size.height() ) / 2 ),
 
  141                          static_cast< int >( size.width() ),
 
  142                          static_cast< int >( size.height() ) );
 
  151  const QIcon icon = 
data( Qt::DecorationRole ).value<QIcon>();
 
  153    return QJsonObject();
 
  155  const QImage image( icon.pixmap( settings.
symbolSize().width(), settings.
symbolSize().height() ).toImage() );
 
  156  QByteArray byteArray;
 
  157  QBuffer buffer( &byteArray );
 
  158  image.save( &buffer, 
"PNG" );
 
  159  const QString base64 = QString::fromLatin1( byteArray.toBase64().data() );
 
  162  json[ QStringLiteral( 
"icon" ) ] = base64;
 
  168  QSizeF labelSize( 0, 0 );
 
  178  labelSize.rheight() = lines.count() * textHeight + ( lines.count() - 1 ) * ( settings.
lineSpacing() + textDescent );
 
  180  double labelXMin = 0.0;
 
  181  double labelXMax = 0.0;
 
  210    if ( labelSize.height() < symbolSize.height() )
 
  211      labelY += symbolSize.height() / 2 - labelSize.height() / 2;  
 
  213    labelY += textHeight;
 
  216  for ( QStringList::ConstIterator itemPart = lines.constBegin(); itemPart != lines.constEnd(); ++itemPart )
 
  219    labelSize.rwidth() = std::max( lineWidth, 
double( labelSize.width() ) );
 
  227          settings.
drawText( ctx->
painter, labelXMin, labelY, *itemPart, symbolLabelFont );
 
  231          settings.
drawText( ctx->
painter, labelXMax - lineWidth, labelY, *itemPart, symbolLabelFont );
 
  234        case Qt::AlignHCenter:
 
  235          settings.
drawText( ctx->
painter, labelXMin + ( labelXMax - labelXMin - lineWidth ) / 2.0, labelY, *itemPart, symbolLabelFont );
 
  239      if ( itemPart != ( lines.end() - 1 ) )
 
  240        labelY += textDescent + settings.
lineSpacing() + textHeight;
 
  261    if ( !vlayer->renderer() )
 
  265    for ( 
const auto &item : symbolList )
 
  267      vlayer->renderer()->checkLegendSymbolItem( item.ruleKey(), ! vlayer->renderer()->legendSymbolItemChecked( item.ruleKey() ) );
 
  271    vlayer->emitStyleChanged();
 
  272    vlayer->triggerRepaint();
 
  276    if ( !pclayer->renderer() )
 
  279    const QStringList ruleKeys = pclayer->renderer()->legendRuleKeys();
 
  280    for ( 
const QString &rule : ruleKeys )
 
  282      pclayer->renderer()->checkLegendItem( rule, !pclayer->renderer()->legendItemChecked( rule ) );
 
  286    pclayer->emitStyleChanged();
 
  287    pclayer->triggerRepaint();
 
  299  , mSymbolUsesMapUnits( false )
 
  309    MINIMUM_SIZE = settings.
value( 
"/qgis/legendsymbolMinimumSize", 0.5 ).toDouble();
 
  310    MAXIMUM_SIZE = settings.
value( 
"/qgis/legendsymbolMaximumSize", 20.0 ).toDouble();
 
  317  connect( nodeLayer, &QObject::destroyed, 
this, [ = ]() { 
mLayerNode = 
nullptr; } );
 
  330    return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
 
  332    return Qt::ItemIsEnabled;
 
  350    int maxSize = largeIconSize;
 
  358    if ( !ok && context )
 
  375  if ( !mTextOnSymbolLabel.isEmpty() && context )
 
  379    int wInt = ceil( w ), hInt = ceil( h );
 
  380    if ( wInt > minSz.width() ) minSz.setWidth( wInt );
 
  381    if ( hInt > minSz.height() ) minSz.setHeight( hInt );
 
  425  return mCustomSymbol.get();
 
  430  mCustomSymbol.reset( 
symbol );
 
  438  std::unique_ptr< QgsSymbol > s( 
symbol ); 
 
  440  if ( !vlayer || !vlayer->
renderer() )
 
  457  if ( 
auto *lModel = 
model() )
 
  458    lModel->legendMapViewData( &mupp, &dpi, &scale );
 
  464  std::unique_ptr<QgsRenderContext> context = std::make_unique<QgsRenderContext>( );
 
  465  context->setScaleFactor( dpi / 25.4 );
 
  466  context->setRendererScale( scale );
 
  473  context->setExpressionContext( expContext );
 
  475  return context.release();
 
  478void QgsLayerTreeModelLegendNode::checkAll( 
bool state )
 
  482    if ( !vlayer->renderer() )
 
  486    for ( 
const auto &item : symbolList )
 
  488      vlayer->renderer()->checkLegendSymbolItem( item.ruleKey(), state );
 
  492    vlayer->emitStyleChanged();
 
  493    vlayer->triggerRepaint();
 
  497    if ( !pclayer->renderer() )
 
  500    const QStringList ruleKeys = pclayer->renderer()->legendRuleKeys();
 
  501    for ( 
const QString &rule : ruleKeys )
 
  503      pclayer->renderer()->checkLegendItem( rule, state );
 
  507    pclayer->emitStyleChanged();
 
  508    pclayer->triggerRepaint();
 
  514  if ( role == Qt::DisplayRole )
 
  518  else if ( role == Qt::EditRole )
 
  522  else if ( role == Qt::DecorationRole )
 
  524    if ( mPixmap.isNull() || mPixmap.size() != mIconSize )
 
  537        if ( !mTextOnSymbolLabel.isEmpty() && context )
 
  539          QPainter painter( &pix );
 
  540          painter.setRenderHint( QPainter::Antialiasing );
 
  541          context->setPainter( &painter );
 
  542          bool isNullSize = 
false;
 
  543          const QFontMetricsF fm( mTextOnSymbolTextFormat.
scaledFont( *context, 1.0, &isNullSize ) );
 
  546            const qreal yBaselineVCenter = ( mIconSize.height() + fm.ascent() - fm.descent() ) / 2;
 
  548                                       QStringList() << mTextOnSymbolLabel, *context, mTextOnSymbolTextFormat );
 
  554        pix = QPixmap( mIconSize );
 
  555        pix.fill( Qt::transparent );
 
  562  else if ( role == Qt::CheckStateRole )
 
  569      if ( !vlayer->renderer() )
 
  572      return vlayer->renderer()->legendSymbolItemChecked( mItem.
ruleKey() ) ? Qt::Checked : Qt::Unchecked;
 
  593  if ( role != Qt::CheckStateRole )
 
  600  if ( !vlayer || !vlayer->
renderer() )
 
  625  std::unique_ptr< QgsRenderContext > tempRenderContext;
 
  631    tempRenderContext = std::make_unique< QgsRenderContext >();
 
  634    tempRenderContext->setScaleFactor( settings.
dpi() / 25.4 );
 
  635    tempRenderContext->setRendererScale( settings.
mapScale() );
 
  639    tempRenderContext->setForceVectorOutput( 
true );
 
  640    tempRenderContext->setPainter( ctx ? ctx->
painter : 
nullptr );
 
  645    tempRenderContext->setExpressionContext( expContext );
 
  646    context = tempRenderContext.get();
 
  652  double height = desiredHeight;
 
  653  double width = desiredWidth;
 
  656  double widthOffset = 0;
 
  657  double heightOffset = 0;
 
  664    const double size = markerSymbol->size( *context ) / context->
scaleFactor();
 
  670  if ( minMaxSizeSymbol )
 
  672    s = minMaxSizeSymbol.get();
 
  677    if ( width < desiredWidth )
 
  679      widthOffset = ( desiredWidth - width ) / 2.0;
 
  681    if ( height < desiredHeight )
 
  683      heightOffset = ( desiredHeight - height ) / 2.0;
 
  688    const double currentYCoord = ctx->
top + ( itemHeight - desiredHeight ) / 2;
 
  696      opacity = 
static_cast<int >( std::round( 255 * layer->opacity() ) );
 
  705        p->translate( ctx->
columnLeft + widthOffset, currentYCoord + heightOffset );
 
  708        p->translate( ctx->
columnRight - widthOffset - width, currentYCoord + heightOffset );
 
  712    p->scale( 1.0 / dotsPerMM, 1.0 / dotsPerMM );
 
  717    if ( opacity != 255 && useAdvancedEffects )
 
  723      const QSize symbolSize( 
static_cast< int >( std::round( width * dotsPerMM ) ), 
static_cast<int >( std::round( height * dotsPerMM ) ) );
 
  724      const QSize tempImageSize( symbolSize.width() + maxBleed * 2, symbolSize.height() + maxBleed * 2 );
 
  725      QImage tempImage = QImage( tempImageSize, QImage::Format_ARGB32 );
 
  726      tempImage.fill( Qt::transparent );
 
  727      QPainter imagePainter( &tempImage );
 
  731      imagePainter.translate( maxBleed, maxBleed );
 
  733      imagePainter.translate( -maxBleed, -maxBleed );
 
  736      imagePainter.setCompositionMode( QPainter::CompositionMode_DestinationIn );
 
  737      imagePainter.fillRect( tempImage.rect(), QColor( 0, 0, 0, opacity ) );
 
  740      p->drawImage( -maxBleed, -maxBleed, tempImage );
 
  744      s->
drawPreviewIcon( p, QSize( 
static_cast< int >( std::round( width * dotsPerMM ) ), 
static_cast< int >( std::round( height * dotsPerMM ) ) ), context, 
false, 
nullptr, &
patchShape );
 
  747    if ( !mTextOnSymbolLabel.isEmpty() )
 
  749      bool isNullSize = 
false;
 
  750      const QFontMetricsF fm( mTextOnSymbolTextFormat.
scaledFont( *context, 1.0, &isNullSize ) );
 
  753        const qreal yBaselineVCenter = ( height * dotsPerMM + fm.ascent() - fm.descent() ) / 2;
 
  755                                   QStringList() << mTextOnSymbolLabel, *context, mTextOnSymbolTextFormat );
 
  760  return QSizeF( std::max( width + 2 * widthOffset, 
static_cast< double >( desiredWidth ) ),
 
  761                 std::max( height + 2 * heightOffset, 
static_cast< double >( desiredHeight ) ) );
 
  766  const QgsSymbol *s = mCustomSymbol ? mCustomSymbol.get() : mItem.
symbol();
 
  769    return QJsonObject();
 
  791  QImage img( pix.toImage().convertToFormat( QImage::Format_ARGB32_Premultiplied ) );
 
  795    opacity = ( 255 * layer->opacity() );
 
  797  if ( opacity != 255 )
 
  800    painter.begin( &img );
 
  801    painter.setCompositionMode( QPainter::CompositionMode_DestinationIn );
 
  802    painter.fillRect( pix.rect(), QColor( 0, 0, 0, opacity ) );
 
  806  QByteArray byteArray;
 
  807  QBuffer buffer( &byteArray );
 
  808  img.save( &buffer, 
"PNG" );
 
  809  const QString base64 = QString::fromLatin1( byteArray.toBase64().data() );
 
  812  json[ QStringLiteral( 
"icon" ) ] = base64;
 
  815    json[ QStringLiteral( 
"scaleMaxDenom" ) ] = mItem.
scaleMaxDenom();
 
  819    json[ QStringLiteral( 
"scaleMinDenom" ) ] = mItem.
scaleMinDenom();
 
  834  if ( mSymbolUsesMapUnits )
 
  842void QgsSymbolLegendNode::updateLabel()
 
  851  if ( showFeatureCount && vl )
 
  857    mLabel += QStringLiteral( 
" [%1%2]" ).arg(
 
  858                estimatedCount ? QStringLiteral( 
"≈" ) : QString(),
 
  859                count != -1 ? QLocale().toString( count ) : tr( 
"N/A" ) );
 
  879    if ( label.isEmpty() )
 
  883      else if ( mLabel.contains( 
"[%" ) )
 
  895      else if ( label.contains( 
"[%" ) )
 
  930  if ( role == Qt::DisplayRole || role == Qt::EditRole )
 
  932  else if ( role == Qt::DecorationRole )
 
  953  if ( role == Qt::DecorationRole )
 
  955    return QPixmap::fromImage( mImage );
 
  957  else if ( role == Qt::SizeHintRole )
 
  959    return mImage.size();
 
  970  Q_UNUSED( itemHeight )
 
  976    const double imgWidth = settings.
wmsLegendSize().width() * scaleFactor;
 
  977    const double imgHeight = settings.
wmsLegendSize().height() * scaleFactor;
 
  979    const QImage scaledImg = mImage.scaled( QSizeF( imgWidth, imgHeight ).toSize(), Qt::KeepAspectRatio, Qt::SmoothTransformation );
 
  984        ctx->
painter->drawImage( QPointF( ctx->
columnLeft * scaleFactor, ctx->
top * scaleFactor ), scaledImg );
 
  988        ctx->
painter->drawImage( QPointF( ctx->
columnRight * scaleFactor - imgWidth, ctx->
top * scaleFactor ), scaledImg );
 
  997  QByteArray byteArray;
 
  998  QBuffer buffer( &byteArray );
 
  999  mImage.save( &buffer, 
"PNG" );
 
 1000  const QString base64 = QString::fromLatin1( byteArray.toBase64().data() );
 
 1003  json[ QStringLiteral( 
"icon" ) ] = base64;
 
 1013  , mCheckable( isCheckable )
 
 1014  , mRuleKey( ruleKey )
 
 1021    return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
 
 1023    return Qt::ItemIsEnabled;
 
 1030    case Qt::DecorationRole:
 
 1035      return QIcon( pix );
 
 1038    case Qt::DisplayRole:
 
 1048    case Qt::CheckStateRole:
 
 1055        if ( !pclayer->renderer() )
 
 1058        return pclayer->renderer()->legendItemChecked( mRuleKey ) ? Qt::Checked : Qt::Unchecked;
 
 1071  if ( role != Qt::CheckStateRole )
 
 1079    if ( !pclayer->renderer() )
 
 1082    pclayer->renderer()->checkLegendItem( mRuleKey, value == Qt::Checked );
 
 1085    pclayer->emitStyleChanged();
 
 1087    pclayer->triggerRepaint();
 
 1105      if ( ctx->
patchSize.width() < size.width() )
 
 1106        offsetX = ( size.width() - ctx->
patchSize.width() ) / 2.0;
 
 1107      size.setWidth( ctx->
patchSize.width() );
 
 1111      size.setHeight( ctx->
patchSize.height() );
 
 1117    QColor itemColor = mColor;
 
 1121        itemColor.setAlpha( rasterRenderer->opacity() * 255.0 );
 
 1123    ctx->
painter->setBrush( itemColor );
 
 1130      pen.setJoinStyle( Qt::MiterJoin );
 
 1135      ctx->
painter->setPen( Qt::NoPen );
 
 1142        ctx->
painter->drawRect( QRectF( ctx->
columnLeft + offsetX, ctx->
top + ( itemHeight - size.height() ) / 2,
 
 1143                                        size.width(), size.height() ) );
 
 1146      case Qt::AlignRight:
 
 1147        ctx->
painter->drawRect( QRectF( ctx->
columnRight - size.width() - offsetX, ctx->
top + ( itemHeight - size.height() ) / 2,
 
 1148                                        size.width(), size.height() ) );
 
 1157  QImage img = QImage( settings.
symbolSize().toSize(), QImage::Format_ARGB32 );
 
 1158  img.fill( Qt::transparent );
 
 1160  QPainter painter( &img );
 
 1161  painter.setRenderHint( QPainter::Antialiasing );
 
 1163  QColor itemColor = mColor;
 
 1167      itemColor.setAlpha( rasterRenderer->opacity() * 255.0 );
 
 1169  painter.setBrush( itemColor );
 
 1176    pen.setJoinStyle( Qt::MiterJoin );
 
 1177    painter.setPen( pen );
 
 1181    painter.setPen( Qt::NoPen );
 
 1184  painter.drawRect( QRectF( 0, 0, settings.
symbolSize().width(), settings.
symbolSize().height() ) );
 
 1186  QByteArray byteArray;
 
 1187  QBuffer buffer( &byteArray );
 
 1188  img.save( &buffer, 
"PNG" );
 
 1189  const QString base64 = QString::fromLatin1( byteArray.toBase64().data() );
 
 1192  json[ QStringLiteral( 
"icon" ) ] = base64;
 
 1206QImage QgsWmsLegendNode::getLegendGraphic()
 const 
 1208  if ( ! mValid && ! mFetcher )
 
 1215    if ( layer && layer->
isValid() )
 
 1226      Q_ASSERT( ! mFetcher );
 
 1238      QgsDebugMsg( tr( 
"Failed to download legend graphics: layer is not valid." ) );
 
 1247  if ( role == Qt::DecorationRole )
 
 1249    return QPixmap::fromImage( getLegendGraphic() );
 
 1251  else if ( role == Qt::SizeHintRole )
 
 1253    return getLegendGraphic().size();
 
 1264  Q_UNUSED( itemHeight )
 
 1266  const QImage image = getLegendGraphic();
 
 1268  double px2mm = 1000. / image.dotsPerMeterX();
 
 1269  double mmWidth = image.width() * px2mm;
 
 1270  double mmHeight = image.height() * px2mm;
 
 1272  QSize targetSize = QSize( mmWidth, mmHeight );
 
 1275    double targetHeight = mmHeight * settings.
wmsLegendSize().width() / mmWidth;
 
 1276    targetSize = QSize( settings.
wmsLegendSize().width(), targetHeight );
 
 1280    double targetWidth = mmWidth * settings.
wmsLegendSize().height() / mmHeight;
 
 1281    targetSize = QSize( targetWidth, settings.
wmsLegendSize().height() );
 
 1286    QImage smoothImage = image.scaled( targetSize / px2mm, Qt::KeepAspectRatio, Qt::SmoothTransformation );
 
 1295                                         targetSize.height() ),
 
 1297                                 QRectF( QPointF( 0, 0 ), smoothImage.size() ) );
 
 1300      case Qt::AlignRight:
 
 1304                                         targetSize.height() ),
 
 1306                                 QRectF( QPointF( 0, 0 ), smoothImage.size() ) );
 
 1315  QByteArray byteArray;
 
 1316  QBuffer buffer( &byteArray );
 
 1317  mImage.save( &buffer, 
"PNG" );
 
 1318  const QString base64 = QString::fromLatin1( byteArray.toBase64().data() );
 
 1321  json[ QStringLiteral( 
"icon" ) ] = base64;
 
 1325QImage QgsWmsLegendNode::renderMessage( 
const QString &msg )
 const 
 1327  const int fontHeight = 10;
 
 1328  const int margin = fontHeight / 2;
 
 1329  const int nlines = 1;
 
 1331  const int w = 512, h = fontHeight * nlines + margin * ( nlines + 1 );
 
 1332  QImage image( w, h, QImage::Format_ARGB32_Premultiplied );
 
 1334  painter.begin( &image );
 
 1335  painter.setPen( QColor( 255, 0, 0 ) );
 
 1336  painter.setFont( QFont( QStringLiteral( 
"Chicago" ), fontHeight ) );
 
 1337  painter.fillRect( 0, 0, w, h, QColor( 255, 255, 255 ) );
 
 1338  painter.drawText( 0, margin + fontHeight, msg );
 
 1345void QgsWmsLegendNode::getLegendGraphicProgress( qint64 cur, qint64 tot )
 
 1347  const QString msg = tot > 0 ? tr( 
"Downloading: %1% (%2)" ).arg( 
static_cast< int >( std::round( 100 * cur / tot ) ) ).arg( 
QgsFileUtils::representFileSize( tot ) )
 
 1349  mImage = renderMessage( msg );
 
 1353void QgsWmsLegendNode::getLegendGraphicErrored( 
const QString & )
 
 1366void QgsWmsLegendNode::getLegendGraphicFinished( 
const QImage &image )
 
 1371  if ( ! image.isNull() )
 
 1373    if ( image != mImage )
 
 1406  if ( role == Qt::DecorationRole )
 
 1409    return QPixmap::fromImage( mImage );
 
 1411  else if ( role == Qt::SizeHintRole )
 
 1414    return mImage.size();
 
 1427  std::unique_ptr< QgsRenderContext > tempRenderContext;
 
 1432    tempRenderContext = std::make_unique< QgsRenderContext >();
 
 1435    tempRenderContext->setScaleFactor( settings.
dpi() / 25.4 );
 
 1436    tempRenderContext->setRendererScale( settings.
mapScale() );
 
 1438    tempRenderContext->setMapToPixel( 
QgsMapToPixel( 1 / ( settings.
mmPerMapUnit() * tempRenderContext->scaleFactor() ) ) );
 
 1439    tempRenderContext->setForceVectorOutput( 
true );
 
 1440    tempRenderContext->setPainter( ctx ? ctx->
painter : 
nullptr );
 
 1447    tempRenderContext->setExpressionContext( expContext );
 
 1448    context = tempRenderContext.get();
 
 1465  double labelXOffset;
 
 1469    context->
painter()->restore();
 
 1478void QgsDataDefinedSizeLegendNode::cacheImage()
 const 
 1480  if ( mImage.isNull() )
 
 1486      Q_ASSERT( context ); 
 
 1487      context->setScaleFactor( 96 / 25.4 );
 
 1503  if ( role == Qt::DisplayRole )
 
 1507  if ( role == Qt::DecorationRole )
 
 1517  Q_UNUSED( itemHeight );
 
 1520    return QSizeF( 0, 0 );
 
 1524  if ( renderContext )
 
 1529  return QSizeF( 0, 0 );
 
 1534  const QStringList textLines( mLabelSettings.
legendString() );
 
 1537  double textWidth, textHeight;
 
 1538  textWidthHeight( textWidth, textHeight, ctx, textFormat, textLines );
 
 1541  const QPointF textPos( renderContext.
scaleFactor() * ( xOffset + settings.
symbolSize().width() / 2.0 - textWidth / 2.0 ), renderContext.
scaleFactor() * ( yOffset + settings.
symbolSize().height() / 2.0 + textHeight / 2.0 ) );
 
 1546  const double symbolWidth = std::max( textWidth, settings.
symbolSize().width() );
 
 1547  const double symbolHeight = std::max( textHeight, settings.
symbolSize().height() );
 
 1548  return QSizeF( symbolWidth, symbolHeight );
 
 1553  Q_UNUSED( settings );
 
 1555  const double mmToPixel = 96.0 / 25.4; 
 
 1557  const QStringList textLines( mLabelSettings.
legendString() );
 
 1562  double textWidth, textHeight;
 
 1563  textWidthHeight( textWidth, textHeight, ctx, textFormat, textLines );
 
 1566  QByteArray byteArray;
 
 1567  QBuffer buffer( &byteArray );
 
 1568  previewPixmap.save( &buffer, 
"PNG" );
 
 1569  const QString base64 = QString::fromLatin1( byteArray.toBase64().data() );
 
 1572  json[ QStringLiteral( 
"icon" ) ] = base64;
 
 1576void QgsVectorLabelLegendNode::textWidthHeight( 
double &width, 
double &height, 
QgsRenderContext &ctx, 
const QgsTextFormat &textFormat, 
const QStringList &textLines )
 const 
@ Point
Text at point of origin layout mode.
 
@ RenderSymbolPreview
The render is for a symbol preview only and map based properties may not be available,...
 
@ LosslessImageRendering
Render images losslessly whenever possible, instead of the default lossy jpeg rendering used for some...
 
@ Antialiasing
Use antialiasing while drawing.
 
@ UseAdvancedEffects
Enable layer opacity and blending effects.
 
QgsDataDefinedSizeLegendNode(QgsLayerTreeLayer *nodeLayer, const QgsDataDefinedSizeLegend &settings, QObject *parent=nullptr)
Construct the node using QgsDataDefinedSizeLegend as definition of the node's appearance.
 
ItemMetrics draw(const QgsLegendSettings &settings, ItemContext *ctx) override
Entry point called from QgsLegendRenderer to do the rendering.
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
~QgsDataDefinedSizeLegendNode() override
 
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
 
void setFont(const QFont &font)
Sets font used for rendering of labels - only valid for collapsed legend.
 
void setTextColor(const QColor &color)
Sets text color for rendering of labels - only valid for collapsed legend.
 
QImage collapsedLegendImage(QgsRenderContext &context, const QColor &backgroundColor=Qt::transparent, double paddingMM=1) const
Returns output image that would be shown in the legend. Returns invalid image if legend is not config...
 
void drawCollapsedLegend(QgsRenderContext &context, QSizeF *outputSize SIP_OUT=nullptr, double *labelXOffset SIP_OUT=nullptr) const
Draw the legend if using LegendOneNodeForAll and optionally output size of the legend and x offset of...
 
virtual QString dataSourceUri(bool expandAuthConfig=false) const
Gets the data source specification.
 
Class for storing the component parts of a RDBMS data source URI (e.g.
 
bool useEstimatedMetadata() const
Returns true if estimated metadata should be used for the connection.
 
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.
 
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
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.
 
static QString replaceExpressionText(const QString &action, const QgsExpressionContext *context, const QgsDistanceArea *distanceArea=nullptr)
This function replaces each expression between [% and %] in the string with the result of its evaluat...
 
virtual void setLegendSymbolItem(const QString &key, QgsSymbol *symbol)
Sets the symbol to be used for a legend symbol item.
 
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
item in symbology was checked
 
static QString representFileSize(qint64 bytes)
Returns the human size from bytes.
 
void progress(qint64 received, qint64 total)
Emitted to report progress.
 
void error(const QString &msg)
Emitted when an error occurs.
 
void finish(const QImage &legend)
Emitted when the download completes.
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
QgsImageLegendNode(QgsLayerTreeLayer *nodeLayer, const QImage &img, QObject *parent=nullptr)
Constructor for QgsImageLegendNode.
 
QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const override
Draws symbol on the left side of the item.
 
QJsonObject exportSymbolToJson(const QgsLegendSettings &settings, const QgsRenderContext &context) const override
Adds a symbol in base64 string within a JSON object with the key "icon".
 
static QRect nonTransparentImageRect(const QImage &image, QSize minSize=QSize(), bool center=false)
Calculates the non-transparent region of an image.
 
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.
 
QSizeF patchSize() const
Returns the user (overridden) size for the legend node.
 
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
 
virtual QVariant data(int role) const =0
Returns data associated with the item. Must be implemented in derived class.
 
QJsonObject exportToJson(const QgsLegendSettings &settings, const QgsRenderContext &context)
Entry point called from QgsLegendRenderer to do the rendering in a JSON object.
 
@ SimpleLegend
Simple label with icon legend node type.
 
@ RasterSymbolLegend
Raster symbol legend node type.
 
@ ImageLegend
Raster image legend node type.
 
@ DataDefinedSizeLegend
Marker symbol legend node type.
 
@ WmsLegend
WMS legend node type.
 
@ SymbolLegend
Vector symbol legend node type.
 
void checkAllItems()
Checks all checkable items belonging to the same layer as this node.
 
void uncheckAllItems()
Unchecks all checkable items belonging to the same layer as this node.
 
QgsLayerTreeLayer * mLayerNode
 
QgsLayerTreeModelLegendNode(QgsLayerTreeLayer *nodeL, QObject *parent=nullptr)
Construct the node with pointer to its parent layer node.
 
virtual void setUserPatchSize(QSizeF size)
Sets the user (overridden) size for the legend node.
 
@ ParentRuleKeyRole
Rule key of the parent legend node - for legends with tree hierarchy (QString). Added in 2....
 
@ RuleKeyRole
Rule key of the node (QString)
 
@ NodeTypeRole
Type of node. Added in 3.16.
 
void sizeChanged()
Emitted when the size of this node changes.
 
void dataChanged()
Emitted on internal data change so the layer tree model can forward the signal to views.
 
QgsRenderContext * createTemporaryRenderContext() const
Returns a temporary context or nullptr if legendMapViewData are not valid.
 
virtual QJsonObject exportSymbolToJson(const QgsLegendSettings &settings, const QgsRenderContext &context) const
Adds a symbol in base64 string within a JSON object with the key "icon".
 
QgsLayerTreeModel * model() const
Returns pointer to model owning this legend node.
 
void toggleAllItems()
Toggle all checkable items belonging to the same layer as this node.
 
QgsLegendPatchShape mPatchShape
 
virtual QSizeF userPatchSize() const
Returns the user (overridden) size for the legend node.
 
virtual ItemMetrics draw(const QgsLegendSettings &settings, ItemContext *ctx)
Entry point called from QgsLegendRenderer to do the rendering.
 
virtual Qt::ItemFlags flags() const
Returns item flags associated with the item. Default implementation returns Qt::ItemIsEnabled.
 
QgsLayerTreeLayer * layerNode() const
Returns pointer to the parent layer node.
 
virtual QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const
Draws symbol on the left side of the item.
 
virtual void setEmbeddedInParent(bool embedded)
 
virtual bool setData(const QVariant &value, int role)
Sets some data associated with the item. Default implementation does nothing and returns false.
 
virtual QSizeF drawSymbolText(const QgsLegendSettings &settings, ItemContext *ctx, QSizeF symbolSize) const
Draws label on the right side of the item.
 
The QgsLayerTreeModel class is model implementation for Qt item views framework.
 
static int scaleIconSize(int standardSize)
Scales an layer tree model icon size to compensate for display pixel density, making the icon size hi...
 
const QgsMapSettings * legendFilterMapSettings() const
Returns the current map settings used for the current legend filter (or nullptr if none is enabled)
 
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.
 
Represents a patch shape for use in map legends.
 
The QgsLegendSettings class stores the appearance and layout settings for legend drawing with QgsLege...
 
void drawText(QPainter *p, double x, double y, const QString &text, const QFont &font) const
Draws Text.
 
QgsLegendStyle style(QgsLegendStyle::Style s) const
Returns the style for a legend component.
 
bool drawRasterStroke() const
Returns 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.
 
double fontDescentMillimeters(const QFont &font) const
Returns the font descent in Millimeters (considers upscaling and downscaling with FONT_WORKAROUND_SCA...
 
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).
 
QColor rasterStrokeColor() const
Returns the stroke color for the stroke drawn around raster symbol items.
 
double textWidthMillimeters(const QFont &font, const QString &text) const
Returns the font width in millimeters (considers upscaling and downscaling with FONT_WORKAROUND_SCALE...
 
Q_DECL_DEPRECATED bool useAdvancedEffects() const
 
double fontHeightCharacterMM(const QFont &font, QChar c) const
Returns the font height of a character in millimeters.
 
Q_DECL_DEPRECATED int dpi() const
 
double lineSpacing() const
Returns the line spacing to use between lines of legend text.
 
Q_DECL_DEPRECATED double mmPerMapUnit() const
 
QStringList evaluateItemText(const QString &text, const QgsExpressionContext &context) const
Splits a string using the wrap char taking into account handling empty wrap char which means no wrapp...
 
Qt::AlignmentFlag symbolAlignment() const
Returns the alignment for placement of legend symbols.
 
Q_DECL_DEPRECATED double mapScale() const
Returns the legend map scale.
 
double margin(Side side)
Returns the margin (in mm) for the specified side of the component.
 
Qt::Alignment alignment() const
Returns the alignment for the legend component.
 
QFont font() const
Returns the font used for rendering this legend component.
 
@ Symbol
Symbol icon (excluding label)
 
@ SymbolLabel
Symbol label (excluding icon)
 
The class stores information about one class/rule of a vector layer renderer in a unified way that ca...
 
QString parentRuleKey() const
Key of the parent legend node.
 
int scaleMaxDenom() const
Max scale denominator of the scale range.
 
void setSymbol(QgsSymbol *s)
Sets the symbol of the item.
 
int scaleMinDenom() const
Min scale denominator of the scale range.
 
QgsSymbol * symbol() const
Returns associated symbol. May be nullptr.
 
QString ruleKey() const
Returns unique identifier of the rule for identification of the item within renderer.
 
bool isCheckable() const
Returns whether the item is user-checkable - whether renderer supports enabling/disabling it.
 
QString label() const
Returns text label.
 
Base class for all map layer types.
 
void triggerRepaint(bool deferredUpdate=false)
Will advise the map canvas (and any other interested party) that this layer requires to be repainted.
 
void emitStyleChanged()
Triggers an emission of the styleChanged() signal.
 
The QgsMapSettings class contains configuration for rendering of the map.
 
Perform transforms between map coordinates and device coordinates.
 
A marker symbol type, for rendering Point and MultiPoint geometries.
 
Contains settings for how a map layer will be labeled.
 
QString legendString() const
legendString
 
static QPixmap labelSettingsPreviewPixmap(const QgsPalLayerSettings &settings, QSize size, const QString &previewText=QString(), int padding=0)
Returns a pixmap preview for label settings.
 
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
 
Represents a map layer supporting display of point clouds.
 
Base class for raster data providers.
 
virtual QgsImageFetcher * getLegendGraphicFetcher(const QgsMapSettings *mapSettings)
Returns a new image downloader for the raster legend.
 
Represents a raster layer.
 
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
 
Raster renderer pipe that applies colors to a raster.
 
Qt::ItemFlags flags() const override
Returns item flags associated with the item. Default implementation returns Qt::ItemIsEnabled.
 
bool setData(const QVariant &value, int role) override
Sets some data associated with the item. Default implementation does nothing and returns false.
 
QJsonObject exportSymbolToJson(const QgsLegendSettings &settings, const QgsRenderContext &context) const override
Adds a symbol in base64 string within a JSON object with the key "icon".
 
QgsRasterSymbolLegendNode(QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent=nullptr, bool isCheckable=false, const QString &ruleKey=QString())
Constructor for QgsRasterSymbolLegendNode.
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const override
Draws symbol on the left side of the item.
 
Contains information about the context of a rendering operation.
 
void setForceVectorOutput(bool force)
Sets whether rendering operations should use vector operations instead of any faster raster shortcuts...
 
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
 
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
 
QPainter * painter()
Returns the destination QPainter for the render operation.
 
void setPainterFlagsUsingContext(QPainter *painter=nullptr) const
Sets relevant flags on a destination painter, using the flags and settings currently defined for the ...
 
QgsExpressionContext & expressionContext()
Gets the expression context.
 
void setFlag(Qgis::RenderContextFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
 
void setMapToPixel(const QgsMapToPixel &mtp)
Sets the context's map to pixel transform, which transforms between map coordinates and device coordi...
 
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
 
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
 
void setRendererScale(double scale)
Sets the renderer map scale.
 
Qgis::RenderContextFlags flags() const
Returns combination of flags used for rendering.
 
Scoped object for saving and restoring a QPainter object's state.
 
Scoped object for temporary scaling of a QgsRenderContext for pixel based rendering.
 
This class is a composition of two QSettings instances:
 
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
QgsSimpleLegendNode(QgsLayerTreeLayer *nodeLayer, const QString &label, const QIcon &icon=QIcon(), QObject *parent=nullptr, const QString &key=QString())
Constructor for QgsSimpleLegendNode.
 
static QPixmap symbolPreviewPixmap(const QgsSymbol *symbol, QSize size, int padding=0, QgsRenderContext *customContext=nullptr, bool selected=false, const QgsExpressionContext *expressionContext=nullptr, const QgsLegendPatchShape *shape=nullptr)
Returns a pixmap preview for a color ramp.
 
static QgsSymbol * restrictedSizeSymbol(const QgsSymbol *s, double minSize, double maxSize, QgsRenderContext *context, double &width, double &height, bool *ok=nullptr)
Creates a new symbol with size restricted to min/max size if original size is out of min/max range.
 
static double estimateMaxSymbolBleed(QgsSymbol *symbol, const QgsRenderContext &context)
Returns the maximum estimated bleed for the symbol.
 
static double MAXIMUM_SIZE
 
QString evaluateLabel(const QgsExpressionContext &context=QgsExpressionContext(), const QString &label=QString())
Evaluates and returns the text label of the current node.
 
const QgsSymbol * symbol() const
Returns the symbol used by the legend node.
 
void setPatchShape(const QgsLegendPatchShape &shape)
Sets the symbol patch shape to use when rendering the legend node symbol.
 
QgsSymbolLegendNode(QgsLayerTreeLayer *nodeLayer, const QgsLegendSymbolItem &item, QObject *parent=nullptr)
Constructor for QgsSymbolLegendNode.
 
QgsLegendPatchShape patchShape() const
Returns the symbol patch shape to use when rendering the legend node symbol.
 
QSize minimumIconSize() const
Calculates the minimum icon size to prevent cropping.
 
QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const override
Draws symbol on the left side of the item.
 
void invalidateMapBasedData() override
Notification from model that information from associated map view has changed.
 
bool setData(const QVariant &value, int role) override
Sets some data associated with the item. Default implementation does nothing and returns false.
 
Qt::ItemFlags flags() const override
Returns item flags associated with the item. Default implementation returns Qt::ItemIsEnabled.
 
void setCustomSymbol(QgsSymbol *symbol)
Sets the node's custom symbol.
 
void setEmbeddedInParent(bool embedded) override
 
QgsSymbol * customSymbol() const
Returns the node's custom symbol.
 
QString symbolLabel() const
Label of the symbol, user defined label will be used, otherwise will default to the label made by QGI...
 
void setSymbol(QgsSymbol *symbol)
Sets the symbol to be used by the legend node.
 
static double MINIMUM_SIZE
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
QJsonObject exportSymbolToJson(const QgsLegendSettings &settings, const QgsRenderContext &context) const override
Adds a symbol in base64 string within a JSON object with the key "icon".
 
Abstract base class for all rendered symbols.
 
void drawPreviewIcon(QPainter *painter, QSize size, QgsRenderContext *customContext=nullptr, bool selected=false, const QgsExpressionContext *expressionContext=nullptr, const QgsLegendPatchShape *patchShape=nullptr)
Draws an icon of the symbol that occupies an area given by size using the specified painter.
 
bool usesMapUnits() const
Returns true if the symbol has any components which use map unit based sizes.
 
Qgis::SymbolType type() const
Returns the symbol's type.
 
Container for all settings relating to text rendering.
 
QFont scaledFont(const QgsRenderContext &context, double scaleFactor=1.0, bool *isZeroSize=nullptr) const
Returns a font with the size scaled to match the format's size settings (including units and map unit...
 
static double textWidth(const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines, QFontMetricsF *fontMetrics=nullptr)
Returns the width of a text based on a given format.
 
static QFontMetricsF fontMetrics(QgsRenderContext &context, const QgsTextFormat &format, double scaleFactor=1.0)
Returns the font metrics for the given text format, when rendered in the specified render context.
 
static double textHeight(const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines, Qgis::TextLayoutMode mode=Qgis::TextLayoutMode::Point, QFontMetricsF *fontMetrics=nullptr, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags(), double maxLineWidth=0)
Returns the height of a text based on a given format.
 
static void drawText(const QRectF &rect, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines, QgsRenderContext &context, const QgsTextFormat &format, bool drawAsOutlines=true, Qgis::TextVerticalAlignment vAlignment=Qgis::TextVerticalAlignment::Top, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags())
Draws text within a rectangle using the specified settings.
 
static bool isNull(const QVariant &variant)
Returns true if the specified variant should be considered a NULL value.
 
QgsVectorLabelLegendNode(QgsLayerTreeLayer *nodeLayer, const QgsPalLayerSettings &labelSettings, QObject *parent=nullptr)
QgsVectorLabelLegendNode.
 
QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const override
drawSymbol
 
QJsonObject exportSymbolToJson(const QgsLegendSettings &settings, const QgsRenderContext &context) const override
exportSymbolToJson
 
~QgsVectorLabelLegendNode() override
 
QVariant data(int role) const override
data Returns data associated with the item
 
Represents a vector layer which manages a vector based data sets.
 
QgsExpressionContextScope * createExpressionContextScope() const FINAL
This method needs to be reimplemented in all classes which implement this interface and return an exp...
 
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.
 
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
 
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
 
QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const override
Draws symbol on the left side of the item.
 
void invalidateMapBasedData() override
Notification from model that information from associated map view has changed.
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
~QgsWmsLegendNode() override
 
QgsWmsLegendNode(QgsLayerTreeLayer *nodeLayer, QObject *parent=nullptr)
Constructor for QgsWmsLegendNode.
 
QJsonObject exportSymbolToJson(const QgsLegendSettings &settings, const QgsRenderContext &context) const override
Adds a symbol in base64 string within a JSON object with the key "icon".
 
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
 
#define Q_NOWARN_DEPRECATED_POP
 
#define Q_NOWARN_DEPRECATED_PUSH
 
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
 
QList< QgsLegendSymbolItem > QgsLegendSymbolList
 
Single variable definition for use within a QgsExpressionContextScope.
 
QPainter * painter
Painter.
 
double top
Top y-position of legend item.
 
QgsLegendPatchShape patchShape
The patch shape to render for the node.
 
double maxSiblingSymbolWidth
Largest symbol width, considering all other sibling legend components associated with the current com...
 
QSizeF patchSize
Symbol patch size to render for the node.
 
double columnLeft
Left side of current legend column.
 
double columnRight
Right side of current legend column.
 
Q_NOWARN_DEPRECATED_POP QgsRenderContext * context
Render context, if available.