Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Expose margin control
  • Loading branch information
nyalldawson committed Jan 17, 2023
1 parent 054c459 commit d0f6481
Show file tree
Hide file tree
Showing 8 changed files with 291 additions and 13 deletions.
4 changes: 4 additions & 0 deletions python/core/auto_generated/layout/qgslayoutitem.sip.in
Expand Up @@ -180,6 +180,10 @@ Base class for graphical items within a :py:class:`QgsLayout`.
UndoStrokeWidth,
UndoBackgroundColor,
UndoOpacity,
UndoMarginLeft,
UndoMarginTop,
UndoMarginBottom,
UndoMarginRight,
UndoSetId,
UndoRotation,
UndoShapeStyle,
Expand Down
4 changes: 4 additions & 0 deletions python/core/auto_generated/layout/qgslayoutobject.sip.in
Expand Up @@ -135,6 +135,10 @@ A base class for objects which belong to a layout.
ExcludeFromExports,
FrameColor,
BackgroundColor,
MarginLeft,
MarginTop,
MarginRight,
MarginBottom,
//composer map
MapRotation,
MapScale,
Expand Down
4 changes: 4 additions & 0 deletions src/core/layout/qgslayoutitem.h
Expand Up @@ -231,6 +231,10 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt
UndoStrokeWidth, //!< Stroke width adjustment
UndoBackgroundColor, //!< Background color adjustment
UndoOpacity, //!< Opacity adjustment
UndoMarginLeft, //!< Left margin (since QGIS 3.30)
UndoMarginTop, //!< Top margin (since QGIS 3.30)
UndoMarginBottom, //!< Bottom margin (since QGIS 3.30)
UndoMarginRight, //!< Right margin (since QGIS 3.30)
UndoSetId, //!< Change item ID
UndoRotation, //!< Rotation adjustment
UndoShapeStyle, //!< Shape symbol style
Expand Down
89 changes: 89 additions & 0 deletions src/core/layout/qgslayoutitemelevationprofile.cpp
Expand Up @@ -285,6 +285,95 @@ void QgsLayoutItemElevationProfile::refreshDataDefinedProperty( DataDefinedPrope
forceUpdate = true;
}

if ( ( property == QgsLayoutObject::MarginLeft || property == QgsLayoutObject::AllProperties )
&& ( mDataDefinedProperties.isActive( QgsLayoutObject::MarginLeft ) ) )
{
double value = mPlot->margins().left();

bool ok = false;
value = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MarginLeft, context, value, &ok );

if ( !ok )
{
QgsMessageLog::logMessage( tr( "Elevation profile left margin expression eval error" ) );
}
else
{
QgsMargins margins = mPlot->margins();
margins.setLeft( value );
mPlot->setMargins( margins );
}

forceUpdate = true;
}

if ( ( property == QgsLayoutObject::MarginRight || property == QgsLayoutObject::AllProperties )
&& ( mDataDefinedProperties.isActive( QgsLayoutObject::MarginRight ) ) )
{
double value = mPlot->margins().right();

bool ok = false;
value = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MarginRight, context, value, &ok );

if ( !ok )
{
QgsMessageLog::logMessage( tr( "Elevation profile right margin expression eval error" ) );
}
else
{
QgsMargins margins = mPlot->margins();
margins.setRight( value );
mPlot->setMargins( margins );
}

forceUpdate = true;
}

if ( ( property == QgsLayoutObject::MarginTop || property == QgsLayoutObject::AllProperties )
&& ( mDataDefinedProperties.isActive( QgsLayoutObject::MarginTop ) ) )
{
double value = mPlot->margins().top();

bool ok = false;
value = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MarginTop, context, value, &ok );

if ( !ok )
{
QgsMessageLog::logMessage( tr( "Elevation profile top margin expression eval error" ) );
}
else
{
QgsMargins margins = mPlot->margins();
margins.setTop( value );
mPlot->setMargins( margins );
}

forceUpdate = true;
}

if ( ( property == QgsLayoutObject::MarginBottom || property == QgsLayoutObject::AllProperties )
&& ( mDataDefinedProperties.isActive( QgsLayoutObject::MarginBottom ) ) )
{
double value = mPlot->margins().bottom();

bool ok = false;
value = mDataDefinedProperties.valueAsDouble( QgsLayoutObject::MarginLeft, context, value, &ok );

if ( !ok )
{
QgsMessageLog::logMessage( tr( "Elevation profile bottom margin expression eval error" ) );
}
else
{
QgsMargins margins = mPlot->margins();
margins.setBottom( value );
mPlot->setMargins( margins );
}

forceUpdate = true;
}


if ( forceUpdate )
{
refreshItemSize();
Expand Down
8 changes: 8 additions & 0 deletions src/core/layout/qgslayoutobject.cpp
Expand Up @@ -58,6 +58,10 @@ void QgsLayoutObject::initPropertyDefinitions()
{ QgsLayoutObject::ExcludeFromExports, QgsPropertyDefinition( "dataDefinedExcludeExports", QObject::tr( "Exclude item from exports" ), QgsPropertyDefinition::Boolean ) },
{ QgsLayoutObject::FrameColor, QgsPropertyDefinition( "dataDefinedFrameColor", QObject::tr( "Frame color" ), QgsPropertyDefinition::ColorWithAlpha ) },
{ QgsLayoutObject::BackgroundColor, QgsPropertyDefinition( "dataDefinedBackgroundColor", QObject::tr( "Background color" ), QgsPropertyDefinition::ColorWithAlpha ) },
{ QgsLayoutObject::MarginLeft, QgsPropertyDefinition( "dataDefinedMarginLeft", QObject::tr( "Left margin" ), QgsPropertyDefinition::DoublePositive ) },
{ QgsLayoutObject::MarginTop, QgsPropertyDefinition( "dataDefinedMarginTop", QObject::tr( "Top margin" ), QgsPropertyDefinition::DoublePositive ) },
{ QgsLayoutObject::MarginRight, QgsPropertyDefinition( "dataDefinedMarginRight", QObject::tr( "Right margin" ), QgsPropertyDefinition::DoublePositive ) },
{ QgsLayoutObject::MarginBottom, QgsPropertyDefinition( "dataDefinedMarginBottom", QObject::tr( "Bottom margin" ), QgsPropertyDefinition::DoublePositive ) },
{ QgsLayoutObject::MapRotation, QgsPropertyDefinition( "dataDefinedMapRotation", QObject::tr( "Map rotation" ), QgsPropertyDefinition::Rotation ) },
{ QgsLayoutObject::MapScale, QgsPropertyDefinition( "dataDefinedMapScale", QObject::tr( "Map scale" ), QgsPropertyDefinition::DoublePositive ) },
{ QgsLayoutObject::MapXMin, QgsPropertyDefinition( "dataDefinedMapXMin", QObject::tr( "Extent minimum X" ), QgsPropertyDefinition::Double ) },
Expand Down Expand Up @@ -215,6 +219,10 @@ bool QgsLayoutObject::propertyAssociatesWithParentMultiframe( QgsLayoutObject::D
case QgsLayoutObject::ElevationProfileMaximumDistance:
case QgsLayoutObject::ElevationProfileMinimumElevation:
case QgsLayoutObject::ElevationProfileMaximumElevation:
case QgsLayoutObject::MarginLeft:
case QgsLayoutObject::MarginRight:
case QgsLayoutObject::MarginTop:
case QgsLayoutObject::MarginBottom:
return false;
}
return false;
Expand Down
4 changes: 4 additions & 0 deletions src/core/layout/qgslayoutobject.h
Expand Up @@ -163,6 +163,10 @@ class CORE_EXPORT QgsLayoutObject: public QObject, public QgsExpressionContextGe
ExcludeFromExports, //!< Exclude item from exports
FrameColor, //!< Item frame color
BackgroundColor, //!< Item background color
MarginLeft, //!< Left margin (since QGIS 3.30)
MarginTop, //!< Top margin (since QGIS 3.30)
MarginRight, //!< Right margin (since QGIS 3.30)
MarginBottom, //!< Bottom margin (since QGIS 3.30)
//composer map
MapRotation, //!< Map rotation
MapScale, //!< Map scale
Expand Down
69 changes: 69 additions & 0 deletions src/gui/layout/qgslayoutelevationprofilewidget.cpp
Expand Up @@ -286,6 +286,62 @@ QgsLayoutElevationProfileWidget::QgsLayoutElevationProfileWidget( QgsLayoutItemE
mProfile->update();
} );

mSpinLeftMargin->setClearValue( 0 );
connect( mSpinLeftMargin, qOverload< double >( &QDoubleSpinBox::valueChanged ), this, [ = ]( double value )
{
if ( !mProfile || mBlockChanges )
return;

mProfile->beginCommand( tr( "Change Profile Chart Left Margin" ), QgsLayoutItem::UndoMarginLeft );
QgsMargins margins = mProfile->plot()->margins();
margins.setLeft( value );
mProfile->plot()->setMargins( margins );
mProfile->update();
mProfile->endCommand();
} );

mSpinRightMargin->setClearValue( 0 );
connect( mSpinRightMargin, qOverload< double >( &QDoubleSpinBox::valueChanged ), this, [ = ]( double value )
{
if ( !mProfile || mBlockChanges )
return;

mProfile->beginCommand( tr( "Change Profile Chart Right Margin" ), QgsLayoutItem::UndoMarginRight );
QgsMargins margins = mProfile->plot()->margins();
margins.setRight( value );
mProfile->plot()->setMargins( margins );
mProfile->update();
mProfile->endCommand();
} );

mSpinTopMargin->setClearValue( 0 );
connect( mSpinTopMargin, qOverload< double >( &QDoubleSpinBox::valueChanged ), this, [ = ]( double value )
{
if ( !mProfile || mBlockChanges )
return;

mProfile->beginCommand( tr( "Change Profile Chart Top Margin" ), QgsLayoutItem::UndoMarginTop );
QgsMargins margins = mProfile->plot()->margins();
margins.setTop( value );
mProfile->plot()->setMargins( margins );
mProfile->update();
mProfile->endCommand();
} );

mSpinBottomMargin->setClearValue( 0 );
connect( mSpinBottomMargin, qOverload< double >( &QDoubleSpinBox::valueChanged ), this, [ = ]( double value )
{
if ( !mProfile || mBlockChanges )
return;

mProfile->beginCommand( tr( "Change Profile Chart Bottom Margin" ), QgsLayoutItem::UndoMarginBottom );
QgsMargins margins = mProfile->plot()->margins();
margins.setBottom( value );
mProfile->plot()->setMargins( margins );
mProfile->update();
mProfile->endCommand();
} );

registerDataDefinedButton( mDDBtnMinDistance, QgsLayoutObject::ElevationProfileMinimumDistance );
registerDataDefinedButton( mDDBtnMaxDistance, QgsLayoutObject::ElevationProfileMaximumDistance );
registerDataDefinedButton( mDDBtnMinElevation, QgsLayoutObject::ElevationProfileMinimumElevation );
Expand All @@ -296,6 +352,10 @@ QgsLayoutElevationProfileWidget::QgsLayoutElevationProfileWidget( QgsLayoutItemE
registerDataDefinedButton( mDDBtnElevationMajorInterval, QgsLayoutObject::ElevationProfileElevationMajorInterval );
registerDataDefinedButton( mDDBtnElevationMinorInterval, QgsLayoutObject::ElevationProfileElevationMinorInterval );
registerDataDefinedButton( mDDBtnElevationLabelInterval, QgsLayoutObject::ElevationProfileElevationLabelInterval );
registerDataDefinedButton( mDDBtnLeftMargin, QgsLayoutObject::MarginLeft );
registerDataDefinedButton( mDDBtnRightMargin, QgsLayoutObject::MarginRight );
registerDataDefinedButton( mDDBtnTopMargin, QgsLayoutObject::MarginTop );
registerDataDefinedButton( mDDBtnBottomMargin, QgsLayoutObject::MarginBottom );

setGuiElementValues();

Expand Down Expand Up @@ -406,6 +466,11 @@ void QgsLayoutElevationProfileWidget::setGuiElementValues()
if ( mProfile->plot()->chartBorderSymbol() )
mChartBorderSymbolButton->setSymbol( mProfile->plot()->chartBorderSymbol()->clone() );

mSpinLeftMargin->setValue( mProfile->plot()->margins().left() );
mSpinRightMargin->setValue( mProfile->plot()->margins().right() );
mSpinTopMargin->setValue( mProfile->plot()->margins().top() );
mSpinBottomMargin->setValue( mProfile->plot()->margins().bottom() );

updateDataDefinedButton( mDDBtnMinDistance );
updateDataDefinedButton( mDDBtnMaxDistance );
updateDataDefinedButton( mDDBtnMinElevation );
Expand All @@ -416,6 +481,10 @@ void QgsLayoutElevationProfileWidget::setGuiElementValues()
updateDataDefinedButton( mDDBtnElevationMajorInterval );
updateDataDefinedButton( mDDBtnElevationMinorInterval );
updateDataDefinedButton( mDDBtnElevationLabelInterval );
updateDataDefinedButton( mDDBtnLeftMargin );
updateDataDefinedButton( mDDBtnRightMargin );
updateDataDefinedButton( mDDBtnTopMargin );
updateDataDefinedButton( mDDBtnBottomMargin );

mBlockChanges--;
}

0 comments on commit d0f6481

Please sign in to comment.