QGIS API Documentation  2.2.0-Valmiera
 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 );
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  // debugging
51  QString dump() const;
52 
53  void toSld( QDomDocument& doc, QDomElement &element, QgsStringMap props ) const;
54 
55  protected:
56  QVariant mValue;
57  QScopedPointer<QgsSymbolV2> mSymbol;
58  QString mLabel;
59 
60  void swap( QgsRendererCategoryV2 & other );
61 };
62 
63 typedef QList<QgsRendererCategoryV2> QgsCategoryList;
64 
66 {
67  public:
68 
69  QgsCategorizedSymbolRendererV2( QString attrName = QString(), QgsCategoryList categories = QgsCategoryList() );
70 
72 
73  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
74 
75  virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer );
76 
77  virtual void stopRender( QgsRenderContext& context );
78 
79  virtual QList<QString> usedAttributes();
80 
81  virtual QString dump() const;
82 
83  virtual QgsFeatureRendererV2* clone();
84 
85  virtual void toSld( QDomDocument& doc, QDomElement &element ) const;
86 
89  virtual int capabilities() { return SymbolLevels | RotationField | Filter; }
90 
91  virtual QgsSymbolV2List symbols();
93  void updateSymbols( QgsSymbolV2 * sym );
94 
95  const QgsCategoryList& categories() { return mCategories; }
96 
98  int categoryIndexForValue( QVariant val );
99 
100  bool updateCategoryValue( int catIndex, const QVariant &value );
101  bool updateCategorySymbol( int catIndex, QgsSymbolV2* symbol );
102  bool updateCategoryLabel( int catIndex, QString label );
103 
104  void addCategory( const QgsRendererCategoryV2 &category );
105  bool deleteCategory( int catIndex );
106  void deleteAllCategories();
107 
109  void moveCategory( int from, int to );
110 
111  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
112  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
113 
114  QString classAttribute() const { return mAttrName; }
115  void setClassAttribute( QString attr ) { mAttrName = attr; }
116 
118  static QgsFeatureRendererV2* create( QDomElement& element );
119 
121  virtual QDomElement save( QDomDocument& doc );
122 
124  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
125 
129  virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, QString rule = QString() );
130 
131  QgsSymbolV2* sourceSymbol();
132  void setSourceSymbol( QgsSymbolV2* sym );
133 
134  QgsVectorColorRampV2* sourceColorRamp();
135  void setSourceColorRamp( QgsVectorColorRampV2* ramp );
136 
138  bool invertedColorRamp() { return mInvertedColorRamp; }
139  void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
140 
142  void setRotationField( QString fieldOrExpression );
144  QString rotationField() const;
145 
147  void setSizeScaleField( QString fieldOrExpression );
149  QString sizeScaleField() const;
150 
152  void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
154  QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
155 
156  protected:
157  QString mAttrName;
159  QScopedPointer<QgsSymbolV2> mSourceSymbol;
160  QScopedPointer<QgsVectorColorRampV2> mSourceColorRamp;
162  QScopedPointer<QgsExpression> mRotation;
163  QScopedPointer<QgsExpression> mSizeScale;
165  QScopedPointer<QgsExpression> mExpression;
166 
168  int mAttrNum;
169 
171  QHash<QString, QgsSymbolV2*> mSymbolHash;
172 
174  QHash<QString, QgsSymbolV2*> mTempSymbols;
175 
176  void rebuildHash();
177 
178  QgsSymbolV2* symbolForValue( QVariant value );
179 };
180 
181 
182 #endif // QGSCATEGORIZEDSYMBOLRENDERERV2_H