mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-15 00:07:25 -05:00
[FEATURE][layouts] Data defined control over grid properties
Adds data defined control over layout map grid: - enabled state - interval X/Y - offset X/Y - frame size and margin - annotation distance from frame - cross size - frame line thickness Fixes #30246, fixes #27737
This commit is contained in:
parent
4f330b6234
commit
658cb0c740
@ -864,6 +864,8 @@ Retrieves the second fill color for the grid frame.
|
||||
|
||||
virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
|
||||
|
||||
virtual void refresh();
|
||||
|
||||
|
||||
public:
|
||||
};
|
||||
|
||||
@ -136,6 +136,14 @@ A base class for objects which belong to a layout.
|
||||
MapLayers,
|
||||
MapStylePreset,
|
||||
MapLabelMargin,
|
||||
MapGridEnabled,
|
||||
MapGridIntervalX,
|
||||
MapGridIntervalY,
|
||||
MapGridOffsetX,
|
||||
MapGridOffsetY,
|
||||
MapGridFrameSize,
|
||||
MapGridFrameMargin,
|
||||
MapGridLabelDistance,
|
||||
//composer picture
|
||||
PictureSource,
|
||||
PictureSvgBackgroundColor,
|
||||
|
||||
@ -158,6 +158,15 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q
|
||||
//set initial state of frame style controls
|
||||
toggleFrameControls( false, false, false );
|
||||
|
||||
registerDataDefinedButton( mEnabledDDBtn, QgsLayoutObject::MapGridEnabled );
|
||||
registerDataDefinedButton( mIntervalXDDBtn, QgsLayoutObject::MapGridIntervalX );
|
||||
registerDataDefinedButton( mIntervalYDDBtn, QgsLayoutObject::MapGridIntervalY );
|
||||
registerDataDefinedButton( mOffsetXDDBtn, QgsLayoutObject::MapGridOffsetX );
|
||||
registerDataDefinedButton( mOffsetYDDBtn, QgsLayoutObject::MapGridOffsetY );
|
||||
registerDataDefinedButton( mFrameSizeDDBtn, QgsLayoutObject::MapGridFrameSize );
|
||||
registerDataDefinedButton( mFrameMarginDDBtn, QgsLayoutObject::MapGridFrameMargin );
|
||||
registerDataDefinedButton( mLabelDistDDBtn, QgsLayoutObject::MapGridLabelDistance );
|
||||
|
||||
updateGuiElements();
|
||||
|
||||
blockAllSignals( false );
|
||||
@ -179,7 +188,14 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q
|
||||
|
||||
void QgsLayoutMapGridWidget::populateDataDefinedButtons()
|
||||
{
|
||||
// none for now
|
||||
updateDataDefinedButton( mEnabledDDBtn );
|
||||
updateDataDefinedButton( mIntervalXDDBtn );
|
||||
updateDataDefinedButton( mIntervalYDDBtn );
|
||||
updateDataDefinedButton( mOffsetXDDBtn );
|
||||
updateDataDefinedButton( mOffsetYDDBtn );
|
||||
updateDataDefinedButton( mFrameSizeDDBtn );
|
||||
updateDataDefinedButton( mFrameMarginDDBtn );
|
||||
updateDataDefinedButton( mLabelDistDDBtn );
|
||||
}
|
||||
|
||||
void QgsLayoutMapGridWidget::setGuiElementValues()
|
||||
|
||||
@ -367,6 +367,8 @@ bool QgsLayoutItemMapGrid::readXml( const QDomElement &itemElem, const QDomDocum
|
||||
mGridAnnotationPrecision = itemElem.attribute( QStringLiteral( "annotationPrecision" ), QStringLiteral( "3" ) ).toInt();
|
||||
int gridUnitInt = itemElem.attribute( QStringLiteral( "unit" ), QString::number( MapUnit ) ).toInt();
|
||||
mGridUnit = ( gridUnitInt <= static_cast< int >( CM ) ) ? static_cast< GridUnit >( gridUnitInt ) : MapUnit;
|
||||
|
||||
refreshDataDefinedProperties();
|
||||
return ok;
|
||||
}
|
||||
|
||||
@ -390,7 +392,7 @@ QPolygonF QgsLayoutItemMapGrid::scalePolygon( const QPolygonF &polygon, const do
|
||||
void QgsLayoutItemMapGrid::drawGridCrsTransform( QgsRenderContext &context, double dotsPerMM, QList< QPair< double, QLineF > > &horizontalLines,
|
||||
QList< QPair< double, QLineF > > &verticalLines, bool calculateLinesOnly ) const
|
||||
{
|
||||
if ( !mMap || !mEnabled )
|
||||
if ( !mMap || !mEnabled || !mEvaluatedEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -546,7 +548,7 @@ void QgsLayoutItemMapGrid::calculateCrsTransformLines() const
|
||||
|
||||
void QgsLayoutItemMapGrid::draw( QPainter *p )
|
||||
{
|
||||
if ( !mMap || !mEnabled )
|
||||
if ( !mMap || !mEnabled || !mEvaluatedEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -556,6 +558,10 @@ void QgsLayoutItemMapGrid::draw( QPainter *p )
|
||||
return;
|
||||
}
|
||||
|
||||
QgsExpressionContext expressionContext = createExpressionContext();
|
||||
if ( !mDataDefinedProperties.value( QgsLayoutObject::MapGridEnabled, expressionContext, true ).toBool() )
|
||||
return;
|
||||
|
||||
p->save();
|
||||
p->setCompositionMode( mBlendMode );
|
||||
p->setRenderHint( QPainter::Antialiasing, mMap->layout()->renderContext().flags() & QgsLayoutRenderContext::FlagAntialiasing );
|
||||
@ -576,7 +582,6 @@ void QgsLayoutItemMapGrid::draw( QPainter *p )
|
||||
//setup render context
|
||||
QgsRenderContext context = QgsLayoutUtils::createRenderContextForLayout( mLayout, p );
|
||||
context.setForceVectorOutput( true );
|
||||
QgsExpressionContext expressionContext = createExpressionContext();
|
||||
context.setExpressionContext( expressionContext );
|
||||
|
||||
QList< QPair< double, QLineF > > verticalLines;
|
||||
@ -805,7 +810,7 @@ void QgsLayoutItemMapGrid::drawGridFrameZebraBorder( QPainter *p, const QMap< do
|
||||
|
||||
if ( extension )
|
||||
{
|
||||
*extension = mGridFrameMargin + mGridFrameWidth + mGridFramePenThickness / 2.0;
|
||||
*extension = mEvaluatedFrameMargin + mEvaluatedFrameSize + mGridFramePenThickness / 2.0;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -857,33 +862,33 @@ void QgsLayoutItemMapGrid::drawGridFrameZebraBorder( QPainter *p, const QMap< do
|
||||
if ( border == QgsLayoutItemMapGrid::Left || border == QgsLayoutItemMapGrid::Right )
|
||||
{
|
||||
height = posIt.key() - currentCoord;
|
||||
width = mGridFrameWidth;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? -( mGridFrameWidth + mGridFrameMargin ) : mMap->rect().width() + mGridFrameMargin;
|
||||
width = mEvaluatedFrameSize;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? -( mEvaluatedFrameSize + mEvaluatedFrameMargin ) : mMap->rect().width() + mEvaluatedFrameMargin;
|
||||
y = currentCoord;
|
||||
}
|
||||
else //top or bottom
|
||||
{
|
||||
height = mGridFrameWidth;
|
||||
height = mEvaluatedFrameSize;
|
||||
width = posIt.key() - currentCoord;
|
||||
x = currentCoord;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? -( mGridFrameWidth + mGridFrameMargin ) : mMap->rect().height() + mGridFrameMargin;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? -( mEvaluatedFrameSize + mEvaluatedFrameMargin ) : mMap->rect().height() + mEvaluatedFrameMargin;
|
||||
}
|
||||
p->drawRect( QRectF( x, y, width, height ) );
|
||||
currentCoord = posIt.key();
|
||||
color1 = !color1;
|
||||
}
|
||||
|
||||
if ( mGridFrameStyle == ZebraNautical || qgsDoubleNear( mGridFrameMargin, 0.0 ) )
|
||||
if ( mGridFrameStyle == ZebraNautical || qgsDoubleNear( mEvaluatedFrameMargin, 0.0 ) )
|
||||
{
|
||||
//draw corners
|
||||
width = height = ( mGridFrameWidth + mGridFrameMargin ) ;
|
||||
width = height = ( mEvaluatedFrameSize + mEvaluatedFrameMargin ) ;
|
||||
p->setBrush( QBrush( mGridFrameFillColor1 ) );
|
||||
if ( drawTLBox )
|
||||
p->drawRect( QRectF( -( mGridFrameWidth + mGridFrameMargin ), -( mGridFrameWidth + mGridFrameMargin ), width, height ) );
|
||||
p->drawRect( QRectF( -( mEvaluatedFrameSize + mEvaluatedFrameMargin ), -( mEvaluatedFrameSize + mEvaluatedFrameMargin ), width, height ) );
|
||||
if ( drawTRBox )
|
||||
p->drawRect( QRectF( mMap->rect().width(), -( mGridFrameWidth + mGridFrameMargin ), width, height ) );
|
||||
p->drawRect( QRectF( mMap->rect().width(), -( mEvaluatedFrameSize + mEvaluatedFrameMargin ), width, height ) );
|
||||
if ( drawBLBox )
|
||||
p->drawRect( QRectF( -( mGridFrameWidth + mGridFrameMargin ), mMap->rect().height(), width, height ) );
|
||||
p->drawRect( QRectF( -( mEvaluatedFrameSize + mEvaluatedFrameMargin ), mMap->rect().height(), width, height ) );
|
||||
if ( drawBRBox )
|
||||
p->drawRect( QRectF( mMap->rect().width(), mMap->rect().height(), width, height ) );
|
||||
}
|
||||
@ -899,7 +904,7 @@ void QgsLayoutItemMapGrid::drawGridFrameTicks( QPainter *p, const QMap< double,
|
||||
if ( extension )
|
||||
{
|
||||
if ( mGridFrameStyle != QgsLayoutItemMapGrid::InteriorTicks )
|
||||
*extension = mGridFrameMargin + mGridFrameWidth;
|
||||
*extension = mEvaluatedFrameMargin + mEvaluatedFrameSize;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -924,18 +929,18 @@ void QgsLayoutItemMapGrid::drawGridFrameTicks( QPainter *p, const QMap< double,
|
||||
height = 0;
|
||||
if ( mGridFrameStyle == QgsLayoutItemMapGrid::InteriorTicks )
|
||||
{
|
||||
width = mGridFrameWidth;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? 0 + mGridFrameMargin : mMap->rect().width() - mGridFrameWidth - mGridFrameMargin;
|
||||
width = mEvaluatedFrameSize;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? 0 + mEvaluatedFrameMargin : mMap->rect().width() - mEvaluatedFrameSize - mEvaluatedFrameMargin;
|
||||
}
|
||||
else if ( mGridFrameStyle == QgsLayoutItemMapGrid::ExteriorTicks )
|
||||
{
|
||||
width = mGridFrameWidth;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? - mGridFrameWidth - mGridFrameMargin : mMap->rect().width() + mGridFrameMargin;
|
||||
width = mEvaluatedFrameSize;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? - mEvaluatedFrameSize - mEvaluatedFrameMargin : mMap->rect().width() + mEvaluatedFrameMargin;
|
||||
}
|
||||
else if ( mGridFrameStyle == QgsLayoutItemMapGrid::InteriorExteriorTicks )
|
||||
{
|
||||
width = mGridFrameWidth * 2;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? - mGridFrameWidth - mGridFrameMargin : mMap->rect().width() - mGridFrameWidth + mGridFrameMargin;
|
||||
width = mEvaluatedFrameSize * 2;
|
||||
x = ( border == QgsLayoutItemMapGrid::Left ) ? - mEvaluatedFrameSize - mEvaluatedFrameMargin : mMap->rect().width() - mEvaluatedFrameSize + mEvaluatedFrameMargin;
|
||||
}
|
||||
}
|
||||
else //top or bottom
|
||||
@ -944,18 +949,18 @@ void QgsLayoutItemMapGrid::drawGridFrameTicks( QPainter *p, const QMap< double,
|
||||
width = 0;
|
||||
if ( mGridFrameStyle == QgsLayoutItemMapGrid::InteriorTicks )
|
||||
{
|
||||
height = mGridFrameWidth;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? 0 + mGridFrameMargin : mMap->rect().height() - mGridFrameWidth - mGridFrameMargin;
|
||||
height = mEvaluatedFrameSize;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? 0 + mEvaluatedFrameMargin : mMap->rect().height() - mEvaluatedFrameSize - mEvaluatedFrameMargin;
|
||||
}
|
||||
else if ( mGridFrameStyle == QgsLayoutItemMapGrid::ExteriorTicks )
|
||||
{
|
||||
height = mGridFrameWidth;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? -mGridFrameWidth - mGridFrameMargin : mMap->rect().height() + mGridFrameMargin;
|
||||
height = mEvaluatedFrameSize;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? -mEvaluatedFrameSize - mEvaluatedFrameMargin : mMap->rect().height() + mEvaluatedFrameMargin;
|
||||
}
|
||||
else if ( mGridFrameStyle == QgsLayoutItemMapGrid::InteriorExteriorTicks )
|
||||
{
|
||||
height = mGridFrameWidth * 2;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? -mGridFrameWidth - mGridFrameMargin : mMap->rect().height() - mGridFrameWidth + mGridFrameMargin;
|
||||
height = mEvaluatedFrameSize * 2;
|
||||
y = ( border == QgsLayoutItemMapGrid::Top ) ? -mEvaluatedFrameSize - mEvaluatedFrameMargin : mMap->rect().height() - mEvaluatedFrameSize + mEvaluatedFrameMargin;
|
||||
}
|
||||
}
|
||||
p->drawLine( QLineF( x, y, x + width, y + height ) );
|
||||
@ -971,7 +976,7 @@ void QgsLayoutItemMapGrid::drawGridFrameLineBorder( QPainter *p, QgsLayoutItemMa
|
||||
|
||||
if ( extension )
|
||||
{
|
||||
*extension = mGridFrameMargin + mGridFramePenThickness / 2.0;
|
||||
*extension = mEvaluatedFrameMargin + mGridFramePenThickness / 2.0;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -982,47 +987,47 @@ void QgsLayoutItemMapGrid::drawGridFrameLineBorder( QPainter *p, QgsLayoutItemMa
|
||||
p->setBrush( Qt::NoBrush );
|
||||
p->setPen( framePen );
|
||||
|
||||
const bool drawDiagonals = mGridFrameStyle == LineBorderNautical && !qgsDoubleNear( mGridFrameMargin, 0.0 );
|
||||
const bool drawDiagonals = mGridFrameStyle == LineBorderNautical && !qgsDoubleNear( mEvaluatedFrameMargin, 0.0 );
|
||||
|
||||
switch ( border )
|
||||
{
|
||||
case QgsLayoutItemMapGrid::Left:
|
||||
p->drawLine( QLineF( 0 - mGridFrameMargin, 0 - mGridFrameMargin, 0 - mGridFrameMargin, mMap->rect().height() + mGridFrameMargin ) );
|
||||
p->drawLine( QLineF( 0 - mEvaluatedFrameMargin, 0 - mEvaluatedFrameMargin, 0 - mEvaluatedFrameMargin, mMap->rect().height() + mEvaluatedFrameMargin ) );
|
||||
//corner left-top
|
||||
if ( drawDiagonals )
|
||||
{
|
||||
const double X1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0;
|
||||
const double Y1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0;
|
||||
const double X1 = 0 - mEvaluatedFrameMargin + mGridFramePenThickness / 2.0;
|
||||
const double Y1 = 0 - mEvaluatedFrameMargin + mGridFramePenThickness / 2.0;
|
||||
p->drawLine( QLineF( 0, 0, X1, Y1 ) );
|
||||
}
|
||||
break;
|
||||
case QgsLayoutItemMapGrid::Right:
|
||||
p->drawLine( QLineF( mMap->rect().width() + mGridFrameMargin, 0 - mGridFrameMargin, mMap->rect().width() + mGridFrameMargin, mMap->rect().height() + mGridFrameMargin ) );
|
||||
p->drawLine( QLineF( mMap->rect().width() + mEvaluatedFrameMargin, 0 - mEvaluatedFrameMargin, mMap->rect().width() + mEvaluatedFrameMargin, mMap->rect().height() + mEvaluatedFrameMargin ) );
|
||||
//corner right-bottom
|
||||
if ( drawDiagonals )
|
||||
{
|
||||
const double X1 = mMap->rect().width() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
const double Y1 = mMap->rect().height() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
const double X1 = mMap->rect().width() + mEvaluatedFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
const double Y1 = mMap->rect().height() + mEvaluatedFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
p->drawLine( QLineF( mMap->rect().width(), mMap->rect().height(), X1, Y1 ) );
|
||||
}
|
||||
break;
|
||||
case QgsLayoutItemMapGrid::Top:
|
||||
p->drawLine( QLineF( 0 - mGridFrameMargin, 0 - mGridFrameMargin, mMap->rect().width() + mGridFrameMargin, 0 - mGridFrameMargin ) );
|
||||
p->drawLine( QLineF( 0 - mEvaluatedFrameMargin, 0 - mEvaluatedFrameMargin, mMap->rect().width() + mEvaluatedFrameMargin, 0 - mEvaluatedFrameMargin ) );
|
||||
//corner right-top
|
||||
if ( drawDiagonals )
|
||||
{
|
||||
const double X1 = mMap->rect().width() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
const double Y1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0 ;
|
||||
const double X1 = mMap->rect().width() + mEvaluatedFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
const double Y1 = 0 - mEvaluatedFrameMargin + mGridFramePenThickness / 2.0 ;
|
||||
p->drawLine( QLineF( mMap->rect().width(), 0, X1, Y1 ) );
|
||||
}
|
||||
break;
|
||||
case QgsLayoutItemMapGrid::Bottom:
|
||||
p->drawLine( QLineF( 0 - mGridFrameMargin, mMap->rect().height() + mGridFrameMargin, mMap->rect().width() + mGridFrameMargin, mMap->rect().height() + mGridFrameMargin ) );
|
||||
p->drawLine( QLineF( 0 - mEvaluatedFrameMargin, mMap->rect().height() + mEvaluatedFrameMargin, mMap->rect().width() + mEvaluatedFrameMargin, mMap->rect().height() + mEvaluatedFrameMargin ) );
|
||||
//corner left-bottom
|
||||
if ( drawDiagonals )
|
||||
{
|
||||
const double X1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0 ;
|
||||
const double Y1 = mMap->rect().height() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
const double X1 = 0 - mEvaluatedFrameMargin + mGridFramePenThickness / 2.0 ;
|
||||
const double Y1 = mMap->rect().height() + mEvaluatedFrameMargin - mGridFramePenThickness / 2.0 ;
|
||||
p->drawLine( QLineF( 0, mMap->rect().height(), X1, Y1 ) );
|
||||
}
|
||||
break;
|
||||
@ -1072,7 +1077,7 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
case InteriorTicks:
|
||||
case ExteriorTicks:
|
||||
case InteriorExteriorTicks:
|
||||
gridFrameDistance = mGridFrameWidth;
|
||||
gridFrameDistance = mEvaluatedFrameSize;
|
||||
break;
|
||||
|
||||
case QgsLayoutItemMapGrid::Zebra:
|
||||
@ -1107,19 +1112,19 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
}
|
||||
if ( mLeftGridAnnotationDirection == QgsLayoutItemMapGrid::Vertical || mLeftGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
xpos += textHeight + mAnnotationFrameDistance + gridFrameDistance;
|
||||
xpos += textHeight + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
ypos += textWidth / 2.0;
|
||||
rotation = 270;
|
||||
}
|
||||
else if ( mLeftGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending )
|
||||
{
|
||||
xpos += ( mAnnotationFrameDistance + gridFrameDistance );
|
||||
xpos += ( mEvaluatedLabelDistance + gridFrameDistance );
|
||||
ypos -= textWidth / 2.0;
|
||||
rotation = 90;
|
||||
}
|
||||
else
|
||||
{
|
||||
xpos += mAnnotationFrameDistance + gridFrameDistance;
|
||||
xpos += mEvaluatedLabelDistance + gridFrameDistance;
|
||||
ypos += textHeight / 2.0;
|
||||
}
|
||||
}
|
||||
@ -1131,26 +1136,26 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
}
|
||||
if ( mLeftGridAnnotationDirection == QgsLayoutItemMapGrid::Vertical || mLeftGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
xpos -= ( mAnnotationFrameDistance + gridFrameDistance );
|
||||
xpos -= ( mEvaluatedLabelDistance + gridFrameDistance );
|
||||
ypos += textWidth / 2.0;
|
||||
rotation = 270;
|
||||
if ( extension )
|
||||
extension->left = std::max( extension->left, mAnnotationFrameDistance + gridFrameDistance + textHeight );
|
||||
extension->left = std::max( extension->left, mEvaluatedLabelDistance + gridFrameDistance + textHeight );
|
||||
}
|
||||
else if ( mLeftGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending )
|
||||
{
|
||||
xpos -= textHeight + mAnnotationFrameDistance + gridFrameDistance;
|
||||
xpos -= textHeight + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
ypos -= textWidth / 2.0;
|
||||
rotation = 90;
|
||||
if ( extension )
|
||||
extension->left = std::max( extension->left, mAnnotationFrameDistance + gridFrameDistance + textHeight );
|
||||
extension->left = std::max( extension->left, mEvaluatedLabelDistance + gridFrameDistance + textHeight );
|
||||
}
|
||||
else
|
||||
{
|
||||
xpos -= ( textWidth + mAnnotationFrameDistance + gridFrameDistance );
|
||||
xpos -= ( textWidth + mEvaluatedLabelDistance + gridFrameDistance );
|
||||
ypos += textHeight / 2.0;
|
||||
if ( extension )
|
||||
extension->left = std::max( extension->left, mAnnotationFrameDistance + gridFrameDistance + textWidth );
|
||||
extension->left = std::max( extension->left, mEvaluatedLabelDistance + gridFrameDistance + textWidth );
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1179,19 +1184,19 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
}
|
||||
if ( mRightGridAnnotationDirection == QgsLayoutItemMapGrid::Vertical )
|
||||
{
|
||||
xpos -= mAnnotationFrameDistance + gridFrameDistance;
|
||||
xpos -= mEvaluatedLabelDistance + gridFrameDistance;
|
||||
ypos += textWidth / 2.0;
|
||||
rotation = 270;
|
||||
}
|
||||
else if ( mRightGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending || mRightGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
xpos -= textHeight + mAnnotationFrameDistance + gridFrameDistance;
|
||||
xpos -= textHeight + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
ypos -= textWidth / 2.0;
|
||||
rotation = 90;
|
||||
}
|
||||
else
|
||||
{
|
||||
xpos -= textWidth + mAnnotationFrameDistance + gridFrameDistance;
|
||||
xpos -= textWidth + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
ypos += textHeight / 2.0;
|
||||
}
|
||||
}
|
||||
@ -1203,26 +1208,26 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
}
|
||||
if ( mRightGridAnnotationDirection == QgsLayoutItemMapGrid::Vertical )
|
||||
{
|
||||
xpos += ( textHeight + mAnnotationFrameDistance + gridFrameDistance );
|
||||
xpos += ( textHeight + mEvaluatedLabelDistance + gridFrameDistance );
|
||||
ypos += textWidth / 2.0;
|
||||
rotation = 270;
|
||||
if ( extension )
|
||||
extension->right = std::max( extension->right, mAnnotationFrameDistance + gridFrameDistance + textHeight );
|
||||
extension->right = std::max( extension->right, mEvaluatedLabelDistance + gridFrameDistance + textHeight );
|
||||
}
|
||||
else if ( mRightGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending || mRightGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
xpos += ( mAnnotationFrameDistance + gridFrameDistance );
|
||||
xpos += ( mEvaluatedLabelDistance + gridFrameDistance );
|
||||
ypos -= textWidth / 2.0;
|
||||
rotation = 90;
|
||||
if ( extension )
|
||||
extension->right = std::max( extension->right, mAnnotationFrameDistance + gridFrameDistance + textHeight );
|
||||
extension->right = std::max( extension->right, mEvaluatedLabelDistance + gridFrameDistance + textHeight );
|
||||
}
|
||||
else //Horizontal
|
||||
{
|
||||
xpos += ( mAnnotationFrameDistance + gridFrameDistance );
|
||||
xpos += ( mEvaluatedLabelDistance + gridFrameDistance );
|
||||
ypos += textHeight / 2.0;
|
||||
if ( extension )
|
||||
extension->right = std::max( extension->right, mAnnotationFrameDistance + gridFrameDistance + textWidth );
|
||||
extension->right = std::max( extension->right, mEvaluatedLabelDistance + gridFrameDistance + textWidth );
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1251,19 +1256,19 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
}
|
||||
if ( mBottomGridAnnotationDirection == QgsLayoutItemMapGrid::Horizontal || mBottomGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
ypos -= mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos -= mEvaluatedLabelDistance + gridFrameDistance;
|
||||
xpos -= textWidth / 2.0;
|
||||
}
|
||||
else if ( mBottomGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending )
|
||||
{
|
||||
xpos -= textHeight / 2.0;
|
||||
ypos -= textWidth + mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos -= textWidth + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
rotation = 90;
|
||||
}
|
||||
else //Vertical
|
||||
{
|
||||
xpos += textHeight / 2.0;
|
||||
ypos -= mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos -= mEvaluatedLabelDistance + gridFrameDistance;
|
||||
rotation = 270;
|
||||
}
|
||||
}
|
||||
@ -1275,11 +1280,11 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
}
|
||||
if ( mBottomGridAnnotationDirection == QgsLayoutItemMapGrid::Horizontal || mBottomGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
ypos += ( mAnnotationFrameDistance + textHeight + gridFrameDistance );
|
||||
ypos += ( mEvaluatedLabelDistance + textHeight + gridFrameDistance );
|
||||
xpos -= textWidth / 2.0;
|
||||
if ( extension )
|
||||
{
|
||||
extension->bottom = std::max( extension->bottom, mAnnotationFrameDistance + gridFrameDistance + textHeight );
|
||||
extension->bottom = std::max( extension->bottom, mEvaluatedLabelDistance + gridFrameDistance + textHeight );
|
||||
extension->left = std::max( extension->left, textWidth / 2.0 ); // annotation at bottom left/right may extend outside the bounds
|
||||
extension->right = std::max( extension->right, textWidth / 2.0 );
|
||||
}
|
||||
@ -1287,18 +1292,18 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
else if ( mBottomGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending )
|
||||
{
|
||||
xpos -= textHeight / 2.0;
|
||||
ypos += gridFrameDistance + mAnnotationFrameDistance;
|
||||
ypos += gridFrameDistance + mEvaluatedLabelDistance;
|
||||
rotation = 90;
|
||||
if ( extension )
|
||||
extension->bottom = std::max( extension->bottom, mAnnotationFrameDistance + gridFrameDistance + textWidth );
|
||||
extension->bottom = std::max( extension->bottom, mEvaluatedLabelDistance + gridFrameDistance + textWidth );
|
||||
}
|
||||
else //Vertical
|
||||
{
|
||||
xpos += textHeight / 2.0;
|
||||
ypos += ( textWidth + mAnnotationFrameDistance + gridFrameDistance );
|
||||
ypos += ( textWidth + mEvaluatedLabelDistance + gridFrameDistance );
|
||||
rotation = 270;
|
||||
if ( extension )
|
||||
extension->bottom = std::max( extension->bottom, mAnnotationFrameDistance + gridFrameDistance + textWidth );
|
||||
extension->bottom = std::max( extension->bottom, mEvaluatedLabelDistance + gridFrameDistance + textWidth );
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1328,18 +1333,18 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
if ( mTopGridAnnotationDirection == QgsLayoutItemMapGrid::Horizontal || mTopGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
xpos -= textWidth / 2.0;
|
||||
ypos += textHeight + mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos += textHeight + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
}
|
||||
else if ( mTopGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending )
|
||||
{
|
||||
xpos -= textHeight / 2.0;
|
||||
ypos += mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos += mEvaluatedLabelDistance + gridFrameDistance;
|
||||
rotation = 90;
|
||||
}
|
||||
else //Vertical
|
||||
{
|
||||
xpos += textHeight / 2.0;
|
||||
ypos += textWidth + mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos += textWidth + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
rotation = 270;
|
||||
}
|
||||
}
|
||||
@ -1352,25 +1357,25 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
|
||||
if ( mTopGridAnnotationDirection == QgsLayoutItemMapGrid::Horizontal || mTopGridAnnotationDirection == QgsLayoutItemMapGrid::BoundaryDirection )
|
||||
{
|
||||
xpos -= textWidth / 2.0;
|
||||
ypos -= ( mAnnotationFrameDistance + gridFrameDistance );
|
||||
ypos -= ( mEvaluatedLabelDistance + gridFrameDistance );
|
||||
if ( extension )
|
||||
extension->top = std::max( extension->top, mAnnotationFrameDistance + gridFrameDistance + textHeight );
|
||||
extension->top = std::max( extension->top, mEvaluatedLabelDistance + gridFrameDistance + textHeight );
|
||||
}
|
||||
else if ( mTopGridAnnotationDirection == QgsLayoutItemMapGrid::VerticalDescending )
|
||||
{
|
||||
xpos -= textHeight / 2.0;
|
||||
ypos -= textWidth + mAnnotationFrameDistance + gridFrameDistance;
|
||||
ypos -= textWidth + mEvaluatedLabelDistance + gridFrameDistance;
|
||||
rotation = 90;
|
||||
if ( extension )
|
||||
extension->top = std::max( extension->top, mAnnotationFrameDistance + gridFrameDistance + textWidth );
|
||||
extension->top = std::max( extension->top, mEvaluatedLabelDistance + gridFrameDistance + textWidth );
|
||||
}
|
||||
else //Vertical
|
||||
{
|
||||
xpos += textHeight / 2.0;
|
||||
ypos -= ( mAnnotationFrameDistance + gridFrameDistance );
|
||||
ypos -= ( mEvaluatedLabelDistance + gridFrameDistance );
|
||||
rotation = 270;
|
||||
if ( extension )
|
||||
extension->top = std::max( extension->top, mAnnotationFrameDistance + gridFrameDistance + textWidth );
|
||||
extension->top = std::max( extension->top, mEvaluatedLabelDistance + gridFrameDistance + textWidth );
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1529,7 +1534,7 @@ QString QgsLayoutItemMapGrid::gridAnnotationString( double value, QgsLayoutItemM
|
||||
int QgsLayoutItemMapGrid::xGridLines( QList< QPair< double, QLineF > > &lines ) const
|
||||
{
|
||||
lines.clear();
|
||||
if ( !mMap || mGridIntervalY <= 0.0 )
|
||||
if ( !mMap || mEvaluatedIntervalY <= 0.0 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@ -1537,8 +1542,8 @@ int QgsLayoutItemMapGrid::xGridLines( QList< QPair< double, QLineF > > &lines )
|
||||
|
||||
QPolygonF mapPolygon = mMap->transformedMapPolygon();
|
||||
QRectF mapBoundingRect = mapPolygon.boundingRect();
|
||||
double gridIntervalY = mGridIntervalY;
|
||||
double gridOffsetY = mGridOffsetY;
|
||||
double gridIntervalY = mEvaluatedIntervalY;
|
||||
double gridOffsetY = mEvaluatedOffsetY;
|
||||
double annotationScale = 1.0;
|
||||
if ( mGridUnit != MapUnit )
|
||||
{
|
||||
@ -1615,15 +1620,15 @@ int QgsLayoutItemMapGrid::xGridLines( QList< QPair< double, QLineF > > &lines )
|
||||
int QgsLayoutItemMapGrid::yGridLines( QList< QPair< double, QLineF > > &lines ) const
|
||||
{
|
||||
lines.clear();
|
||||
if ( !mMap || mGridIntervalX <= 0.0 )
|
||||
if ( !mMap || mEvaluatedIntervalX <= 0.0 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
QPolygonF mapPolygon = mMap->transformedMapPolygon();
|
||||
QRectF mapBoundingRect = mapPolygon.boundingRect();
|
||||
double gridIntervalX = mGridIntervalX;
|
||||
double gridOffsetX = mGridOffsetX;
|
||||
double gridIntervalX = mEvaluatedIntervalX;
|
||||
double gridOffsetX = mEvaluatedOffsetX;
|
||||
double annotationScale = 1.0;
|
||||
if ( mGridUnit != MapUnit )
|
||||
{
|
||||
@ -1698,13 +1703,13 @@ int QgsLayoutItemMapGrid::yGridLines( QList< QPair< double, QLineF > > &lines )
|
||||
int QgsLayoutItemMapGrid::xGridLinesCrsTransform( const QgsRectangle &bbox, const QgsCoordinateTransform &t, QList< QPair< double, QPolygonF > > &lines ) const
|
||||
{
|
||||
lines.clear();
|
||||
if ( !mMap || mGridIntervalY <= 0.0 )
|
||||
if ( !mMap || mEvaluatedIntervalY <= 0.0 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
double roundCorrection = bbox.yMaximum() > 0 ? 1.0 : 0.0;
|
||||
double currentLevel = static_cast< int >( ( bbox.yMaximum() - mGridOffsetY ) / mGridIntervalY + roundCorrection ) * mGridIntervalY + mGridOffsetY;
|
||||
double currentLevel = static_cast< int >( ( bbox.yMaximum() - mEvaluatedOffsetY ) / mEvaluatedIntervalY + roundCorrection ) * mEvaluatedIntervalY + mEvaluatedOffsetY;
|
||||
|
||||
double minX = bbox.xMinimum();
|
||||
double maxX = bbox.xMaximum();
|
||||
@ -1765,7 +1770,7 @@ int QgsLayoutItemMapGrid::xGridLinesCrsTransform( const QgsRectangle &bbox, cons
|
||||
gridLineCount++;
|
||||
}
|
||||
}
|
||||
currentLevel -= mGridIntervalY;
|
||||
currentLevel -= mEvaluatedIntervalY;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1774,13 +1779,13 @@ int QgsLayoutItemMapGrid::xGridLinesCrsTransform( const QgsRectangle &bbox, cons
|
||||
int QgsLayoutItemMapGrid::yGridLinesCrsTransform( const QgsRectangle &bbox, const QgsCoordinateTransform &t, QList< QPair< double, QPolygonF > > &lines ) const
|
||||
{
|
||||
lines.clear();
|
||||
if ( !mMap || mGridIntervalX <= 0.0 )
|
||||
if ( !mMap || mEvaluatedIntervalX <= 0.0 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
double roundCorrection = bbox.xMinimum() > 0 ? 1.0 : 0.0;
|
||||
double currentLevel = static_cast< int >( ( bbox.xMinimum() - mGridOffsetX ) / mGridIntervalX + roundCorrection ) * mGridIntervalX + mGridOffsetX;
|
||||
double currentLevel = static_cast< int >( ( bbox.xMinimum() - mEvaluatedOffsetX ) / mEvaluatedIntervalX + roundCorrection ) * mEvaluatedIntervalX + mEvaluatedOffsetX;
|
||||
|
||||
double minY = bbox.yMinimum();
|
||||
double maxY = bbox.yMaximum();
|
||||
@ -1835,7 +1840,7 @@ int QgsLayoutItemMapGrid::yGridLinesCrsTransform( const QgsRectangle &bbox, cons
|
||||
gridLineCount++;
|
||||
}
|
||||
}
|
||||
currentLevel += mGridIntervalX;
|
||||
currentLevel += mEvaluatedIntervalX;
|
||||
if ( crosses180 && currentLevel > 180.0 )
|
||||
{
|
||||
currentLevel -= 360.0;
|
||||
@ -1927,6 +1932,20 @@ bool QgsLayoutItemMapGrid::shouldShowDivisionForDisplayMode( QgsLayoutItemMapGri
|
||||
|| ( mode == QgsLayoutItemMapGrid::LongitudeOnly && coordinate == QgsLayoutItemMapGrid::Longitude );
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::refreshDataDefinedProperties()
|
||||
{
|
||||
QgsExpressionContext context = createExpressionContext();
|
||||
|
||||
mEvaluatedEnabled = mDataDefinedProperties.valueAsBool( QgsLayoutObject::MapGridEnabled, context, true );
|
||||
mEvaluatedIntervalX = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridIntervalX, context, mGridIntervalX );
|
||||
mEvaluatedIntervalY = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridIntervalY, context, mGridIntervalY );
|
||||
mEvaluatedOffsetX = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridOffsetX, context, mGridOffsetX );
|
||||
mEvaluatedOffsetY = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridOffsetY, context, mGridOffsetY );
|
||||
mEvaluatedFrameSize = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridFrameSize, context, mGridFrameWidth );
|
||||
mEvaluatedFrameMargin = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridFrameMargin, context, mGridFrameMargin );
|
||||
mEvaluatedLabelDistance = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MapGridLabelDistance, context, mAnnotationFrameDistance );
|
||||
}
|
||||
|
||||
bool sortByDistance( QPair<qreal, QgsLayoutItemMapGrid::BorderSide> a, QPair<qreal, QgsLayoutItemMapGrid::BorderSide> b )
|
||||
{
|
||||
return a.first < b.first;
|
||||
@ -2072,7 +2091,7 @@ void QgsLayoutItemMapGrid::calculateMaxExtension( double &top, double &right, do
|
||||
bottom = 0.0;
|
||||
left = 0.0;
|
||||
|
||||
if ( !mMap || !mEnabled )
|
||||
if ( !mMap || !mEnabled || !mEvaluatedEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -2130,6 +2149,7 @@ void QgsLayoutItemMapGrid::setIntervalX( const double interval )
|
||||
}
|
||||
mGridIntervalX = interval;
|
||||
mTransformDirty = true;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setIntervalY( const double interval )
|
||||
@ -2140,6 +2160,7 @@ void QgsLayoutItemMapGrid::setIntervalY( const double interval )
|
||||
}
|
||||
mGridIntervalY = interval;
|
||||
mTransformDirty = true;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setOffsetX( const double offset )
|
||||
@ -2150,6 +2171,7 @@ void QgsLayoutItemMapGrid::setOffsetX( const double offset )
|
||||
}
|
||||
mGridOffsetX = offset;
|
||||
mTransformDirty = true;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setOffsetY( const double offset )
|
||||
@ -2160,6 +2182,7 @@ void QgsLayoutItemMapGrid::setOffsetY( const double offset )
|
||||
}
|
||||
mGridOffsetY = offset;
|
||||
mTransformDirty = true;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setStyle( const QgsLayoutItemMapGrid::GridStyle style )
|
||||
@ -2172,6 +2195,12 @@ void QgsLayoutItemMapGrid::setStyle( const QgsLayoutItemMapGrid::GridStyle style
|
||||
mTransformDirty = true;
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setCrossLength( const double length )
|
||||
{
|
||||
mCrossLength = length;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setAnnotationDirection( const QgsLayoutItemMapGrid::AnnotationDirection direction, const QgsLayoutItemMapGrid::BorderSide border )
|
||||
{
|
||||
switch ( border )
|
||||
@ -2243,11 +2272,31 @@ bool QgsLayoutItemMapGrid::accept( QgsStyleEntityVisitorInterface *visitor ) con
|
||||
return true;
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::refresh()
|
||||
{
|
||||
mTransformDirty = true;
|
||||
refreshDataDefinedProperties();
|
||||
mMap->updateBoundingRect();
|
||||
mMap->update();
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapGrid::testFrameSideFlag( QgsLayoutItemMapGrid::FrameSideFlag flag ) const
|
||||
{
|
||||
return mGridFrameSides.testFlag( flag );
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setFrameWidth( const double width )
|
||||
{
|
||||
mGridFrameWidth = width;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setFrameMargin( const double margin )
|
||||
{
|
||||
mGridFrameMargin = margin;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setAnnotationDirection( const AnnotationDirection direction )
|
||||
{
|
||||
mLeftGridAnnotationDirection = direction;
|
||||
@ -2297,6 +2346,12 @@ QgsLayoutItemMapGrid::AnnotationPosition QgsLayoutItemMapGrid::annotationPositio
|
||||
return mLeftGridAnnotationPosition; // no warnings
|
||||
}
|
||||
|
||||
void QgsLayoutItemMapGrid::setAnnotationFrameDistance( const double distance )
|
||||
{
|
||||
mAnnotationFrameDistance = distance;
|
||||
refreshDataDefinedProperties();
|
||||
}
|
||||
|
||||
QgsLayoutItemMapGrid::AnnotationDirection QgsLayoutItemMapGrid::annotationDirection( const BorderSide border ) const
|
||||
{
|
||||
if ( !mMap )
|
||||
|
||||
@ -413,7 +413,7 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
* with QgsLayoutItemMapGrid::Cross styles.
|
||||
* \see crossLength()
|
||||
*/
|
||||
void setCrossLength( const double length ) { mCrossLength = length; }
|
||||
void setCrossLength( const double length );
|
||||
|
||||
/**
|
||||
* Retrieves the length (in layout units) of the cross segments drawn for the grid. This is only used for grids
|
||||
@ -589,7 +589,7 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
* Sets the \a distance between the map frame and annotations. Units are layout units.
|
||||
* \see annotationFrameDistance()
|
||||
*/
|
||||
void setAnnotationFrameDistance( const double distance ) { mAnnotationFrameDistance = distance; }
|
||||
void setAnnotationFrameDistance( const double distance );
|
||||
|
||||
/**
|
||||
* Returns the distance between the map frame and annotations. Units are in layout units.
|
||||
@ -715,7 +715,7 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
* setFramePenSize method.
|
||||
* \see frameWidth()
|
||||
*/
|
||||
void setFrameWidth( const double width ) { mGridFrameWidth = width; }
|
||||
void setFrameWidth( const double width );
|
||||
|
||||
/**
|
||||
* Gets the grid frame width in layout units. This property controls how wide the grid frame is.
|
||||
@ -731,7 +731,7 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
* \see frameMargin()
|
||||
* \since QGIS 3.6
|
||||
*/
|
||||
void setFrameMargin( const double margin ) { mGridFrameMargin = margin; }
|
||||
void setFrameMargin( const double margin );
|
||||
|
||||
/**
|
||||
* Sets the grid frame Margin (in layout units).
|
||||
@ -807,6 +807,7 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
|
||||
QgsExpressionContext createExpressionContext() const override;
|
||||
bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
|
||||
void refresh() override;
|
||||
|
||||
private:
|
||||
|
||||
@ -911,6 +912,15 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
QRectF mPrevPaintRect;
|
||||
mutable QPolygonF mPrevMapPolygon;
|
||||
|
||||
bool mEvaluatedEnabled = true;
|
||||
double mEvaluatedIntervalX = 0;
|
||||
double mEvaluatedIntervalY = 0;
|
||||
double mEvaluatedOffsetX = 0;
|
||||
double mEvaluatedOffsetY = 0;
|
||||
double mEvaluatedFrameSize = 0;
|
||||
double mEvaluatedFrameMargin = 0;
|
||||
double mEvaluatedLabelDistance = 0;
|
||||
|
||||
class QgsMapAnnotation
|
||||
{
|
||||
public:
|
||||
@ -1016,6 +1026,7 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
|
||||
bool shouldShowDivisionForSide( AnnotationCoordinate coordinate, BorderSide side ) const;
|
||||
bool shouldShowDivisionForDisplayMode( AnnotationCoordinate coordinate, DisplayMode mode ) const;
|
||||
void refreshDataDefinedProperties();
|
||||
|
||||
friend class TestQgsLayoutMapGrid;
|
||||
|
||||
|
||||
@ -30,9 +30,12 @@ QgsLayoutItemMapItem::QgsLayoutItemMapItem( const QString &name, QgsLayoutItemMa
|
||||
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext & ) const
|
||||
bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const
|
||||
{
|
||||
Q_UNUSED( document )
|
||||
|
||||
QgsLayoutObject::writeObjectPropertiesToElement( element, document, context );
|
||||
|
||||
element.setAttribute( QStringLiteral( "uuid" ), mUuid );
|
||||
element.setAttribute( QStringLiteral( "name" ), mName );
|
||||
element.setAttribute( QStringLiteral( "show" ), mEnabled );
|
||||
@ -49,9 +52,10 @@ bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &documen
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapItem::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext & )
|
||||
bool QgsLayoutItemMapItem::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context )
|
||||
{
|
||||
Q_UNUSED( doc )
|
||||
QgsLayoutObject::readObjectPropertiesFromElement( itemElem, doc, context );
|
||||
|
||||
mUuid = itemElem.attribute( QStringLiteral( "uuid" ) );
|
||||
mName = itemElem.attribute( QStringLiteral( "name" ) );
|
||||
mEnabled = ( itemElem.attribute( QStringLiteral( "show" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
|
||||
|
||||
@ -68,6 +68,14 @@ void QgsLayoutObject::initPropertyDefinitions()
|
||||
{ QgsLayoutObject::MapAtlasMargin, QgsPropertyDefinition( "dataDefinedMapAtlasMargin", QObject::tr( "Atlas margin" ), QgsPropertyDefinition::DoublePositive ) },
|
||||
{ QgsLayoutObject::MapLayers, QgsPropertyDefinition( "dataDefinedMapLayers", QgsPropertyDefinition::DataTypeString, QObject::tr( "Map Layers" ), tr( "list of map layer names separated by | characters" ) ) },
|
||||
{ QgsLayoutObject::MapStylePreset, QgsPropertyDefinition( "dataDefinedMapStylePreset", QgsPropertyDefinition::DataTypeString, QObject::tr( "Map theme" ), tr( "name of an existing map theme (case-sensitive)" ) ) },
|
||||
{ QgsLayoutObject::MapGridEnabled, QgsPropertyDefinition( "dataDefinedMapGridEnabled", QObject::tr( "Grid enabled" ), QgsPropertyDefinition::Boolean ) },
|
||||
{ QgsLayoutObject::MapGridIntervalX, QgsPropertyDefinition( "dataDefinedMapGridIntervalX", QObject::tr( "Grid interval X" ), QgsPropertyDefinition::DoublePositive ) },
|
||||
{ QgsLayoutObject::MapGridIntervalY, QgsPropertyDefinition( "dataDefinedMapGridIntervalY", QObject::tr( "Grid interval Y" ), QgsPropertyDefinition::DoublePositive ) },
|
||||
{ QgsLayoutObject::MapGridOffsetX, QgsPropertyDefinition( "dataDefinedMapGridOffsetX", QObject::tr( "Grid offset X" ), QgsPropertyDefinition::Double ) },
|
||||
{ QgsLayoutObject::MapGridOffsetY, QgsPropertyDefinition( "dataDefinedMapGridOffsetY", QObject::tr( "Grid offset Y" ), QgsPropertyDefinition::Double ) },
|
||||
{ QgsLayoutObject::MapGridFrameSize, QgsPropertyDefinition( "dataDefinedMapGridFrameSize", QObject::tr( "Grid frame size" ), QgsPropertyDefinition::DoublePositive ) },
|
||||
{ QgsLayoutObject::MapGridFrameMargin, QgsPropertyDefinition( "dataDefinedMapGridFrameMargin", QObject::tr( "Grid frame margin" ), QgsPropertyDefinition::DoublePositive ) },
|
||||
{ QgsLayoutObject::MapGridLabelDistance, QgsPropertyDefinition( "dataDefinedMapGridLabelDistance", QObject::tr( "Grid label distance" ), QgsPropertyDefinition::DoublePositive ) },
|
||||
{ QgsLayoutObject::PictureSource, QgsPropertyDefinition( "dataDefinedSource", QObject::tr( "Picture source (URL)" ), QgsPropertyDefinition::String ) },
|
||||
{ QgsLayoutObject::SourceUrl, QgsPropertyDefinition( "dataDefinedSourceUrl", QObject::tr( "Source URL" ), QgsPropertyDefinition::String ) },
|
||||
{ QgsLayoutObject::PictureSvgBackgroundColor, QgsPropertyDefinition( "dataDefinedSvgBackgroundColor", QObject::tr( "SVG background color" ), QgsPropertyDefinition::ColorWithAlpha ) },
|
||||
|
||||
@ -164,6 +164,14 @@ class CORE_EXPORT QgsLayoutObject: public QObject, public QgsExpressionContextGe
|
||||
MapLayers, //!< Map layer set
|
||||
MapStylePreset, //!< Layer and style map theme
|
||||
MapLabelMargin, //!< Map label margin
|
||||
MapGridEnabled, //!< Map grid enabled
|
||||
MapGridIntervalX, //!< Map grid interval X
|
||||
MapGridIntervalY, //!< Map grid interval Y
|
||||
MapGridOffsetX, //!< Map grid offset X
|
||||
MapGridOffsetY, //!< Map grid offset Y
|
||||
MapGridFrameSize, //!< Map grid frame size
|
||||
MapGridFrameMargin, //!< Map grid frame margin
|
||||
MapGridLabelDistance, //!< Map grid label distance
|
||||
//composer picture
|
||||
PictureSource, //!< Picture source url
|
||||
PictureSvgBackgroundColor, //!< SVG background color
|
||||
|
||||
@ -47,9 +47,9 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>389</width>
|
||||
<height>1452</height>
|
||||
<y>-48</y>
|
||||
<width>394</width>
|
||||
<height>1110</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -65,22 +65,80 @@
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Enabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsPropertyOverrideButton" name="mEnabledDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsCollapsibleGroupBoxBasic" name="mGridCheckBox">
|
||||
<property name="title">
|
||||
<string>Appearance</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6" columnstretch="0,0">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_6" columnstretch="0,1,0">
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="mMarkerStyleLabel">
|
||||
<property name="text">
|
||||
<string>Marker style</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="mOffsetXLabel_2">
|
||||
<property name="text">
|
||||
<string>Offset</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QgsDoubleSpinBox" name="mCrossWidthSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="mLineStyleLabel">
|
||||
<property name="text">
|
||||
<string>Line style</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="mGridTypeLabel_2">
|
||||
<property name="accessibleName">
|
||||
<string extracomment="Hello translotor"/>
|
||||
@ -93,31 +151,65 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="mGridTypeComboBox"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="mMapGridCRSLabel">
|
||||
<property name="text">
|
||||
<string>CRS</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="mMapGridCRSButton">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="mIntervalXLabel_2">
|
||||
<property name="text">
|
||||
<string>Change…</string>
|
||||
<string>Interval</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="mCrossWidthLabel">
|
||||
<property name="text">
|
||||
<string>Cross width</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="mGridBlendLabel">
|
||||
<property name="text">
|
||||
<string>Blend mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mMapGridUnitLabel">
|
||||
<property name="text">
|
||||
<string>Interval units</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="7" column="2">
|
||||
<widget class="QgsPropertyOverrideButton" name="mCrossWidthDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mGridTypeComboBox"/>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QPushButton" name="mMapGridCRSButton">
|
||||
<property name="text">
|
||||
<string>Change…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mMapGridUnitComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
@ -136,19 +228,9 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="mIntervalXLabel_2">
|
||||
<property name="text">
|
||||
<string>Interval</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<item>
|
||||
<item row="5" column="1" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QgsDoubleSpinBox" name="mIntervalXSpinBox">
|
||||
<property name="prefix">
|
||||
<string>X </string>
|
||||
@ -161,7 +243,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QgsDoubleSpinBox" name="mIntervalYSpinBox">
|
||||
<property name="prefix">
|
||||
<string>Y </string>
|
||||
@ -174,21 +256,25 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsPropertyOverrideButton" name="mIntervalXDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsPropertyOverrideButton" name="mIntervalYDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mOffsetXLabel_2">
|
||||
<property name="text">
|
||||
<string>Offset</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QgsDoubleSpinBox" name="mOffsetXSpinBox">
|
||||
<property name="prefix">
|
||||
<string>X </string>
|
||||
@ -201,7 +287,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QgsDoubleSpinBox" name="mOffsetYSpinBox">
|
||||
<property name="prefix">
|
||||
<string>Y </string>
|
||||
@ -214,62 +300,23 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsPropertyOverrideButton" name="mOffsetXDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsPropertyOverrideButton" name="mOffsetYDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="mCrossWidthLabel">
|
||||
<property name="text">
|
||||
<string>Cross width</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QgsDoubleSpinBox" name="mCrossWidthSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="mLineStyleLabel">
|
||||
<property name="text">
|
||||
<string>Line style</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="mMarkerStyleLabel">
|
||||
<property name="text">
|
||||
<string>Marker style</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="mGridBlendLabel">
|
||||
<property name="text">
|
||||
<string>Blend mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QgsBlendModeComboBox" name="mGridBlendComboBox"/>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<item row="8" column="1" colspan="2">
|
||||
<widget class="QgsSymbolButton" name="mGridLineStyleButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
@ -282,7 +329,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="9" column="1" colspan="2">
|
||||
<widget class="QgsSymbolButton" name="mGridMarkerStyleButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
@ -295,6 +342,9 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="1" colspan="2">
|
||||
<widget class="QgsBlendModeComboBox" name="mGridBlendComboBox"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -309,109 +359,8 @@
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">composermapgrid</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,1,1">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="mFrameStyleLabel_2">
|
||||
<property name="text">
|
||||
<string>Frame style</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="mFrameWidthLabel">
|
||||
<property name="text">
|
||||
<string>Frame size</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="mFramePenLabel">
|
||||
<property name="text">
|
||||
<string>Frame line thickness</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QgsDoubleSpinBox" name="mGridFramePenSizeSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
</property>
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QgsColorButton" name="mGridFramePenColorButton">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mFrameFillLabel">
|
||||
<property name="text">
|
||||
<string>Frame fill colors</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QgsColorButton" name="mGridFrameFill1ColorButton">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QgsColorButton" name="mGridFrameFill2ColorButton">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="3">
|
||||
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,0,0,0,0">
|
||||
<item row="12" column="0" colspan="5">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="mCheckGridLeftSide">
|
||||
@ -443,10 +392,44 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="2">
|
||||
<item row="4" column="1" colspan="3">
|
||||
<widget class="QgsDoubleSpinBox" name="mGridFrameMarginSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
</property>
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="4">
|
||||
<widget class="QComboBox" name="mFrameStyleComboBox"/>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="mLeftDivisionsLabel">
|
||||
<property name="text">
|
||||
<string>Left divisions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="mFrameWidthLabel">
|
||||
<property name="text">
|
||||
<string>Frame size</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="mRightDivisionsLabel">
|
||||
<property name="text">
|
||||
<string>Right divisions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="3">
|
||||
<widget class="QgsDoubleSpinBox" name="mFrameWidthSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
@ -456,60 +439,148 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="mRightDivisionsLabel">
|
||||
<item row="8" column="1" colspan="4">
|
||||
<widget class="QComboBox" name="mFrameDivisionsLeftComboBox"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="mFrameStyleLabel_2">
|
||||
<property name="text">
|
||||
<string>Right divisions</string>
|
||||
<string>Frame style</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="mLeftDivisionsLabel">
|
||||
<property name="text">
|
||||
<string>Left divisions</string>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="10" column="1" colspan="4">
|
||||
<widget class="QComboBox" name="mFrameDivisionsTopComboBox"/>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="9" column="1" colspan="4">
|
||||
<widget class="QComboBox" name="mFrameDivisionsRightComboBox"/>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="mTopDivisionsLabel">
|
||||
<property name="text">
|
||||
<string>Top divisions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="mFramePenLabel">
|
||||
<property name="text">
|
||||
<string>Frame line thickness</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QgsDoubleSpinBox" name="mGridFramePenSizeSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
</property>
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="4">
|
||||
<widget class="QgsPropertyOverrideButton" name="mFrameMarginDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="1" colspan="4">
|
||||
<widget class="QComboBox" name="mFrameDivisionsBottomComboBox"/>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QLabel" name="mBottomDivisionsLabel">
|
||||
<property name="text">
|
||||
<string>Bottom divisions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mFrameDivisionsLeftComboBox"/>
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="mFrameFillLabel">
|
||||
<property name="text">
|
||||
<string>Frame fill colors</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mFrameDivisionsRightComboBox"/>
|
||||
<item row="2" column="4">
|
||||
<widget class="QgsPropertyOverrideButton" name="mFrameSizeDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mFrameDivisionsTopComboBox"/>
|
||||
</item>
|
||||
<item row="8" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mFrameDivisionsBottomComboBox"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mFrameMarginLabel">
|
||||
<property name="text">
|
||||
<string>Frame margin</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QgsDoubleSpinBox" name="mGridFrameMarginSpinBox">
|
||||
<property name="suffix">
|
||||
<string> mm</string>
|
||||
<item row="6" column="2">
|
||||
<widget class="QgsPropertyOverrideButton" name="mCrossWidthDDBtn_4">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="3" colspan="2">
|
||||
<widget class="QgsColorButton" name="mGridFrameFill2ColorButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1" colspan="2">
|
||||
<widget class="QgsColorButton" name="mGridFrameFill1ColorButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3" colspan="2">
|
||||
<widget class="QgsColorButton" name="mGridFramePenColorButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -528,7 +599,7 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">composermapgrid</string>
|
||||
@ -536,7 +607,17 @@
|
||||
<property name="collapsed" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0">
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelBottom">
|
||||
<property name="text">
|
||||
<string>Bottom</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="mAnnotationFormatLabel">
|
||||
<property name="text">
|
||||
@ -544,62 +625,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
||||
<item>
|
||||
<widget class="QComboBox" name="mAnnotationFormatComboBox"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="mAnnotationFormatButton">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/mIconExpression.svg</normaloff>:/images/themes/default/mIconExpression.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelLeft">
|
||||
<item row="14" column="0">
|
||||
<widget class="QLabel" name="mFontColorLabel">
|
||||
<property name="text">
|
||||
<string>Left</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
<string>Font color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayLeftComboBox"/>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationPositionLeftComboBox"/>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxLeft"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelRight">
|
||||
<property name="text">
|
||||
<string>Right</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayRightComboBox"/>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationPositionRightComboBox"/>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxRight"/>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelTop">
|
||||
<property name="text">
|
||||
@ -610,52 +642,10 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayTopComboBox"/>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationPositionTopComboBox"/>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxTop"/>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelBottom">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelLeft">
|
||||
<property name="text">
|
||||
<string>Bottom</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayBottomComboBox"/>
|
||||
</item>
|
||||
<item row="11" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationPositionBottomComboBox"/>
|
||||
</item>
|
||||
<item row="12" column="1">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxBottom"/>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Font</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<widget class="QLabel" name="mFontColorLabel">
|
||||
<property name="text">
|
||||
<string>Font color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0">
|
||||
<widget class="QLabel" name="mDistanceToFrameLabel">
|
||||
<property name="text">
|
||||
<string>Distance to map frame</string>
|
||||
<string>Left</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
@ -679,14 +669,48 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="16" column="1">
|
||||
<item row="13" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Font</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mAnnotationPositionLabelRight">
|
||||
<property name="text">
|
||||
<string>Right</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0">
|
||||
<widget class="QLabel" name="mDistanceToFrameLabel">
|
||||
<property name="text">
|
||||
<string>Distance to map frame</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="2">
|
||||
<widget class="QgsPropertyOverrideButton" name="mLabelDistDDBtn">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="16" column="1" colspan="2">
|
||||
<widget class="QgsSpinBox" name="mCoordinatePrecisionSpinBox">
|
||||
<property name="showClearButton" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="1">
|
||||
<item row="14" column="1" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QgsColorButton" name="mAnnotationFontColorButton">
|
||||
@ -716,7 +740,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="13" column="1">
|
||||
<item row="13" column="1" colspan="2">
|
||||
<widget class="QgsFontButton" name="mAnnotationFontButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
@ -729,6 +753,60 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxBottom"/>
|
||||
</item>
|
||||
<item row="11" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationPositionBottomComboBox"/>
|
||||
</item>
|
||||
<item row="10" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayBottomComboBox"/>
|
||||
</item>
|
||||
<item row="9" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxTop"/>
|
||||
</item>
|
||||
<item row="8" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationPositionTopComboBox"/>
|
||||
</item>
|
||||
<item row="7" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayTopComboBox"/>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxRight"/>
|
||||
</item>
|
||||
<item row="5" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationPositionRightComboBox"/>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayRightComboBox"/>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDirectionComboBoxLeft"/>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationPositionLeftComboBox"/>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mAnnotationDisplayLeftComboBox"/>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
||||
<item>
|
||||
<widget class="QComboBox" name="mAnnotationFormatComboBox"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="mAnnotationFormatButton">
|
||||
<property name="text">
|
||||
<string>…</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>:/images/themes/default/mIconExpression.svg</normaloff>:/images/themes/default/mIconExpression.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -783,6 +861,11 @@
|
||||
<extends>QToolButton</extends>
|
||||
<header>qgssymbolbutton.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsPropertyOverrideButton</class>
|
||||
<extends>QToolButton</extends>
|
||||
<header>qgspropertyoverridebutton.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>scrollArea</tabstop>
|
||||
@ -833,39 +916,6 @@
|
||||
<tabstop>mDistanceToMapFrameSpinBox</tabstop>
|
||||
<tabstop>mCoordinatePrecisionSpinBox</tabstop>
|
||||
</tabstops>
|
||||
<resources>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
<include location="../../../images/images.qrc"/>
|
||||
</resources>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user