Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsbasicnumericformat.h 3 : : -------------------------- 4 : : begin : January 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson 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 QGSBASICNUMERICFORMAT_H 16 : : #define QGSBASICNUMERICFORMAT_H 17 : : 18 : : #include "qgis_core.h" 19 : : #include "qgis_sip.h" 20 : : #include "qgsnumericformat.h" 21 : : #include <sstream> 22 : : #include <iostream> 23 : : #include <memory> 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \brief A numeric formatter which returns a simple text representation of a value. 28 : : * 29 : : * \since QGIS 3.12 30 : : */ 31 : 41 : class CORE_EXPORT QgsBasicNumericFormat : public QgsNumericFormat 32 : : { 33 : : public: 34 : : 35 : : /** 36 : : * Sets rounding type and behavior of the numberDecimalPlaces() setting. 37 : : */ 38 : : enum RoundingType 39 : : { 40 : : DecimalPlaces, //!< Maximum number of decimal places 41 : : SignificantFigures, //!< Maximum number of significant figures 42 : : }; 43 : : 44 : : /** 45 : : * Default constructor 46 : : */ 47 : : QgsBasicNumericFormat(); 48 : : 49 : : QString id() const override; 50 : : QString visibleName() const override; 51 : : int sortKey() override; 52 : : QString formatDouble( double value, const QgsNumericFormatContext &context ) const override; 53 : : QgsNumericFormat *clone() const override SIP_FACTORY; 54 : : QgsNumericFormat *create( const QVariantMap &configuration, const QgsReadWriteContext &context ) const override SIP_FACTORY; 55 : : QVariantMap configuration( const QgsReadWriteContext &context ) const override; 56 : : 57 : : /** 58 : : * Returns the maximum number of decimal places to show. 59 : : * 60 : : * \see setNumberDecimalPlaces() 61 : : * \see showTrailingZeros() 62 : : */ 63 : : int numberDecimalPlaces() const; 64 : : 65 : : /** 66 : : * Sets the maximum number of decimal \a places to show. 67 : : * 68 : : * \see numberDecimalPlaces() 69 : : * \see setShowTrailingZeros() 70 : : */ 71 : : virtual void setNumberDecimalPlaces( int places ); 72 : : 73 : : /** 74 : : * Returns TRUE if the thousands grouping separator will be shown. 75 : : * \see setShowThousandsSeparator() 76 : : */ 77 : : bool showThousandsSeparator() const; 78 : : 79 : : /** 80 : : * Sets whether the thousands grouping separator will be shown. 81 : : * \see showThousandsSeparator() 82 : : */ 83 : : void setShowThousandsSeparator( bool show ); 84 : : 85 : : /** 86 : : * Returns TRUE if a leading plus sign will be shown for positive values. 87 : : * \see setShowPlusSign() 88 : : */ 89 : : bool showPlusSign() const; 90 : : 91 : : /** 92 : : * Sets whether a leading plus sign will be shown for positive values. 93 : : * \see showPlusSign() 94 : : */ 95 : : void setShowPlusSign( bool show ); 96 : : 97 : : /** 98 : : * Returns TRUE if trailing zeros will be shown (up to the specified 99 : : * numberDecimalPlaces()). 100 : : * 101 : : * \see setShowTrailingZeros() 102 : : * \see numberDecimalPlaces() 103 : : */ 104 : : bool showTrailingZeros() const; 105 : : 106 : : /** 107 : : * Sets whether trailing zeros will be shown (up to the specified 108 : : * numberDecimalPlaces()). 109 : : * 110 : : * \see showTrailingZeros() 111 : : * \see setNumberDecimalPlaces() 112 : : */ 113 : : void setShowTrailingZeros( bool show ); 114 : : 115 : : /** 116 : : * Returns the rounding type, which controls the behavior of the numberDecimalPlaces() setting. 117 : : * 118 : : * \see setRoundingType() 119 : : */ 120 : : RoundingType roundingType() const; 121 : : 122 : : /** 123 : : * Sets the rounding \a type, which controls the behavior of the numberDecimalPlaces() setting. 124 : : * 125 : : * \see roundingType() 126 : : */ 127 : : void setRoundingType( RoundingType type ); 128 : : 129 : : /** 130 : : * Returns any override for the thousands separator character. If an invalid QChar is returned, 131 : : * then the QGIS locale separator is used instead. 132 : : * 133 : : * \see setThousandsSeparator() 134 : : */ 135 : : QChar thousandsSeparator() const; 136 : : 137 : : /** 138 : : * Sets an override \a character for the thousands separator character. If an invalid QChar is set, 139 : : * then the QGIS locale separator is used instead. 140 : : * 141 : : * \see thousandsSeparator() 142 : : */ 143 : : void setThousandsSeparator( QChar character ); 144 : : 145 : : /** 146 : : * Returns any override for the decimal separator character. If an invalid QChar is returned, 147 : : * then the QGIS locale separator is used instead. 148 : : * 149 : : * \see setDecimalSeparator() 150 : : */ 151 : : QChar decimalSeparator() const; 152 : : 153 : : /** 154 : : * Sets an override \a character for the decimal separator character. If an invalid QChar is set, 155 : : * then the QGIS locale separator is used instead. 156 : : * 157 : : * \see decimalSeparator() 158 : : */ 159 : : void setDecimalSeparator( QChar character ); 160 : : 161 : : protected: 162 : : 163 : : /** 164 : : * Sets the format's \a configuration. 165 : : */ 166 : : virtual void setConfiguration( const QVariantMap &configuration, const QgsReadWriteContext &context ); 167 : : 168 : : bool mUseScientific = false; 169 : : 170 : : private: 171 : : 172 : : int mNumberDecimalPlaces = 6; 173 : : bool mShowThousandsSeparator = true; 174 : : bool mShowPlusSign = false; 175 : : bool mShowTrailingZeros = false; 176 : : 177 : : RoundingType mRoundingType = DecimalPlaces; 178 : : 179 : : QChar mThousandsSeparator; 180 : : QChar mDecimalSeparator; 181 : : }; 182 : : 183 : : #endif // QGSBASICNUMERICFORMAT_H