QGIS API Documentation  master-3f58142
src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgsgraduatedsymbolrendererv2.h
00003     ---------------------
00004     begin                : November 2009
00005     copyright            : (C) 2009 by Martin Dobias
00006     email                : wonder dot sk at gmail dot com
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 #ifndef QGSGRADUATEDSYMBOLRENDERERV2_H
00016 #define QGSGRADUATEDSYMBOLRENDERERV2_H
00017 
00018 #include "qgssymbolv2.h"
00019 #include "qgsrendererv2.h"
00020 
00021 class CORE_EXPORT QgsRendererRangeV2
00022 {
00023   public:
00024     QgsRendererRangeV2();
00025     QgsRendererRangeV2( double lowerValue, double upperValue, QgsSymbolV2* symbol, QString label );
00026     QgsRendererRangeV2( const QgsRendererRangeV2& range );
00027 
00028     ~QgsRendererRangeV2();
00029 
00030     QgsRendererRangeV2& operator=( const QgsRendererRangeV2& range );
00031 
00032     double lowerValue() const;
00033     double upperValue() const;
00034 
00035     QgsSymbolV2* symbol() const;
00036     QString label() const;
00037 
00038     void setSymbol( QgsSymbolV2* s );
00039     void setLabel( QString label );
00040     void setLowerValue( double lowerValue );
00041     void setUpperValue( double upperValue );
00042 
00043     // debugging
00044     QString dump();
00045 
00046     void toSld( QDomDocument& doc, QDomElement &element, QgsStringMap props ) const;
00047 
00048   protected:
00049     double mLowerValue, mUpperValue;
00050     QgsSymbolV2* mSymbol;
00051     QString mLabel;
00052 };
00053 
00054 typedef QList<QgsRendererRangeV2> QgsRangeList;
00055 
00056 class QgsVectorLayer;
00057 class QgsVectorColorRampV2;
00058 
00059 class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
00060 {
00061   public:
00062     QgsGraduatedSymbolRendererV2( QString attrName = QString(), QgsRangeList ranges = QgsRangeList() );
00063 
00064     virtual ~QgsGraduatedSymbolRendererV2();
00065 
00066     virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
00067 
00068     virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer );
00069 
00070     virtual void stopRender( QgsRenderContext& context );
00071 
00072     virtual QList<QString> usedAttributes();
00073 
00074     virtual QString dump();
00075 
00076     virtual QgsFeatureRendererV2* clone();
00077 
00078     virtual void toSld( QDomDocument& doc, QDomElement &element ) const;
00079 
00082     virtual int capabilities() { return SymbolLevels | RotationField | Filter; }
00083 
00084     virtual QgsSymbolV2List symbols();
00085 
00086     QString classAttribute() const { return mAttrName; }
00087     void setClassAttribute( QString attr ) { mAttrName = attr; }
00088 
00089     const QgsRangeList& ranges() { return mRanges; }
00090 
00091     bool updateRangeSymbol( int rangeIndex, QgsSymbolV2* symbol );
00092     bool updateRangeLabel( int rangeIndex, QString label );
00093     bool updateRangeUpperValue( int rangeIndex, double value );
00094     bool updateRangeLowerValue( int rangeIndex, double value );
00095 
00096     void addClass( QgsSymbolV2* symbol );
00097     void deleteClass( int idx );
00098     void deleteAllClasses();
00099 
00101     void moveClass( int from, int to );
00102 
00103     void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
00104     void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
00105 
00106     enum Mode
00107     {
00108       EqualInterval,
00109       Quantile,
00110       Jenks,
00111       StdDev,
00112       Pretty,
00113       Custom
00114     };
00115 
00116     Mode mode() const { return mMode; }
00117     void setMode( Mode mode ) { mMode = mode; }
00118 
00119     static QgsGraduatedSymbolRendererV2* createRenderer(
00120       QgsVectorLayer* vlayer,
00121       QString attrName,
00122       int classes,
00123       Mode mode,
00124       QgsSymbolV2* symbol,
00125       QgsVectorColorRampV2* ramp );
00126 
00128     static QgsFeatureRendererV2* create( QDomElement& element );
00129 
00131     virtual QDomElement save( QDomDocument& doc );
00132 
00134     virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
00135 
00139     virtual QgsLegendSymbolList legendSymbolItems();
00140 
00141     QgsSymbolV2* sourceSymbol();
00142     void setSourceSymbol( QgsSymbolV2* sym );
00143 
00144     QgsVectorColorRampV2* sourceColorRamp();
00145     void setSourceColorRamp( QgsVectorColorRampV2* ramp );
00146 
00150     void updateColorRamp( QgsVectorColorRampV2* ramp );
00151 
00153     void updateSymbols( QgsSymbolV2* sym );
00154 
00156     void setRotationField( QString fieldName ) { mRotationField = fieldName; }
00158     QString rotationField() const { return mRotationField; }
00159 
00161     void setSizeScaleField( QString fieldName ) { mSizeScaleField = fieldName; }
00163     QString sizeScaleField() const { return mSizeScaleField; }
00164 
00166     void setScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
00168     QgsSymbolV2::ScaleMethod scaleMethod() const { return mScaleMethod; }
00169 
00170 
00171   protected:
00172     QString mAttrName;
00173     QgsRangeList mRanges;
00174     Mode mMode;
00175     QgsSymbolV2* mSourceSymbol;
00176     QgsVectorColorRampV2* mSourceColorRamp;
00177     QString mRotationField;
00178     QString mSizeScaleField;
00179     QgsSymbolV2::ScaleMethod mScaleMethod;
00180 
00182     int mAttrNum;
00183     int mRotationFieldIdx, mSizeScaleFieldIdx;
00184 
00186 #if QT_VERSION < 0x40600
00187     QMap<QgsSymbolV2*, QgsSymbolV2*> mTempSymbols;
00188 #else
00189     QHash<QgsSymbolV2*, QgsSymbolV2*> mTempSymbols;
00190 #endif
00191 
00192     QgsSymbolV2* symbolForValue( double value );
00193 };
00194 
00195 #endif // QGSGRADUATEDSYMBOLRENDERERV2_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines