Skip to content

Commit 4018863

Browse files
committed
Remove deprecated diagram field properties
1 parent 336b603 commit 4018863

8 files changed

Lines changed: 142 additions & 271 deletions

‎doc/api_break.dox‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,17 @@ place of a null pointer.
832832
- The dist member variable was removed. setDistance() and distance() should be used instead.
833833
- The renderer member variable was removed, and getRenderer() was renamed to renderer()
834834
- The showAll member variable was removed. setShowAllDiagrams() and showAllDiagrams() should be used instead.
835+
- The xPosColumn, yPosColumn and showColumn attributes were removed. Use setProperties() for setting data defined properties instead.
836+
- The LinePlacementFlags enum was renamed to LinePlacementFlag
837+
- The placement member variable was removed, and getPlacement() was renamed to placement()
838+
- The placementFlags member variable was removed
839+
- The priority member variable was removed, and getPriority() was renamed to priority()
840+
- The zIndex member variable was removed, and getZIndex() was renamed to zIndex()
841+
- The obstacle member variable was removed. setIsObstacle() and isObstacle() should be used instead.
842+
- The dist member variable was removed. setDistance() and distance() should be used instead.
843+
- The renderer member variable was removed, and getRenderer() was renamed to renderer()
844+
- The showAll member variable was removed. setShowAllDiagrams() and showAllDiagrams() should be used instead.
845+
- referencedFields() no longer requires a QgsFields argument.
835846

836847
QgsDiagramSettings {#qgis_api_break_3_0_QgsDiagramSettings}
837848
------------------

‎python/core/qgsdiagramrenderer.sip‎

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,6 @@ class QgsDiagramLayerSettings
180180
*/
181181
void setCoordinateTransform( const QgsCoordinateTransform& transform );
182182

183-
//! Attribute index for x coordinate (or -1 if position not data defined)
184-
int xPosColumn;
185-
186-
//! Attribute index for y coordinate (or -1 if position not data defined)
187-
int yPosColumn;
188-
189183
/** Returns whether the layer should show all diagrams, including overlapping diagrams
190184
* @see setShowAllDiagrams()
191185
* @note added in QGIS 2.16
@@ -204,11 +198,9 @@ class QgsDiagramLayerSettings
204198

205199
/** Returns the set of any fields referenced by the layer's diagrams.
206200
* @param context expression context the diagrams will be drawn using
207-
* @param fields layer fields
208201
* @note added in QGIS 2.16
209202
*/
210-
//TODO QGIS 3.0 - remove need for fields parameter
211-
QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext(), const QgsFields& fields = QgsFields() ) const;
203+
QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const;
212204

213205
/** Returns a reference to the diagram's property collection, used for data defined overrides.
214206
* @note added in QGIS 2.16

‎src/app/qgsdiagramproperties.cpp‎

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -147,16 +147,11 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
147147
mScaleDependencyComboBox->addItem( tr( "Area" ), true );
148148
mScaleDependencyComboBox->addItem( tr( "Diameter" ), false );
149149

150-
mDataDefinedXComboBox->addItem( tr( "None" ), -1 );
151-
mDataDefinedYComboBox->addItem( tr( "None" ), -1 );
152-
153150
mAngleOffsetComboBox->addItem( tr( "Top" ), 90 * 16 );
154151
mAngleOffsetComboBox->addItem( tr( "Right" ), 0 );
155152
mAngleOffsetComboBox->addItem( tr( "Bottom" ), 270 * 16 );
156153
mAngleOffsetComboBox->addItem( tr( "Left" ), 180 * 16 );
157154

158-
mDataDefinedVisibilityComboBox->addItem( tr( "None" ), -1 );
159-
160155
QSettings settings;
161156

162157
// reset horiz stretch of left side of options splitter (set to 1 for previewing in Qt Designer)
@@ -192,10 +187,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
192187
newItem->setText( 0, name );
193188
newItem->setData( 0, RoleAttributeExpression, name );
194189
newItem->setFlags( newItem->flags() & ~Qt::ItemIsDropEnabled );
195-
196-
mDataDefinedXComboBox->addItem( layerFields.at( idx ).name(), idx );
197-
mDataDefinedYComboBox->addItem( layerFields.at( idx ).name(), idx );
198-
mDataDefinedVisibilityComboBox->addItem( layerFields.at( idx ).name(), idx );
199190
}
200191

201192
const QgsDiagramRenderer* dr = layer->diagramRenderer();
@@ -217,7 +208,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
217208
mScaleVisibilityGroupBox->setChecked( layer->hasScaleBasedVisibility() );
218209
mScaleRangeWidget->setScaleRange( 1.0 / layer->maximumScale(), 1.0 / layer->minimumScale() ); // caution: layer uses scale denoms, widget uses true scales
219210
mShowAllCheckBox->setChecked( true );
220-
mDataDefinedVisibilityGroupBox->setChecked( false );
221211
mCheckBoxAttributeLegend->setChecked( true );
222212
mCheckBoxSizeLegend->setChecked( false );
223213
mSizeLegendSymbol.reset( QgsMarkerSymbol::createSimple( QgsStringMap() ) );
@@ -383,12 +373,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
383373
mDiagramDistanceSpinBox->setValue( dls->distance() );
384374
mPrioritySlider->setValue( dls->priority() );
385375
mZIndexSpinBox->setValue( dls->zIndex() );
386-
mDataDefinedXComboBox->setCurrentIndex( mDataDefinedXComboBox->findData( dls->xPosColumn ) );
387-
mDataDefinedYComboBox->setCurrentIndex( mDataDefinedYComboBox->findData( dls->yPosColumn ) );
388-
if ( dls->xPosColumn != -1 || dls->yPosColumn != -1 )
389-
{
390-
mDataDefinedPositionGroupBox->setChecked( true );
391-
}
392376
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( dls->placement() ) );
393377

394378
chkLineAbove->setChecked( dls->linePlacementFlags() & QgsDiagramLayerSettings::AboveLine );
@@ -398,11 +382,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
398382
chkLineOrientationDependent->setChecked( true );
399383

400384
mShowAllCheckBox->setChecked( dls->showAllDiagrams() );
401-
mDataDefinedVisibilityComboBox->setCurrentIndex( mDataDefinedVisibilityComboBox->findData( dls->showColumn ) );
402-
if ( dls->showColumn != -1 )
403-
{
404-
mDataDefinedVisibilityGroupBox->setChecked( true );
405-
}
406385
}
407386

408387
if ( dr->diagram() )
@@ -819,24 +798,6 @@ void QgsDiagramProperties::apply()
819798
dls.setPriority( mPrioritySlider->value() );
820799
dls.setZIndex( mZIndexSpinBox->value() );
821800
dls.setShowAllDiagrams( mShowAllCheckBox->isChecked() );
822-
if ( mDataDefinedVisibilityGroupBox->isChecked() )
823-
{
824-
dls.showColumn = mDataDefinedVisibilityComboBox->currentData().toInt();
825-
}
826-
else
827-
{
828-
dls.showColumn = -1;
829-
}
830-
if ( mDataDefinedPositionGroupBox->isChecked() )
831-
{
832-
dls.xPosColumn = mDataDefinedXComboBox->currentData().toInt();
833-
dls.yPosColumn = mDataDefinedYComboBox->currentData().toInt();
834-
}
835-
else
836-
{
837-
dls.xPosColumn = -1;
838-
dls.yPosColumn = -1;
839-
}
840801
dls.setPlacement(( QgsDiagramLayerSettings::Placement )mPlacementComboBox->currentData().toInt() );
841802

842803
QgsDiagramLayerSettings::LinePlacementFlags flags = 0;

‎src/app/qgsmaptoollabel.cpp‎

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,25 @@ bool QgsMapToolLabel::diagramMoveable( QgsVectorLayer* vlayer, int& xCol, int& y
570570
if ( vlayer && vlayer->diagramsEnabled() )
571571
{
572572
const QgsDiagramLayerSettings *dls = vlayer->diagramLayerSettings();
573-
if ( dls && dls->xPosColumn >= 0 && dls->yPosColumn >= 0 )
573+
if ( dls )
574574
{
575-
xCol = dls->xPosColumn;
576-
yCol = dls->yPosColumn;
577-
return true;
575+
xCol = -1;
576+
if ( const QgsFieldBasedProperty* ddX = dynamic_cast< const QgsFieldBasedProperty* >( dls->properties().property( QgsDiagramLayerSettings::PositionX ) ) )
577+
{
578+
if ( ddX->isActive() )
579+
{
580+
xCol = vlayer->fields().lookupField( ddX->field() );
581+
}
582+
}
583+
yCol = -1;
584+
if ( const QgsFieldBasedProperty* ddY = dynamic_cast< const QgsFieldBasedProperty* >( dls->properties().property( QgsDiagramLayerSettings::PositionY ) ) )
585+
{
586+
if ( ddY->isActive() )
587+
{
588+
yCol = vlayer->fields().lookupField( ddY->field() );
589+
}
590+
}
591+
return xCol >= 0 && yCol >= 0;
578592
}
579593
}
580594
return false;
@@ -657,20 +671,23 @@ bool QgsMapToolLabel::isPinned()
657671

658672
bool QgsMapToolLabel::diagramCanShowHide( QgsVectorLayer* vlayer, int& showCol ) const
659673
{
660-
bool rc = false;
674+
showCol = -1;
661675

662676
if ( vlayer && vlayer->isEditable() && vlayer->diagramsEnabled() )
663677
{
664-
const QgsDiagramLayerSettings *dls = vlayer->diagramLayerSettings();
665-
666-
if ( dls && dls->showColumn >= 0 )
678+
if ( const QgsDiagramLayerSettings *dls = vlayer->diagramLayerSettings() )
667679
{
668-
showCol = dls->showColumn;
669-
rc = true;
680+
if ( const QgsFieldBasedProperty* ddShow = dynamic_cast< const QgsFieldBasedProperty* >( dls->properties().property( QgsDiagramLayerSettings::Show ) ) )
681+
{
682+
if ( ddShow->isActive() )
683+
{
684+
showCol = vlayer->fields().lookupField( ddShow->field() );
685+
}
686+
}
670687
}
671688
}
672689

673-
return rc;
690+
return showCol >= 0;
674691
}
675692

676693
//

‎src/core/qgsdiagramrenderer.cpp‎

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,15 @@
2525
#include <QDomElement>
2626
#include <QPainter>
2727

28+
QMap< int, QString > QgsDiagramLayerSettings::sPropertyNameMap;
29+
2830
QgsDiagramLayerSettings::QgsDiagramLayerSettings()
29-
: xPosColumn( -1 )
30-
, yPosColumn( -1 )
31-
, showColumn( -1 )
32-
, mRenderer( nullptr )
3331
{
3432
init();
3533
}
3634

3735
QgsDiagramLayerSettings::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

‎src/core/qgsdiagramrenderer.h‎

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ class CORE_EXPORT QgsDiagramLayerSettings
148148
*/
149149
void setPriority( int value ) { mPriority = value; }
150150

151-
152151
/** Returns the diagram z-index. Diagrams (or labels) with a higher z-index are drawn over diagrams
153152
* with a lower z-index.
154153
* @note z-index ordering is shared with labeling, so diagrams with a high z-index may be drawn over labels
@@ -225,15 +224,6 @@ class CORE_EXPORT QgsDiagramLayerSettings
225224
*/
226225
void setCoordinateTransform( const QgsCoordinateTransform& transform );
227226

228-
//! Attribute index for x coordinate (or -1 if position not data defined)
229-
int xPosColumn;
230-
231-
//! Attribute index for y coordinate (or -1 if position not data defined)
232-
int yPosColumn;
233-
234-
//! Attribute index for visibility (or -1 if visibility not data defined)
235-
int showColumn;
236-
237227
/** Returns whether the layer should show all diagrams, including overlapping diagrams
238228
* @see setShowAllDiagrams()
239229
* @note added in QGIS 2.16
@@ -252,11 +242,9 @@ class CORE_EXPORT QgsDiagramLayerSettings
252242

253243
/** Returns the set of any fields referenced by the layer's diagrams.
254244
* @param context expression context the diagrams will be drawn using
255-
* @param fields layer fields
256245
* @note added in QGIS 2.16
257246
*/
258-
//TODO QGIS 3.0 - remove need for fields parameter
259-
QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext(), const QgsFields& fields = QgsFields() ) const;
247+
QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const;
260248

261249
/** Returns a reference to the diagram's property collection, used for data defined overrides.
262250
* @note added in QGIS 3.0
@@ -465,6 +453,9 @@ class CORE_EXPORT QgsDiagramRenderer
465453
*/
466454
virtual QSet< QString > referencedFields( const QgsExpressionContext& context = QgsExpressionContext() ) const;
467455

456+
/**
457+
* Renders the diagram for a specified feature at a specific position in the passed render context.
458+
*/
468459
void renderDiagram( const QgsFeature& feature, QgsRenderContext& c, QPointF pos, const QgsPropertyCollection& properties = QgsPropertyCollection() ) const;
469460

470461
void setDiagram( QgsDiagram* d );
@@ -473,7 +464,18 @@ class CORE_EXPORT QgsDiagramRenderer
473464
//! Returns list with all diagram settings in the renderer
474465
virtual QList<QgsDiagramSettings> diagramSettings() const = 0;
475466

467+
/**
468+
* Reads diagram state from a DOM element. Subclasses should ensure that _readXml() is called
469+
* by their readXml implementation to restore the general QgsDiagramRenderer settings.
470+
* @see writeXml()
471+
*/
476472
virtual void readXml( const QDomElement& elem, const QgsVectorLayer* layer ) = 0;
473+
474+
/**
475+
* Writes diagram state to a DOM element. Subclasses should ensure that _writeXml() is called
476+
* by their writeXml implementation to save the general QgsDiagramRenderer settings.
477+
* @see readXml()
478+
*/
477479
virtual void writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsVectorLayer* layer ) const = 0;
478480

479481
/** Returns list of legend nodes for the diagram
@@ -550,7 +552,17 @@ class CORE_EXPORT QgsDiagramRenderer
550552
static int dpiPaintDevice( const QPainter* );
551553

552554
//read / write diagram
555+
556+
/**
557+
* Reads internal QgsDiagramRenderer state from a DOM element.
558+
* @see _writeXml()
559+
*/
553560
void _readXml( const QDomElement& elem, const QgsVectorLayer* layer );
561+
562+
/**
563+
* Writes internal QgsDiagramRenderer diagram state to a DOM element.
564+
* @see _readXml()
565+
*/
554566
void _writeXml( QDomElement& rendererElem, QDomDocument& doc, const QgsVectorLayer* layer ) const;
555567

556568
//! Reference to the object that does the real diagram rendering

0 commit comments

Comments
 (0)