Skip to content

Commit 967d37a

Browse files
committedAug 4, 2016
QgsFeature::fields() returns a value, not a pointer
Also remove all other QgsFields pointers and replace with references/values, since QgsFields objects are implicitly shared
1 parent 23909a1 commit 967d37a

35 files changed

+121
-166
lines changed
 

‎doc/api_break.dox

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,13 @@ instead.</li>
233233
be returned in place of a null pointer.</li>
234234
</ul>
235235

236+
\subsection qgis_api_break_3_0_QgsDiagram QgsDiagram
237+
238+
<ul>
239+
<li>The deprecated getExpression( const QString& expression, const QgsFields* fields ) method has been removed.
240+
Use the variant which accepts an expression context instead.</li>
241+
</ul>
242+
236243
\subsection qgis_api_break_3_0_QgsDiagramLayerSettings QgsDiagramLayerSettings
237244

238245
<ul>
@@ -255,6 +262,7 @@ a feature has a geometry is now done using the new hasGeometry() method. Any cod
255262
None will need to be modified, as the method will return an empty geometry if the feature has no geometry.</b></li>
256263
<li>The temporary constGeometry() method has been removed. Use geometry() instead.</li>
257264
<li>setFields( const QgsFields*, bool ) has been removed, use setFields( const QgsFields&, bool ) instead.</li>
265+
<li>fields() no longer returns a pointer, but instead a QgsFields value.</li>
258266
</ul>
259267

260268
\subsection qgis_api_break_3_0_QgsFeatureRendererV2 QgsFeatureRendererV2
@@ -523,6 +531,21 @@ be returned instead of a null pointer if no transformation is required.</li>
523531
<li>The OutputUnit enum, including QgsSymbolV2::MM, QgsSymbolV2::MapUnit, QgsSymbolV2::Mixed, QgsSymbolV2::Pixel and QgsSymbolV2::Percentage has been moved to QgsUnitTypes
524532
and renamed to RenderUnit. QgsSymbolV2::OutputUnitList was renamed to QgsUnitTypes::RenderUnitList. All methods which previously accepted QgsSymbolV2::OutputUnit
525533
parameters or QgsSymbolV2::OutputUnitList parameters now take QgsUnitTypes::RenderUnit or QgsUnitTypes::RenderUnitList parameters respectively.</li>
534+
<li>startRender() now accepts a QgsFields reference, not a pointer.</li>
535+
</ul>
536+
537+
\subsection qgis_api_break_3_0_QgsSymbolLayerV2 QgsSymbolLayerV2
538+
539+
<ul>
540+
<li>The deprecated prepareExpressions( const QgsFields* fields, double scale = -1.0 ) method has been removed. Use
541+
the variant which takes QgsSymbolV2RenderContext instead.</li>
542+
</ul>
543+
544+
\subsection qgis_api_break_3_0_QgsSymbolV2RenderContext QgsSymbolV2RenderContext
545+
546+
<ul>
547+
<li>The constructor now accepts a QgsFields reference, not a pointer.</li>
548+
<li>fields() now returns a QgsFields value, not a pointer.</li>
526549
</ul>
527550

528551
\subsection qgis_api_break_3_0_QgsSymbolLayerV2Utils QgsSymbolLayerV2Utils

‎python/core/diagram/qgsdiagram.sip

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ class QgsDiagram
1111

1212
void clearCache();
1313

14-
//! @deprecated use QgsExpressionContext variant instead
15-
QgsExpression* getExpression( const QString& expression, const QgsFields* fields ) /Deprecated/;
16-
1714
/** Returns a prepared expression for the specified context.
1815
* @param expression expression string
1916
* @param context expression context

‎python/core/qgsfeature.sip

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,8 @@ class QgsFeature
361361

362362
/** Returns the field map associated with the feature.
363363
* @see setFields
364-
* TODO: QGIS 3 - return value, not pointer
365364
*/
366-
const QgsFields* fields() const;
365+
QgsFields fields() const;
367366

368367
/** Insert a value into attribute. Returns false if attribute name could not be converted to index.
369368
* Field map must be associated using @link setFields @endlink before this method can be used.

‎python/core/symbology-ng/qgssymbollayerv2.sip

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -301,14 +301,6 @@ class QgsSymbolLayerV2
301301
protected:
302302
QgsSymbolLayerV2( QgsSymbolV2::SymbolType type, bool locked = false );
303303

304-
/** Prepares all data defined property expressions for evaluation. This should
305-
* be called prior to evaluating data defined properties.
306-
* @param fields associated layer fields
307-
* @param scale map scale
308-
* @deprecated use variant which takes QgsSymbolV2RenderContext instead
309-
*/
310-
virtual void prepareExpressions( const QgsFields* fields, double scale = -1.0 ) /Deprecated/;
311-
312304
/** Prepares all data defined property expressions for evaluation. This should
313305
* be called prior to evaluating data defined properties.
314306
* @param context symbol render context

‎python/core/symbology-ng/qgssymbolv2.sip

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class QgsSymbolV2
110110
//! delete layer at specified index and set a new one
111111
bool changeSymbolLayer( int index, QgsSymbolLayerV2 *layer /Transfer/ );
112112

113-
void startRender( QgsRenderContext& context, const QgsFields* fields = 0 );
113+
void startRender( QgsRenderContext& context, const QgsFields& fields = QgsFields() );
114114
void stopRender( QgsRenderContext& context );
115115

116116
void setColor( const QColor& color );
@@ -292,7 +292,7 @@ class QgsSymbolV2RenderContext
292292
* @param fields
293293
* @param mapUnitScale
294294
*/
295-
QgsSymbolV2RenderContext( QgsRenderContext& c, QgsUnitTypes::RenderUnit u, qreal alpha = 1.0, bool selected = false, int renderHints = 0, const QgsFeature* f = 0, const QgsFields* fields = 0, const QgsMapUnitScale& mapUnitScale = QgsMapUnitScale() );
295+
QgsSymbolV2RenderContext( QgsRenderContext& c, QgsUnitTypes::RenderUnit u, qreal alpha = 1.0, bool selected = false, int renderHints = 0, const QgsFeature* f = 0, const QgsFields& fields = QgsFields(), const QgsMapUnitScale& mapUnitScale = QgsMapUnitScale() );
296296
~QgsSymbolV2RenderContext();
297297

298298
QgsRenderContext& renderContext();
@@ -333,7 +333,7 @@ class QgsSymbolV2RenderContext
333333
//! to allow symbols with data-defined properties prepare the expressions
334334
//! (other times fields() returns null)
335335
//! @note added in 2.4
336-
const QgsFields* fields() const;
336+
QgsFields fields() const;
337337

338338
/** Part count of current geometry
339339
* @note added in QGIS 2.16

‎src/app/qgsdecorationgrid.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ void QgsDecorationGrid::render( QPainter * p )
232232

233233
QgsRenderContext context = QgsRenderContext::fromMapSettings( QgisApp::instance()->mapCanvas()->mapSettings() );
234234
context.setPainter( p );
235-
mLineSymbol->startRender( context, nullptr );
235+
mLineSymbol->startRender( context );
236236

237237
for ( ; vIt != verticalLines.constEnd(); ++vIt )
238238
{
@@ -310,7 +310,7 @@ void QgsDecorationGrid::render( QPainter * p )
310310

311311
QgsRenderContext context = QgsRenderContext::fromMapSettings( QgisApp::instance()->mapCanvas()->mapSettings() );
312312
context.setPainter( p );
313-
mMarkerSymbol->startRender( context, nullptr );
313+
mMarkerSymbol->startRender( context );
314314

315315
QPointF intersectionPoint;
316316
for ( ; vIt != verticalLines.constEnd(); ++vIt )

‎src/core/diagram/qgsdiagram.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,6 @@ void QgsDiagram::clearCache()
4545
mExpressions.clear();
4646
}
4747

48-
QgsExpression* QgsDiagram::getExpression( const QString& expression, const QgsFields* fields )
49-
{
50-
Q_NOWARN_DEPRECATED_PUSH
51-
if ( !mExpressions.contains( expression ) )
52-
{
53-
QgsExpression* expr = new QgsExpression( expression );
54-
expr->prepare( *fields );
55-
mExpressions[expression] = expr;
56-
}
57-
return mExpressions[expression];
58-
Q_NOWARN_DEPRECATED_POP
59-
}
60-
6148
QgsExpression *QgsDiagram::getExpression( const QString &expression, const QgsExpressionContext &context )
6249
{
6350
if ( !mExpressions.contains( expression ) )

‎src/core/diagram/qgsdiagram.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ class CORE_EXPORT QgsDiagram
4242

4343
void clearCache();
4444

45-
//! @deprecated use QgsExpressionContext variant instead
46-
Q_DECL_DEPRECATED QgsExpression* getExpression( const QString& expression, const QgsFields* fields );
47-
4845
/** Returns a prepared expression for the specified context.
4946
* @param expression expression string
5047
* @param context expression context

‎src/core/diagram/qgshistogramdiagram.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ QSizeF QgsHistogramDiagram::diagramSize( const QgsFeature& feature, const QgsRen
5050

5151
QgsExpressionContext expressionContext = c.expressionContext();
5252
expressionContext.setFeature( feature );
53-
if ( feature.fields() )
54-
expressionContext.setFields( *feature.fields() );
53+
if ( !feature.fields().isEmpty() )
54+
expressionContext.setFields( feature.fields() );
5555

5656
Q_FOREACH ( const QString& cat, s.categoryAttributes )
5757
{
@@ -147,8 +147,8 @@ void QgsHistogramDiagram::renderDiagram( const QgsFeature& feature, QgsRenderCon
147147

148148
QgsExpressionContext expressionContext = c.expressionContext();
149149
expressionContext.setFeature( feature );
150-
if ( feature.fields() )
151-
expressionContext.setFields( *feature.fields() );
150+
if ( !feature.fields().isEmpty() )
151+
expressionContext.setFields( feature.fields() );
152152

153153
Q_FOREACH ( const QString& cat, s.categoryAttributes )
154154
{

‎src/core/diagram/qgspiediagram.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ QSizeF QgsPieDiagram::diagramSize( const QgsFeature& feature, const QgsRenderCon
4343
if ( is.classificationAttributeIsExpression )
4444
{
4545
QgsExpressionContext expressionContext = c.expressionContext();
46-
if ( feature.fields() )
47-
expressionContext.setFields( *feature.fields() );
46+
if ( !feature.fields().isEmpty() )
47+
expressionContext.setFields( feature.fields() );
4848
expressionContext.setFeature( feature );
4949

5050
QgsExpression* expression = getExpression( is.classificationAttributeExpression, expressionContext );
@@ -94,8 +94,8 @@ void QgsPieDiagram::renderDiagram( const QgsFeature& feature, QgsRenderContext&
9494

9595
QgsExpressionContext expressionContext = c.expressionContext();
9696
expressionContext.setFeature( feature );
97-
if ( feature.fields() )
98-
expressionContext.setFields( *feature.fields() );
97+
if ( !feature.fields().isEmpty() )
98+
expressionContext.setFields( feature.fields() );
9999

100100
QList<QString>::const_iterator catIt = s.categoryAttributes.constBegin();
101101
for ( ; catIt != s.categoryAttributes.constEnd(); ++catIt )

‎src/core/diagram/qgstextdiagram.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ QSizeF QgsTextDiagram::diagramSize( const QgsFeature& feature, const QgsRenderCo
4040
{
4141
QgsExpressionContext expressionContext = c.expressionContext();
4242
expressionContext.setFeature( feature );
43-
if ( feature.fields() )
44-
expressionContext.setFields( *feature.fields() );
43+
if ( !feature.fields().isEmpty() )
44+
expressionContext.setFields( feature.fields() );
4545

4646
QVariant attrVal;
4747
if ( is.classificationAttributeIsExpression )
@@ -198,8 +198,8 @@ void QgsTextDiagram::renderDiagram( const QgsFeature& feature, QgsRenderContext&
198198

199199
QgsExpressionContext expressionContext = c.expressionContext();
200200
expressionContext.setFeature( feature );
201-
if ( feature.fields() )
202-
expressionContext.setFields( *feature.fields() );
201+
if ( !feature.fields().isEmpty() )
202+
expressionContext.setFields( feature.fields() );
203203

204204
for ( int i = 0; i < textPositions.size(); ++i )
205205
{

‎src/core/qgsfeature.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,9 @@ void QgsFeature::setFields( const QgsFields &fields, bool init )
134134
}
135135
}
136136

137-
const QgsFields *QgsFeature::fields() const
137+
QgsFields QgsFeature::fields() const
138138
{
139-
return &( d->fields );
139+
return d->fields;
140140
}
141141

142142
/***************************************************************************

‎src/core/qgsfeature.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,9 +308,8 @@ class CORE_EXPORT QgsFeature
308308

309309
/** Returns the field map associated with the feature.
310310
* @see setFields
311-
* TODO: QGIS 3 - return value, not pointer
312311
*/
313-
const QgsFields* fields() const;
312+
QgsFields fields() const;
314313

315314
/** Insert a value into attribute. Returns false if attribute name could not be converted to index.
316315
* Field map must be associated using @link setFields @endlink before this method can be used.

‎src/core/qgsjsonutils.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ QString QgsJSONExporter::exportFeature( const QgsFeature& feature, const QVarian
116116

117117
if ( mIncludeAttributes )
118118
{
119-
const QgsFields* fields = feature.fields();
119+
QgsFields fields = feature.fields();
120120

121-
for ( int i = 0; i < fields->count(); ++i )
121+
for ( int i = 0; i < fields.count(); ++i )
122122
{
123123
if (( !mAttributeIndexes.isEmpty() && !mAttributeIndexes.contains( i ) ) || mExcludedAttributeIndexes.contains( i ) )
124124
continue;
@@ -127,7 +127,7 @@ QString QgsJSONExporter::exportFeature( const QgsFeature& feature, const QVarian
127127
properties += ",\n";
128128
QVariant val = feature.attributes().at( i );
129129

130-
properties += QString( " \"%1\":%2" ).arg( fields->at( i ).name(), QgsJSONUtils::encodeValue( val ) );
130+
properties += QString( " \"%1\":%2" ).arg( fields.at( i ).name(), QgsJSONUtils::encodeValue( val ) );
131131

132132
++attributeCounter;
133133
}
@@ -296,15 +296,15 @@ QString QgsJSONUtils::encodeValue( const QVariant &value )
296296

297297
QString QgsJSONUtils::exportAttributes( const QgsFeature& feature )
298298
{
299-
const QgsFields* fields = feature.fields();
299+
QgsFields fields = feature.fields();
300300
QString attrs;
301-
for ( int i = 0; i < fields->count(); ++i )
301+
for ( int i = 0; i < fields.count(); ++i )
302302
{
303303
if ( i > 0 )
304304
attrs += ",\n";
305305

306306
QVariant val = feature.attributes().at( i );
307-
attrs += encodeValue( fields->at( i ).name() ) + ':' + encodeValue( val );
307+
attrs += encodeValue( fields.at( i ).name() ) + ':' + encodeValue( val );
308308
}
309309
return attrs.prepend( '{' ).append( '}' );
310310
}

‎src/core/symbology-ng/qgs25drenderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ QgsFeatureRendererV2* Qgs25DRenderer::create( QDomElement& element )
138138

139139
void Qgs25DRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
140140
{
141-
mSymbol->startRender( context, &fields );
141+
mSymbol->startRender( context, fields );
142142
}
143143

144144
void Qgs25DRenderer::stopRender( QgsRenderContext& context )

‎src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,14 +431,14 @@ void QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, con
431431

432432
Q_FOREACH ( const QgsRendererCategoryV2& cat, mCategories )
433433
{
434-
cat.symbol()->startRender( context, &fields );
434+
cat.symbol()->startRender( context, fields );
435435

436436
if ( mRotation.data() || mSizeScale.data() )
437437
{
438438
QgsSymbolV2* tempSymbol = cat.symbol()->clone();
439439
tempSymbol->setRenderHints(( mRotation.data() ? QgsSymbolV2::DataDefinedRotation : 0 ) |
440440
( mSizeScale.data() ? QgsSymbolV2::DataDefinedSizeScale : 0 ) );
441-
tempSymbol->startRender( context, &fields );
441+
tempSymbol->startRender( context, fields );
442442
mTempSymbols[ cat.symbol()] = tempSymbol;
443443
}
444444
}

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,14 +424,14 @@ void QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const
424424
if ( !range.symbol() )
425425
continue;
426426

427-
range.symbol()->startRender( context, &fields );
427+
range.symbol()->startRender( context, fields );
428428

429429
if ( mRotation.data() || mSizeScale.data() )
430430
{
431431
QgsSymbolV2* tempSymbol = range.symbol()->clone();
432432
tempSymbol->setRenderHints(( mRotation.data() ? QgsSymbolV2::DataDefinedRotation : 0 ) |
433433
( mSizeScale.data() ? QgsSymbolV2::DataDefinedSizeScale : 0 ) );
434-
tempSymbol->startRender( context, &fields );
434+
tempSymbol->startRender( context, fields );
435435
mTempSymbols[ range.symbol()] = tempSymbol;
436436
}
437437
}

‎src/core/symbology-ng/qgspointdisplacementrenderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const
364364

365365
if ( mCenterSymbol )
366366
{
367-
mCenterSymbol->startRender( context, &fields );
367+
mCenterSymbol->startRender( context, fields );
368368
}
369369
return;
370370
}

‎src/core/symbology-ng/qgsrulebasedrendererv2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ bool QgsRuleBasedRendererV2::Rule::startRender( QgsRenderContext& context, const
447447
if ( mFilter )
448448
mFilter->prepare( &context.expressionContext() );
449449
if ( mSymbol )
450-
mSymbol->startRender( context, &fields );
450+
mSymbol->startRender( context, fields );
451451

452452
// init children
453453
// build temporary list of active rules (usable with this scale)

‎src/core/symbology-ng/qgssinglesymbolrendererv2.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ void QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const Qg
8787
if ( !mSymbol.data() )
8888
return;
8989

90-
mSymbol->startRender( context, &fields );
90+
mSymbol->startRender( context, fields );
9191

9292
if ( mRotation.data() || mSizeScale.data() )
9393
{
@@ -101,7 +101,7 @@ void QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const Qg
101101
hints |= QgsSymbolV2::DataDefinedSizeScale;
102102
mTempSymbol->setRenderHints( hints );
103103

104-
mTempSymbol->startRender( context, &fields );
104+
mTempSymbol->startRender( context, fields );
105105

106106
if ( mSymbol->type() == QgsSymbolV2::Marker )
107107
{

0 commit comments

Comments
 (0)
Please sign in to comment.