QGIS API Documentation  2.9.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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;
58  QScopedPointer<QgsSymbolV2> mSymbol;
59  QString mLabel;
60  bool mRender;
61 
62  // for cpy+swap idiom
63  void swap( QgsRendererRangeV2 & other );
64 };
65 
66 typedef QList<QgsRendererRangeV2> QgsRangeList;
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:
100  QString mFormat;
103  // values used to manage number formatting - precision and trailing zeroes
104  double mNumberScale;
105  QString mNumberSuffix;
108 };
109 
110 class QgsVectorLayer;
112 
114 {
115  public:
116 
117  QgsGraduatedSymbolRendererV2( QString attrName = QString(), QgsRangeList ranges = QgsRangeList() );
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  void deleteClass( int idx );
161  void deleteAllClasses();
162 
164  void moveClass( int from, int to );
165 
166  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
167  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
168 
169  enum Mode
170  {
176  Custom
177  };
178 
179  Mode mode() const { return mMode; }
180  void setMode( Mode mode ) { mMode = mode; }
186  void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses );
190  QList<double> getDataValues( QgsVectorLayer *vlayer );
191 
194  const QgsRendererRangeV2LabelFormat &labelFormat() const { return mLabelFormat; }
199  void setLabelFormat( const QgsRendererRangeV2LabelFormat &labelFormat, bool updateRanges = false );
200 
204  void calculateLabelPrecision( bool updateRanges = true );
205 
206  static QgsGraduatedSymbolRendererV2* createRenderer(
207  QgsVectorLayer* vlayer,
208  QString attrName,
209  int classes,
210  Mode mode,
211  QgsSymbolV2* symbol,
212  QgsVectorColorRampV2* ramp,
213  bool inverted = false,
215  );
216 
218  static QgsFeatureRendererV2* create( QDomElement& element );
219 
221  virtual QDomElement save( QDomDocument& doc ) override;
222 
224  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
225 
228  virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, QString rule = QString() ) override;
229 
230  QgsSymbolV2* sourceSymbol();
231  void setSourceSymbol( QgsSymbolV2* sym );
232 
233  QgsVectorColorRampV2* sourceColorRamp();
234  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
236  bool invertedColorRamp() { return mInvertedColorRamp; }
237  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
238 
242  void updateColorRamp( QgsVectorColorRampV2* ramp = 0, bool inverted = false );
243 
245  void updateSymbols( QgsSymbolV2* sym );
246 
250  void setSymbolSizes( double minSize, double maxSize );
251 
254  double minSymbolSize() const;
255 
258  double maxSymbolSize() const;
259 
260  enum GraduatedMethod {GraduatedColor = 0, GraduatedSize = 1 };
261 
264  GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
265 
268  void setGraduatedMethod( GraduatedMethod method ) { mGraduatedMethod = method; }
269 
270 
271  void setRotationField( QString fieldOrExpression ) override;
272  QString rotationField() const override;
273 
274  void setSizeScaleField( QString fieldOrExpression );
275  QString sizeScaleField() const;
276 
277  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
278  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
279 
282  virtual bool legendSymbolItemsCheckable() const override;
283 
286  virtual bool legendSymbolItemChecked( QString key ) override;
287 
290  virtual void checkLegendSymbolItem( QString key, bool state = true ) override;
291 
294  virtual QString legendClassificationAttribute() const override { return classAttribute(); }
295 
299  static QgsGraduatedSymbolRendererV2* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
300 
301  protected:
302  QString mAttrName;
305  QScopedPointer<QgsSymbolV2> mSourceSymbol;
306  QScopedPointer<QgsVectorColorRampV2> mSourceColorRamp;
309 
310  QScopedPointer<QgsExpression> mRotation;
311  QScopedPointer<QgsExpression> mSizeScale;
313  QScopedPointer<QgsExpression> mExpression;
316  int mAttrNum;
317  bool mCounting;
318 
320  QHash<QgsSymbolV2*, QgsSymbolV2*> mTempSymbols;
321 
322  QgsSymbolV2* symbolForValue( double value );
323 
324  static const char * graduatedMethodStr( GraduatedMethod method );
325 
326 };
327 
328 #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
QList< QgsSymbolV2 * > QgsSymbolV2List
Definition: qgsrendererv2.h:39
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:172
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:113
QMap< QString, QString > QgsStringMap
Definition: qgis.h:438
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
QList< QPair< QString, QPixmap > > QgsLegendSymbologyList
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 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.
QList< QPair< QString, QgsSymbolV2 * > > QgsLegendSymbolList
Definition: qgsrendererv2.h:43
virtual QgsSymbolV2 * symbolForFeature(QgsFeature &feature)=0
to be overridden