2525#include < QDomElement>
2626#include < QPainter>
2727
28+ QMap< int , QString > QgsDiagramLayerSettings::sPropertyNameMap ;
29+
2830QgsDiagramLayerSettings::QgsDiagramLayerSettings ()
29- : xPosColumn( -1 )
30- , yPosColumn( -1 )
31- , showColumn( -1 )
32- , mRenderer( nullptr )
3331{
3432 init ();
3533}
3634
3735QgsDiagramLayerSettings::QgsDiagramLayerSettings ( const QgsDiagramLayerSettings& rh )
38- : xPosColumn( rh.xPosColumn )
39- , yPosColumn( rh.yPosColumn )
40- , showColumn( rh.showColumn )
41- , mCt( rh.mCt )
36+ : mCt( rh.mCt )
4237 , mPlacement( rh.mPlacement )
4338 , mPlacementFlags( rh.mPlacementFlags )
4439 , mPriority( rh.mPriority )
@@ -62,9 +57,6 @@ QgsDiagramLayerSettings&QgsDiagramLayerSettings::operator=( const QgsDiagramLaye
6257 mDistance = rh.mDistance ;
6358 mRenderer = rh.mRenderer ? rh.mRenderer ->clone () : nullptr ;
6459 mCt = rh.mCt ;
65- xPosColumn = rh.xPosColumn ;
66- yPosColumn = rh.yPosColumn ;
67- showColumn = rh.showColumn ;
6860 mShowAll = rh.mShowAll ;
6961 mProperties = rh.mProperties ;
7062 return *this ;
@@ -109,9 +101,27 @@ void QgsDiagramLayerSettings::readXml( const QDomElement& elem, const QgsVectorL
109101 mZIndex = elem.attribute ( QStringLiteral ( " zIndex" ) ).toDouble ();
110102 mObstacle = elem.attribute ( QStringLiteral ( " obstacle" ) ).toInt ();
111103 mDistance = elem.attribute ( QStringLiteral ( " dist" ) ).toDouble ();
112- xPosColumn = elem.attribute ( QStringLiteral ( " xPosColumn" ) ).toInt ();
113- yPosColumn = elem.attribute ( QStringLiteral ( " yPosColumn" ) ).toInt ();
114- showColumn = elem.attribute ( QStringLiteral ( " showColumn" ) ).toInt ();
104+ if ( elem.hasAttribute ( QStringLiteral ( " xPosColumn" ) ) )
105+ {
106+ // upgrade old project
107+ int xPosColumn = elem.attribute ( QStringLiteral ( " xPosColumn" ) ).toInt ();
108+ if ( xPosColumn >= 0 && xPosColumn < layer->fields ().count () )
109+ mProperties .setProperty ( PositionX, new QgsFieldBasedProperty ( layer->fields ().at ( xPosColumn ).name (), true ) );
110+ }
111+ if ( elem.hasAttribute ( QStringLiteral ( " yPosColumn" ) ) )
112+ {
113+ // upgrade old project
114+ int yPosColumn = elem.attribute ( QStringLiteral ( " yPosColumn" ) ).toInt ();
115+ if ( yPosColumn >= 0 && yPosColumn < layer->fields ().count () )
116+ mProperties .setProperty ( PositionY, new QgsFieldBasedProperty ( layer->fields ().at ( yPosColumn ).name (), true ) );
117+ }
118+ if ( elem.hasAttribute ( QStringLiteral ( " showColumn" ) ) )
119+ {
120+ // upgrade old project
121+ int showColumn = elem.attribute ( QStringLiteral ( " showColumn" ) ).toInt ();
122+ if ( showColumn >= 0 && showColumn < layer->fields ().count () )
123+ mProperties .setProperty ( Show, new QgsFieldBasedProperty ( layer->fields ().at ( showColumn ).name (), true ) );
124+ }
115125 mShowAll = ( elem.attribute ( QStringLiteral ( " showAll" ), QStringLiteral ( " 0" ) ) != QLatin1String ( " 0" ) );
116126}
117127
@@ -129,9 +139,6 @@ void QgsDiagramLayerSettings::writeXml( QDomElement& layerElem, QDomDocument& do
129139 diagramLayerElem.setAttribute ( QStringLiteral ( " zIndex" ), mZIndex );
130140 diagramLayerElem.setAttribute ( QStringLiteral ( " obstacle" ), mObstacle );
131141 diagramLayerElem.setAttribute ( QStringLiteral ( " dist" ), QString::number ( mDistance ) );
132- diagramLayerElem.setAttribute ( QStringLiteral ( " xPosColumn" ), xPosColumn );
133- diagramLayerElem.setAttribute ( QStringLiteral ( " yPosColumn" ), yPosColumn );
134- diagramLayerElem.setAttribute ( QStringLiteral ( " showColumn" ), showColumn );
135142 diagramLayerElem.setAttribute ( QStringLiteral ( " showAll" ), mShowAll );
136143 layerElem.appendChild ( diagramLayerElem );
137144}
@@ -164,16 +171,6 @@ QSet<QString> QgsDiagramLayerSettings::referencedFields( const QgsExpressionCont
164171 // add the ones needed for data defined settings
165172 referenced.unite ( mProperties .referencedFields ( context ) );
166173
167- // and the ones needed for data defined diagram positions
168- if ( xPosColumn >= 0 && xPosColumn < fieldsParameter.count () )
169- referenced << fieldsParameter.at ( xPosColumn ).name ();
170- if ( yPosColumn >= 0 && yPosColumn < fieldsParameter.count () )
171- referenced << fieldsParameter.at ( yPosColumn ).name ();
172-
173- // and the ones needed for data defined diagram visibility
174- if ( showColumn >= 0 && showColumn < fieldsParameter.count () )
175- referenced << fieldsParameter.at ( showColumn ).name ();
176-
177174 return referenced;
178175}
179176
0 commit comments