Skip to content

Commit 1e6483c

Browse files
m-kuhnnyalldawson
authored andcommittedAug 6, 2015
Fix marker rotation
The rotation is no longer saved in the Qgs*SymbolRendererV2 but in the QgsMarkerSymbolV2 in a QgsDataDefined. This commit fixes the legacy API and redirects calls to the new API.
1 parent 118eea5 commit 1e6483c

20 files changed

+97
-56
lines changed
 

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ class QgsCategorizedSymbolRendererV2 : QgsFeatureRendererV2
123123
//! @note added in 2.5
124124
void updateColorRamp( QgsVectorColorRampV2* ramp, bool inverted = false );
125125

126-
void setRotationField( QString fieldOrExpression );
127-
QString rotationField() const;
126+
void setRotationField( QString fieldOrExpression ) /Deprecated/;
127+
QString rotationField() const /Deprecated/;
128128

129129
void setSizeScaleField( QString fieldOrExpression );
130130
QString sizeScaleField() const;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ class QgsGraduatedSymbolRendererV2 : QgsFeatureRendererV2
249249
//! @note added in 2.10
250250
void setGraduatedMethod( GraduatedMethod method );
251251

252-
void setRotationField( QString fieldOrExpression );
253-
QString rotationField() const;
252+
void setRotationField( QString fieldOrExpression ) /Deprecated/;
253+
QString rotationField() const /Deprecated/;
254254

255255
void setSizeScaleField( QString fieldOrExpression );
256256
QString sizeScaleField() const;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@ class QgsFeatureRendererV2
173173
void setVertexMarkerAppearance( int type, int size );
174174

175175
//! return rotation field name (or empty string if not set or not supported by renderer)
176-
virtual QString rotationField() const;
176+
virtual QString rotationField() const /Deprecated/;
177177
//! sets rotation field of renderer (if supported by the renderer)
178-
virtual void setRotationField( QString fieldName );
178+
virtual void setRotationField( QString fieldName ) /Deprecated/;
179179

180180
//! return whether the renderer will render a feature or not.
181181
//! Must be called between startRender() and stopRender() calls.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ class QgsSingleSymbolRendererV2 : QgsFeatureRendererV2
2222
QgsSymbolV2* symbol() const;
2323
void setSymbol( QgsSymbolV2* s /Transfer/ );
2424

25-
void setRotationField( QString fieldOrExpression );
26-
QString rotationField() const;
25+
void setRotationField( QString fieldOrExpression ) /Deprecated/;
26+
QString rotationField() const /Deprecated/;
2727

2828
void setSizeScaleField( QString fieldOrExpression );
2929
QString sizeScaleField() const;

‎src/core/qgsdatadefined.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ void QgsDataDefined::setExpressionString( const QString &expr )
135135
d->exprRefColumns.clear();
136136
}
137137

138+
QString QgsDataDefined::expressionOrField() const
139+
{
140+
return d->useExpression ? d->expressionString : QString( "\"%1\"" ).arg( d->field );
141+
}
142+
138143
QMap<QString, QVariant> QgsDataDefined::expressionParams() const
139144
{
140145
return d->expressionParams;

‎src/core/qgsdatadefined.h

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,39 @@ class CORE_EXPORT QgsDataDefined
9191
bool isActive() const;
9292
void setActive( bool active );
9393

94+
/**
95+
* Returns if the field or the expression part is active.
96+
*
97+
* @return True if it is in expression mode.
98+
*/
9499
bool useExpression() const;
100+
95101
void setUseExpression( bool use );
96102

103+
/**
104+
* Returns the expression string of this QgsDataDefined.
105+
*
106+
* @return An expression
107+
*
108+
* @see field()
109+
* @see expressionOrField()
110+
*/
97111
QString expressionString() const;
112+
98113
void setExpressionString( const QString& expr );
99114

100-
// @note not available in python bindings
115+
/**
116+
* Returns an expression which represents a single field if useExpression returns false
117+
*
118+
* @return An expression
119+
*
120+
* @note added in 2.12
121+
*/
122+
QString expressionOrField() const;
123+
124+
//! @note not available in python bindings
101125
QMap<QString, QVariant> expressionParams() const;
102-
// @note not available in python bindings
126+
//! @note not available in python bindings
103127
void setExpressionParams( QMap<QString, QVariant> params );
104128
void insertExpressionParam( QString key, QVariant param );
105129

@@ -134,7 +158,16 @@ class CORE_EXPORT QgsDataDefined
134158
*/
135159
QStringList referencedColumns( const QgsFields& fields = QgsFields() );
136160

161+
/**
162+
* Get the field which this QgsDataDefined represents. Be aware that this may return
163+
* a field name which may not be active if useExpression is true.
164+
*
165+
* @return A fieldname
166+
*
167+
* @see expressionOrField()
168+
*/
137169
QString field() const;
170+
138171
void setField( const QString& field );
139172

140173
/** Encodes the QgsDataDefined into a string map.

‎src/core/qgsdatadefined_p.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ class QgsDataDefinedPrivate : public QSharedData
3939
QgsDataDefinedPrivate( bool active = false,
4040
bool useExpression = false,
4141
const QString& expressionString = QString(),
42-
const QString& field = QString() )
42+
QString field = QString() )
4343
: expression( 0 )
4444
, active( active )
4545
, useExpression( useExpression )
4646
, expressionString( expressionString )
47-
, field( field )
47+
, field( field.remove( QRegExp( "^\"|\"$" ) ) )
4848
, expressionPrepared( false )
4949
{
5050
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -493,9 +493,7 @@ QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::clone() const
493493
r->setInvertedColorRamp( mInvertedColorRamp );
494494
}
495495
r->setUsingSymbolLevels( usingSymbolLevels() );
496-
r->setRotationField( rotationField() );
497496
r->setSizeScaleField( sizeScaleField() );
498-
//r->setScaleMethod( scaleMethod() );
499497

500498
copyPaintEffect( r );
501499
return r;
@@ -815,12 +813,22 @@ void QgsCategorizedSymbolRendererV2::updateColorRamp( QgsVectorColorRampV2* ramp
815813

816814
void QgsCategorizedSymbolRendererV2::setRotationField( QString fieldOrExpression )
817815
{
818-
mRotation.reset( QgsSymbolLayerV2Utils::fieldOrExpressionToExpression( fieldOrExpression ) );
816+
if ( mSourceSymbol->type() == QgsSymbolV2::Marker )
817+
{
818+
QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSourceSymbol.data() );
819+
s->setDataDefinedAngle( QgsDataDefined( fieldOrExpression ) );
820+
}
819821
}
820822

821823
QString QgsCategorizedSymbolRendererV2::rotationField() const
822824
{
823-
return mRotation.data() ? QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mRotation.data() ) : QString();
825+
if ( mSourceSymbol->type() == QgsSymbolV2::Marker )
826+
{
827+
QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSourceSymbol.data() );
828+
return s->dataDefinedAngle().expressionOrField();
829+
}
830+
831+
return QString();
824832
}
825833

826834
void QgsCategorizedSymbolRendererV2::setSizeScaleField( QString fieldOrExpression )

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ class CORE_EXPORT QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2
156156
//! @note added in 2.5
157157
void updateColorRamp( QgsVectorColorRampV2* ramp, bool inverted = false );
158158

159-
void setRotationField( QString fieldOrExpression ) override;
160-
QString rotationField() const override;
159+
Q_DECL_DEPRECATED void setRotationField( QString fieldOrExpression ) override;
160+
Q_DECL_DEPRECATED QString rotationField() const override;
161161

162162
void setSizeScaleField( QString fieldOrExpression );
163163
QString sizeScaleField() const;

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -518,9 +518,7 @@ QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone() const
518518
r->setInvertedColorRamp( mInvertedColorRamp );
519519
}
520520
r->setUsingSymbolLevels( usingSymbolLevels() );
521-
r->setRotationField( rotationField() );
522521
r->setSizeScaleField( sizeScaleField() );
523-
//r->setScaleMethod( scaleMethod() );
524522
r->setLabelFormat( labelFormat() );
525523
r->setGraduatedMethod( graduatedMethod() );
526524
copyPaintEffect( r );
@@ -1365,12 +1363,23 @@ void QgsGraduatedSymbolRendererV2::updateSymbols( QgsSymbolV2 *sym )
13651363

13661364
void QgsGraduatedSymbolRendererV2::setRotationField( QString fieldOrExpression )
13671365
{
1368-
mRotation.reset( QgsSymbolLayerV2Utils::fieldOrExpressionToExpression( fieldOrExpression ) );
1366+
if ( mSourceSymbol->type() == QgsSymbolV2::Marker )
1367+
{
1368+
QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSourceSymbol.data() );
1369+
s->setDataDefinedAngle( QgsDataDefined( fieldOrExpression ) );
1370+
}
1371+
13691372
}
13701373

13711374
QString QgsGraduatedSymbolRendererV2::rotationField() const
13721375
{
1373-
return mRotation.data() ? QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mRotation.data() ) : QString();
1376+
if ( mSourceSymbol->type() == QgsSymbolV2::Marker )
1377+
{
1378+
QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSourceSymbol.data() );
1379+
return s->dataDefinedAngle().expressionOrField();
1380+
}
1381+
1382+
return QString();
13741383
}
13751384

13761385
void QgsGraduatedSymbolRendererV2::setSizeScaleField( QString fieldOrExpression )

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,8 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
295295
//! @note added in 2.10
296296
void setGraduatedMethod( GraduatedMethod method ) { mGraduatedMethod = method; }
297297

298-
void setRotationField( QString fieldOrExpression ) override;
299-
QString rotationField() const override;
298+
Q_DECL_DEPRECATED void setRotationField( QString fieldOrExpression ) override;
299+
Q_DECL_DEPRECATED QString rotationField() const override;
300300

301301
void setSizeScaleField( QString fieldOrExpression );
302302
QString sizeScaleField() const;

‎src/core/symbology-ng/qgsrendererv2.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,11 @@ class CORE_EXPORT QgsFeatureRendererV2
212212
void setVertexMarkerAppearance( int type, int size );
213213

214214
//! return rotation field name (or empty string if not set or not supported by renderer)
215-
virtual QString rotationField() const { return ""; }
215+
//! @deprecated use the symbol's methods instead
216+
Q_DECL_DEPRECATED virtual QString rotationField() const { return QString(); }
216217
//! sets rotation field of renderer (if supported by the renderer)
217-
virtual void setRotationField( QString fieldName ) { Q_UNUSED( fieldName ); }
218+
//! @deprecated use the symbol's methods instead
219+
Q_DECL_DEPRECATED virtual void setRotationField( QString fieldName ) { Q_UNUSED( fieldName ); }
218220

219221
//! return whether the renderer will render a feature or not.
220222
//! Must be called between startRender() and stopRender() calls.

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,22 @@ void QgsSingleSymbolRendererV2::setSymbol( QgsSymbolV2* s )
153153

154154
void QgsSingleSymbolRendererV2::setRotationField( QString fieldOrExpression )
155155
{
156-
mRotation.reset( QgsSymbolLayerV2Utils::fieldOrExpressionToExpression( fieldOrExpression ) );
156+
if ( mSymbol->type() == QgsSymbolV2::Marker )
157+
{
158+
QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSymbol.data() );
159+
s->setDataDefinedAngle( QgsDataDefined( fieldOrExpression ) );
160+
}
157161
}
158162

159163
QString QgsSingleSymbolRendererV2::rotationField() const
160164
{
161-
return mRotation.data() ? QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mRotation.data() ) : QString();
165+
if ( mSymbol->type() == QgsSymbolV2::Marker )
166+
{
167+
QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSymbol.data() );
168+
return s->dataDefinedAngle().expressionOrField();
169+
}
170+
171+
return QString();
162172
}
163173

164174
void QgsSingleSymbolRendererV2::setSizeScaleField( QString fieldOrExpression )
@@ -186,9 +196,7 @@ QgsFeatureRendererV2* QgsSingleSymbolRendererV2::clone() const
186196
{
187197
QgsSingleSymbolRendererV2* r = new QgsSingleSymbolRendererV2( mSymbol->clone() );
188198
r->setUsingSymbolLevels( usingSymbolLevels() );
189-
r->setRotationField( rotationField() );
190199
r->setSizeScaleField( sizeScaleField() );
191-
//r->setScaleMethod( scaleMethod() );
192200
copyPaintEffect( r );
193201
return r;
194202
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class CORE_EXPORT QgsSingleSymbolRendererV2 : public QgsFeatureRendererV2
4242
QgsSymbolV2* symbol() const;
4343
void setSymbol( QgsSymbolV2* s );
4444

45-
void setRotationField( QString fieldOrExpression ) override;
46-
QString rotationField() const override;
45+
Q_DECL_DEPRECATED void setRotationField( QString fieldOrExpression ) override;
46+
Q_DECL_DEPRECATED QString rotationField() const override;
4747

4848
void setSizeScaleField( QString fieldOrExpression );
4949
QString sizeScaleField() const;

‎src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -450,11 +450,6 @@ QgsCategorizedSymbolRendererV2Widget::QgsCategorizedSymbolRendererV2Widget( QgsV
450450
advMenu->addAction( tr( "Match to symbols from file..." ), this, SLOT( matchToSymbolsFromXml() ) );
451451
advMenu->addAction( tr( "Symbol levels..." ), this, SLOT( showSymbolLevels() ) );
452452

453-
mDataDefinedMenus = new QgsRendererV2DataDefinedMenus( advMenu, mLayer,
454-
mRenderer->rotationField(), mRenderer->sizeScaleField(), mRenderer->scaleMethod() );
455-
connect( mDataDefinedMenus, SIGNAL( rotationFieldChanged( QString ) ), this, SLOT( rotationFieldChanged( QString ) ) );
456-
connect( mDataDefinedMenus, SIGNAL( sizeScaleFieldChanged( QString ) ), this, SLOT( sizeScaleFieldChanged( QString ) ) );
457-
connect( mDataDefinedMenus, SIGNAL( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ), this, SLOT( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ) );
458453
btnAdvanced->setMenu( advMenu );
459454
}
460455

‎src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,6 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widg
156156

157157
QgsSymbolV2* mCategorizedSymbol;
158158

159-
QgsRendererV2DataDefinedMenus* mDataDefinedMenus;
160-
161159
QgsCategorizedSymbolRendererV2Model* mModel;
162160

163161
private:

‎src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -466,11 +466,6 @@ QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget( QgsVecto
466466

467467
advMenu->addAction( tr( "Symbol levels..." ), this, SLOT( showSymbolLevels() ) );
468468

469-
mDataDefinedMenus = new QgsRendererV2DataDefinedMenus( advMenu, mLayer,
470-
mRenderer->rotationField(), mRenderer->sizeScaleField(), mRenderer->scaleMethod() );
471-
connect( mDataDefinedMenus, SIGNAL( rotationFieldChanged( QString ) ), this, SLOT( rotationFieldChanged( QString ) ) );
472-
connect( mDataDefinedMenus, SIGNAL( sizeScaleFieldChanged( QString ) ), this, SLOT( sizeScaleFieldChanged( QString ) ) );
473-
connect( mDataDefinedMenus, SIGNAL( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ), this, SLOT( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ) );
474469
btnAdvanced->setMenu( advMenu );
475470

476471
mHistogramWidget->setLayer( mLayer );

‎src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,6 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget
143143

144144
int mRowSelected;
145145

146-
QgsRendererV2DataDefinedMenus* mDataDefinedMenus;
147-
148146
QgsGraduatedSymbolRendererV2Model* mModel;
149147

150148
QgsRangeList mCopyBuffer;

‎src/gui/symbology-ng/qgssinglesymbolrendererv2widget.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,6 @@ QgsSingleSymbolRendererV2Widget::QgsSingleSymbolRendererV2Widget( QgsVectorLayer
6363
QMenu* advMenu = mSelector->advancedMenu();
6464

6565
advMenu->addAction( tr( "Symbol levels..." ), this, SLOT( showSymbolLevels() ) );
66-
67-
mDataDefinedMenus = new QgsRendererV2DataDefinedMenus( advMenu, mLayer,
68-
mRenderer->rotationField(), mRenderer->sizeScaleField(), mRenderer->scaleMethod() );
69-
connect( mDataDefinedMenus, SIGNAL( rotationFieldChanged( QString ) ), this, SLOT( rotationFieldChanged( QString ) ) );
70-
connect( mDataDefinedMenus, SIGNAL( sizeScaleFieldChanged( QString ) ), this, SLOT( sizeScaleFieldChanged( QString ) ) );
71-
connect( mDataDefinedMenus, SIGNAL( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ), this, SLOT( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ) );
7266
}
7367

7468
QgsSingleSymbolRendererV2Widget::~QgsSingleSymbolRendererV2Widget()
@@ -78,8 +72,6 @@ QgsSingleSymbolRendererV2Widget::~QgsSingleSymbolRendererV2Widget()
7872
delete mRenderer;
7973

8074
delete mSelector;
81-
82-
delete mDataDefinedMenus;
8375
}
8476

8577

‎src/gui/symbology-ng/qgssinglesymbolrendererv2widget.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@ class GUI_EXPORT QgsSingleSymbolRendererV2Widget : public QgsRendererV2Widget
4848
QgsSingleSymbolRendererV2* mRenderer;
4949
QgsSymbolV2SelectorDialog* mSelector;
5050
QgsSymbolV2* mSingleSymbol;
51-
52-
QgsRendererV2DataDefinedMenus* mDataDefinedMenus;
5351
};
5452

5553

0 commit comments

Comments
 (0)
Please sign in to comment.