QGIS API Documentation  2.12.0-Lyon
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 
31  // default dtor is ok
32  QgsRendererRangeV2& operator=( QgsRendererRangeV2 range );
33 
34  bool operator<( const QgsRendererRangeV2 &other ) const;
35 
36  double lowerValue() const;
37  double upperValue() const;
38 
39  QgsSymbolV2* symbol() const;
40  QString label() const;
41 
42  void setSymbol( QgsSymbolV2* s );
43  void setLabel( const QString& label );
44  void setLowerValue( double lowerValue );
45  void setUpperValue( double upperValue );
46 
47  // @note added in 2.5
48  bool renderState() const;
49  void setRenderState( bool render );
50 
51  // debugging
52  QString dump() const;
53 
54  void toSld( QDomDocument& doc, QDomElement &element, QgsStringMap props ) const;
55 
56  protected:
57  double mLowerValue, mUpperValue;
60  bool mRender;
61 
62  // for cpy+swap idiom
63  void swap( QgsRendererRangeV2 & other );
64 };
65 
67 
68 
69 // @note added in 2.6
71 {
72  public:
74  QgsRendererRangeV2LabelFormat( const QString& format, int precision = 4, bool trimTrailingZeroes = false );
75 
76  bool operator==( const QgsRendererRangeV2LabelFormat & other ) const;
77  bool operator!=( const QgsRendererRangeV2LabelFormat & other ) const;
78 
79  QString format() const { return mFormat; }
80  void setFormat( const QString& format ) { mFormat = format; }
81 
82  int precision() const { return mPrecision; }
83  void setPrecision( int precision );
84 
85  bool trimTrailingZeroes() const { return mTrimTrailingZeroes; }
86  void setTrimTrailingZeroes( bool trimTrailingZeroes ) { mTrimTrailingZeroes = trimTrailingZeroes; }
87 
89  QString labelForRange( double lower, double upper ) const;
90  QString labelForRange( const QgsRendererRangeV2 &range ) const;
91  QString formatNumber( double value ) const;
92 
93  void setFromDomElement( QDomElement &element );
94  void saveToDomElement( QDomElement &element );
95 
96  static int MaxPrecision;
97  static int MinPrecision;
98 
99  protected:
103  // values used to manage number formatting - precision and trailing zeroes
104  double mNumberScale;
108 };
109 
110 class QgsVectorLayer;
112 
115 {
116  public:
117 
118  QgsGraduatedSymbolRendererV2( const QString& attrName = QString(), const QgsRangeList& ranges = QgsRangeList() );
120 
121  virtual ~QgsGraduatedSymbolRendererV2();
122 
123  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature, QgsRenderContext &context ) override;
124 
125  virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature, QgsRenderContext &context ) override;
126 
127  virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
128 
129  virtual void stopRender( QgsRenderContext& context ) override;
130 
131  virtual QList<QString> usedAttributes() override;
132 
133  virtual QString dump() const override;
134 
135  virtual QgsFeatureRendererV2* clone() const override;
136 
137  virtual void toSld( QDomDocument& doc, QDomElement &element ) const override;
138 
140  virtual int capabilities() override { return SymbolLevels | RotationField | Filter; }
141 
142  virtual QgsSymbolV2List symbols( QgsRenderContext &context ) override;
143 
144  QString classAttribute() const { return mAttrName; }
145  void setClassAttribute( const QString& attr ) { mAttrName = attr; }
146 
147  const QgsRangeList& ranges() const { return mRanges; }
148 
149  bool updateRangeSymbol( int rangeIndex, QgsSymbolV2* symbol );
150  bool updateRangeLabel( int rangeIndex, const QString& label );
151  bool updateRangeUpperValue( int rangeIndex, double value );
152  bool updateRangeLowerValue( int rangeIndex, double value );
154  bool updateRangeRenderState( int rangeIndex, bool render );
155 
156  void addClass( QgsSymbolV2* symbol );
158  void addClass( const QgsRendererRangeV2& range );
160  void addClass( double lower, double upper );
161 
169  void addBreak( double breakValue, bool updateSymbols = true );
170 
171  void deleteClass( int idx );
172  void deleteAllClasses();
173 
175  void moveClass( int from, int to );
176 
181  bool rangesOverlap() const;
182 
187  bool rangesHaveGaps() const;
188 
189  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
190  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
191 
192  enum Mode
193  {
199  Custom
200  };
201 
202  Mode mode() const { return mMode; }
203  void setMode( Mode mode ) { mMode = mode; }
209  void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses );
210 
215  Q_DECL_DEPRECATED QList<double> getDataValues( QgsVectorLayer *vlayer );
216 
219  const QgsRendererRangeV2LabelFormat &labelFormat() const { return mLabelFormat; }
224  void setLabelFormat( const QgsRendererRangeV2LabelFormat &labelFormat, bool updateRanges = false );
225 
229  void calculateLabelPrecision( bool updateRanges = true );
230 
231  static QgsGraduatedSymbolRendererV2* createRenderer( QgsVectorLayer* vlayer,
232  const QString& attrName,
233  int classes,
234  Mode mode,
235  QgsSymbolV2* symbol,
236  QgsVectorColorRampV2* ramp,
237  bool inverted = false,
239  );
240 
242  static QgsFeatureRendererV2* create( QDomElement& element );
243 
245  virtual QDomElement save( QDomDocument& doc ) override;
246 
248  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
249 
252  virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, const QString& rule = QString() ) override;
253 
256 
257 
258  QgsSymbolV2* sourceSymbol();
259  void setSourceSymbol( QgsSymbolV2* sym );
260 
261  QgsVectorColorRampV2* sourceColorRamp();
262 
266  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
267 
269  bool invertedColorRamp() { return mInvertedColorRamp; }
270  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
271 
277  void updateColorRamp( QgsVectorColorRampV2* ramp = 0, bool inverted = false );
278 
280  void updateSymbols( QgsSymbolV2* sym );
281 
285  void setSymbolSizes( double minSize, double maxSize );
286 
289  double minSymbolSize() const;
290 
293  double maxSymbolSize() const;
294 
295  enum GraduatedMethod {GraduatedColor = 0, GraduatedSize = 1 };
296 
299  GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
300 
303  void setGraduatedMethod( GraduatedMethod method ) { mGraduatedMethod = method; }
304 
305  Q_DECL_DEPRECATED void setRotationField( const QString& fieldOrExpression ) override;
306  Q_DECL_DEPRECATED QString rotationField() const override;
307 
308  void setSizeScaleField( const QString& fieldOrExpression );
309  QString sizeScaleField() const;
310 
311  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
312  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
313 
316  virtual bool legendSymbolItemsCheckable() const override;
317 
320  virtual bool legendSymbolItemChecked( const QString& key ) override;
321 
324  virtual void checkLegendSymbolItem( const QString& key, bool state = true ) override;
325 
328  virtual QString legendClassificationAttribute() const override { return classAttribute(); }
329 
333  static QgsGraduatedSymbolRendererV2* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
334 
335  protected:
343 
350  int mAttrNum;
351  bool mCounting;
352 
355 
356  QgsSymbolV2* symbolForValue( double value );
357 
358  static const char * graduatedMethodStr( GraduatedMethod method );
359 
360 };
362 
363 #endif // QGSGRADUATEDSYMBOLRENDERERV2_H
QList< QgsRendererRangeV2 > QgsRangeList
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:390
Container of fields for a vector layer.
Definition: qgsfield.h:177
QHash< QgsSymbolV2 *, QgsSymbolV2 * > mTempSymbols
temporary symbols, used for data-defined rotation and scaling
virtual QList< QString > usedAttributes()=0
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:176
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
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:391
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:78
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.