Skip to content

Commit e677e1f

Browse files
DelazJm-kuhn
authored andcommitted
Implement logic to use radio buttons for diagram placement
1 parent ea30377 commit e677e1f

File tree

3 files changed

+75
-42
lines changed

3 files changed

+75
-42
lines changed

src/app/qgsdiagramproperties.cpp

Lines changed: 69 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
124124

125125
// set placement methods page based on geometry type
126126

127-
switch ( mLayer->geometryType() )
127+
switch ( layerType )
128128
{
129129
case QgsWkbTypes::PointGeometry:
130130
stackedPlacement->setCurrentWidget( pagePoint );
@@ -139,32 +139,31 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
139139
mLinePlacementFrame->setVisible( false );
140140
break;
141141
case QgsWkbTypes::NullGeometry:
142-
break;
143142
case QgsWkbTypes::UnknownGeometry:
144-
qFatal( "unknown geometry type unexpected" );
143+
break;
145144
}
146145

147146
//insert placement options
148147
// setup point placement button group
149148
mPlacePointBtnGrp = new QButtonGroup( this );
150-
mPlacePointBtnGrp->addButton( radAroundPoint, ( int )QgsDiagramLayerSettings::AroundPoint );
151-
mPlacePointBtnGrp->addButton( radOverPoint, ( int )QgsDiagramLayerSettings::OverPoint );
149+
mPlacePointBtnGrp->addButton( radAroundPoint );
150+
mPlacePointBtnGrp->addButton( radOverPoint );
152151
mPlacePointBtnGrp->setExclusive( true );
153152
connect( mPlacePointBtnGrp, static_cast<void ( QButtonGroup::* )( int )>( &QButtonGroup::buttonClicked ), this, &QgsDiagramProperties::updatePlacementWidgets );
154153

155-
// setup line placement button group (assigned enum id currently unused)
154+
// setup line placement button group
156155
mPlaceLineBtnGrp = new QButtonGroup( this );
157-
mPlaceLineBtnGrp->addButton( radAroundLine, ( int )QgsDiagramLayerSettings::Line );
158-
mPlaceLineBtnGrp->addButton( radOverLine, ( int )QgsDiagramLayerSettings::Horizontal );
156+
mPlaceLineBtnGrp->addButton( radAroundLine );
157+
mPlaceLineBtnGrp->addButton( radOverLine );
159158
mPlaceLineBtnGrp->setExclusive( true );
160159
connect( mPlaceLineBtnGrp, static_cast<void ( QButtonGroup::* )( int )>( &QButtonGroup::buttonClicked ), this, &QgsDiagramProperties::updatePlacementWidgets );
161160

162-
// setup polygon placement button group (assigned enum id currently unused)
161+
// setup polygon placement button group
163162
mPlacePolygonBtnGrp = new QButtonGroup( this );
164-
mPlacePolygonBtnGrp->addButton( radAroundCentroid, ( int )QgsDiagramLayerSettings::AroundPoint );
165-
mPlacePolygonBtnGrp->addButton( radOverCentroid, ( int )QgsDiagramLayerSettings::OverPoint );
166-
mPlacePolygonBtnGrp->addButton( radPolygonPerimeter, ( int )QgsDiagramLayerSettings::Line );
167-
mPlacePolygonBtnGrp->addButton( radInsidePolygon, ( int )QgsDiagramLayerSettings::Horizontal );
163+
mPlacePolygonBtnGrp->addButton( radAroundCentroid );
164+
mPlacePolygonBtnGrp->addButton( radOverCentroid );
165+
mPlacePolygonBtnGrp->addButton( radPolygonPerimeter );
166+
mPlacePolygonBtnGrp->addButton( radInsidePolygon );
168167
mPlacePolygonBtnGrp->setExclusive( true );
169168
connect( mPlacePolygonBtnGrp, static_cast<void ( QButtonGroup::* )( int )>( &QButtonGroup::buttonClicked ), this, &QgsDiagramProperties::updatePlacementWidgets );
170169

@@ -242,16 +241,19 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
242241
case QgsWkbTypes::PointGeometry:
243242
radAroundPoint->setChecked( true );
244243
break;
244+
245245
case QgsWkbTypes::LineGeometry:
246246
radAroundLine->setChecked( true );
247247
chkLineAbove->setChecked( true );
248248
chkLineBelow->setChecked( false );
249249
chkLineOn->setChecked( false );
250250
chkLineOrientationDependent->setChecked( false );
251251
break;
252+
252253
case QgsWkbTypes::PolygonGeometry:
253254
radAroundCentroid->setChecked( true );
254255
break;
256+
255257
case QgsWkbTypes::UnknownGeometry:
256258
case QgsWkbTypes::NullGeometry:
257259
break;
@@ -394,13 +396,39 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
394396
mDiagramDistanceSpinBox->setValue( dls->distance() );
395397
mPrioritySlider->setValue( dls->priority() );
396398
mZIndexSpinBox->setValue( dls->zIndex() );
397-
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( dls->placement() ) );
399+
400+
switch ( dls->placement() )
401+
{
402+
case QgsDiagramLayerSettings::AroundPoint:
403+
radAroundPoint->setChecked( true );
404+
radAroundCentroid->setChecked( true );
405+
break;
406+
407+
case QgsDiagramLayerSettings::OverPoint:
408+
radOverPoint->setChecked( true );
409+
radOverCentroid->setChecked( true );
410+
break;
411+
412+
case QgsDiagramLayerSettings::Line:
413+
radAroundLine->setChecked( true );
414+
radPolygonPerimeter->setChecked( true );
415+
break;
416+
417+
case QgsDiagramLayerSettings::Horizontal:
418+
radOverLine->setChecked( true );
419+
radInsidePolygon->setChecked( true );
420+
break;
421+
422+
default:
423+
break;
424+
}
398425

399426
chkLineAbove->setChecked( dls->linePlacementFlags() & QgsDiagramLayerSettings::AboveLine );
400427
chkLineBelow->setChecked( dls->linePlacementFlags() & QgsDiagramLayerSettings::BelowLine );
401428
chkLineOn->setChecked( dls->linePlacementFlags() & QgsDiagramLayerSettings::OnLine );
402429
if ( !( dls->linePlacementFlags() & QgsDiagramLayerSettings::MapOrientation ) )
403430
chkLineOrientationDependent->setChecked( true );
431+
updatePlacementWidgets();
404432

405433
mShowAllCheckBox->setChecked( dls->showAllDiagrams() );
406434

@@ -845,7 +873,32 @@ void QgsDiagramProperties::apply()
845873
dls.setPriority( mPrioritySlider->value() );
846874
dls.setZIndex( mZIndexSpinBox->value() );
847875
dls.setShowAllDiagrams( mShowAllCheckBox->isChecked() );
848-
//dls.setPlacement( ( QgsDiagramLayerSettings::Placement )mPlacementComboBox->currentData().toInt() );
876+
877+
QWidget *curWdgt = stackedPlacement->currentWidget();
878+
if ( ( curWdgt == pagePoint && radAroundPoint->isChecked() )
879+
|| ( curWdgt == pagePolygon && radAroundCentroid->isChecked() ) )
880+
{
881+
dls.setPlacement( QgsDiagramLayerSettings::AroundPoint );
882+
}
883+
else if ( ( curWdgt == pagePoint && radOverPoint->isChecked() )
884+
|| ( curWdgt == pagePolygon && radOverCentroid->isChecked() ) )
885+
{
886+
dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
887+
}
888+
else if ( ( curWdgt == pageLine && radAroundLine->isChecked() )
889+
|| ( curWdgt == pagePolygon && radPolygonPerimeter->isChecked() ) )
890+
{
891+
dls.setPlacement( QgsDiagramLayerSettings::Line );
892+
}
893+
else if ( ( curWdgt == pageLine && radOverLine->isChecked() )
894+
|| ( curWdgt == pagePolygon && radInsidePolygon->isChecked() ) )
895+
{
896+
dls.setPlacement( QgsDiagramLayerSettings::Horizontal );
897+
}
898+
else
899+
{
900+
qFatal( "Invalid settings" );
901+
}
849902

850903
QgsDiagramLayerSettings::LinePlacementFlags flags = 0;
851904
if ( chkLineAbove->isChecked() )
@@ -950,7 +1003,7 @@ void QgsDiagramProperties::updatePlacementWidgets()
9501003
mDistanceDDBtn->setEnabled( false );
9511004
}
9521005

953-
bool linePlacementEnabled = mLayer->geometryType() == QgsWkbTypes::LineGeometry && ( curWdgt == pageLine && radAroundLine->isChecked() ); // && currentPlacement == QgsDiagramLayerSettings::Line;
1006+
bool linePlacementEnabled = mLayer->geometryType() == QgsWkbTypes::LineGeometry && ( curWdgt == pageLine && radAroundLine->isChecked() );
9541007
chkLineAbove->setEnabled( linePlacementEnabled );
9551008
chkLineBelow->setEnabled( linePlacementEnabled );
9561009
chkLineOn->setEnabled( linePlacementEnabled );

src/app/qgsdiagramproperties.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class APP_EXPORT QgsDiagramProperties : public QWidget, private Ui::QgsDiagramPr
5454
void scalingTypeChanged();
5555
void showSizeLegendDialog();
5656

57-
protected:
57+
private:
5858

5959
QgsVectorLayer *mLayer = nullptr;
6060
//! Point placement button group
@@ -64,8 +64,6 @@ class APP_EXPORT QgsDiagramProperties : public QWidget, private Ui::QgsDiagramPr
6464
//! Polygon placement button group
6565
QButtonGroup *mPlacePolygonBtnGrp = nullptr;
6666

67-
private:
68-
6967
enum Columns
7068
{
7169
ColumnAttributeExpression = 0,

src/ui/qgsdiagrampropertiesbase.ui

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,31 +1626,14 @@
16261626
<property name="bottomMargin">
16271627
<number>0</number>
16281628
</property>
1629-
<item row="3" column="0">
1629+
<item row="2" column="0">
16301630
<widget class="QLabel" name="mDiagramDistanceLabel">
16311631
<property name="text">
16321632
<string>Distance</string>
16331633
</property>
16341634
</widget>
16351635
</item>
1636-
<item row="1" column="1">
1637-
<widget class="QComboBox" name="mPlacementComboBox">
1638-
<property name="sizePolicy">
1639-
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
1640-
<horstretch>0</horstretch>
1641-
<verstretch>0</verstretch>
1642-
</sizepolicy>
1643-
</property>
1644-
</widget>
1645-
</item>
1646-
<item row="1" column="0">
1647-
<widget class="QLabel" name="mPlacementLabel">
1648-
<property name="text">
1649-
<string>Placement</string>
1650-
</property>
1651-
</widget>
1652-
</item>
1653-
<item row="3" column="1">
1636+
<item row="2" column="1">
16541637
<layout class="QHBoxLayout" name="horizontalLayout_14">
16551638
<item>
16561639
<widget class="QgsDoubleSpinBox" name="mDiagramDistanceSpinBox">
@@ -1677,7 +1660,7 @@
16771660
<item row="1" column="0">
16781661
<widget class="QStackedWidget" name="stackedPlacement">
16791662
<property name="sizePolicy">
1680-
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
1663+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
16811664
<horstretch>0</horstretch>
16821665
<verstretch>0</verstretch>
16831666
</sizepolicy>
@@ -1927,8 +1910,8 @@
19271910
<rect>
19281911
<x>0</x>
19291912
<y>0</y>
1930-
<width>106</width>
1931-
<height>161</height>
1913+
<width>642</width>
1914+
<height>421</height>
19321915
</rect>
19331916
</property>
19341917
<layout class="QVBoxLayout" name="verticalLayout_3">
@@ -2346,7 +2329,6 @@
23462329
<tabstop>scrollArea_2</tabstop>
23472330
<tabstop>mCheckBoxAttributeLegend</tabstop>
23482331
<tabstop>mButtonSizeLegendSettings</tabstop>
2349-
<tabstop>mPlacementComboBox</tabstop>
23502332
</tabstops>
23512333
<resources>
23522334
<include location="../../images/images.qrc"/>

0 commit comments

Comments
 (0)