Skip to content

Commit 0ce3021

Browse files
committedJan 4, 2017
Implement some QGIS 3 TODOs for diagram API
1 parent ff1bbfb commit 0ce3021

File tree

10 files changed

+186
-209
lines changed

10 files changed

+186
-209
lines changed
 

‎doc/api_break.dox

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -772,11 +772,15 @@ Use renderDiagram( const QgsFeature& feature, QgsRenderContext& c, const QgsDiag
772772
- The deprecated diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is ) method has been removed.
773773
Use diagramSize( const QgsFeature& feature, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is ) instead.
774774

775+
QgsDiagramInterpolationSettings {#qgis_api_break_3_0_QgsDiagramInterpolationSettings}
776+
-------------------------------
777+
- The classificationAttribute member variable was removed, and has been replaced by the classificationField variable which stores the string name.
778+
775779

776780
QgsDiagramRenderer {#qgis_api_break_3_0_QgsDiagramRenderer}
777781
------------------
778-
779782
- xform, fields were no longer required and are removed.
783+
- referencedFields() no longer takes a QgsFields argument.
780784

781785

782786
QgsDiagramLayerSettings {#qgis_api_break_3_0_QgsDiagramLayerSettings}
@@ -787,7 +791,15 @@ be returned in place of a null pointer.
787791
- setCoordinateTransform() now takes a QgsCoordinateTransform object, not a pointer. Use an invalid QgsCoordinateTransform in
788792
place of a null pointer.
789793
- The ct member has been removed. Use coordinateTransform() and setCoordinateTransform() instead.
790-
794+
- The LinePlacementFlags enum was renamed to LinePlacementFlag
795+
- The placement member variable was removed, and getPlacement() was renamed to placement()
796+
- The placementFlags member variable was removed
797+
- The priority member variable was removed, and getPriority() was renamed to priority()
798+
- The zIndex member variable was removed, and getZIndex() was renamed to zIndex()
799+
- The obstacle member variable was removed. setIsObstacle() and isObstacle() should be used instead.
800+
- The dist member variable was removed. setDistance() and distance() should be used instead.
801+
- The renderer member variable was removed, and getRenderer() was renamed to renderer()
802+
- The showAll member variable was removed. setShowAllDiagrams() and showAllDiagrams() should be used instead.
791803

792804
QgsDiagramSettings {#qgis_api_break_3_0_QgsDiagramSettings}
793805
------------------
@@ -1103,6 +1115,13 @@ and the new ramp can be retrieved after executing the dialog by calling ramp().
11031115
- Some internal methods which were previously public or protected were made private.
11041116

11051117

1118+
QgsLinearlyInterpolatedDiagramRenderer {#qgis_api_break_3_0_QgsLinearlyInterpolatedDiagramRenderer}
1119+
--------------------------------------
1120+
1121+
- The classificationAttribute() and setClassificationAttribute() methods were replace by
1122+
classificationField() and setClassificationField() which use the field names instead of field
1123+
indexes.
1124+
11061125
QgsMapCanvas {#qgis_api_break_3_0_QgsMapCanvas}
11071126
------------
11081127

‎python/core/qgsdiagramrenderer.sip

Lines changed: 27 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ class QgsDiagramLayerSettings
2525
};
2626

2727
//! Line placement flags for controlling line based placements
28-
enum LinePlacementFlags
28+
enum LinePlacementFlag
2929
{
3030
OnLine,
3131
AboveLine,
3232
BelowLine,
3333
MapOrientation,
3434
};
35+
typedef QFlags<QgsDiagramLayerSettings::LinePlacementFlag> LinePlacementFlags;
3536

3637
QgsDiagramLayerSettings();
3738

@@ -44,8 +45,7 @@ class QgsDiagramLayerSettings
4445
* @see setPlacement()
4546
* @note added in QGIS 2.16
4647
*/
47-
//TODO QGIS 3.0 - rename getter to placement()
48-
Placement getPlacement() const;
48+
Placement placement() const;
4949

5050
/** Sets the diagram placement.
5151
* @param value placement value
@@ -54,28 +54,20 @@ class QgsDiagramLayerSettings
5454
*/
5555
void setPlacement( Placement value );
5656

57-
//! Diagram placement
58-
//TODO QGIS 3.0 - make private, rename to mPlacement
59-
Placement placement;
60-
6157
/** Returns the diagram placement flags. These are only used if the diagram placement
6258
* is set to a line type.
6359
* @see setLinePlacementFlags()
6460
* @note added in QGIS 2.16
6561
*/
66-
unsigned int linePlacementFlags() const;
62+
LinePlacementFlags linePlacementFlags() const;
6763

6864
/** Sets the the diagram placement flags. These are only used if the diagram placement
6965
* is set to a line type.
7066
* @param flags placement value
7167
* @see getPlacement()
7268
* @note added in QGIS 2.16
7369
*/
74-
void setLinePlacementFlags( unsigned int flags );
75-
76-
//! Diagram placement flags
77-
// TODO QGIS 3.0 - make private, rename to mPlacementFlags, use QFlags
78-
unsigned int placementFlags;
70+
void setLinePlacementFlags( LinePlacementFlags flags );
7971

8072
/** Returns the diagram priority.
8173
* @returns diagram priority, where 0 = low and 10 = high
@@ -84,8 +76,7 @@ class QgsDiagramLayerSettings
8476
* @see setPriority()
8577
* @note added in QGIS 2.16
8678
*/
87-
//TODO QGIS 3.0 - rename getter to priority()
88-
int getPriority() const;
79+
int priority() const;
8980

9081
/** Sets the diagram priority.
9182
* @param value priority, where 0 = low and 10 = high
@@ -94,21 +85,14 @@ class QgsDiagramLayerSettings
9485
*/
9586
void setPriority( int value );
9687

97-
//! Placement priority, where 0 = low and 10 = high
98-
//! @note placement priority is shared with labeling, so diagrams with a high priority may displace labels
99-
//! and vice-versa
100-
// TODO QGIS 3.0 - make private, rename to mPriority
101-
int priority;
102-
10388
/** Returns the diagram z-index. Diagrams (or labels) with a higher z-index are drawn over diagrams
10489
* with a lower z-index.
10590
* @note z-index ordering is shared with labeling, so diagrams with a high z-index may be drawn over labels
10691
* with a low z-index and vice-versa
10792
* @see setZIndex()
10893
* @note added in QGIS 2.16
10994
*/
110-
//TODO QGIS 3.0 - rename getter to zIndex()
111-
double getZIndex() const;
95+
double zIndex() const;
11296

11397
/** Sets the diagram z-index. Diagrams (or labels) with a higher z-index are drawn over diagrams
11498
* with a lower z-index.
@@ -118,10 +102,6 @@ class QgsDiagramLayerSettings
118102
*/
119103
void setZIndex( double index );
120104

121-
//! Z-index of diagrams, where diagrams with a higher z-index are drawn on top of diagrams with a lower z-index
122-
// TODO QGIS 3.0 - rename to mZIndex, make private
123-
double zIndex;
124-
125105
/** Returns whether the feature associated with a diagram acts as an obstacle for other labels or diagrams.
126106
* @see setIsObstacle()
127107
* @note added in QGIS 2.16
@@ -135,10 +115,6 @@ class QgsDiagramLayerSettings
135115
*/
136116
void setIsObstacle( bool isObstacle );
137117

138-
//! Whether associated feature acts as an obstacle for other labels or diagrams
139-
// TODO QGIS 3.0 - rename to mObstacle, make private
140-
bool obstacle;
141-
142118
/** Returns the distance between the diagram and the feature (in mm).
143119
* @see setDistance()
144120
* @note added in QGIS 2.16
@@ -152,35 +128,25 @@ class QgsDiagramLayerSettings
152128
*/
153129
void setDistance( double distance );
154130

155-
//! Distance between diagram and the feature (in mm)
156-
// TODO QGIS 3.0 - make private, rename to mDistance
157-
double dist;
158-
159131
/** Returns the diagram renderer associated with the layer.
160132
* @see setRenderer()
161133
* @note added in QGIS 2.16
162134
*/
163-
// TODO QGIS 3.0 - rename to renderer()
164-
QgsDiagramRenderer* getRenderer();
135+
QgsDiagramRenderer* renderer();
165136

166137
/** Returns the diagram renderer associated with the layer.
167138
* @see setRenderer()
168139
* @note added in QGIS 2.16
169140
*/
170-
// TODO QGIS 3.0 - rename to renderer()
171-
//const QgsDiagramRenderer* getRenderer() const;
141+
//const QgsDiagramRenderer* renderer() const;
172142

173143
/** Sets the diagram renderer associated with the layer.
174144
* @param diagramRenderer diagram renderer. Ownership is transferred to the object.
175-
* @see getRenderer()
145+
* @see renderer()
176146
* @note added in QGIS 2.16
177147
*/
178148
void setRenderer( QgsDiagramRenderer* diagramRenderer /Transfer/ );
179149

180-
//! Associated diagram renderer. Owned by this object.
181-
// TODO QGIS 3.0 - make private, rename to mRenderer
182-
QgsDiagramRenderer* renderer;
183-
184150
/** Returns the coordinate transform associated with the layer, or an
185151
* invalid transform if no transformation is required.
186152
* @see setCoordinateTransform()
@@ -214,10 +180,6 @@ class QgsDiagramLayerSettings
214180
*/
215181
void setShowAllDiagrams( bool showAllDiagrams );
216182

217-
//! Whether to show all diagrams, including overlapping diagrams
218-
// TODO QGIS 3.0 - make private, rename to mShowAll
219-
bool showAll;
220-
221183
void readXml( const QDomElement& elem, const QgsVectorLayer* layer );
222184
void writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsVectorLayer* layer ) const;
223185

@@ -329,8 +291,8 @@ class QgsDiagramInterpolationSettings
329291
QSizeF upperSize;
330292
double lowerValue;
331293
double upperValue;
332-
/** Index of the classification attribute*/
333-
int classificationAttribute;
294+
//! Name of the field for classification
295+
QString classificationField;
334296
QString classificationAttributeExpression;
335297
bool classificationAttributeIsExpression;
336298
};
@@ -368,8 +330,7 @@ class QgsDiagramRenderer
368330
* @param fields layer fields
369331
* @note added in QGIS 2.16
370332
*/
371-
//TODO QGIS 3.0 - remove need for fields parameter
372-
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext(), const QgsFields& fields = QgsFields() ) const;
333+
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const;
373334

374335
void renderDiagram( const QgsFeature& feature, QgsRenderContext& c, QPointF pos );
375336

@@ -511,7 +472,7 @@ class QgsLinearlyInterpolatedDiagramRenderer : QgsDiagramRenderer
511472

512473
QList<QString> diagramAttributes() const;
513474

514-
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext(), const QgsFields& fields = QgsFields() ) const;
475+
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const;
515476

516477
QString rendererName() const;
517478

@@ -527,8 +488,19 @@ class QgsLinearlyInterpolatedDiagramRenderer : QgsDiagramRenderer
527488
void setUpperSize( QSizeF s );
528489
QSizeF upperSize() const;
529490

530-
int classificationAttribute() const;
531-
void setClassificationAttribute( int index );
491+
/**
492+
* Returns the field name used for interpolating the diagram size.
493+
* @see setClassificationField()
494+
* @note added in QGIS 3.0
495+
*/
496+
QString classificationField() const;
497+
498+
/**
499+
* Sets the field name used for interpolating the diagram size.
500+
* @see classificationField()
501+
* @note added in QGIS 3.0
502+
*/
503+
void setClassificationField( const QString& field );
532504

533505
QString classificationAttributeExpression() const;
534506
void setClassificationAttributeExpression( const QString& expression );

‎src/app/qgsdiagramproperties.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
370370
}
371371
else
372372
{
373-
mSizeFieldExpressionWidget->setField( mLayer->fields().at( lidr->classificationAttribute() ).name() );
373+
mSizeFieldExpressionWidget->setField( lidr->classificationField() );
374374
}
375375
}
376376
}
@@ -379,15 +379,15 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
379379
if ( dls )
380380
{
381381
mDiagramDistanceSpinBox->setValue( dls->distance() );
382-
mPrioritySlider->setValue( dls->getPriority() );
383-
mZIndexSpinBox->setValue( dls->getZIndex() );
382+
mPrioritySlider->setValue( dls->priority() );
383+
mZIndexSpinBox->setValue( dls->zIndex() );
384384
mDataDefinedXComboBox->setCurrentIndex( mDataDefinedXComboBox->findData( dls->xPosColumn ) );
385385
mDataDefinedYComboBox->setCurrentIndex( mDataDefinedYComboBox->findData( dls->yPosColumn ) );
386386
if ( dls->xPosColumn != -1 || dls->yPosColumn != -1 )
387387
{
388388
mDataDefinedPositionGroupBox->setChecked( true );
389389
}
390-
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( dls->getPlacement() ) );
390+
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( dls->placement() ) );
391391

392392
chkLineAbove->setChecked( dls->linePlacementFlags() & QgsDiagramLayerSettings::AboveLine );
393393
chkLineBelow->setChecked( dls->linePlacementFlags() & QgsDiagramLayerSettings::BelowLine );
@@ -801,8 +801,7 @@ void QgsDiagramProperties::apply()
801801
}
802802
else
803803
{
804-
int attributeNumber = mLayer->fields().lookupField( sizeFieldNameOrExp );
805-
dr->setClassificationAttribute( attributeNumber );
804+
dr->setClassificationField( sizeFieldNameOrExp );
806805
}
807806
dr->setDiagramSettings( ds );
808807
renderer = dr;
@@ -838,7 +837,7 @@ void QgsDiagramProperties::apply()
838837
}
839838
dls.setPlacement(( QgsDiagramLayerSettings::Placement )mPlacementComboBox->currentData().toInt() );
840839

841-
unsigned int flags = 0;
840+
QgsDiagramLayerSettings::LinePlacementFlags flags = 0;
842841
if ( chkLineAbove->isChecked() )
843842
flags |= QgsDiagramLayerSettings::AboveLine;
844843
if ( chkLineBelow->isChecked() )

‎src/core/diagram/qgspiediagram.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ QSizeF QgsPieDiagram::diagramSize( const QgsFeature& feature, const QgsRenderCon
4848
}
4949
else
5050
{
51-
attrVal = feature.attributes().at( is.classificationAttribute );
51+
attrVal = feature.attribute( is.classificationField );
5252
}
5353

5454
bool ok = false;

‎src/core/diagram/qgstextdiagram.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ QSizeF QgsTextDiagram::diagramSize( const QgsFeature& feature, const QgsRenderCo
4747
}
4848
else
4949
{
50-
attrVal = feature.attributes().at( is.classificationAttribute );
50+
attrVal = feature.attribute( is.classificationField );
5151
}
5252

5353
bool ok = false;

‎src/core/qgsdiagramrenderer.cpp

Lines changed: 52 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -25,74 +25,59 @@
2525
#include <QDomElement>
2626
#include <QPainter>
2727

28-
Q_NOWARN_DEPRECATED_PUSH // because of deprecated xform member
2928
QgsDiagramLayerSettings::QgsDiagramLayerSettings()
30-
: placement( AroundPoint )
31-
, placementFlags( OnLine )
32-
, priority( 5 )
33-
, zIndex( 0.0 )
34-
, obstacle( false )
35-
, dist( 0.0 )
36-
, renderer( nullptr )
37-
, xPosColumn( -1 )
29+
: xPosColumn( -1 )
3830
, yPosColumn( -1 )
3931
, showColumn( -1 )
40-
, showAll( true )
32+
, mRenderer( nullptr )
4133
{
4234
}
43-
Q_NOWARN_DEPRECATED_POP
4435

45-
Q_NOWARN_DEPRECATED_PUSH // because of deprecated xform member
4636
QgsDiagramLayerSettings::QgsDiagramLayerSettings( const QgsDiagramLayerSettings& rh )
47-
: placement( rh.placement )
48-
, placementFlags( rh.placementFlags )
49-
, priority( rh.priority )
50-
, zIndex( rh.zIndex )
51-
, obstacle( rh.obstacle )
52-
, dist( rh.dist )
53-
, renderer( rh.renderer ? rh.renderer->clone() : nullptr )
54-
, xPosColumn( rh.xPosColumn )
37+
: xPosColumn( rh.xPosColumn )
5538
, yPosColumn( rh.yPosColumn )
5639
, showColumn( rh.showColumn )
57-
, showAll( rh.showAll )
5840
, mCt( rh.mCt )
41+
, mPlacement( rh.mPlacement )
42+
, mPlacementFlags( rh.mPlacementFlags )
43+
, mPriority( rh.mPriority )
44+
, mZIndex( rh.mZIndex )
45+
, mObstacle( rh.mObstacle )
46+
, mDistance( rh.mDistance )
47+
, mRenderer( rh.mRenderer ? rh.mRenderer->clone() : nullptr )
48+
, mShowAll( rh.mShowAll )
5949
{
6050
}
61-
Q_NOWARN_DEPRECATED_POP
6251

63-
Q_NOWARN_DEPRECATED_PUSH // because of deprecated xform member
6452
QgsDiagramLayerSettings&QgsDiagramLayerSettings::operator=( const QgsDiagramLayerSettings & rh )
6553
{
66-
placement = rh.placement;
67-
placementFlags = rh.placementFlags;
68-
priority = rh.priority;
69-
zIndex = rh.zIndex;
70-
obstacle = rh.obstacle;
71-
dist = rh.dist;
72-
renderer = rh.renderer ? rh.renderer->clone() : nullptr;
54+
mPlacement = rh.mPlacement;
55+
mPlacementFlags = rh.mPlacementFlags;
56+
mPriority = rh.mPriority;
57+
mZIndex = rh.mZIndex;
58+
mObstacle = rh.mObstacle;
59+
mDistance = rh.mDistance;
60+
mRenderer = rh.mRenderer ? rh.mRenderer->clone() : nullptr;
7361
mCt = rh.mCt;
7462
xPosColumn = rh.xPosColumn;
7563
yPosColumn = rh.yPosColumn;
7664
showColumn = rh.showColumn;
77-
showAll = rh.showAll;
65+
mShowAll = rh.mShowAll;
7866
return *this;
7967
}
80-
Q_NOWARN_DEPRECATED_POP
8168

82-
Q_NOWARN_DEPRECATED_PUSH // because of deprecated fields member
8369
QgsDiagramLayerSettings::~QgsDiagramLayerSettings()
8470
{
85-
delete renderer;
71+
delete mRenderer;
8672
}
87-
Q_NOWARN_DEPRECATED_POP
8873

8974
void QgsDiagramLayerSettings::setRenderer( QgsDiagramRenderer *diagramRenderer )
9075
{
91-
if ( diagramRenderer == renderer )
76+
if ( diagramRenderer == mRenderer )
9277
return;
9378

94-
delete renderer;
95-
renderer = diagramRenderer;
79+
delete mRenderer;
80+
mRenderer = diagramRenderer;
9681
}
9782

9883
void QgsDiagramLayerSettings::setCoordinateTransform( const QgsCoordinateTransform& transform )
@@ -104,41 +89,41 @@ void QgsDiagramLayerSettings::readXml( const QDomElement& elem, const QgsVectorL
10489
{
10590
Q_UNUSED( layer )
10691

107-
placement = static_cast< Placement >( elem.attribute( QStringLiteral( "placement" ) ).toInt() );
108-
placementFlags = static_cast< LinePlacementFlags >( elem.attribute( QStringLiteral( "linePlacementFlags" ) ).toInt() );
109-
priority = elem.attribute( QStringLiteral( "priority" ) ).toInt();
110-
zIndex = elem.attribute( QStringLiteral( "zIndex" ) ).toDouble();
111-
obstacle = elem.attribute( QStringLiteral( "obstacle" ) ).toInt();
112-
dist = elem.attribute( QStringLiteral( "dist" ) ).toDouble();
92+
mPlacement = static_cast< Placement >( elem.attribute( QStringLiteral( "placement" ) ).toInt() );
93+
mPlacementFlags = static_cast< LinePlacementFlag >( elem.attribute( QStringLiteral( "linePlacementFlags" ) ).toInt() );
94+
mPriority = elem.attribute( QStringLiteral( "priority" ) ).toInt();
95+
mZIndex = elem.attribute( QStringLiteral( "zIndex" ) ).toDouble();
96+
mObstacle = elem.attribute( QStringLiteral( "obstacle" ) ).toInt();
97+
mDistance = elem.attribute( QStringLiteral( "dist" ) ).toDouble();
11398
xPosColumn = elem.attribute( QStringLiteral( "xPosColumn" ) ).toInt();
11499
yPosColumn = elem.attribute( QStringLiteral( "yPosColumn" ) ).toInt();
115100
showColumn = elem.attribute( QStringLiteral( "showColumn" ) ).toInt();
116-
showAll = ( elem.attribute( QStringLiteral( "showAll" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
101+
mShowAll = ( elem.attribute( QStringLiteral( "showAll" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
117102
}
118103

119104
void QgsDiagramLayerSettings::writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsVectorLayer* layer ) const
120105
{
121106
Q_UNUSED( layer )
122107

123108
QDomElement diagramLayerElem = doc.createElement( QStringLiteral( "DiagramLayerSettings" ) );
124-
diagramLayerElem.setAttribute( QStringLiteral( "placement" ), placement );
125-
diagramLayerElem.setAttribute( QStringLiteral( "linePlacementFlags" ), placementFlags );
126-
diagramLayerElem.setAttribute( QStringLiteral( "priority" ), priority );
127-
diagramLayerElem.setAttribute( QStringLiteral( "zIndex" ), zIndex );
128-
diagramLayerElem.setAttribute( QStringLiteral( "obstacle" ), obstacle );
129-
diagramLayerElem.setAttribute( QStringLiteral( "dist" ), QString::number( dist ) );
109+
diagramLayerElem.setAttribute( QStringLiteral( "placement" ), mPlacement );
110+
diagramLayerElem.setAttribute( QStringLiteral( "linePlacementFlags" ), mPlacementFlags );
111+
diagramLayerElem.setAttribute( QStringLiteral( "priority" ), mPriority );
112+
diagramLayerElem.setAttribute( QStringLiteral( "zIndex" ), mZIndex );
113+
diagramLayerElem.setAttribute( QStringLiteral( "obstacle" ), mObstacle );
114+
diagramLayerElem.setAttribute( QStringLiteral( "dist" ), QString::number( mDistance ) );
130115
diagramLayerElem.setAttribute( QStringLiteral( "xPosColumn" ), xPosColumn );
131116
diagramLayerElem.setAttribute( QStringLiteral( "yPosColumn" ), yPosColumn );
132117
diagramLayerElem.setAttribute( QStringLiteral( "showColumn" ), showColumn );
133-
diagramLayerElem.setAttribute( QStringLiteral( "showAll" ), showAll );
118+
diagramLayerElem.setAttribute( QStringLiteral( "showAll" ), mShowAll );
134119
layerElem.appendChild( diagramLayerElem );
135120
}
136121

137122
QSet<QString> QgsDiagramLayerSettings::referencedFields( const QgsExpressionContext &context, const QgsFields& fieldsParameter ) const
138123
{
139124
QSet< QString > referenced;
140-
if ( renderer )
141-
referenced = renderer->referencedFields( context, fieldsParameter );
125+
if ( mRenderer )
126+
referenced = mRenderer->referencedFields( context );
142127

143128
//and the ones needed for data defined diagram positions
144129
if ( xPosColumn >= 0 && xPosColumn < fieldsParameter.count() )
@@ -446,10 +431,8 @@ QSizeF QgsDiagramRenderer::sizeMapUnits( const QgsFeature& feature, const QgsRen
446431
return size;
447432
}
448433

449-
QSet<QString> QgsDiagramRenderer::referencedFields( const QgsExpressionContext &context, const QgsFields &fields ) const
434+
QSet<QString> QgsDiagramRenderer::referencedFields( const QgsExpressionContext &context ) const
450435
{
451-
Q_UNUSED( fields );
452-
453436
QSet< QString > referenced;
454437

455438
if ( !mDiagram )
@@ -615,9 +598,9 @@ QList<QString> QgsLinearlyInterpolatedDiagramRenderer::diagramAttributes() const
615598
return mSettings.categoryAttributes;
616599
}
617600

618-
QSet<QString> QgsLinearlyInterpolatedDiagramRenderer::referencedFields( const QgsExpressionContext &context, const QgsFields& fields ) const
601+
QSet<QString> QgsLinearlyInterpolatedDiagramRenderer::referencedFields( const QgsExpressionContext &context ) const
619602
{
620-
QSet< QString > referenced = QgsDiagramRenderer::referencedFields( context, fields );
603+
QSet< QString > referenced = QgsDiagramRenderer::referencedFields( context );
621604
if ( mInterpolationSettings.classificationAttributeIsExpression )
622605
{
623606
QgsExpression* expression = mDiagram->getExpression( mInterpolationSettings.classificationAttributeExpression, context );
@@ -628,7 +611,7 @@ QSet<QString> QgsLinearlyInterpolatedDiagramRenderer::referencedFields( const Qg
628611
}
629612
else
630613
{
631-
referenced << fields.at( mInterpolationSettings.classificationAttribute ).name();
614+
referenced << mInterpolationSettings.classificationField;
632615
}
633616
return referenced;
634617
}
@@ -653,7 +636,14 @@ void QgsLinearlyInterpolatedDiagramRenderer::readXml( const QDomElement& elem, c
653636
}
654637
else
655638
{
656-
mInterpolationSettings.classificationAttribute = elem.attribute( QStringLiteral( "classificationAttribute" ) ).toInt();
639+
if ( elem.hasAttribute( QStringLiteral( "classificationAttribute" ) ) )
640+
{
641+
int idx = elem.attribute( QStringLiteral( "classificationAttribute" ) ).toInt();
642+
if ( idx >= 0 && idx < layer->fields().count() )
643+
mInterpolationSettings.classificationField = layer->fields().at( idx ).name();
644+
}
645+
else
646+
mInterpolationSettings.classificationField = elem.attribute( QStringLiteral( "classificationField " ) );
657647
}
658648
QDomElement settingsElem = elem.firstChildElement( QStringLiteral( "DiagramCategory" ) );
659649
if ( !settingsElem.isNull() )
@@ -678,7 +668,7 @@ void QgsLinearlyInterpolatedDiagramRenderer::writeXml( QDomElement& layerElem, Q
678668
}
679669
else
680670
{
681-
rendererElem.setAttribute( QStringLiteral( "classificationAttribute" ), mInterpolationSettings.classificationAttribute );
671+
rendererElem.setAttribute( QStringLiteral( "classificationField" ), mInterpolationSettings.classificationField );
682672
}
683673
mSettings.writeXml( rendererElem, doc, layer );
684674
_writeXml( rendererElem, doc, layer );

‎src/core/qgsdiagramrenderer.h

Lines changed: 70 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,14 @@ class CORE_EXPORT QgsDiagramLayerSettings
6363
};
6464

6565
//! Line placement flags for controlling line based placements
66-
enum LinePlacementFlags
66+
enum LinePlacementFlag
6767
{
6868
OnLine = 1,
69-
AboveLine = 2,
70-
BelowLine = 4,
71-
MapOrientation = 8
69+
AboveLine = 1 << 1,
70+
BelowLine = 1 << 2,
71+
MapOrientation = 1 << 4,
7272
};
73+
Q_DECLARE_FLAGS( LinePlacementFlags, LinePlacementFlag )
7374

7475
QgsDiagramLayerSettings();
7576

@@ -80,42 +81,34 @@ class CORE_EXPORT QgsDiagramLayerSettings
8081

8182
~QgsDiagramLayerSettings();
8283

83-
/** Returns the diagram placement.
84+
/**
85+
* Returns the diagram placement.
8486
* @see setPlacement()
8587
* @note added in QGIS 2.16
8688
*/
87-
//TODO QGIS 3.0 - rename getter to placement()
88-
Placement getPlacement() const { return placement; }
89+
Placement placement() const { return mPlacement; }
8990

9091
/** Sets the diagram placement.
9192
* @param value placement value
92-
* @see getPlacement()
93+
* @see placement()
9394
* @note added in QGIS 2.16
9495
*/
95-
void setPlacement( Placement value ) { placement = value; }
96-
97-
//! Diagram placement
98-
//TODO QGIS 3.0 - make private, rename to mPlacement
99-
Placement placement;
96+
void setPlacement( Placement value ) { mPlacement = value; }
10097

10198
/** Returns the diagram placement flags. These are only used if the diagram placement
10299
* is set to a line type.
103100
* @see setLinePlacementFlags()
104101
* @note added in QGIS 2.16
105102
*/
106-
unsigned int linePlacementFlags() const { return placementFlags; }
103+
LinePlacementFlags linePlacementFlags() const { return mPlacementFlags; }
107104

108105
/** Sets the the diagram placement flags. These are only used if the diagram placement
109106
* is set to a line type.
110107
* @param flags placement value
111108
* @see getPlacement()
112109
* @note added in QGIS 2.16
113110
*/
114-
void setLinePlacementFlags( unsigned int flags ) { placementFlags = flags; }
115-
116-
//! Diagram placement flags
117-
// TODO QGIS 3.0 - make private, rename to mPlacementFlags, use QFlags
118-
unsigned int placementFlags;
111+
void setLinePlacementFlags( LinePlacementFlags flags ) { mPlacementFlags = flags; }
119112

120113
/** Returns the diagram priority.
121114
* @returns diagram priority, where 0 = low and 10 = high
@@ -124,21 +117,15 @@ class CORE_EXPORT QgsDiagramLayerSettings
124117
* @see setPriority()
125118
* @note added in QGIS 2.16
126119
*/
127-
//TODO QGIS 3.0 - rename getter to priority()
128-
int getPriority() const { return priority; }
120+
int priority() const { return mPriority; }
129121

130122
/** Sets the diagram priority.
131123
* @param value priority, where 0 = low and 10 = high
132-
* @see getPriority()
124+
* @see priority()
133125
* @note added in QGIS 2.16
134126
*/
135-
void setPriority( int value ) { priority = value; }
127+
void setPriority( int value ) { mPriority = value; }
136128

137-
//! Placement priority, where 0 = low and 10 = high
138-
//! @note placement priority is shared with labeling, so diagrams with a high priority may displace labels
139-
//! and vice-versa
140-
// TODO QGIS 3.0 - make private, rename to mPriority
141-
int priority;
142129

143130
/** Returns the diagram z-index. Diagrams (or labels) with a higher z-index are drawn over diagrams
144131
* with a lower z-index.
@@ -147,81 +134,61 @@ class CORE_EXPORT QgsDiagramLayerSettings
147134
* @see setZIndex()
148135
* @note added in QGIS 2.16
149136
*/
150-
//TODO QGIS 3.0 - rename getter to zIndex()
151-
double getZIndex() const { return zIndex; }
137+
double zIndex() const { return mZIndex; }
152138

153139
/** Sets the diagram z-index. Diagrams (or labels) with a higher z-index are drawn over diagrams
154140
* with a lower z-index.
155141
* @param index diagram z-index
156-
* @see getZIndex()
142+
* @see zIndex()
157143
* @note added in QGIS 2.16
158144
*/
159-
void setZIndex( double index ) { zIndex = index; }
160-
161-
//! Z-index of diagrams, where diagrams with a higher z-index are drawn on top of diagrams with a lower z-index
162-
// TODO QGIS 3.0 - rename to mZIndex, make private
163-
double zIndex;
164-
145+
void setZIndex( double index ) { mZIndex = index; }
165146

166147
/** Returns whether the feature associated with a diagram acts as an obstacle for other labels or diagrams.
167148
* @see setIsObstacle()
168149
* @note added in QGIS 2.16
169150
*/
170-
bool isObstacle() const { return obstacle; }
151+
bool isObstacle() const { return mObstacle; }
171152

172153
/** Sets whether the feature associated with a diagram acts as an obstacle for other labels or diagrams.
173154
* @param isObstacle set to true for feature to act as obstacle
174155
* @see isObstacle()
175156
* @note added in QGIS 2.16
176157
*/
177-
void setIsObstacle( bool isObstacle ) { obstacle = isObstacle; }
178-
179-
//! Whether associated feature acts as an obstacle for other labels or diagrams
180-
// TODO QGIS 3.0 - rename to mObstacle, make private
181-
bool obstacle;
158+
void setIsObstacle( bool isObstacle ) { mObstacle = isObstacle; }
182159

183160
/** Returns the distance between the diagram and the feature (in mm).
184161
* @see setDistance()
185162
* @note added in QGIS 2.16
186163
*/
187-
double distance() const { return dist; }
164+
double distance() const { return mDistance; }
188165

189166
/** Sets the distance between the diagram and the feature.
190167
* @param distance distance in mm
191168
* @see distance()
192169
* @note added in QGIS 2.16
193170
*/
194-
void setDistance( double distance ) { dist = distance; }
195-
196-
//! Distance between diagram and the feature (in mm)
197-
// TODO QGIS 3.0 - make private, rename to mDistance
198-
double dist;
171+
void setDistance( double distance ) { mDistance = distance; }
199172

200173
/** Returns the diagram renderer associated with the layer.
201174
* @see setRenderer()
202175
* @note added in QGIS 2.16
203176
*/
204-
// TODO QGIS 3.0 - rename to renderer()
205-
QgsDiagramRenderer* getRenderer() { return renderer; }
177+
QgsDiagramRenderer* renderer() { return mRenderer; }
206178

207179
/** Returns the diagram renderer associated with the layer.
208180
* @see setRenderer()
209181
* @note added in QGIS 2.16
210182
*/
211-
// TODO QGIS 3.0 - rename to renderer()
212-
const QgsDiagramRenderer* getRenderer() const { return renderer; }
183+
const QgsDiagramRenderer* renderer() const { return mRenderer; }
213184

214185
/** Sets the diagram renderer associated with the layer.
215186
* @param diagramRenderer diagram renderer. Ownership is transferred to the object.
216-
* @see getRenderer()
187+
* @see renderer()
217188
* @note added in QGIS 2.16
218189
*/
219190
void setRenderer( QgsDiagramRenderer* diagramRenderer );
220191

221-
//! Associated diagram renderer. Owned by this object.
222-
// TODO QGIS 3.0 - make private, rename to mRenderer
223-
QgsDiagramRenderer* renderer;
224-
225192
/** Returns the coordinate transform associated with the layer, or an
226193
* invalid transform if no transformation is required.
227194
* @see setCoordinateTransform()
@@ -249,18 +216,14 @@ class CORE_EXPORT QgsDiagramLayerSettings
249216
* @see setShowAllDiagrams()
250217
* @note added in QGIS 2.16
251218
*/
252-
bool showAllDiagrams() const { return showAll; }
219+
bool showAllDiagrams() const { return mShowAll; }
253220

254221
/** Sets whether the layer should show all diagrams, including overlapping diagrams
255222
* @param showAllDiagrams set to true to show all diagrams
256223
* @see showAllDiagrams()
257224
* @note added in QGIS 2.16
258225
*/
259-
void setShowAllDiagrams( bool showAllDiagrams ) { showAll = showAllDiagrams; }
260-
261-
//! Whether to show all diagrams, including overlapping diagrams
262-
// TODO QGIS 3.0 - make private, rename to mShowAll
263-
bool showAll;
226+
void setShowAllDiagrams( bool showAllDiagrams ) { mShowAll = showAllDiagrams; }
264227

265228
void readXml( const QDomElement& elem, const QgsVectorLayer* layer );
266229
void writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsVectorLayer* layer ) const;
@@ -277,6 +240,32 @@ class CORE_EXPORT QgsDiagramLayerSettings
277240

278241
//! Associated coordinate transform, or invalid transform for no transformation
279242
QgsCoordinateTransform mCt;
243+
244+
//! Diagram placement
245+
Placement mPlacement = AroundPoint;
246+
247+
//! Diagram placement flags
248+
LinePlacementFlags mPlacementFlags = OnLine;
249+
250+
//! Placement priority, where 0 = low and 10 = high
251+
//! @note placement priority is shared with labeling, so diagrams with a high priority may displace labels
252+
//! and vice-versa
253+
int mPriority = 5;
254+
255+
//! Z-index of diagrams, where diagrams with a higher z-index are drawn on top of diagrams with a lower z-index
256+
double mZIndex = 0.0;
257+
258+
//! Whether associated feature acts as an obstacle for other labels or diagrams
259+
bool mObstacle = false;
260+
261+
//! Distance between diagram and the feature (in mm)
262+
double mDistance = 0.0;
263+
264+
//! Associated diagram renderer. Owned by this object.
265+
QgsDiagramRenderer* mRenderer = nullptr;
266+
267+
//! Whether to show all diagrams, including overlapping diagrams
268+
bool mShowAll = true;
280269
};
281270

282271
/** \ingroup core
@@ -390,9 +379,8 @@ class CORE_EXPORT QgsDiagramInterpolationSettings
390379
double lowerValue;
391380
double upperValue;
392381

393-
//! Index of the classification attribute
394-
//TODO QGIS 3.0 - don't store index, store field name
395-
int classificationAttribute;
382+
//! Name of the field for classification
383+
QString classificationField;
396384

397385
QString classificationAttributeExpression;
398386
bool classificationAttributeIsExpression;
@@ -425,11 +413,9 @@ class CORE_EXPORT QgsDiagramRenderer
425413

426414
/** Returns the set of any fields required for diagram rendering
427415
* @param context expression context the diagrams will be drawn using
428-
* @param fields layer fields
429416
* @note added in QGIS 2.16
430417
*/
431-
//TODO QGIS 3.0 - remove need for fields parameter
432-
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext(), const QgsFields& fields = QgsFields() ) const;
418+
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const;
433419

434420
void renderDiagram( const QgsFeature& feature, QgsRenderContext& c, QPointF pos ) const;
435421

@@ -581,7 +567,7 @@ class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer : public QgsDiagramRend
581567

582568
QList<QString> diagramAttributes() const override;
583569

584-
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext(), const QgsFields& fields = QgsFields() ) const override;
570+
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const override;
585571

586572
QString rendererName() const override { return QStringLiteral( "LinearlyInterpolated" ); }
587573

@@ -597,8 +583,19 @@ class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer : public QgsDiagramRend
597583
void setUpperSize( QSizeF s ) { mInterpolationSettings.upperSize = s; }
598584
QSizeF upperSize() const { return mInterpolationSettings.upperSize; }
599585

600-
int classificationAttribute() const { return mInterpolationSettings.classificationAttribute; }
601-
void setClassificationAttribute( int index ) { mInterpolationSettings.classificationAttribute = index; }
586+
/**
587+
* Returns the field name used for interpolating the diagram size.
588+
* @see setClassificationField()
589+
* @note added in QGIS 3.0
590+
*/
591+
QString classificationField() const { return mInterpolationSettings.classificationField; }
592+
593+
/**
594+
* Sets the field name used for interpolating the diagram size.
595+
* @see classificationField()
596+
* @note added in QGIS 3.0
597+
*/
598+
void setClassificationField( const QString& field ) { mInterpolationSettings.classificationField = field; }
602599

603600
QString classificationAttributeExpression() const { return mInterpolationSettings.classificationAttributeExpression; }
604601
void setClassificationAttributeExpression( const QString& expression ) { mInterpolationSettings.classificationAttributeExpression = expression; }

‎src/core/qgsvectorlayerdiagramprovider.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ QgsVectorLayerDiagramProvider::QgsVectorLayerDiagramProvider( QgsVectorLayer* la
6161
void QgsVectorLayerDiagramProvider::init()
6262
{
6363
mName = mLayerId;
64-
mPriority = 1 - mSettings.getPriority() / 10.0; // convert 0..10 --> 1..0
65-
mPlacement = QgsPalLayerSettings::Placement( mSettings.getPlacement() );
64+
mPriority = 1 - mSettings.priority() / 10.0; // convert 0..10 --> 1..0
65+
mPlacement = QgsPalLayerSettings::Placement( mSettings.placement() );
6666
mLinePlacementFlags = mSettings.linePlacementFlags();
6767
}
6868

@@ -147,7 +147,7 @@ void QgsVectorLayerDiagramProvider::drawLabel( QgsRenderContext& context, pal::L
147147
QgsPoint centerPt = xform.transform( outPt.x() - label->getWidth() / 2,
148148
outPt.y() - label->getHeight() / 2 );
149149

150-
mSettings.getRenderer()->renderDiagram( feature, context, centerPt.toQPointF() );
150+
mSettings.renderer()->renderDiagram( feature, context, centerPt.toQPointF() );
151151

152152
//insert into label search tree to manipulate position interactively
153153
mEngine->results()->mLabelSearchTree->insertLabel( label, label->getFeaturePart()->featureId(), mLayerId, QString(), QFont(), true, false );
@@ -195,7 +195,7 @@ QgsLabelFeature* QgsVectorLayerDiagramProvider::registerDiagram( QgsFeature& fea
195195
{
196196
const QgsMapSettings& mapSettings = mEngine->mapSettings();
197197

198-
const QgsDiagramRenderer* dr = mSettings.getRenderer();
198+
const QgsDiagramRenderer* dr = mSettings.renderer();
199199
if ( dr )
200200
{
201201
QList<QgsDiagramSettings> settingList = dr->diagramSettings();
@@ -315,7 +315,7 @@ QgsLabelFeature* QgsVectorLayerDiagramProvider::registerDiagram( QgsFeature& fea
315315
lf->setFixedAngle( 0 );
316316
lf->setAlwaysShow( alwaysShow );
317317
lf->setIsObstacle( mSettings.isObstacle() );
318-
lf->setZIndex( mSettings.getZIndex() );
318+
lf->setZIndex( mSettings.zIndex() );
319319
if ( geosObstacleGeomClone )
320320
{
321321
lf->setObstacleGeometry( geosObstacleGeomClone );

‎tests/src/core/testqgsdiagram.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class TestQgsDiagram : public QObject
149149
dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
150150
dr->setUpperValue( 10 );
151151
dr->setUpperSize( QSizeF( 40, 40 ) );
152-
dr->setClassificationAttribute( 5 ); // Staff
152+
dr->setClassificationField( "Staff" );
153153
dr->setDiagram( new QgsPieDiagram() );
154154
dr->setDiagramSettings( ds );
155155
mPointsLayer->setDiagramRenderer( dr );

‎tests/src/core/testqgslegendrenderer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ void TestQgsLegendRenderer::testDiagramAttributeLegend()
661661
dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
662662
dr->setUpperValue( 10 );
663663
dr->setUpperSize( QSizeF( 40, 40 ) );
664-
dr->setClassificationAttribute( 0 );
664+
dr->setClassificationField( QString() );
665665
dr->setDiagram( new QgsPieDiagram() );
666666
dr->setDiagramSettings( ds );
667667
dr->setSizeLegend( false );
@@ -701,7 +701,7 @@ void TestQgsLegendRenderer::testDiagramSizeLegend()
701701
dr->setLowerSize( QSizeF( 1, 1 ) );
702702
dr->setUpperValue( 10 );
703703
dr->setUpperSize( QSizeF( 20, 20 ) );
704-
dr->setClassificationAttribute( 0 );
704+
dr->setClassificationField( QString( "a" ) );
705705
dr->setDiagram( new QgsPieDiagram() );
706706
dr->setDiagramSettings( ds );
707707
dr->setSizeLegend( true );

0 commit comments

Comments
 (0)
Please sign in to comment.