00001 #ifndef QGSGRADUATEDSYMBOLRENDERERV2_H
00002 #define QGSGRADUATEDSYMBOLRENDERERV2_H
00003
00004 #include "qgsrendererv2.h"
00005
00006 class CORE_EXPORT QgsRendererRangeV2
00007 {
00008 public:
00009 QgsRendererRangeV2( double lowerValue, double upperValue, QgsSymbolV2* symbol, QString label );
00010 QgsRendererRangeV2( const QgsRendererRangeV2& range );
00011
00012 ~QgsRendererRangeV2();
00013
00014 double lowerValue() const;
00015 double upperValue() const;
00016
00017 QgsSymbolV2* symbol() const;
00018 QString label() const;
00019
00020 void setSymbol( QgsSymbolV2* s );
00021 void setLabel( QString label );
00022 void setLowerValue( double lowerValue );
00023 void setUpperValue( double upperValue );
00024
00025
00026 QString dump();
00027
00028 protected:
00029 double mLowerValue, mUpperValue;
00030 QgsSymbolV2* mSymbol;
00031 QString mLabel;
00032 };
00033
00034 typedef QList<QgsRendererRangeV2> QgsRangeList;
00035
00036 class QgsVectorLayer;
00037 class QgsVectorColorRampV2;
00038
00039 class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
00040 {
00041 public:
00042 QgsGraduatedSymbolRendererV2( QString attrName = QString(), QgsRangeList ranges = QgsRangeList() );
00043
00044 virtual ~QgsGraduatedSymbolRendererV2();
00045
00046 virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
00047
00048 virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer );
00049
00050 virtual void stopRender( QgsRenderContext& context );
00051
00052 virtual QList<QString> usedAttributes();
00053
00054 virtual QString dump();
00055
00056 virtual QgsFeatureRendererV2* clone();
00057
00058 virtual QgsSymbolV2List symbols();
00059
00060 QString classAttribute() const { return mAttrName; }
00061 void setClassAttribute( QString attr ) { mAttrName = attr; }
00062
00063 const QgsRangeList& ranges() { return mRanges; }
00064
00065 bool updateRangeSymbol( int rangeIndex, QgsSymbolV2* symbol );
00066 bool updateRangeLabel( int rangeIndex, QString label );
00067 bool updateRangeUpperValue( int rangeIndex, double value );
00068 bool updateRangeLowerValue( int rangeIndex, double value );
00069
00070 void addClass( QgsSymbolV2* symbol );
00071 void deleteClass( int idx );
00072
00073 enum Mode
00074 {
00075 EqualInterval,
00076 Quantile,
00077 Jenks,
00078 StdDev,
00079 Pretty,
00080 Custom
00081 };
00082
00083 Mode mode() const { return mMode; }
00084 void setMode( Mode mode ) { mMode = mode; }
00085
00086 static QgsGraduatedSymbolRendererV2* createRenderer(
00087 QgsVectorLayer* vlayer,
00088 QString attrName,
00089 int classes,
00090 Mode mode,
00091 QgsSymbolV2* symbol,
00092 QgsVectorColorRampV2* ramp );
00093
00095 static QgsFeatureRendererV2* create( QDomElement& element );
00096
00098 virtual QDomElement save( QDomDocument& doc );
00099
00101 virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
00102
00105 virtual QgsLegendSymbolList legendSymbolItems();
00106
00107 QgsSymbolV2* sourceSymbol();
00108 void setSourceSymbol( QgsSymbolV2* sym );
00109
00110 QgsVectorColorRampV2* sourceColorRamp();
00111 void setSourceColorRamp( QgsVectorColorRampV2* ramp );
00112
00114 void setRotationField( QString fieldName ) { mRotationField = fieldName; }
00116 QString rotationField() const { return mRotationField; }
00117
00119 void setSizeScaleField( QString fieldName ) { mSizeScaleField = fieldName; }
00121 QString sizeScaleField() const { return mSizeScaleField; }
00122
00123 protected:
00124 QString mAttrName;
00125 QgsRangeList mRanges;
00126 Mode mMode;
00127 QgsSymbolV2* mSourceSymbol;
00128 QgsVectorColorRampV2* mSourceColorRamp;
00129 QString mRotationField;
00130 QString mSizeScaleField;
00131
00133 int mAttrNum;
00134 int mRotationFieldIdx, mSizeScaleFieldIdx;
00135
00137 #if QT_VERSION < 0x40600
00138 QMap<QgsSymbolV2*, QgsSymbolV2*> mTempSymbols;
00139 #else
00140 QHash<QgsSymbolV2*, QgsSymbolV2*> mTempSymbols;
00141 #endif
00142
00143 QgsSymbolV2* symbolForValue( double value );
00144 };
00145
00146 #endif // QGSGRADUATEDSYMBOLRENDERERV2_H