7878#include " qgssymbolv2.h"
7979#include " qgssymbollayerv2.h"
8080#include " qgssinglesymbolrendererv2.h"
81+ #include " qgsdiagramrendererv2.h"
8182
8283#ifdef TESTPROVIDERLIB
8384#include < dlfcn.h>
@@ -95,24 +96,25 @@ QgsVectorLayer::QgsVectorLayer( QString vectorLayerPath,
9596 QString baseName,
9697 QString providerKey,
9798 bool loadDefaultStyleFlag )
98- : QgsMapLayer( VectorLayer, baseName, vectorLayerPath ),
99- mUpdateThreshold( 0 ), // XXX better default value?
100- mDataProvider( NULL ),
101- mProviderKey( providerKey ),
102- mEditable( false ),
103- mReadOnly( false ),
104- mModified( false ),
105- mMaxUpdatedIndex( -1 ),
106- mActiveCommand( NULL ),
107- mRenderer( 0 ),
108- mRendererV2( NULL ),
109- mUsingRendererV2( false ),
110- mLabel( 0 ),
111- mLabelOn( false ),
112- mVertexMarkerOnlyForSelection( false ),
113- mFetching( false ),
114- mJoinBuffer( 0 ),
115- mDiagramRenderer( 0 )
99+ : QgsMapLayer( VectorLayer, baseName, vectorLayerPath )
100+ , mUpdateThreshold( 0 ) // XXX better default value?
101+ , mDataProvider( NULL )
102+ , mProviderKey( providerKey )
103+ , mEditable( false )
104+ , mReadOnly( false )
105+ , mModified( false )
106+ , mMaxUpdatedIndex( -1 )
107+ , mActiveCommand( NULL )
108+ , mRenderer( 0 )
109+ , mRendererV2( NULL )
110+ , mUsingRendererV2( false )
111+ , mLabel( 0 )
112+ , mLabelOn( false )
113+ , mVertexMarkerOnlyForSelection( false )
114+ , mFetching( false )
115+ , mJoinBuffer( 0 )
116+ , mDiagramRenderer( 0 )
117+ , mDiagramLayerSettings( 0 )
116118{
117119 mActions = new QgsAttributeAction ( this );
118120
@@ -187,6 +189,7 @@ QgsVectorLayer::~QgsVectorLayer()
187189 delete mDataProvider ;
188190 delete mJoinBuffer ;
189191 delete mLabel ;
192+ delete mDiagramLayerSettings ;
190193
191194 // Destroy any cached geometries and clear the references to them
192195 deleteCachedGeometries ();
@@ -2960,7 +2963,8 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
29602963 QDomElement diagramSettingsElem = node.firstChildElement ( " DiagramLayerSettings" );
29612964 if ( !diagramSettingsElem.isNull () )
29622965 {
2963- mDiagramLayerSettings .readXML ( diagramSettingsElem );
2966+ mDiagramLayerSettings = new QgsDiagramLayerSettings ();
2967+ mDiagramLayerSettings ->readXML ( diagramSettingsElem );
29642968 }
29652969 }
29662970 }
@@ -3139,7 +3143,8 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
31393143 if ( mDiagramRenderer )
31403144 {
31413145 mDiagramRenderer ->writeXML ( mapLayerNode, doc );
3142- mDiagramLayerSettings .writeXML ( mapLayerNode, doc );
3146+ if ( mDiagramLayerSettings )
3147+ mDiagramLayerSettings ->writeXML ( mapLayerNode, doc );
31433148 }
31443149 }
31453150
@@ -5183,10 +5188,10 @@ void QgsVectorLayer::prepareLabelingAndDiagrams( QgsRenderContext& rendererConte
51835188 }
51845189
51855190 // register diagram layers
5186- if ( mDiagramRenderer )
5191+ if ( mDiagramRenderer && mDiagramLayerSettings )
51875192 {
5188- mDiagramLayerSettings . renderer = mDiagramRenderer ;
5189- rendererContext.labelingEngine ()->addDiagramLayer ( this , mDiagramLayerSettings );
5193+ mDiagramLayerSettings -> renderer = mDiagramRenderer ;
5194+ rendererContext.labelingEngine ()->addDiagramLayer ( this , * mDiagramLayerSettings );
51905195 // add attributes needed by the diagram renderer
51915196 QList<int > att = mDiagramRenderer ->diagramAttributes ();
51925197 QList<int >::const_iterator attIt = att.constBegin ();
@@ -5198,14 +5203,21 @@ void QgsVectorLayer::prepareLabelingAndDiagrams( QgsRenderContext& rendererConte
51985203 }
51995204 }
52005205 // and the ones needed for data defined diagram positions
5201- if ( mDiagramLayerSettings . xPosColumn >= 0 && !attributes.contains ( mDiagramLayerSettings . xPosColumn ) )
5206+ if ( mDiagramLayerSettings -> xPosColumn >= 0 && !attributes.contains ( mDiagramLayerSettings -> xPosColumn ) )
52025207 {
5203- attributes << mDiagramLayerSettings . xPosColumn ;
5208+ attributes << mDiagramLayerSettings -> xPosColumn ;
52045209 }
5205- if ( mDiagramLayerSettings . yPosColumn >= 0 && !attributes.contains ( mDiagramLayerSettings . yPosColumn ) )
5210+ if ( mDiagramLayerSettings -> yPosColumn >= 0 && !attributes.contains ( mDiagramLayerSettings -> yPosColumn ) )
52065211 {
5207- attributes << mDiagramLayerSettings . yPosColumn ;
5212+ attributes << mDiagramLayerSettings -> yPosColumn ;
52085213 }
52095214 }
52105215 }
52115216}
5217+
5218+ void QgsVectorLayer::setDiagramLayerSettings ( const QgsDiagramLayerSettings& s )
5219+ {
5220+ if ( !mDiagramLayerSettings )
5221+ mDiagramLayerSettings = new QgsDiagramLayerSettings ();
5222+ *mDiagramLayerSettings = s;
5223+ }
0 commit comments