QGIS API Documentation  2.11.0-Master
 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, 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( 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( 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( 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 
114 {
115  public:
116 
119 
120  virtual ~QgsGraduatedSymbolRendererV2();
121 
122  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) override;
123 
124  virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;
125 
126  virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
127 
128  virtual void stopRender( QgsRenderContext& context ) override;
129 
130  virtual QList<QString> usedAttributes() override;
131 
132  virtual QString dump() const override;
133 
134  virtual QgsFeatureRendererV2* clone() const override;
135 
136  virtual void toSld( QDomDocument& doc, QDomElement &element ) const override;
137 
139  virtual int capabilities() override { return SymbolLevels | RotationField | Filter; }
140 
141  virtual QgsSymbolV2List symbols() override;
142 
143  QString classAttribute() const { return mAttrName; }
144  void setClassAttribute( QString attr ) { mAttrName = attr; }
145 
146  const QgsRangeList& ranges() const { return mRanges; }
147 
148  bool updateRangeSymbol( int rangeIndex, QgsSymbolV2* symbol );
149  bool updateRangeLabel( int rangeIndex, QString label );
150  bool updateRangeUpperValue( int rangeIndex, double value );
151  bool updateRangeLowerValue( int rangeIndex, double value );
153  bool updateRangeRenderState( int rangeIndex, bool render );
154 
155  void addClass( QgsSymbolV2* symbol );
157  void addClass( QgsRendererRangeV2 range );
159  void addClass( double lower, double upper );
160 
168  void addBreak( double breakValue, bool updateSymbols = true );
169 
170  void deleteClass( int idx );
171  void deleteAllClasses();
172 
174  void moveClass( int from, int to );
175 
180  bool rangesOverlap() const;
181 
186  bool rangesHaveGaps() const;
187 
188  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
189  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
190 
191  enum Mode
192  {
198  Custom
199  };
200 
201  Mode mode() const { return mMode; }
202  void setMode( Mode mode ) { mMode = mode; }
208  void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses );
209 
214  Q_DECL_DEPRECATED QList<double> getDataValues( QgsVectorLayer *vlayer );
215 
218  const QgsRendererRangeV2LabelFormat &labelFormat() const { return mLabelFormat; }
223  void setLabelFormat( const QgsRendererRangeV2LabelFormat &labelFormat, bool updateRanges = false );
224 
228  void calculateLabelPrecision( bool updateRanges = true );
229 
230  static QgsGraduatedSymbolRendererV2* createRenderer(
231  QgsVectorLayer* vlayer,
232  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, QString rule = QString() ) override;
253 
256 
257 
258  QgsSymbolV2* sourceSymbol();
259  void setSourceSymbol( QgsSymbolV2* sym );
260 
261  QgsVectorColorRampV2* sourceColorRamp();
262  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
264  bool invertedColorRamp() { return mInvertedColorRamp; }
265  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
266 
270  void updateColorRamp( QgsVectorColorRampV2* ramp = 0, bool inverted = false );
271 
273  void updateSymbols( QgsSymbolV2* sym );
274 
278  void setSymbolSizes( double minSize, double maxSize );
279 
282  double minSymbolSize() const;
283 
286  double maxSymbolSize() const;
287 
288  enum GraduatedMethod {GraduatedColor = 0, GraduatedSize = 1 };
289 
292  GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
293 
296  void setGraduatedMethod( GraduatedMethod method ) { mGraduatedMethod = method; }
297 
298  void setRotationField( QString fieldOrExpression ) override;
299  QString rotationField() const override;
300 
301  void setSizeScaleField( QString fieldOrExpression );
302  QString sizeScaleField() const;
303 
304  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
305  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
306 
309  virtual bool legendSymbolItemsCheckable() const override;
310 
313  virtual bool legendSymbolItemChecked( QString key ) override;
314 
317  virtual void checkLegendSymbolItem( QString key, bool state = true ) override;
318 
321  virtual QString legendClassificationAttribute() const override { return classAttribute(); }
322 
326  static QgsGraduatedSymbolRendererV2* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
327 
328  protected:
336 
343  int mAttrNum;
344  bool mCounting;
345 
348 
349  QgsSymbolV2* symbolForValue( double value );
350 
351  static const char * graduatedMethodStr( GraduatedMethod method );
352 
353 };
354 
355 #endif // QGSGRADUATEDSYMBOLRENDERERV2_H
QList< QgsRendererRangeV2 > QgsRangeList
virtual QgsSymbolV2 * originalSymbolForFeature(QgsFeature &feature)
Return symbol for feature.
Definition: qgsrendererv2.h:96
virtual void setRotationField(QString fieldName)
sets rotation field of renderer (if supported by the renderer)
virtual void checkLegendSymbolItem(QString key, bool state=true)
item in symbology was checked
QScopedPointer< QgsVectorColorRampV2 > mSourceColorRamp
virtual QString dump() const
for debugging
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
virtual QDomElement save(QDomDocument &doc)
store renderer info to XML element
virtual QgsLegendSymbolList legendSymbolItems(double scaleDenominator=-1, QString rule="")
return a list of item text / symbol
Container of fields for a vector layer.
Definition: qgsfield.h:173
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:119
virtual QgsLegendSymbologyList legendSymbologyItems(QSize iconSize)
return a list of symbology items for the legend
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)=0
virtual void stopRender(QgsRenderContext &context)=0
virtual QString rotationField() const
return rotation field name (or empty string if not set or not supported by renderer) ...
QScopedPointer< QgsSymbolV2 > mSymbol
virtual QgsSymbolV2List symbols()=0
for symbol levels
QScopedPointer< QgsExpression > mExpression
virtual int capabilities() override
returns bitwise OR-ed capabilities of the renderer
virtual QgsFeatureRendererV2 * clone() const =0
void setGraduatedMethod(GraduatedMethod method)
set the method used for graduation (either size or color)
QgsSymbolV2::ScaleMethod scaleMethod() const
virtual bool legendSymbolItemChecked(QString key)
items of symbology items in legend is checked
GraduatedMethod graduatedMethod() const
return the method used for graduation (either size or color)
QgsRendererRangeV2LabelFormat mLabelFormat
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
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)
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
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
Represents a vector layer which manages a vector based data sets.
virtual QgsSymbolV2 * symbolForFeature(QgsFeature &feature)=0
to be overridden