41 #include <QDomDocument> 
   42 #include <QDomElement> 
   43 #include <QFontMetricsF> 
   85     std::unique_ptr< QgsLineSymbol > sym( mSettings.
lineSymbol()->
clone() );
 
   98     std::unique_ptr< QgsFillSymbol > sym( mSettings.
fillSymbol()->
clone() );
 
  115   mStyle->draw( context.
renderContext(), mSettings, createScaleContext() );
 
  137   refreshSegmentMillimeters();
 
  149   refreshSegmentMillimeters();
 
  161   refreshSegmentMillimeters();
 
  173   refreshSegmentMillimeters();
 
  263   disconnectCurrentMap();
 
  273   connect( mMap, &QObject::destroyed, 
this, &QgsLayoutItemScaleBar::disconnectCurrentMap );
 
  275   refreshSegmentMillimeters();
 
  279 void QgsLayoutItemScaleBar::disconnectCurrentMap()
 
  287   disconnect( mMap, &QObject::destroyed, 
this, &QgsLayoutItemScaleBar::disconnectCurrentMap );
 
  295   bool forceUpdate = 
false;
 
  322 void QgsLayoutItemScaleBar::refreshSegmentMillimeters()
 
  327     const QRectF composerItemRect = mMap->rect();
 
  334         mSegmentMillimeters = composerItemRect.width() / mapWidth() * mSettings.
unitsPerSegment();
 
  342           mSegmentMillimeters = 0;
 
  348           const double minUnitsPerSeg = ( mSettings.
minimumBarWidth() * mapWidth() ) / ( nSegments * composerItemRect.width() );
 
  349           const double maxUnitsPerSeg = ( mSettings.
maximumBarWidth() * mapWidth() ) / ( nSegments * composerItemRect.width() );
 
  351           mSegmentMillimeters = composerItemRect.width() / mapWidth() * mSettings.
unitsPerSegment();
 
  359 double QgsLayoutItemScaleBar::mapWidth()
 const 
  369     return mapExtent.
width();
 
  388   scaleContext.
size = rect().size();
 
  390   scaleContext.
scale = mMap ? mMap->
scale() : 1.0;
 
  391   scaleContext.
flags = mStyle->flags();
 
  419   refreshSegmentMillimeters();
 
  469   mStyle = std::make_unique< QgsSingleBoxScaleBarRenderer >();
 
  476   const QString defaultFontString = settings.
value( QStringLiteral( 
"LayoutDesigner/defaultFont" ), QVariant(), 
QgsSettings::Gui ).toString();
 
  479   if ( !defaultFontString.isEmpty() )
 
  481     f.setFamily( defaultFontString );
 
  515   const double widthInSelectedUnits = mapWidth();
 
  516   const double initialUnitsPerSegment = widthInSelectedUnits / 10.0; 
 
  521       if ( initialUnitsPerSegment > 1000.0 )
 
  529       if ( initialUnitsPerSegment > 5419.95 )
 
  547     double upperMagnitudeMultiplier = 1.0;
 
  548     const double widthInSelectedUnits = mapWidth();
 
  549     const double initialUnitsPerSegment = widthInSelectedUnits / 10.0; 
 
  553     upperMagnitudeMultiplier = 1;
 
  555     const double segmentWidth = initialUnitsPerSegment / upperMagnitudeMultiplier;
 
  556     const int segmentMagnitude = std::floor( std::log10( segmentWidth ) );
 
  557     double unitsPerSegment = upperMagnitudeMultiplier * ( std::pow( 10.0, segmentMagnitude ) );
 
  558     const double multiplier = std::floor( ( widthInSelectedUnits / ( 
unitsPerSegment * 10.0 ) ) / 2.5 ) * 2.5;
 
  560     if ( multiplier > 0 )
 
  571   refreshSegmentMillimeters();
 
  582   const double widthMM = mStyle->calculateBoxSize( context, mSettings, createScaleContext() ).width();
 
  593   if ( mStyle && mStyle->id() != QLatin1String( 
"Numeric" ) )
 
  597   QgsLayoutItem::update();
 
  600 void QgsLayoutItemScaleBar::updateScale()
 
  602   refreshSegmentMillimeters();
 
  604   if ( mStyle && mStyle->id() != QLatin1String( 
"Numeric" ) )
 
  617     mStyle = std::move( renderer );
 
  731   return mSettings.
pen();
 
  738   return mSettings.
brush();
 
  745   return mSettings.
brush2();
 
  751   composerScaleBarElem.setAttribute( QStringLiteral( 
"height" ), QString::number( mSettings.
height() ) );
 
  752   composerScaleBarElem.setAttribute( QStringLiteral( 
"labelBarSpace" ), QString::number( mSettings.
labelBarSpace() ) );
 
  753   composerScaleBarElem.setAttribute( QStringLiteral( 
"boxContentSpace" ), QString::number( mSettings.
boxContentSpace() ) );
 
  754   composerScaleBarElem.setAttribute( QStringLiteral( 
"numSegments" ), mSettings.
numberOfSegments() );
 
  755   composerScaleBarElem.setAttribute( QStringLiteral( 
"numSegmentsLeft" ), mSettings.
numberOfSegmentsLeft() );
 
  756   composerScaleBarElem.setAttribute( QStringLiteral( 
"numSubdivisions" ), mSettings.
numberOfSubdivisions() );
 
  757   composerScaleBarElem.setAttribute( QStringLiteral( 
"subdivisionsHeight" ), mSettings.
subdivisionsHeight() );
 
  758   composerScaleBarElem.setAttribute( QStringLiteral( 
"numUnitsPerSegment" ), QString::number( mSettings.
unitsPerSegment() ) );
 
  759   composerScaleBarElem.setAttribute( QStringLiteral( 
"segmentSizeMode" ), mSettings.
segmentSizeMode() );
 
  760   composerScaleBarElem.setAttribute( QStringLiteral( 
"minBarWidth" ), mSettings.
minimumBarWidth() );
 
  761   composerScaleBarElem.setAttribute( QStringLiteral( 
"maxBarWidth" ), mSettings.
maximumBarWidth() );
 
  762   composerScaleBarElem.setAttribute( QStringLiteral( 
"segmentMillimeters" ), QString::number( mSegmentMillimeters ) );
 
  763   composerScaleBarElem.setAttribute( QStringLiteral( 
"numMapUnitsPerScaleBarUnit" ), QString::number( mSettings.
mapUnitsPerScaleBarUnit() ) );
 
  766   composerScaleBarElem.appendChild( textElem );
 
  770   composerScaleBarElem.setAttribute( QStringLiteral( 
"outlineWidth" ), QString::number( mSettings.
lineWidth() ) );
 
  774   QDomElement strokeColorElem = doc.createElement( QStringLiteral( 
"strokeColor" ) );
 
  775   strokeColorElem.setAttribute( QStringLiteral( 
"red" ), QString::number( mSettings.
lineColor().red() ) );
 
  776   strokeColorElem.setAttribute( QStringLiteral( 
"green" ), QString::number( mSettings.
lineColor().green() ) );
 
  777   strokeColorElem.setAttribute( QStringLiteral( 
"blue" ), QString::number( mSettings.
lineColor().blue() ) );
 
  778   strokeColorElem.setAttribute( QStringLiteral( 
"alpha" ), QString::number( mSettings.
lineColor().alpha() ) );
 
  779   composerScaleBarElem.appendChild( strokeColorElem );
 
  782   composerScaleBarElem.setAttribute( QStringLiteral( 
"unitLabel" ), mSettings.
unitLabel() );
 
  785   QDomElement numericFormatElem = doc.createElement( QStringLiteral( 
"numericFormat" ) );
 
  787   composerScaleBarElem.appendChild( numericFormatElem );
 
  792     composerScaleBarElem.setAttribute( QStringLiteral( 
"style" ), mStyle->id() );
 
  798     composerScaleBarElem.setAttribute( QStringLiteral( 
"mapUuid" ), mMap->
uuid() );
 
  807   QDomElement fillColorElem = doc.createElement( QStringLiteral( 
"fillColor" ) );
 
  808   fillColorElem.setAttribute( QStringLiteral( 
"red" ), QString::number( mSettings.
fillColor().red() ) );
 
  809   fillColorElem.setAttribute( QStringLiteral( 
"green" ), QString::number( mSettings.
fillColor().green() ) );
 
  810   fillColorElem.setAttribute( QStringLiteral( 
"blue" ), QString::number( mSettings.
fillColor().blue() ) );
 
  811   fillColorElem.setAttribute( QStringLiteral( 
"alpha" ), QString::number( mSettings.
fillColor().alpha() ) );
 
  812   composerScaleBarElem.appendChild( fillColorElem );
 
  815   QDomElement fillColor2Elem = doc.createElement( QStringLiteral( 
"fillColor2" ) );
 
  816   fillColor2Elem.setAttribute( QStringLiteral( 
"red" ), QString::number( mSettings.
fillColor2().red() ) );
 
  817   fillColor2Elem.setAttribute( QStringLiteral( 
"green" ), QString::number( mSettings.
fillColor2().green() ) );
 
  818   fillColor2Elem.setAttribute( QStringLiteral( 
"blue" ), QString::number( mSettings.
fillColor2().blue() ) );
 
  819   fillColor2Elem.setAttribute( QStringLiteral( 
"alpha" ), QString::number( mSettings.
fillColor2().alpha() ) );
 
  820   composerScaleBarElem.appendChild( fillColor2Elem );
 
  825   composerScaleBarElem.setAttribute( QStringLiteral( 
"labelVerticalPlacement" ), QString::number( 
static_cast< int >( mSettings.
labelVerticalPlacement() ) ) );
 
  826   composerScaleBarElem.setAttribute( QStringLiteral( 
"labelHorizontalPlacement" ), QString::number( 
static_cast< int >( mSettings.
labelHorizontalPlacement() ) ) );
 
  829   composerScaleBarElem.setAttribute( QStringLiteral( 
"alignment" ), QString::number( 
static_cast< int >( mSettings.
alignment() ) ) );
 
  831   QDomElement 
lineSymbol = doc.createElement( QStringLiteral( 
"lineSymbol" ) );
 
  837   composerScaleBarElem.appendChild( 
lineSymbol );
 
  839   QDomElement divisionSymbol = doc.createElement( QStringLiteral( 
"divisionLineSymbol" ) );
 
  844   divisionSymbol.appendChild( divisionSymbolElem );
 
  845   composerScaleBarElem.appendChild( divisionSymbol );
 
  847   QDomElement subdivisionSymbol = doc.createElement( QStringLiteral( 
"subdivisionLineSymbol" ) );
 
  852   subdivisionSymbol.appendChild( subdivisionSymbolElem );
 
  853   composerScaleBarElem.appendChild( subdivisionSymbol );
 
  855   QDomElement fillSymbol1Elem = doc.createElement( QStringLiteral( 
"fillSymbol1" ) );
 
  860   fillSymbol1Elem.appendChild( symbol1Elem );
 
  861   composerScaleBarElem.appendChild( fillSymbol1Elem );
 
  863   QDomElement fillSymbol2Elem = doc.createElement( QStringLiteral( 
"fillSymbol2" ) );
 
  868   fillSymbol2Elem.appendChild( symbol2Elem );
 
  869   composerScaleBarElem.appendChild( fillSymbol2Elem );
 
  876   mSettings.
setHeight( itemElem.attribute( QStringLiteral( 
"height" ), QStringLiteral( 
"5.0" ) ).toDouble() );
 
  877   mSettings.
setLabelBarSpace( itemElem.attribute( QStringLiteral( 
"labelBarSpace" ), QStringLiteral( 
"3.0" ) ).toDouble() );
 
  878   mSettings.
setBoxContentSpace( itemElem.attribute( QStringLiteral( 
"boxContentSpace" ), QStringLiteral( 
"1.0" ) ).toDouble() );
 
  879   mSettings.
setNumberOfSegments( itemElem.attribute( QStringLiteral( 
"numSegments" ), QStringLiteral( 
"2" ) ).toInt() );
 
  880   mSettings.
setNumberOfSegmentsLeft( itemElem.attribute( QStringLiteral( 
"numSegmentsLeft" ), QStringLiteral( 
"0" ) ).toInt() );
 
  881   mSettings.
setNumberOfSubdivisions( itemElem.attribute( QStringLiteral( 
"numSubdivisions" ), QStringLiteral( 
"1" ) ).toInt() );
 
  882   mSettings.
setSubdivisionsHeight( itemElem.attribute( QStringLiteral( 
"subdivisionsHeight" ), QStringLiteral( 
"1.5" ) ).toDouble() );
 
  883   mSettings.
setUnitsPerSegment( itemElem.attribute( QStringLiteral( 
"numUnitsPerSegment" ), QStringLiteral( 
"1.0" ) ).toDouble() );
 
  885   mSettings.
setMinimumBarWidth( itemElem.attribute( QStringLiteral( 
"minBarWidth" ), QStringLiteral( 
"50" ) ).toDouble() );
 
  886   mSettings.
setMaximumBarWidth( itemElem.attribute( QStringLiteral( 
"maxBarWidth" ), QStringLiteral( 
"150" ) ).toDouble() );
 
  887   mSegmentMillimeters = itemElem.attribute( QStringLiteral( 
"segmentMillimeters" ), QStringLiteral( 
"0.0" ) ).toDouble();
 
  888   mSettings.
setMapUnitsPerScaleBarUnit( itemElem.attribute( QStringLiteral( 
"numMapUnitsPerScaleBarUnit" ), QStringLiteral( 
"1.0" ) ).toDouble() );
 
  890   const QDomElement lineSymbolElem = itemElem.firstChildElement( QStringLiteral( 
"lineSymbol" ) );
 
  891   bool foundLineSymbol = 
false;
 
  892   if ( !lineSymbolElem.isNull() )
 
  894     const QDomElement symbolElem = lineSymbolElem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
  895     std::unique_ptr< QgsLineSymbol > 
lineSymbol( QgsSymbolLayerUtils::loadSymbol<QgsLineSymbol>( symbolElem, context ) );
 
  899       foundLineSymbol = 
true;
 
  902   const QDomElement divisionSymbolElem = itemElem.firstChildElement( QStringLiteral( 
"divisionLineSymbol" ) );
 
  903   if ( !divisionSymbolElem.isNull() )
 
  905     const QDomElement symbolElem = divisionSymbolElem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
  906     std::unique_ptr< QgsLineSymbol > 
lineSymbol( QgsSymbolLayerUtils::loadSymbol<QgsLineSymbol>( symbolElem, context ) );
 
  912   else if ( foundLineSymbol )
 
  916   const QDomElement subdivisionSymbolElem = itemElem.firstChildElement( QStringLiteral( 
"subdivisionLineSymbol" ) );
 
  917   if ( !subdivisionSymbolElem.isNull() )
 
  919     const QDomElement symbolElem = subdivisionSymbolElem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
  920     std::unique_ptr< QgsLineSymbol > 
lineSymbol( QgsSymbolLayerUtils::loadSymbol<QgsLineSymbol>( symbolElem, context ) );
 
  926   else if ( foundLineSymbol )
 
  931   if ( !foundLineSymbol )
 
  934     std::unique_ptr< QgsLineSymbol > 
lineSymbol = std::make_unique< QgsLineSymbol >();
 
  935     std::unique_ptr< QgsSimpleLineSymbolLayer > lineSymbolLayer = std::make_unique< QgsSimpleLineSymbolLayer >();
 
  936     lineSymbolLayer->setWidth( itemElem.attribute( QStringLiteral( 
"outlineWidth" ), QStringLiteral( 
"0.3" ) ).toDouble() );
 
  942     const QDomNodeList strokeColorList = itemElem.elementsByTagName( QStringLiteral( 
"strokeColor" ) );
 
  943     if ( !strokeColorList.isEmpty() )
 
  945       const QDomElement strokeColorElem = strokeColorList.at( 0 ).toElement();
 
  946       bool redOk, greenOk, blueOk, alphaOk;
 
  947       int strokeRed, strokeGreen, strokeBlue, strokeAlpha;
 
  949       strokeRed = strokeColorElem.attribute( QStringLiteral( 
"red" ) ).toDouble( &redOk );
 
  950       strokeGreen = strokeColorElem.attribute( QStringLiteral( 
"green" ) ).toDouble( &greenOk );
 
  951       strokeBlue = strokeColorElem.attribute( QStringLiteral( 
"blue" ) ).toDouble( &blueOk );
 
  952       strokeAlpha = strokeColorElem.attribute( QStringLiteral( 
"alpha" ) ).toDouble( &alphaOk );
 
  954       if ( redOk && greenOk && blueOk && alphaOk )
 
  956         lineSymbolLayer->setColor( QColor( strokeRed, strokeGreen, strokeBlue, strokeAlpha ) );
 
  961       lineSymbolLayer->setColor( QColor( itemElem.attribute( QStringLiteral( 
"penColor" ), QStringLiteral( 
"#000000" ) ) ) );
 
  977   mSettings.
setUnitLabel( itemElem.attribute( QStringLiteral( 
"unitLabel" ) ) );
 
  979   const QDomNodeList textFormatNodeList = itemElem.elementsByTagName( QStringLiteral( 
"text-style" ) );
 
  980   if ( !textFormatNodeList.isEmpty() )
 
  982     const QDomElement textFormatElem = textFormatNodeList.at( 0 ).toElement();
 
  990       f.fromString( itemElem.attribute( QStringLiteral( 
"font" ), QString() ) );
 
  993     if ( f.pointSizeF() > 0 )
 
  998     else if ( f.pixelSize() > 0 )
 
 1005   const QDomNodeList numericFormatNodeList = itemElem.elementsByTagName( QStringLiteral( 
"numericFormat" ) );
 
 1006   if ( !numericFormatNodeList.isEmpty() )
 
 1008     const QDomElement numericFormatElem = numericFormatNodeList.at( 0 ).toElement();
 
 1012   const QDomElement fillSymbol1Elem = itemElem.firstChildElement( QStringLiteral( 
"fillSymbol1" ) );
 
 1013   bool foundFillSymbol1 = 
false;
 
 1014   if ( !fillSymbol1Elem.isNull() )
 
 1016     const QDomElement symbolElem = fillSymbol1Elem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
 1017     std::unique_ptr< QgsFillSymbol > 
fillSymbol( QgsSymbolLayerUtils::loadSymbol<QgsFillSymbol>( symbolElem, context ) );
 
 1021       foundFillSymbol1 = 
true;
 
 1024   if ( !foundFillSymbol1 )
 
 1027     std::unique_ptr< QgsFillSymbol > 
fillSymbol = std::make_unique< QgsFillSymbol >();
 
 1028     std::unique_ptr< QgsSimpleFillSymbolLayer > fillSymbolLayer = std::make_unique< QgsSimpleFillSymbolLayer >();
 
 1029     fillSymbolLayer->setStrokeStyle( Qt::NoPen );
 
 1032     const QDomNodeList fillColorList = itemElem.elementsByTagName( QStringLiteral( 
"fillColor" ) );
 
 1033     if ( !fillColorList.isEmpty() )
 
 1035       const QDomElement fillColorElem = fillColorList.at( 0 ).toElement();
 
 1036       bool redOk, greenOk, blueOk, alphaOk;
 
 1037       int fillRed, fillGreen, fillBlue, fillAlpha;
 
 1039       fillRed = fillColorElem.attribute( QStringLiteral( 
"red" ) ).toDouble( &redOk );
 
 1040       fillGreen = fillColorElem.attribute( QStringLiteral( 
"green" ) ).toDouble( &greenOk );
 
 1041       fillBlue = fillColorElem.attribute( QStringLiteral( 
"blue" ) ).toDouble( &blueOk );
 
 1042       fillAlpha = fillColorElem.attribute( QStringLiteral( 
"alpha" ) ).toDouble( &alphaOk );
 
 1044       if ( redOk && greenOk && blueOk && alphaOk )
 
 1046         fillSymbolLayer->setColor( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) );
 
 1051       fillSymbolLayer->setColor( QColor( itemElem.attribute( QStringLiteral( 
"brushColor" ), QStringLiteral( 
"#000000" ) ) ) );
 
 1063   const QDomElement fillSymbol2Elem = itemElem.firstChildElement( QStringLiteral( 
"fillSymbol2" ) );
 
 1064   bool foundFillSymbol2 = 
false;
 
 1065   if ( !fillSymbol2Elem.isNull() )
 
 1067     const QDomElement symbolElem = fillSymbol2Elem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
 1068     std::unique_ptr< QgsFillSymbol > 
fillSymbol( QgsSymbolLayerUtils::loadSymbol<QgsFillSymbol>( symbolElem, context ) );
 
 1072       foundFillSymbol2 = 
true;
 
 1075   if ( !foundFillSymbol2 )
 
 1078     std::unique_ptr< QgsFillSymbol > 
fillSymbol = std::make_unique< QgsFillSymbol >();
 
 1079     std::unique_ptr< QgsSimpleFillSymbolLayer > fillSymbolLayer = std::make_unique< QgsSimpleFillSymbolLayer >();
 
 1080     fillSymbolLayer->setStrokeStyle( Qt::NoPen );
 
 1084     const QDomNodeList fillColor2List = itemElem.elementsByTagName( QStringLiteral( 
"fillColor2" ) );
 
 1085     if ( !fillColor2List.isEmpty() )
 
 1087       const QDomElement fillColor2Elem = fillColor2List.at( 0 ).toElement();
 
 1088       bool redOk, greenOk, blueOk, alphaOk;
 
 1089       int fillRed, fillGreen, fillBlue, fillAlpha;
 
 1091       fillRed = fillColor2Elem.attribute( QStringLiteral( 
"red" ) ).toDouble( &redOk );
 
 1092       fillGreen = fillColor2Elem.attribute( QStringLiteral( 
"green" ) ).toDouble( &greenOk );
 
 1093       fillBlue = fillColor2Elem.attribute( QStringLiteral( 
"blue" ) ).toDouble( &blueOk );
 
 1094       fillAlpha = fillColor2Elem.attribute( QStringLiteral( 
"alpha" ) ).toDouble( &alphaOk );
 
 1096       if ( redOk && greenOk && blueOk && alphaOk )
 
 1098         fillSymbolLayer->setColor( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) );
 
 1103       fillSymbolLayer->setColor( QColor( itemElem.attribute( QStringLiteral( 
"brush2Color" ), QStringLiteral( 
"#ffffff" ) ) ) );
 
 1117   const QDomNodeList textColorList = itemElem.elementsByTagName( QStringLiteral( 
"textColor" ) );
 
 1118   if ( !textColorList.isEmpty() )
 
 1120     const QDomElement textColorElem = textColorList.at( 0 ).toElement();
 
 1121     bool redOk, greenOk, blueOk, alphaOk;
 
 1122     int textRed, textGreen, textBlue, textAlpha;
 
 1124     textRed = textColorElem.attribute( QStringLiteral( 
"red" ) ).toDouble( &redOk );
 
 1125     textGreen = textColorElem.attribute( QStringLiteral( 
"green" ) ).toDouble( &greenOk );
 
 1126     textBlue = textColorElem.attribute( QStringLiteral( 
"blue" ) ).toDouble( &blueOk );
 
 1127     textAlpha = textColorElem.attribute( QStringLiteral( 
"alpha" ) ).toDouble( &alphaOk );
 
 1129     if ( redOk && greenOk && blueOk && alphaOk )
 
 1131       mSettings.
textFormat().
setColor( QColor( textRed, textGreen, textBlue, textAlpha ) );
 
 1134   else if ( itemElem.hasAttribute( QStringLiteral( 
"fontColor" ) ) )
 
 1137     c.setNamedColor( itemElem.attribute( QStringLiteral( 
"fontColor" ), QStringLiteral( 
"#000000" ) ) );
 
 1142   setStyle( itemElem.attribute( QStringLiteral( 
"style" ), QString() ) );
 
 1147   if ( itemElem.attribute( QStringLiteral( 
"unitType" ) ).isEmpty() )
 
 1150     switch ( itemElem.attribute( QStringLiteral( 
"units" ) ).toInt() )
 
 1178   disconnectCurrentMap();
 
 1180   mMapUuid = itemElem.attribute( QStringLiteral( 
"mapUuid" ) );
 
 1187   if ( 
mLayout && !mMapUuid.isEmpty() )
 
 1189     disconnectCurrentMap();
 
 1190     mMap = qobject_cast< QgsLayoutItemMap * >( 
mLayout->itemByUuid( mMapUuid, 
true ) );
 
 1194       connect( mMap, &QObject::destroyed, 
this, &QgsLayoutItemScaleBar::disconnectCurrentMap );
 
QColor valueAsColor(int key, const QgsExpressionContext &context, const QColor &defaultColor=QColor(), bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a color.
double valueAsDouble(int key, const QgsExpressionContext &context, double defaultValue=0.0, bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a double.
static QgsScaleBarRendererRegistry * scaleBarRendererRegistry()
Gets the registry of available scalebar renderers.
static QgsNumericFormatRegistry * numericFormatRegistry()
Gets the registry of available numeric formats.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
This class represents a coordinate reference system (CRS).
Q_GADGET QgsUnitTypes::DistanceUnit mapUnits
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
double measureLine(const QVector< QgsPointXY > &points) const
Measures the length of a line with multiple segments.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
QgsUnitTypes::DistanceUnit lengthUnits() const
Returns the units of distance for length calculations made by this object.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
static bool setFromXmlChildNode(QFont &font, const QDomElement &element, const QString &childNode)
Sets the properties of a font to match the properties stored in an XML child node.
Layout graphical items for displaying a map.
void extentChanged()
Emitted when the map's extent changes.
double scale() const
Returns the map scale.
QgsRectangle extent() const
Returns the current map extent.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used for rendering the map.
@ LayoutScaleBar
Scale bar item.
Contains settings and helpers relating to a render of a QgsLayoutItem.
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
A layout item subclass for scale bars.
void setNumberOfSegments(int segments)
Sets the number of segments included in the scalebar.
Q_DECL_DEPRECATED QBrush brush() const
Returns the primary brush for the scalebar.
Q_DECL_DEPRECATED QColor fillColor2() const
Returns the secondary color used for fills in the scalebar.
Q_DECL_DEPRECATED double lineWidth() const
Returns the line width in millimeters for lines in the scalebar.
QIcon icon() const override
Returns the item's icon.
Q_DECL_DEPRECATED void setFillColor(const QColor &color)
Sets the color used for fills in the scalebar.
void setLabelHorizontalPlacement(QgsScaleBarSettings::LabelHorizontalPlacement placement)
Sets the horizontal placement of text labels.
QgsLineSymbol * divisionLineSymbol() const
Returns the line symbol used to render the scalebar divisions (only used for some scalebar types).
QgsFillSymbol * alternateFillSymbol() const
Returns the secondary fill symbol used to render the scalebar (only used for some scalebar types).
Q_DECL_DEPRECATED QBrush brush2() const
Returns the secondary brush for the scalebar.
void setMinimumBarWidth(double minWidth)
Sets the minimum width (in millimeters) for scale bar segments.
QgsFillSymbol * fillSymbol() const
Returns the primary fill symbol used to render the scalebar (only used for some scalebar types).
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
Q_DECL_DEPRECATED QColor fontColor() const
Returns the color used for drawing text in the scalebar.
void setMaximumBarWidth(double maxWidth)
Sets the maximum width (in millimeters) for scale bar segments.
Q_DECL_DEPRECATED QColor fillColor() const
Returns the color used for fills in the scalebar.
void setSegmentSizeMode(QgsScaleBarSettings::SegmentSizeMode mode)
Sets the size mode for scale bar segments.
void setNumericFormat(QgsNumericFormat *format)
Sets the numeric format used for numbers in the scalebar.
Q_DECL_DEPRECATED void setLineColor(const QColor &color)
Sets the color used for lines in the scalebar.
void setDivisionLineSymbol(QgsLineSymbol *symbol)
Sets the line symbol used to render the scalebar divisions (only used for some scalebar types).
Q_DECL_DEPRECATED QColor lineColor() const
Returns the color used for lines in the scalebar.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
void update()
Adjusts the scale bar box size and updates the item.
void setFillSymbol(QgsFillSymbol *symbol)
Sets the primary fill symbol used to render the scalebar (only used for some scalebar types).
void setLabelVerticalPlacement(QgsScaleBarSettings::LabelVerticalPlacement placement)
Sets the vertical placement of text labels.
double unitsPerSegment() const
Returns the number of scalebar units per segment.
void finalizeRestoreFromXml() override
Called after all pending items have been restored from XML.
bool applyDefaultRendererSettings(QgsScaleBarRenderer *renderer)
Applies any default settings relating to the specified renderer to the item.
void setUnits(QgsUnitTypes::DistanceUnit units)
Sets the distance units used by the scalebar.
QgsLineSymbol * subdivisionLineSymbol() const
Returns the line symbol used to render the scalebar subdivisions (only used for some scalebar types).
QgsUnitTypes::DistanceUnit guessUnits() const
Attempts to guess the most reasonable unit choice for the scalebar, given the current linked map's sc...
Q_DECL_DEPRECATED QFont font() const
Returns the font used for drawing text in the scalebar.
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
void setAlignment(QgsScaleBarSettings::Alignment alignment)
Sets the scalebar alignment.
void setAlternateFillSymbol(QgsFillSymbol *symbol)
Sets the secondary fill symbol used to render the scalebar (only used for some scalebar types).
void applyDefaultSize(QgsUnitTypes::DistanceUnit units=QgsUnitTypes::DistanceMeters)
Applies the default size to the scale bar (scale bar 1/5 of map item width)
int type() const override
void setLineSymbol(QgsLineSymbol *symbol)
Sets the line symbol used to render the scalebar (only used for some scalebar types).
void setStyle(const QString &name)
Sets the scale bar style by name.
Q_DECL_DEPRECATED void setFillColor2(const QColor &color)
Sets the secondary color used for fills in the scalebar.
void applyDefaultSettings()
Applies the default scalebar settings to the scale bar.
Q_DECL_DEPRECATED Qt::PenCapStyle lineCapStyle() const
Returns the cap style used for drawing lines in the scalebar.
void setNumberOfSegmentsLeft(int segments)
Sets the number of segments included in the left part of the scalebar.
Q_DECL_DEPRECATED Qt::PenJoinStyle lineJoinStyle() const
Returns the join style used for drawing lines in the scalebar.
void setTextFormat(const QgsTextFormat &format)
Sets the text format used for drawing text in the scalebar.
void setLinkedMap(QgsLayoutItemMap *map)
Sets the map item linked to the scalebar.
QgsLayoutSize minimumSize() const override
Returns the minimum allowed size of the item, if applicable, or an empty size if item can be freely r...
Q_DECL_DEPRECATED void setLineJoinStyle(Qt::PenJoinStyle style)
Sets the join style used when drawing the lines in the scalebar.
QgsLineSymbol * lineSymbol() const
Returns the line symbol used to render the scalebar (only used for some scalebar types).
void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties) override
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
Q_DECL_DEPRECATED void setFontColor(const QColor &color)
Sets the color used for drawing text in the scalebar.
Q_DECL_DEPRECATED void setLineWidth(double width)
Sets the line width in millimeters for lines in the scalebar.
Q_DECL_DEPRECATED QPen pen() const
Returns the pen used for drawing outlines in the scalebar.
void setBoxContentSpace(double space)
Sets the space (margin) between the scalebar box and content in millimeters.
const QgsNumericFormat * numericFormat() const
Returns the numeric format used for numbers in the scalebar.
void setUnitLabel(const QString &label)
Sets the label for units.
QString style() const
Returns the scale bar style name.
ExportLayerBehavior exportLayerBehavior() const override
Returns the behavior of this item during exporting to layered exports (e.g.
QgsTextFormat textFormat() const
Returns the text format used for drawing text in the scalebar.
Q_DECL_DEPRECATED void setLineCapStyle(Qt::PenCapStyle style)
Sets the cap style used when drawing the lines in the scalebar.
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
void resizeToMinimumWidth()
Resizes the scale bar to its minimum width, without changing the height.
void setUnitsPerSegment(double units)
Sets the number of scalebar units per segment.
static QgsLayoutItemScaleBar * create(QgsLayout *layout)
Returns a new scale bar item for the specified layout.
Q_DECL_DEPRECATED void setFont(const QFont &font)
Sets the font used for drawing text in the scalebar.
void setSubdivisionLineSymbol(QgsLineSymbol *symbol)
Sets the line symbol used to render the scalebar subdivisions (only used for some scalebar types).
QgsUnitTypes::DistanceUnit units() const
Returns the distance units used by the scalebar.
QgsLayoutItemScaleBar(QgsLayout *layout)
Constructor for QgsLayoutItemScaleBar, with the specified parent layout.
Base class for graphical items within a QgsLayout.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
void refreshItemSize()
Refreshes an item's size by rechecking it against any possible item fixed or minimum sizes.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
virtual QString displayName() const
Gets item display name.
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...
virtual QString uuid() const
Returns the item identification string.
ExportLayerBehavior
Behavior of item when exporting to layered outputs.
@ CanGroupWithItemsOfSameType
Item can only be placed on layers with other items of the same type, but multiple items of this type ...
void setBackgroundEnabled(bool drawBackground)
Sets whether this item has a background drawn under it or not.
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
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.
@ ScalebarFillColor2
Scalebar secondary fill color (deprecated, use data defined properties on scalebar fill symbol 2 inst...
@ ScalebarLineWidth
Scalebar line width (deprecated, use data defined properties on scalebar line symbol instead)
@ AllProperties
All properties for item.
@ ScalebarFillColor
Scalebar fill color (deprecated, use data defined properties on scalebar fill symbol 1 instead)
@ ScalebarLineColor
Scalebar line color (deprecated, use data defined properties on scalebar line symbol instead)
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the object's property collection, used for data defined overrides.
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
static QgsLayoutSize decodeSize(const QString &string)
Decodes a size from a string.
QgsUnitTypes::LayoutUnit units() const
Returns the units for the size.
void setWidth(const double width)
Sets the width for the size.
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
static double calculatePrettySize(double minimumSize, double maximumSize)
Calculates a "pretty" size which falls between the range [minimumSize, maximumSize].
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
A line symbol type, for rendering LineString and MultiLineString geometries.
QgsLineSymbol * clone() const override
Returns a deep copy of this symbol.
A class to represent a 2D point.
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
A store for object properties.
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
double xMaximum() const SIP_HOLDGIL
Returns the x maximum value (right side of rectangle).
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
double yMinimum() const SIP_HOLDGIL
Returns the y minimum value (bottom side of rectangle).
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
Contains information about the context of a rendering operation.
Abstract base class for scale bar renderers.
virtual bool applyDefaultSettings(QgsScaleBarSettings &settings) const
Applies any default settings relating to the scalebar to the passed settings object.
double subdivisionsHeight() const
Returns the scalebar subdivisions height (in millimeters) for segments included in the right part of ...
void setSubdivisionLineSymbol(QgsLineSymbol *symbol)
Sets the line symbol used to render the scalebar subdivisions (only used for some scalebar types).
Q_DECL_DEPRECATED QColor fillColor() const
Returns the color used for fills in the scalebar.
QgsLineSymbol * lineSymbol() const
Returns the line symbol used to render the scalebar (only used for some scalebar types).
void setAlignment(Alignment alignment)
Sets the scalebar alignment.
QgsLineSymbol * subdivisionLineSymbol() const
Returns the line symbol used to render the scalebar subdivisions (only used for some scalebar types).
Q_DECL_DEPRECATED QColor fillColor2() const
Returns the secondary color used for fills in the scalebar.
void setAlternateFillSymbol(QgsFillSymbol *symbol)
Sets the secondary fill symbol used to render the scalebar (only used for some scalebar types).
SegmentSizeMode segmentSizeMode() const
Returns the size mode for the scale bar segments.
const QgsNumericFormat * numericFormat() const
Returns the numeric format used for numbers in the scalebar.
Q_DECL_DEPRECATED void setFillColor(const QColor &color)
Sets the color used for fills in the scalebar.
int numberOfSegments() const
Returns the number of segments included in the scalebar.
Q_DECL_DEPRECATED void setFillColor2(const QColor &color)
Sets the secondary color used for fills in the scalebar.
double maximumBarWidth() const
Returns the maximum width (in millimeters) for scale bar segments.
Q_DECL_DEPRECATED void setLineCapStyle(Qt::PenCapStyle style)
Sets the cap style used when drawing the lines in the scalebar.
QgsUnitTypes::DistanceUnit units() const
Returns the distance units used by the scalebar.
void setFillSymbol(QgsFillSymbol *symbol)
Sets the primary fill symbol used to render the scalebar (only used for some scalebar types).
double unitsPerSegment() const
Returns the number of scalebar units per segment.
Q_DECL_DEPRECATED void setLineJoinStyle(Qt::PenJoinStyle style)
Sets the join style used when drawing the lines in the scalebar.
Q_DECL_DEPRECATED QPen pen() const
Returns the pen used for drawing outlines in the scalebar.
void setLabelVerticalPlacement(LabelVerticalPlacement placement)
Sets the vertical placement of text labels.
Q_DECL_DEPRECATED void setLineColor(const QColor &color)
Sets the color used for lines in the scalebar.
void setUnitLabel(const QString &label)
Sets the label for units.
LabelHorizontalPlacement labelHorizontalPlacement() const
Returns the horizontal placement of text labels.
void setLineSymbol(QgsLineSymbol *symbol)
Sets the line symbol used to render the scalebar (only used for some scalebar types).
void setDivisionLineSymbol(QgsLineSymbol *symbol)
Sets the line symbol used to render the scalebar divisions (only used for some scalebar types).
void setBoxContentSpace(double space)
Sets the space (margin) between the scalebar box and content in millimeters.
Q_DECL_DEPRECATED void setLineWidth(double width)
Sets the line width in millimeters for lines in the scalebar.
Alignment alignment() const
Returns the scalebar alignment.
double boxContentSpace() const
Returns the spacing (margin) between the scalebar box and content in millimeters.
void setHeight(double height)
Sets the scalebar height (in millimeters).
QgsFillSymbol * alternateFillSymbol() const
Returns the secondary fill symbol used to render the scalebar (only used for some scalebar types).
void setUnits(QgsUnitTypes::DistanceUnit units)
Sets the distance units used by the scalebar.
QgsFillSymbol * fillSymbol() const
Returns the primary fill symbol used to render the scalebar (only used for some scalebar types).
Q_DECL_DEPRECATED double lineWidth() const
Returns the line width in millimeters for lines in the scalebar.
Q_DECL_DEPRECATED QBrush brush2() const
Returns the secondary brush for the scalebar.
Alignment
Scalebar alignment.
void setNumberOfSubdivisions(int subdivisions)
Sets the number of subdivisions for segments included in the right part of the scalebar (only used fo...
LabelVerticalPlacement labelVerticalPlacement() const
Returns the vertical placement of text labels.
void setNumericFormat(QgsNumericFormat *format)
Sets the numeric format used for numbers in the scalebar.
void setTextFormat(const QgsTextFormat &format)
Sets the text format used for drawing text in the scalebar.
double minimumBarWidth() const
Returns the minimum width (in millimeters) for scale bar segments.
QString unitLabel() const
Returns the label for units.
int numberOfSubdivisions() const
Returns the number of subdivisions for segments included in the right part of the scalebar (only used...
Q_DECL_DEPRECATED QColor lineColor() const
Returns the color used for lines in the scalebar.
LabelHorizontalPlacement
Label horizontal placement.
void setLabelBarSpace(double space)
Sets the spacing (in millimeters) between labels and the scalebar.
void setNumberOfSegments(int segments)
Sets the number of segments included in the scalebar.
void setUnitsPerSegment(double units)
Sets the number of scalebar units per segment.
LabelVerticalPlacement
Label vertical placement.
Q_DECL_DEPRECATED Qt::PenCapStyle lineCapStyle() const
Returns the cap style used for drawing lines in the scalebar.
void setLabelHorizontalPlacement(LabelHorizontalPlacement placement)
Sets the horizontal placement of text labels.
void setSubdivisionsHeight(double height)
Sets the scalebar subdivisions height (in millimeters) for segments included in the right part of the...
double labelBarSpace() const
Returns the spacing (in millimeters) between labels and the scalebar.
QgsTextFormat & textFormat()
Returns the text format used for drawing text in the scalebar.
double height() const
Returns the scalebar height (in millimeters).
int numberOfSegmentsLeft() const
Returns the number of segments included in the left part of the scalebar.
Q_DECL_DEPRECATED void setFont(const QFont &font)
Sets the font used for drawing text in the scalebar.
SegmentSizeMode
Modes for setting size for scale bar segments.
@ SegmentSizeFitWidth
Scale bar segment size is calculated to fit a size range.
@ SegmentSizeFixed
Scale bar segment size is fixed to a map unit.
Q_DECL_DEPRECATED Qt::PenJoinStyle lineJoinStyle() const
Returns the join style used for drawing lines in the scalebar.
void setNumberOfSegmentsLeft(int segments)
Sets the number of segments included in the left part of the scalebar.
Q_DECL_DEPRECATED QBrush brush() const
Returns the primary brush used for filling the scalebar.
void setSegmentSizeMode(SegmentSizeMode mode)
Sets the size mode for scale bar segments.
QgsLineSymbol * divisionLineSymbol() const
Returns the line symbol used to render the scalebar divisions (only used for some scalebar types).
void setMapUnitsPerScaleBarUnit(double units)
Sets the number of map units per scale bar unit used by the scalebar.
double mapUnitsPerScaleBarUnit() const
Returns the number of map units per scale bar unit used by the scalebar.
void setMinimumBarWidth(double width)
Sets the minimum width (in millimeters) for scale bar segments.
void setMaximumBarWidth(double width)
Sets the maximum width (in millimeters) for scale bar segments.
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.
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 text format entity for QgsStyle databases.
static Qt::PenJoinStyle decodePenJoinStyle(const QString &str)
static Qt::PenCapStyle decodePenCapStyle(const QString &str)
static QString encodePenCapStyle(Qt::PenCapStyle style)
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
static QString encodePenJoinStyle(Qt::PenJoinStyle style)
@ PropertyStrokeWidth
Stroke width.
@ PropertyFillColor
Fill color.
@ PropertyStrokeColor
Stroke color.
bool changeSymbolLayer(int index, QgsSymbolLayer *layer)
Deletes the current layer at the specified index and replaces it with layer.
Container for all settings relating to text rendering.
void setColor(const QColor &color)
Sets the color that text will be rendered in.
void setSize(double size)
Sets the size for rendered text.
void setFont(const QFont &font)
Sets the font used for rendering text.
void setOpacity(double opacity)
Sets the text's opacity.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context)
Read settings from a DOM element.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the size of rendered text.
double opacity() const
Returns the text's opacity.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const
Write settings into a DOM element.
QColor color() const
Returns the color that text will be rendered in.
QFont font() const
Returns the font used for rendering text.
DistanceUnit
Units of distance.
@ DistanceDegrees
Degrees, for planar geographic CRS distance measurements.
@ DistanceKilometers
Kilometers.
@ DistanceMiles
Terrestrial miles.
@ DistanceUnknownUnit
Unknown distance unit.
@ DistanceFeet
Imperial feet.
@ DistanceNauticalMiles
Nautical miles.
@ LayoutMillimeters
Millimeters.
static Q_INVOKABLE QString encodeUnit(QgsUnitTypes::DistanceUnit unit)
Encodes a distance unit to a string.
static Q_INVOKABLE QgsUnitTypes::DistanceUnit decodeDistanceUnit(const QString &string, bool *ok=nullptr)
Decodes a distance unit from a string.
static Q_INVOKABLE double fromUnitToUnitFactor(QgsUnitTypes::DistanceUnit fromUnit, QgsUnitTypes::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
static Q_INVOKABLE QString toAbbreviatedString(QgsUnitTypes::DistanceUnit unit)
Returns a translated abbreviation representing a distance unit.
@ RenderPoints
Points (e.g., for font sizes)
@ RenderMillimeters
Millimeters.
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
const QgsCoordinateReferenceSystem & crs
Contains parameters regarding scalebar calculations.
Flags flags
Scalebar renderer flags.
QSizeF size
Destination size for scalebar.
double scale
Scale denominator.
double segmentWidth
The width, in millimeters, of each individual segment drawn.
Contains information relating to the style entity currently being visited.