Skip to content

Commit 16af787

Browse files
committed
Fix line placement flags for diagrams. Line placement options for
PAL are flags, not an enum
1 parent 7ce618a commit 16af787

File tree

4 files changed

+315
-170
lines changed

4 files changed

+315
-170
lines changed

python/core/qgsdiagramrendererv2.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct QgsDiagramLayerSettings
2929

3030
//pal placement properties
3131
Placement placement;
32-
LinePlacementFlags placementFlags;
32+
unsigned int placementFlags;
3333
int priority; // 0 = low, 10 = high
3434
bool obstacle; // whether it's an obstacle
3535
double dist; // distance from the feature (in mm)

src/app/qgsdiagramproperties.cpp

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -88,33 +88,24 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
8888
{
8989
mPlacementComboBox->addItem( tr( "Around Point" ), QgsDiagramLayerSettings::AroundPoint );
9090
mPlacementComboBox->addItem( tr( "Over Point" ), QgsDiagramLayerSettings::OverPoint );
91+
mPlacementFrame->setVisible( true );
92+
mLinePlacementFrame->setVisible( false );
9193
}
9294

93-
if ( layerType == QGis::Line || layerType == QGis::Polygon )
95+
if ( layerType == QGis::Line )
9496
{
95-
mPlacementComboBox->addItem( tr( "Line" ), QgsDiagramLayerSettings::Line );
96-
mPlacementComboBox->addItem( tr( "Horizontal" ), QgsDiagramLayerSettings::Horizontal );
97+
mPlacementFrame->setVisible( false );
98+
mLinePlacementFrame->setVisible( true );
9799
}
98100

99101
if ( layerType == QGis::Polygon )
100102
{
103+
mPlacementComboBox->addItem( tr( "Line" ), QgsDiagramLayerSettings::Line );
104+
mPlacementComboBox->addItem( tr( "Horizontal" ), QgsDiagramLayerSettings::Horizontal );
101105
mPlacementComboBox->addItem( tr( "Free" ), QgsDiagramLayerSettings::Free );
102106
}
103107
mPlacementComboBox->blockSignals( false );
104108

105-
if ( layerType == QGis::Line )
106-
{
107-
mLineOptionsComboBox->addItem( tr( "On line" ), QgsDiagramLayerSettings::OnLine );
108-
mLineOptionsComboBox->addItem( tr( "Above line" ), QgsDiagramLayerSettings::AboveLine );
109-
mLineOptionsComboBox->addItem( tr( "Below Line" ), QgsDiagramLayerSettings::BelowLine );
110-
mLineOptionsComboBox->addItem( tr( "Map orientation" ), QgsDiagramLayerSettings::MapOrientation );
111-
}
112-
else
113-
{
114-
mLineOptionsComboBox->setVisible( false );
115-
mLineOptionsLabel->setVisible( false );
116-
}
117-
118109
mDiagramTypeComboBox->blockSignals( true );
119110
QPixmap pix = QgsApplication::getThemePixmap( "pie-chart" );
120111
mDiagramTypeComboBox->addItem( pix, tr( "Pie chart" ), DIAGRAM_NAME_PIE );
@@ -186,7 +177,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
186177
mDiagramUnitComboBox->setCurrentIndex( mDiagramUnitComboBox->findText( tr( "mm" ) ) );
187178
mLabelPlacementComboBox->setCurrentIndex( mLabelPlacementComboBox->findText( tr( "x-height" ) ) );
188179
mDiagramSizeSpinBox->setEnabled( true );
189-
mDiagramSizeSpinBox->setValue( 30 );
180+
mDiagramSizeSpinBox->setValue( 15 );
190181
mLinearScaleFrame->setEnabled( false );
191182
mIncreaseMinimumSizeSpinBox->setEnabled( false );
192183
mIncreaseMinimumSizeLabel->setEnabled( false );
@@ -199,14 +190,17 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
199190
switch ( layerType )
200191
{
201192
case QGis::Point:
202-
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( 0 ) );
193+
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( QgsDiagramLayerSettings::AroundPoint ) );
203194
break;
204195
case QGis::Line:
205-
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( 3 ) );
206-
mLineOptionsComboBox->setCurrentIndex( mLineOptionsComboBox->findData( 2 ) );
196+
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( QgsDiagramLayerSettings::Line ) );
197+
chkLineAbove->setChecked( true );
198+
chkLineBelow->setChecked( false );
199+
chkLineOn->setChecked( false );
200+
chkLineOrientationDependent->setChecked( false );
207201
break;
208202
case QGis::Polygon:
209-
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( 0 ) );
203+
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( QgsDiagramLayerSettings::AroundPoint ) );
210204
break;
211205
case QGis::UnknownGeometry:
212206
case QGis::NoGeometry:
@@ -360,7 +354,13 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
360354
mDataDefinedPositionGroupBox->setChecked( true );
361355
}
362356
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( dls->placement ) );
363-
mLineOptionsComboBox->setCurrentIndex( mLineOptionsComboBox->findData( dls->placementFlags ) );
357+
358+
chkLineAbove->setChecked( dls->placementFlags & QgsDiagramLayerSettings::AboveLine );
359+
chkLineBelow->setChecked( dls->placementFlags & QgsDiagramLayerSettings::BelowLine );
360+
chkLineOn->setChecked( dls->placementFlags & QgsDiagramLayerSettings::OnLine );
361+
if ( !( dls->placementFlags & QgsDiagramLayerSettings::MapOrientation ) )
362+
chkLineOrientationDependent->setChecked( true );
363+
364364
mShowAllCheckBox->setChecked( dls->showAll );
365365
}
366366

@@ -727,10 +727,17 @@ void QgsDiagramProperties::apply()
727727
dls.yPosColumn = -1;
728728
}
729729
dls.placement = ( QgsDiagramLayerSettings::Placement )mPlacementComboBox->itemData( mPlacementComboBox->currentIndex() ).toInt();
730-
if ( mLineOptionsComboBox->isEnabled() )
731-
{
732-
dls.placementFlags = static_cast<QgsDiagramLayerSettings::LinePlacementFlags>( mLineOptionsComboBox->itemData( mLineOptionsComboBox->currentIndex() ).toInt() );
733-
}
730+
731+
dls.placementFlags = ( QgsDiagramLayerSettings::LinePlacementFlags )0;
732+
if ( chkLineAbove->isChecked() )
733+
dls.placementFlags |= QgsDiagramLayerSettings::AboveLine;
734+
if ( chkLineBelow->isChecked() )
735+
dls.placementFlags |= QgsDiagramLayerSettings::BelowLine;
736+
if ( chkLineOn->isChecked() )
737+
dls.placementFlags |= QgsDiagramLayerSettings::OnLine;
738+
if ( ! chkLineOrientationDependent->isChecked() )
739+
dls.placementFlags |= QgsDiagramLayerSettings::MapOrientation;
740+
734741
mLayer->setDiagramLayerSettings( dls );
735742
}
736743

src/core/qgsdiagramrendererv2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class CORE_EXPORT QgsDiagramLayerSettings
6464

6565
//pal placement properties
6666
Placement placement;
67-
LinePlacementFlags placementFlags;
67+
unsigned int placementFlags;
6868
int priority; // 0 = low, 10 = high
6969
bool obstacle; // whether it's an obstacle
7070
double dist; // distance from the feature (in mm)

0 commit comments

Comments
 (0)