@@ -100,8 +100,8 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
100100 mDiagramAttributesTreeWidget ->setItemDelegateForColumn ( ColumnAttributeExpression, new EditBlockerDelegate ( this ) );
101101 mDiagramAttributesTreeWidget ->setItemDelegateForColumn ( ColumnColor, new EditBlockerDelegate ( this ) );
102102
103- connect ( mFixedSizeRadio , SIGNAL ( toggled ( bool ) ) , this , SLOT ( scalingTypeChanged () ) );
104- connect ( mAttributeBasedScalingRadio , SIGNAL ( toggled ( bool ) ) , this , SLOT ( scalingTypeChanged () ) );
103+ connect ( mFixedSizeRadio , &QRadioButton:: toggled, this , &QgsDiagramProperties:: scalingTypeChanged );
104+ connect ( mAttributeBasedScalingRadio , &QRadioButton:: toggled, this , &QgsDiagramProperties:: scalingTypeChanged );
105105
106106 mDiagramUnitComboBox ->setUnits ( QgsUnitTypes::RenderUnitList () << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
107107 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
@@ -382,6 +382,8 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
382382 chkLineOrientationDependent->setChecked ( true );
383383
384384 mShowAllCheckBox ->setChecked ( dls->showAllDiagrams () );
385+
386+ mProperties = dls->properties ();
385387 }
386388
387389 if ( dr->diagram () )
@@ -400,11 +402,32 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
400402 mDiagramTypeComboBox ->setCurrentIndex ( mDiagramTypeComboBox ->findData ( DIAGRAM_NAME_PIE ) );
401403 }
402404 }
403- } // if ( !dr )
405+ }
404406
405- connect ( mAddAttributeExpression , SIGNAL ( clicked () ), this , SLOT ( showAddAttributeExpressionDialog () ) );
406- connect ( mTransparencySlider , SIGNAL ( valueChanged ( int ) ), mTransparencySpinBox , SLOT ( setValue ( int ) ) );
407- connect ( mTransparencySpinBox , SIGNAL ( valueChanged ( int ) ), mTransparencySlider , SLOT ( setValue ( int ) ) );
407+ connect ( mAddAttributeExpression , &QPushButton::clicked, this , &QgsDiagramProperties::showAddAttributeExpressionDialog );
408+ connect ( mTransparencySlider , &QSlider::valueChanged, mTransparencySpinBox , &QgsSpinBox::setValue );
409+ connect ( mTransparencySpinBox , static_cast <void (QgsSpinBox::*)(int )>(&QSpinBox::valueChanged), mTransparencySlider , &QSlider::setValue );
410+
411+ registerDataDefinedButton ( mBackgroundColorDDBtn , QgsDiagramLayerSettings::BackgroundColor,
412+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorAlphaDesc () );
413+ registerDataDefinedButton ( mLineColorDDBtn , QgsDiagramLayerSettings::OutlineColor,
414+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorAlphaDesc () );
415+ registerDataDefinedButton ( mLineWidthDDBtn , QgsDiagramLayerSettings::OutlineWidth,
416+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doublePosDesc () );
417+ registerDataDefinedButton ( mCoordXDDBtn , QgsDiagramLayerSettings::PositionX,
418+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
419+ registerDataDefinedButton ( mCoordYDDBtn , QgsDiagramLayerSettings::PositionY,
420+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
421+ registerDataDefinedButton ( mPriorityDDBtn , QgsDiagramLayerSettings::Priority,
422+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
423+ registerDataDefinedButton ( mZOrderDDBtn , QgsDiagramLayerSettings::ZIndex,
424+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
425+ registerDataDefinedButton ( mShowDiagramDDBtn , QgsDiagramLayerSettings::Show,
426+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
427+ registerDataDefinedButton ( mAlwaysShowDDBtn , QgsDiagramLayerSettings::AlwaysShow,
428+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
429+ registerDataDefinedButton ( mStartAngleDDBtn , QgsDiagramLayerSettings::StartAngle,
430+ QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::doubleDesc () );
408431}
409432
410433QgsDiagramProperties::~QgsDiagramProperties ()
@@ -414,6 +437,21 @@ QgsDiagramProperties::~QgsDiagramProperties()
414437 settings.setValue ( QStringLiteral ( " /Windows/Diagrams/Tab" ), mDiagramOptionsListWidget ->currentRow () );
415438}
416439
440+ void QgsDiagramProperties::registerDataDefinedButton ( QgsDataDefinedButtonV2 * button, QgsDiagramLayerSettings::Property key, QgsDataDefinedButtonV2::DataType type, const QString & description )
441+ {
442+ button->init ( mLayer , mProperties .property ( key ), type, description );
443+ button->setProperty ( " propertyKey" , key );
444+ connect ( button, &QgsDataDefinedButtonV2::changed, this , &QgsDiagramProperties::updateProperty );
445+ button->registerExpressionContextGenerator ( this );
446+ }
447+
448+ void QgsDiagramProperties::updateProperty ()
449+ {
450+ QgsDataDefinedButtonV2* button = qobject_cast<QgsDataDefinedButtonV2*>( sender () );
451+ QgsDiagramLayerSettings::Property key = static_cast < QgsDiagramLayerSettings::Property >( button->property ( " propertyKey" ).toInt () );
452+ mProperties .setProperty ( key, button->toProperty () );
453+ }
454+
417455void QgsDiagramProperties::on_mDiagramTypeComboBox_currentIndexChanged ( int index )
418456{
419457 if ( index == 0 )
@@ -794,6 +832,7 @@ void QgsDiagramProperties::apply()
794832 mLayer ->setDiagramRenderer ( renderer );
795833
796834 QgsDiagramLayerSettings dls;
835+ dls.setProperties ( mProperties );
797836 dls.setDistance ( mDiagramDistanceSpinBox ->value () );
798837 dls.setPriority ( mPrioritySlider ->value () );
799838 dls.setZIndex ( mZIndexSpinBox ->value () );
0 commit comments