@@ -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 );
0 commit comments