QGIS API Documentation  2.8.2-Wien
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgscategorizedsymbolrendererv2.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgscategorizedsymbolrendererv2.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 QGSCATEGORIZEDSYMBOLRENDERERV2_H
16 #define QGSCATEGORIZEDSYMBOLRENDERERV2_H
17 
18 #include "qgssymbolv2.h"
19 #include "qgsrendererv2.h"
20 #include "qgsexpression.h"
21 
22 #include <QHash>
23 #include <QScopedPointer>
24 
26 class QgsVectorLayer;
27 
28 /* \brief categorized renderer */
29 class CORE_EXPORT QgsRendererCategoryV2
30 {
31  public:
33 
35  QgsRendererCategoryV2( QVariant value, QgsSymbolV2* symbol, QString label, bool render = true );
36 
39 
41 
42  QVariant value() const;
43  QgsSymbolV2* symbol() const;
44  QString label() const;
45 
46  void setValue( const QVariant &value );
47  void setSymbol( QgsSymbolV2* s );
48  void setLabel( const QString &label );
49 
50  // @note added in 2.5
51  bool renderState() const;
52  void setRenderState( bool render );
53 
54  // debugging
55  QString dump() const;
56 
57  void toSld( QDomDocument& doc, QDomElement &element, QgsStringMap props ) const;
58 
59  protected:
60  QVariant mValue;
61  QScopedPointer<QgsSymbolV2> mSymbol;
62  QString mLabel;
63  bool mRender;
64 
65  void swap( QgsRendererCategoryV2 & other );
66 };
67 
68 typedef QList<QgsRendererCategoryV2> QgsCategoryList;
69 
71 {
72  public:
73 
74  QgsCategorizedSymbolRendererV2( QString attrName = QString(), QgsCategoryList categories = QgsCategoryList() );
75 
77 
78  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) override;
79 
80  virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;
81 
82  virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
83 
84  virtual void stopRender( QgsRenderContext& context ) override;
85 
86  virtual QList<QString> usedAttributes() override;
87 
88  virtual QString dump() const override;
89 
90  virtual QgsFeatureRendererV2* clone() const override;
91 
92  virtual void toSld( QDomDocument& doc, QDomElement &element ) const override;
93 
95  virtual int capabilities() override { return SymbolLevels | RotationField | Filter; }
96 
97  virtual QgsSymbolV2List symbols() override;
98  void updateSymbols( QgsSymbolV2 * sym );
99 
100  const QgsCategoryList& categories() const { return mCategories; }
101 
103  int categoryIndexForValue( QVariant val );
104 
107  int categoryIndexForLabel( QString val );
108 
109  bool updateCategoryValue( int catIndex, const QVariant &value );
110  bool updateCategorySymbol( int catIndex, QgsSymbolV2* symbol );
111  bool updateCategoryLabel( int catIndex, QString label );
112 
114  bool updateCategoryRenderState( int catIndex, bool render );
115 
116  void addCategory( const QgsRendererCategoryV2 &category );
117  bool deleteCategory( int catIndex );
118  void deleteAllCategories();
119 
121  void moveCategory( int from, int to );
122 
123  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
124  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
125 
126  QString classAttribute() const { return mAttrName; }
127  void setClassAttribute( QString attr ) { mAttrName = attr; }
128 
130  static QgsFeatureRendererV2* create( QDomElement& element );
131 
133  virtual QDomElement save( QDomDocument& doc ) override;
134 
136  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
137 
140  virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, QString rule = QString() ) override;
141 
142  QgsSymbolV2* sourceSymbol();
143  void setSourceSymbol( QgsSymbolV2* sym );
144 
145  QgsVectorColorRampV2* sourceColorRamp();
146  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
147 
149  bool invertedColorRamp() { return mInvertedColorRamp; }
150  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
151 
152  // Update the color ramp used and all symbols colors.
154  void updateColorRamp( QgsVectorColorRampV2* ramp, bool inverted = false );
155 
156  void setRotationField( QString fieldOrExpression ) override;
157  QString rotationField() const override;
158 
159  void setSizeScaleField( QString fieldOrExpression );
160  QString sizeScaleField() const;
161 
162  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
163  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
164 
167  virtual bool legendSymbolItemsCheckable() const override;
168 
170  // @note added in 2.5
171  virtual bool legendSymbolItemChecked( QString key ) override;
172 
174  // @note added in 2.5
175  virtual void checkLegendSymbolItem( QString key, bool state = true ) override;
176 
179  virtual QString legendClassificationAttribute() const override { return classAttribute(); }
180 
184  static QgsCategorizedSymbolRendererV2* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
185 
186  protected:
187  QString mAttrName;
189  QScopedPointer<QgsSymbolV2> mSourceSymbol;
190  QScopedPointer<QgsVectorColorRampV2> mSourceColorRamp;
192  QScopedPointer<QgsExpression> mRotation;
193  QScopedPointer<QgsExpression> mSizeScale;
195  QScopedPointer<QgsExpression> mExpression;
196 
198  int mAttrNum;
199 
201  QHash<QString, QgsSymbolV2*> mSymbolHash;
202  bool mCounting;
203 
205  QHash<QgsSymbolV2*, QgsSymbolV2*> mTempSymbols;
206 
207  void rebuildHash();
208 
209  QgsSymbolV2* symbolForValue( QVariant value );
210 
212 };
213 
214 
215 #endif // QGSCATEGORIZEDSYMBOLRENDERERV2_H