Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsrendererrange.h 3 : : --------------------- 4 : : begin : September 2019 5 : : copyright : (C) 2019 by Denis Rouzaud 6 : : email : denis@opengis.ch 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 : : 16 : : #ifndef QGSRENDERERRANGE_H 17 : : #define QGSRENDERERRANGE_H 18 : : 19 : : #include <QRegExp> 20 : : 21 : : #include "qgis_core.h" 22 : : #include "qgis_sip.h" 23 : : #include "qgssymbollayerutils.h" 24 : : 25 : : class QDomDocument; 26 : : class QDomElement; 27 : : 28 : : class QgsSymbol; 29 : : class QgsClassificationRange; 30 : : 31 : : 32 : : /** 33 : : * \ingroup core 34 : : * \class QgsRendererRange 35 : : */ 36 : 0 : class CORE_EXPORT QgsRendererRange 37 : : { 38 : : public: 39 : : 40 : : /** 41 : : * Constructor for QgsRendererRange. 42 : : */ 43 : 0 : QgsRendererRange() = default; 44 : : 45 : : /** 46 : : * Creates a renderer symbol range 47 : : * \param range The classification range 48 : : * \param symbol The symbol for this renderer range 49 : : * \param render If TRUE, it will be renderered 50 : : */ 51 : : QgsRendererRange( const QgsClassificationRange &range, QgsSymbol *symbol SIP_TRANSFER, bool render = true ); 52 : : QgsRendererRange( double lowerValue, double upperValue, QgsSymbol *symbol SIP_TRANSFER, const QString &label, bool render = true ); 53 : : QgsRendererRange( const QgsRendererRange &range ); 54 : : 55 : : // default dtor is OK 56 : : QgsRendererRange &operator=( QgsRendererRange range ); 57 : : 58 : : bool operator<( const QgsRendererRange &other ) const; 59 : : 60 : : double lowerValue() const; 61 : : double upperValue() const; 62 : : 63 : : QgsSymbol *symbol() const; 64 : : QString label() const; 65 : : 66 : : void setSymbol( QgsSymbol *s SIP_TRANSFER ); 67 : : void setLabel( const QString &label ); 68 : : void setLowerValue( double lowerValue ); 69 : : void setUpperValue( double upperValue ); 70 : : 71 : : // \since QGIS 2.5 72 : : bool renderState() const; 73 : : void setRenderState( bool render ); 74 : : 75 : : // debugging 76 : : QString dump() const; 77 : : 78 : : /** 79 : : * Creates a DOM element representing the range in SLD format. 80 : : * \param doc DOM document 81 : : * \param element destination DOM element 82 : : * \param props graduated renderer properties 83 : : * \param firstRange set to TRUE if the range is the first range, where the lower value uses a <= test 84 : : * rather than a < test. 85 : : */ 86 : : void toSld( QDomDocument &doc, QDomElement &element, QVariantMap props, bool firstRange = false ) const; 87 : : 88 : : protected: 89 : 0 : double mLowerValue = 0, mUpperValue = 0; 90 : : std::unique_ptr<QgsSymbol> mSymbol; 91 : : QString mLabel; 92 : 0 : bool mRender = true; 93 : : 94 : : // for cpy+swap idiom 95 : : void swap( QgsRendererRange &other ); 96 : : }; 97 : : 98 : : typedef QList<QgsRendererRange> QgsRangeList; 99 : : 100 : : 101 : : /** 102 : : * \ingroup core 103 : : * \class QgsRendererRangeLabelFormat 104 : : * \since QGIS 2.6 105 : : * \deprecated since QGIS 3.10, use QgsClassificationMethod instead 106 : : */ 107 : : class CORE_EXPORT Q_DECL_DEPRECATED QgsRendererRangeLabelFormat SIP_DEPRECATED 108 : : { 109 : : public: 110 : : QgsRendererRangeLabelFormat(); 111 : : QgsRendererRangeLabelFormat( const QString &format, int precision = 4, bool trimTrailingZeroes = false ); 112 : : 113 : : bool operator==( const QgsRendererRangeLabelFormat &other ) const; 114 : : bool operator!=( const QgsRendererRangeLabelFormat &other ) const; 115 : : 116 : 0 : QString format() const { return mFormat; } 117 : 0 : void setFormat( const QString &format ) { mFormat = format; } 118 : : 119 : 0 : int precision() const { return mPrecision; } 120 : : void setPrecision( int precision ); 121 : : 122 : 0 : bool trimTrailingZeroes() const { return mTrimTrailingZeroes; } 123 : 0 : void setTrimTrailingZeroes( bool trimTrailingZeroes ) { mTrimTrailingZeroes = trimTrailingZeroes; } 124 : : 125 : : //! \note labelForLowerUpper in Python bindings 126 : : QString labelForRange( double lower, double upper ) const SIP_PYNAME( labelForLowerUpper ); 127 : : QString labelForRange( const QgsRendererRange &range ) const; 128 : : QString formatNumber( double value ) const; 129 : : 130 : : void setFromDomElement( QDomElement &element ); 131 : : void saveToDomElement( QDomElement &element ); 132 : : 133 : : static const int MAX_PRECISION; 134 : : static const int MIN_PRECISION; 135 : : 136 : : protected: 137 : : QString mFormat; 138 : : int mPrecision = 4; 139 : : bool mTrimTrailingZeroes = false; 140 : : // values used to manage number formatting - precision and trailing zeroes 141 : : double mNumberScale = 1.0; 142 : : QString mNumberSuffix; 143 : : QRegExp mReTrailingZeroes; 144 : : QRegExp mReNegativeZero; 145 : : }; 146 : : 147 : : 148 : : #endif // QGSRENDERERRANGE_H