@@ -1834,6 +1834,14 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage, con
18341834 QDomElement linearDiagramElem = node.firstChildElement ( QStringLiteral ( " LinearlyInterpolatedDiagramRenderer" ) );
18351835 if ( !linearDiagramElem.isNull () )
18361836 {
1837+ if ( linearDiagramElem.hasAttribute ( QStringLiteral ( " classificationAttribute" ) ) )
1838+ {
1839+ // fix project from before QGIS 3.0
1840+ int idx = linearDiagramElem.attribute ( QStringLiteral ( " classificationAttribute" ) ).toInt ();
1841+ if ( idx >= 0 && idx < mFields .count () )
1842+ linearDiagramElem.setAttribute ( " classificationField" , mFields .at ( idx ).name () );
1843+ }
1844+
18371845 mDiagramRenderer = new QgsLinearlyInterpolatedDiagramRenderer ();
18381846 mDiagramRenderer ->readXml ( linearDiagramElem, context );
18391847 }
@@ -1843,6 +1851,42 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage, con
18431851 QDomElement diagramSettingsElem = node.firstChildElement ( QStringLiteral ( " DiagramLayerSettings" ) );
18441852 if ( !diagramSettingsElem.isNull () )
18451853 {
1854+ bool oldXPos = diagramSettingsElem.hasAttribute ( QStringLiteral ( " xPosColumn" ) );
1855+ bool oldYPos = diagramSettingsElem.hasAttribute ( QStringLiteral ( " yPosColumn" ) );
1856+ bool oldShow = diagramSettingsElem.hasAttribute ( QStringLiteral ( " showColumn" ) );
1857+ if ( oldXPos || oldYPos || oldShow )
1858+ {
1859+ // fix project from before QGIS 3.0
1860+ QgsPropertyCollection ddp;
1861+ if ( oldXPos )
1862+ {
1863+ int xPosColumn = diagramSettingsElem.attribute ( QStringLiteral ( " xPosColumn" ) ).toInt ();
1864+ if ( xPosColumn >= 0 && xPosColumn < mFields .count () )
1865+ ddp.setProperty ( QgsDiagramLayerSettings::PositionX, QgsProperty::fromField ( mFields .at ( xPosColumn ).name (), true ) );
1866+ }
1867+ if ( oldYPos )
1868+ {
1869+ int yPosColumn = diagramSettingsElem.attribute ( QStringLiteral ( " yPosColumn" ) ).toInt ();
1870+ if ( yPosColumn >= 0 && yPosColumn < mFields .count () )
1871+ ddp.setProperty ( QgsDiagramLayerSettings::PositionY, QgsProperty::fromField ( mFields .at ( yPosColumn ).name (), true ) );
1872+ }
1873+ if ( oldShow )
1874+ {
1875+ int showColumn = diagramSettingsElem.attribute ( QStringLiteral ( " showColumn" ) ).toInt ();
1876+ if ( showColumn >= 0 && showColumn < mFields .count () )
1877+ ddp.setProperty ( QgsDiagramLayerSettings::Show, QgsProperty::fromField ( mFields .at ( showColumn ).name (), true ) );
1878+ }
1879+ QDomElement propertiesElem = diagramSettingsElem.ownerDocument ().createElement ( " properties" );
1880+ QgsPropertiesDefinition defs = QgsPropertiesDefinition
1881+ {
1882+ { QgsDiagramLayerSettings::PositionX, QgsPropertyDefinition ( " positionX" , QObject::tr ( " Position (X)" ), QgsPropertyDefinition::Double ) },
1883+ { QgsDiagramLayerSettings::PositionY, QgsPropertyDefinition ( " positionY" , QObject::tr ( " Position (Y)" ), QgsPropertyDefinition::Double ) },
1884+ { QgsDiagramLayerSettings::Show, QgsPropertyDefinition ( " show" , QObject::tr ( " Show diagram" ), QgsPropertyDefinition::Boolean ) },
1885+ };
1886+ ddp.writeXml ( propertiesElem, defs );
1887+ diagramSettingsElem.appendChild ( propertiesElem );
1888+ }
1889+
18461890 delete mDiagramLayerSettings ;
18471891 mDiagramLayerSettings = new QgsDiagramLayerSettings ();
18481892 mDiagramLayerSettings ->readXml ( diagramSettingsElem );
0 commit comments