Skip to content

Commit b06c0cc

Browse files
committed
Fix loss of some labeling properties when changes placement types
For instance, changing between "around point" and "offset from point" placements would lose the setting for distance and offset.
1 parent f8b6944 commit b06c0cc

File tree

2 files changed

+33
-45
lines changed

2 files changed

+33
-45
lines changed

src/app/qgslabelinggui.cpp

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -298,27 +298,31 @@ void QgsLabelingGui::init()
298298
// populate placement options
299299
mCentroidRadioWhole->setChecked( lyr.centroidWhole );
300300
mCentroidInsideCheckBox->setChecked( lyr.centroidInside );
301+
mLineDistanceSpnBx->setValue( lyr.dist );
302+
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
303+
mLineDistanceUnitWidget->setMapUnitScale( lyr.distMapUnitScale );
304+
mQuadrantBtnGrp->button(( int )lyr.quadOffset )->setChecked( true );
305+
mPointOffsetXSpinBox->setValue( lyr.xOffset );
306+
mPointOffsetYSpinBox->setValue( lyr.yOffset );
307+
mPointOffsetUnitWidget->setUnit( lyr.labelOffsetInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
308+
mPointOffsetUnitWidget->setMapUnitScale( lyr.labelOffsetMapUnitScale );
309+
mPointAngleSpinBox->setValue( lyr.angleOffset );
310+
chkLineAbove->setChecked( lyr.placementFlags & QgsPalLayerSettings::AboveLine );
311+
chkLineBelow->setChecked( lyr.placementFlags & QgsPalLayerSettings::BelowLine );
312+
chkLineOn->setChecked( lyr.placementFlags & QgsPalLayerSettings::OnLine );
313+
if ( !( lyr.placementFlags & QgsPalLayerSettings::MapOrientation ) )
314+
chkLineOrientationDependent->setChecked( true );
315+
301316
switch ( lyr.placement )
302317
{
303318
case QgsPalLayerSettings::AroundPoint:
304319
radAroundPoint->setChecked( true );
305320
radAroundCentroid->setChecked( true );
306-
307-
mLineDistanceSpnBx->setValue( lyr.dist );
308-
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
309-
mLineDistanceUnitWidget->setMapUnitScale( lyr.distMapUnitScale );
310321
//spinAngle->setValue( lyr.angle ); // TODO: uncomment when supported
311322
break;
312323
case QgsPalLayerSettings::OverPoint:
313324
radOverPoint->setChecked( true );
314325
radOverCentroid->setChecked( true );
315-
316-
mQuadrantBtnGrp->button(( int )lyr.quadOffset )->setChecked( true );
317-
mPointOffsetXSpinBox->setValue( lyr.xOffset );
318-
mPointOffsetYSpinBox->setValue( lyr.yOffset );
319-
mPointOffsetUnitWidget->setUnit( lyr.labelOffsetInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
320-
mPointOffsetUnitWidget->setMapUnitScale( lyr.labelOffsetMapUnitScale );
321-
mPointAngleSpinBox->setValue( lyr.angleOffset );
322326
break;
323327
case QgsPalLayerSettings::Line:
324328
radLineParallel->setChecked( true );
@@ -336,18 +340,6 @@ void QgsLabelingGui::init()
336340
break;
337341
}
338342

339-
if ( lyr.placement == QgsPalLayerSettings::Line || lyr.placement == QgsPalLayerSettings::Curved )
340-
{
341-
mLineDistanceSpnBx->setValue( lyr.dist );
342-
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
343-
mLineDistanceUnitWidget->setMapUnitScale( lyr.distMapUnitScale );
344-
chkLineAbove->setChecked( lyr.placementFlags & QgsPalLayerSettings::AboveLine );
345-
chkLineBelow->setChecked( lyr.placementFlags & QgsPalLayerSettings::BelowLine );
346-
chkLineOn->setChecked( lyr.placementFlags & QgsPalLayerSettings::OnLine );
347-
if ( !( lyr.placementFlags & QgsPalLayerSettings::MapOrientation ) )
348-
chkLineOrientationDependent->setChecked( true );
349-
}
350-
351343
// Label repeat distance
352344
mRepeatDistanceSpinBox->setValue( lyr.repeatDistance );
353345
mRepeatDistanceUnitWidget->setUnit( lyr.repeatDistanceUnit == QgsPalLayerSettings::MapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
@@ -586,43 +578,39 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
586578
QWidget* curPlacementWdgt = stackedPlacement->currentWidget();
587579
lyr.centroidWhole = mCentroidRadioWhole->isChecked();
588580
lyr.centroidInside = mCentroidInsideCheckBox->isChecked();
581+
lyr.dist = mLineDistanceSpnBx->value();
582+
lyr.distInMapUnits = ( mLineDistanceUnitWidget->unit() == QgsSymbolV2::MapUnit );
583+
lyr.distMapUnitScale = mLineDistanceUnitWidget->getMapUnitScale();
584+
lyr.quadOffset = ( QgsPalLayerSettings::QuadrantPosition )mQuadrantBtnGrp->checkedId();
585+
lyr.xOffset = mPointOffsetXSpinBox->value();
586+
lyr.yOffset = mPointOffsetYSpinBox->value();
587+
lyr.labelOffsetInMapUnits = ( mPointOffsetUnitWidget->unit() == QgsSymbolV2::MapUnit );
588+
lyr.labelOffsetMapUnitScale = mPointOffsetUnitWidget->getMapUnitScale();
589+
lyr.angleOffset = mPointAngleSpinBox->value();
590+
if ( chkLineAbove->isChecked() )
591+
lyr.placementFlags |= QgsPalLayerSettings::AboveLine;
592+
if ( chkLineBelow->isChecked() )
593+
lyr.placementFlags |= QgsPalLayerSettings::BelowLine;
594+
if ( chkLineOn->isChecked() )
595+
lyr.placementFlags |= QgsPalLayerSettings::OnLine;
596+
if ( ! chkLineOrientationDependent->isChecked() )
597+
lyr.placementFlags |= QgsPalLayerSettings::MapOrientation;
589598
if (( curPlacementWdgt == pagePoint && radAroundPoint->isChecked() )
590599
|| ( curPlacementWdgt == pagePolygon && radAroundCentroid->isChecked() ) )
591600
{
592601
lyr.placement = QgsPalLayerSettings::AroundPoint;
593-
lyr.dist = mLineDistanceSpnBx->value();
594-
lyr.distInMapUnits = ( mLineDistanceUnitWidget->unit() == QgsSymbolV2::MapUnit );
595-
lyr.distMapUnitScale = mLineDistanceUnitWidget->getMapUnitScale();
596602
}
597603
else if (( curPlacementWdgt == pagePoint && radOverPoint->isChecked() )
598604
|| ( curPlacementWdgt == pagePolygon && radOverCentroid->isChecked() ) )
599605
{
600606
lyr.placement = QgsPalLayerSettings::OverPoint;
601-
lyr.quadOffset = ( QgsPalLayerSettings::QuadrantPosition )mQuadrantBtnGrp->checkedId();
602-
lyr.xOffset = mPointOffsetXSpinBox->value();
603-
lyr.yOffset = mPointOffsetYSpinBox->value();
604-
lyr.labelOffsetInMapUnits = ( mPointOffsetUnitWidget->unit() == QgsSymbolV2::MapUnit );
605-
lyr.labelOffsetMapUnitScale = mPointOffsetUnitWidget->getMapUnitScale();
606-
lyr.angleOffset = mPointAngleSpinBox->value();
607607
}
608608
else if (( curPlacementWdgt == pageLine && radLineParallel->isChecked() )
609609
|| ( curPlacementWdgt == pagePolygon && radPolygonPerimeter->isChecked() )
610610
|| ( curPlacementWdgt == pageLine && radLineCurved->isChecked() ) )
611611
{
612612
bool curved = ( curPlacementWdgt == pageLine && radLineCurved->isChecked() );
613613
lyr.placement = ( curved ? QgsPalLayerSettings::Curved : QgsPalLayerSettings::Line );
614-
lyr.dist = mLineDistanceSpnBx->value();
615-
lyr.distInMapUnits = ( mLineDistanceUnitWidget->unit() == QgsSymbolV2::MapUnit );
616-
lyr.distMapUnitScale = mLineDistanceUnitWidget->getMapUnitScale();
617-
if ( chkLineAbove->isChecked() )
618-
lyr.placementFlags |= QgsPalLayerSettings::AboveLine;
619-
if ( chkLineBelow->isChecked() )
620-
lyr.placementFlags |= QgsPalLayerSettings::BelowLine;
621-
if ( chkLineOn->isChecked() )
622-
lyr.placementFlags |= QgsPalLayerSettings::OnLine;
623-
624-
if ( ! chkLineOrientationDependent->isChecked() )
625-
lyr.placementFlags |= QgsPalLayerSettings::MapOrientation;
626614
}
627615
else if (( curPlacementWdgt == pageLine && radLineHorizontal->isChecked() )
628616
|| ( curPlacementWdgt == pagePolygon && radPolygonHorizontal->isChecked() ) )

src/core/qgspallabeling.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
167167

168168
// placement
169169
placement = AroundPoint;
170-
placementFlags = 0;
170+
placementFlags = AboveLine | MapOrientation;
171171
centroidWhole = false;
172172
centroidInside = false;
173173
quadOffset = QuadrantOver;

0 commit comments

Comments
 (0)