QGIS API Documentation  2.14.11-Essen
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
63  void toSld( QDomDocument& doc, QDomElement &element, QgsStringMap props, bool firstRange = false ) const;
64 
65  protected:
66  double mLowerValue, mUpperValue;
69  bool mRender;
70 
71  // for cpy+swap idiom
72  void swap( QgsRendererRangeV2 & other );
73 };
74 
76 
77 
78 // @note added in 2.6
80 {
81  public:
83  QgsRendererRangeV2LabelFormat( const QString& format, int precision = 4, bool trimTrailingZeroes = false );
84 
85  bool operator==( const QgsRendererRangeV2LabelFormat & other ) const;
86  bool operator!=( const QgsRendererRangeV2LabelFormat & other ) const;
87 
88  QString format() const { return mFormat; }
89  void setFormat( const QString& format ) { mFormat = format; }
90 
91  int precision() const { return mPrecision; }
92  void setPrecision( int precision );
93 
94  bool trimTrailingZeroes() const { return mTrimTrailingZeroes; }
95  void setTrimTrailingZeroes( bool trimTrailingZeroes ) { mTrimTrailingZeroes = trimTrailingZeroes; }
96 
98  QString labelForRange( double lower, double upper ) const;
99  QString labelForRange( const QgsRendererRangeV2 &range ) const;
100  QString formatNumber( double value ) const;
101 
102  void setFromDomElement( QDomElement &element );
103  void saveToDomElement( QDomElement &element );
104 
105  static int MaxPrecision;
106  static int MinPrecision;
107 
108  protected:
112  // values used to manage number formatting - precision and trailing zeroes
113  double mNumberScale;
117 };
118 
119 class QgsVectorLayer;
121 
124 {
125  public:
126 
127  QgsGraduatedSymbolRendererV2( const QString& attrName = QString(), const QgsRangeList& ranges = QgsRangeList() );
128 
129  virtual ~QgsGraduatedSymbolRendererV2();
130 
132  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature, QgsRenderContext &context ) override;
134  virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature, QgsRenderContext &context ) override;
135 
136  virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
137 
138  virtual void stopRender( QgsRenderContext& context ) override;
139 
140  virtual QList<QString> usedAttributes() override;
141 
142  virtual QString dump() const override;
143 
144  virtual QgsGraduatedSymbolRendererV2* clone() const override;
145 
147  virtual void toSld( QDomDocument& doc, QDomElement &element ) const override;
149  virtual void toSld( QDomDocument& doc, QDomElement &element, const QgsStringMap& props ) const override;
150 
152  virtual int capabilities() override { return SymbolLevels | RotationField | Filter; }
153 
155  virtual QgsSymbolV2List symbols( QgsRenderContext &context ) override;
156 
157  QString classAttribute() const { return mAttrName; }
158  void setClassAttribute( const QString& attr ) { mAttrName = attr; }
159 
160  const QgsRangeList& ranges() const { return mRanges; }
161 
162  bool updateRangeSymbol( int rangeIndex, QgsSymbolV2* symbol );
163  bool updateRangeLabel( int rangeIndex, const QString& label );
164  bool updateRangeUpperValue( int rangeIndex, double value );
165  bool updateRangeLowerValue( int rangeIndex, double value );
167  bool updateRangeRenderState( int rangeIndex, bool render );
168 
169  void addClass( QgsSymbolV2* symbol );
171  void addClass( const QgsRendererRangeV2& range );
173  void addClass( double lower, double upper );
174 
182  void addBreak( double breakValue, bool updateSymbols = true );
183 
184  void deleteClass( int idx );
185  void deleteAllClasses();
186 
188  void moveClass( int from, int to );
189 
194  bool rangesOverlap() const;
195 
200  bool rangesHaveGaps() const;
201 
202  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
203  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
204 
205  enum Mode
206  {
212  Custom
213  };
214 
215  Mode mode() const { return mMode; }
216  void setMode( Mode mode ) { mMode = mode; }
222  void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses );
223 
228  Q_DECL_DEPRECATED QList<double> getDataValues( QgsVectorLayer *vlayer );
229 
232  const QgsRendererRangeV2LabelFormat &labelFormat() const { return mLabelFormat; }
237  void setLabelFormat( const QgsRendererRangeV2LabelFormat &labelFormat, bool updateRanges = false );
238 
242  void calculateLabelPrecision( bool updateRanges = true );
243 
244  static QgsGraduatedSymbolRendererV2* createRenderer(
245  QgsVectorLayer* vlayer,
246  const QString& attrName,
247  int classes,
248  Mode mode,
249  QgsSymbolV2* symbol,
250  QgsVectorColorRampV2* ramp,
251  bool inverted = false,
253  );
254 
256  static QgsFeatureRendererV2* create( QDomElement& element );
257 
259  virtual QDomElement save( QDomDocument& doc ) override;
260 
262  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
263 
266  virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, const QString& rule = QString() ) override;
267 
270 
271  virtual QSet< QString > legendKeysForFeature( QgsFeature& feature, QgsRenderContext& context ) override;
272 
278  QgsSymbolV2* sourceSymbol();
279 
286  void setSourceSymbol( QgsSymbolV2* sym );
287 
292  QgsVectorColorRampV2* sourceColorRamp();
293 
297  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
298 
300  bool invertedColorRamp() { return mInvertedColorRamp; }
301  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
302 
308  void updateColorRamp( QgsVectorColorRampV2* ramp = nullptr, bool inverted = false );
309 
315  void updateSymbols( QgsSymbolV2* sym );
316 
320  void setSymbolSizes( double minSize, double maxSize );
321 
324  double minSymbolSize() const;
325 
328  double maxSymbolSize() const;
329 
330  enum GraduatedMethod {GraduatedColor = 0, GraduatedSize = 1 };
331 
334  GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
335 
338  void setGraduatedMethod( GraduatedMethod method ) { mGraduatedMethod = method; }
339 
340  Q_DECL_DEPRECATED void setRotationField( const QString& fieldOrExpression ) override;
341  Q_DECL_DEPRECATED QString rotationField() const override;
342 
343  void setSizeScaleField( const QString& fieldOrExpression );
344  QString sizeScaleField() const;
345 
346  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
347  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
348 
351  virtual bool legendSymbolItemsCheckable() const override;
352 
355  virtual bool legendSymbolItemChecked( const QString& key ) override;
356 
359  virtual void checkLegendSymbolItem( const QString& key, bool state = true ) override;
360 
361  virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol ) override;
362 
365  virtual QString legendClassificationAttribute() const override { return classAttribute(); }
366 
370  static QgsGraduatedSymbolRendererV2* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
371 
372  protected:
380 
387  int mAttrNum;
388  bool mCounting;
389 
392 
393  QgsSymbolV2* symbolForValue( double value );
394 
397  QString legendKeyForValue( double value ) const;
398 
400  static const char * graduatedMethodStr( GraduatedMethod method );
401 
402  private:
403 
406  QVariant valueForFeature( QgsFeature& feature, QgsRenderContext &context ) const;
407 
408 };
410 
411 #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:415
Container of fields for a vector layer.
Definition: qgsfield.h:187
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:416
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:87
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.