Skip to content

Commit 8dd5886

Browse files
committed
Bring back temporarily disabled projects upgrade + fix a loading bug
Loading bug: on the first project load, data-defined properties for diagram layer settings were not read as the default constructor did not populate the list of data-defined property definitions.
1 parent 93bfa94 commit 8dd5886

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

src/core/qgsdiagramrenderer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ const QgsPropertiesDefinition &QgsDiagramLayerSettings::propertyDefinitions()
5555
return sPropertyDefinitions;
5656
}
5757

58+
QgsDiagramLayerSettings::QgsDiagramLayerSettings()
59+
{
60+
initPropertyDefinitions();
61+
}
62+
5863
QgsDiagramLayerSettings::QgsDiagramLayerSettings( const QgsDiagramLayerSettings &rh )
5964
: mCt( rh.mCt )
6065
, mPlacement( rh.mPlacement )

src/core/qgsdiagramrenderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class CORE_EXPORT QgsDiagramLayerSettings
106106
/**
107107
* Constructor for QgsDiagramLayerSettings.
108108
*/
109-
QgsDiagramLayerSettings() = default;
109+
QgsDiagramLayerSettings();
110110

111111
//! Copy constructor
112112
QgsDiagramLayerSettings( const QgsDiagramLayerSettings &rh );

src/core/qgsvectorlayer.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)