QGIS API Documentation  2.13.0-Master
qgsgraduatedsymbolrendererv2.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsgraduatedsymbolrendererv2.h
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSGRADUATEDSYMBOLRENDERERV2_H
16 #define QGSGRADUATEDSYMBOLRENDERERV2_H
17 
18 #include "qgssymbolv2.h"
19 #include "qgsrendererv2.h"
20 #include "qgsexpression.h"
21 #include <QScopedPointer>
22 #include <QRegExp>
23 
24 class CORE_EXPORT QgsRendererRangeV2
25 {
26  public:
28  QgsRendererRangeV2( double lowerValue, double upperValue, QgsSymbolV2* symbol, const QString& label, bool render = true );
29  QgsRendererRangeV2( const QgsRendererRangeV2& range );
30 
32 
33  // default dtor is ok
34  QgsRendererRangeV2& operator=( QgsRendererRangeV2 range );
35 
36  bool operator<( const QgsRendererRangeV2 &other ) const;
37 
38  double lowerValue() const;
39  double upperValue() const;
40 
41  QgsSymbolV2* symbol() const;
42  QString label() const;
43 
44  void setSymbol( QgsSymbolV2* s );
45  void setLabel( const QString& label );
46  void setLowerValue( double lowerValue );
47  void setUpperValue( double upperValue );
48 
49  // @note added in 2.5
50  bool renderState() const;
51  void setRenderState( bool render );
52 
53  // debugging
54  QString dump() const;
55 
56  void toSld( QDomDocument& doc, QDomElement &element, QgsStringMap props ) const;
57 
58  protected:
59  double mLowerValue, mUpperValue;
62  bool mRender;
63 
64  // for cpy+swap idiom
65  void swap( QgsRendererRangeV2 & other );
66 };
67 
69 
70 
71 // @note added in 2.6
73 {
74  public:
76  QgsRendererRangeV2LabelFormat( const QString& format, int precision = 4, bool trimTrailingZeroes = false );
77 
78  bool operator==( const QgsRendererRangeV2LabelFormat & other ) const;
79  bool operator!=( const QgsRendererRangeV2LabelFormat & other ) const;
80 
81  QString format() const { return mFormat; }
82  void setFormat( const QString& format ) { mFormat = format; }
83 
84  int precision() const { return mPrecision; }
85  void setPrecision( int precision );
86 
87  bool trimTrailingZeroes() const { return mTrimTrailingZeroes; }
88  void setTrimTrailingZeroes( bool trimTrailingZeroes ) { mTrimTrailingZeroes = trimTrailingZeroes; }
89 
91  QString labelForRange( double lower, double upper ) const;
92  QString labelForRange( const QgsRendererRangeV2 &range ) const;
93  QString formatNumber( double value ) const;
94 
95  void setFromDomElement( QDomElement &element );
96  void saveToDomElement( QDomElement &element );
97 
98  static int MaxPrecision;
99  static int MinPrecision;
100 
101  protected:
105  // values used to manage number formatting - precision and trailing zeroes
106  double mNumberScale;
110 };
111 
112 class QgsVectorLayer;
114 
117 {
118  public:
119 
120  QgsGraduatedSymbolRendererV2( const QString& attrName = QString(), const QgsRangeList& ranges = QgsRangeList() );
121 
122  virtual ~QgsGraduatedSymbolRendererV2();
123 
125  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature, QgsRenderContext &context ) override;
127  virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature, QgsRenderContext &context ) override;
128 
129  virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
130 
131  virtual void stopRender( QgsRenderContext& context ) override;
132 
133  virtual QList<QString> usedAttributes() override;
134 
135  virtual QString dump() const override;
136 
137  virtual QgsGraduatedSymbolRendererV2* clone() const override;
138 
139  virtual void toSld( QDomDocument& doc, QDomElement &element ) const override;
140 
142  virtual int capabilities() override { return SymbolLevels | RotationField | Filter; }
143 
145  virtual QgsSymbolV2List symbols( QgsRenderContext &context ) override;
146 
147  QString classAttribute() const { return mAttrName; }
148  void setClassAttribute( const QString& attr ) { mAttrName = attr; }
149 
150  const QgsRangeList& ranges() const { return mRanges; }
151 
152  bool updateRangeSymbol( int rangeIndex, QgsSymbolV2* symbol );
153  bool updateRangeLabel( int rangeIndex, const QString& label );
154  bool updateRangeUpperValue( int rangeIndex, double value );
155  bool updateRangeLowerValue( int rangeIndex, double value );
157  bool updateRangeRenderState( int rangeIndex, bool render );
158 
159  void addClass( QgsSymbolV2* symbol );
161  void addClass( const QgsRendererRangeV2& range );
163  void addClass( double lower, double upper );
164 
172  void addBreak( double breakValue, bool updateSymbols = true );
173 
174  void deleteClass( int idx );
175  void deleteAllClasses();
176 
178  void moveClass( int from, int to );
179 
184  bool rangesOverlap() const;
185 
190  bool rangesHaveGaps() const;
191 
192  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
193  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
194 
195  enum Mode
196  {
202  Custom
203  };
204 
205  Mode mode() const { return mMode; }
206  void setMode( Mode mode ) { mMode = mode; }
212  void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses );
213 
218  Q_DECL_DEPRECATED QList<double> getDataValues( QgsVectorLayer *vlayer );
219 
222  const QgsRendererRangeV2LabelFormat &labelFormat() const { return mLabelFormat; }
227  void setLabelFormat( const QgsRendererRangeV2LabelFormat &labelFormat, bool updateRanges = false );
228 
232  void calculateLabelPrecision( bool updateRanges = true );
233 
234  static QgsGraduatedSymbolRendererV2* createRenderer( QgsVectorLayer* vlayer,
235  const QString& attrName,
236  int classes,
237  Mode mode,
238  QgsSymbolV2* symbol,
239  QgsVectorColorRampV2* ramp,
240  bool inverted = false,
242  );
243 
245  static QgsFeatureRendererV2* create( QDomElement& element );
246 
248  virtual QDomElement save( QDomDocument& doc ) override;
249 
251  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
252 
255  virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, const QString& rule = QString() ) override;
256 
259 
260  virtual QSet< QString > legendKeysForFeature( QgsFeature& feature, QgsRenderContext& context ) override;
261 
267  QgsSymbolV2* sourceSymbol();
268 
275  void setSourceSymbol( QgsSymbolV2* sym );
276 
281  QgsVectorColorRampV2* sourceColorRamp();
282 
286  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
287 
289  bool invertedColorRamp() { return mInvertedColorRamp; }
290  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
291 
297  void updateColorRamp( QgsVectorColorRampV2* ramp = nullptr, bool inverted = false );
298 
304  void updateSymbols( QgsSymbolV2* sym );
305 
309  void setSymbolSizes( double minSize, double maxSize );
310 
313  double minSymbolSize() const;
314 
317  double maxSymbolSize() const;
318 
319  enum GraduatedMethod {GraduatedColor = 0, GraduatedSize = 1 };
320 
323  GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
324 
327  void setGraduatedMethod( GraduatedMethod method ) { mGraduatedMethod = method; }
328 
329  Q_DECL_DEPRECATED void setRotationField( const QString& fieldOrExpression ) override;
330  Q_DECL_DEPRECATED QString rotationField() const override;
331 
332  void setSizeScaleField( const QString& fieldOrExpression );
333  QString sizeScaleField() const;
334 
335  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
336  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
337 
340  virtual bool legendSymbolItemsCheckable() const override;
341 
344  virtual bool legendSymbolItemChecked( const QString& key ) override;
345 
348  virtual void checkLegendSymbolItem( const QString& key, bool state = true ) override;
349 
350  virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol ) override;
351 
354  virtual QString legendClassificationAttribute() const override { return classAttribute(); }
355 
359  static QgsGraduatedSymbolRendererV2* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
360 
361  protected:
369 
376  int mAttrNum;
377  bool mCounting;
378 
381 
382  QgsSymbolV2* symbolForValue( double value );
383 
386  QString legendKeyForValue( double value ) const;
387 
389  static const char * graduatedMethodStr( GraduatedMethod method );
390 
391  private:
392 
395  QVariant valueForFeature( QgsFeature& feature, QgsRenderContext &context ) const;
396 
397 };
399 
400 #endif // QGSGRADUATEDSYMBOLRENDERERV2_H
QList< QgsRendererRangeV2 > QgsRangeList
virtual QSet< QString > legendKeysForFeature(QgsFeature &feature, QgsRenderContext &context)
Return legend keys matching a specified feature.
void setFormat(const QString &format)
QScopedPointer< QgsVectorColorRampV2 > mSourceColorRamp
virtual QString dump() const
for debugging
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
virtual Q_DECL_DEPRECATED QgsSymbolV2 * originalSymbolForFeature(QgsFeature &feature)
Return symbol for feature.
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
virtual QDomElement save(QDomDocument &doc)
store renderer info to XML element
#define Q_NOWARN_DEPRECATED_PUSH
Definition: qgis.h:407
Container of fields for a vector layer.
Definition: qgsfield.h:189
QHash< QgsSymbolV2 *, QgsSymbolV2 * > mTempSymbols
temporary symbols, used for data-defined rotation and scaling
virtual QList< QString > usedAttributes()=0
Returns a set of attributes required for this renderer.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:187
virtual bool legendSymbolItemChecked(const QString &key)
items of symbology items in legend is checked
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
item in symbology was checked
virtual QgsLegendSymbologyList legendSymbologyItems(QSize iconSize)
return a list of symbology items for the legend
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)=0
Needs to be called when a new render cycle is started.
virtual void stopRender(QgsRenderContext &context)=0
Needs to be called when a render cycle has finished to clean up.
QScopedPointer< QgsSymbolV2 > mSymbol
QScopedPointer< QgsExpression > mExpression
virtual int capabilities() override
returns bitwise OR-ed capabilities of the renderer
virtual QgsFeatureRendererV2 * clone() const =0
virtual Q_DECL_DEPRECATED QgsSymbolV2 * symbolForFeature(QgsFeature &feature)
To be overridden.
void setGraduatedMethod(GraduatedMethod method)
set the method used for graduation (either size or color)
QgsSymbolV2::ScaleMethod scaleMethod() const
virtual QgsLegendSymbolList legendSymbolItems(double scaleDenominator=-1, const QString &rule="")
return a list of item text / symbol
virtual Q_DECL_DEPRECATED QString rotationField() const
return rotation field name (or empty string if not set or not supported by renderer) ...
GraduatedMethod graduatedMethod() const
return the method used for graduation (either size or color)
QgsRendererRangeV2LabelFormat mLabelFormat
virtual Q_DECL_DEPRECATED QgsSymbolV2List symbols()
For symbol levels.
const QgsRendererRangeV2LabelFormat & labelFormat() const
Return the label format used to generate default classification labels.
virtual void toSld(QDomDocument &doc, QDomElement &element) const
used from subclasses to create SLD Rule elements following SLD v1.1 specs
#define Q_NOWARN_DEPRECATED_POP
Definition: qgis.h:408
int ANALYSIS_EXPORT lower(int n, int i)
Lower function.
Contains information about the context of a rendering operation.
int mAttrNum
attribute index (derived from attribute name in startRender)
ScaleMethod
Scale method.
Definition: qgssymbolv2.h:84
const QgsRangeList & ranges() const
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const
Return a list of symbology items for the legend.
virtual bool legendSymbolItemsCheckable() const
items of symbology items in legend should be checkable
void setClassAttribute(const QString &attr)
QScopedPointer< QgsSymbolV2 > mSourceSymbol
virtual QString legendClassificationAttribute() const override
If supported by the renderer, return classification attribute for the use in legend.
void setTrimTrailingZeroes(bool trimTrailingZeroes)
QScopedPointer< QgsExpression > mRotation
QScopedPointer< QgsExpression > mSizeScale
virtual Q_DECL_DEPRECATED void setRotationField(const QString &fieldName)
sets rotation field of renderer (if supported by the renderer)
Represents a vector layer which manages a vector based data sets.
virtual void setLegendSymbolItem(const QString &key, QgsSymbolV2 *symbol)
Sets the symbol to be used for a legend symbol item.