QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
qgsnumericformat.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsnumericformat.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 QGSNUMERICFORMAT_H
16 #define QGSNUMERICFORMAT_H
17 
18 #include "qgis_core.h"
19 #include "qgis_sip.h"
20 
21 #include <QString>
22 #include <QVariantMap>
23 #include <QDomDocument>
24 
25 
27 
34 class CORE_EXPORT QgsNumericFormatContext
35 {
36  Q_GADGET
37 
38  public:
39 
46 
47 
53  QChar thousandsSeparator() const
54  {
55  return mThousandsSep;
56  }
57 
63  void setThousandsSeparator( const QChar &separator )
64  {
65  mThousandsSep = separator;
66  }
67 
73  QChar decimalSeparator() const
74  {
75  return mDecimalSep;
76  }
77 
83  void setDecimalSeparator( const QChar &separator )
84  {
85  mDecimalSep = separator;
86  }
87 
93  QChar percent() const
94  {
95  return mPercent;
96  }
97 
103  void setPercent( const QChar &character )
104  {
105  mPercent = character;
106  }
107 
113  QChar zeroDigit() const
114  {
115  return mZeroDigit;
116  }
117 
123  void setZeroDigit( const QChar &character )
124  {
125  mZeroDigit = character;
126  }
127 
133  QChar negativeSign() const
134  {
135  return mNegativeSign;
136  }
137 
143  void setNegativeSign( const QChar &character )
144  {
145  mNegativeSign = character;
146  }
147 
153  QChar positiveSign() const
154  {
155  return mPositiveSign;
156  }
157 
163  void setPositiveSign( const QChar &character )
164  {
165  mPositiveSign = character;
166  }
167 
173  QChar exponential() const
174  {
175  return mExponential;
176  }
177 
183  void setExponential( const QChar &character )
184  {
185  mExponential = character;
186  }
187 
193  enum class Interpretation
194  {
195  Generic,
196  Latitude,
197  Longitude,
198  };
199  Q_ENUM( Interpretation )
200 
201 
208  Interpretation interpretation() const
209  {
210  return mInterpretation;
211  }
212 
220  void setInterpretation( Interpretation interpretation )
221  {
222  mInterpretation = interpretation;
223  }
224 
225  private:
226  QChar mThousandsSep;
227  QChar mDecimalSep;
228  QChar mPercent;
229  QChar mZeroDigit;
230  QChar mNegativeSign;
231  QChar mPositiveSign;
232  QChar mExponential;
233 
234  Interpretation mInterpretation = Interpretation::Generic;
235 };
236 
237 #ifdef SIP_RUN
238 % ModuleHeaderCode
239 #include <qgsbasicnumericformat.h>
240 #include <qgsbearingnumericformat.h>
246 % End
247 #endif
248 
259 class CORE_EXPORT QgsNumericFormat
260 {
261 
262 #ifdef SIP_RUN
264  if ( dynamic_cast< QgsBearingNumericFormat * >( sipCpp ) )
265  sipType = sipType_QgsBearingNumericFormat;
266  else if ( dynamic_cast< QgsGeographicCoordinateNumericFormat * >( sipCpp ) )
267  sipType = sipType_QgsGeographicCoordinateNumericFormat;
268  else if ( dynamic_cast< QgsFallbackNumericFormat * >( sipCpp ) )
269  sipType = sipType_QgsFallbackNumericFormat;
270  else if ( dynamic_cast< QgsPercentageNumericFormat * >( sipCpp ) )
271  sipType = sipType_QgsPercentageNumericFormat;
272  else if ( dynamic_cast< QgsScientificNumericFormat * >( sipCpp ) )
273  sipType = sipType_QgsScientificNumericFormat;
274  else if ( dynamic_cast< QgsCurrencyNumericFormat * >( sipCpp ) )
275  sipType = sipType_QgsCurrencyNumericFormat;
276  else if ( dynamic_cast< QgsBasicNumericFormat * >( sipCpp ) )
277  sipType = sipType_QgsBasicNumericFormat;
278  else if ( dynamic_cast< QgsFractionNumericFormat * >( sipCpp ) )
279  sipType = sipType_QgsFractionNumericFormat;
280  else
281  sipType = NULL;
282  SIP_END
283 #endif
284 
285  public:
286 
290  QgsNumericFormat() = default;
291 
292  virtual ~QgsNumericFormat() = default;
293 
299  virtual QString id() const = 0;
300 
304  virtual QString visibleName() const = 0;
305 
311  virtual int sortKey();
312 
316  virtual double suggestSampleValue() const;
317 
321  virtual QString formatDouble( double value, const QgsNumericFormatContext &context ) const = 0;
322 
328  virtual QgsNumericFormat *clone() const = 0 SIP_FACTORY;
329 
335  virtual QgsNumericFormat *create( const QVariantMap &configuration, const QgsReadWriteContext &context ) const = 0 SIP_FACTORY;
336 
341  virtual QVariantMap configuration( const QgsReadWriteContext &context ) const = 0;
342 
347  void writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const;
348 
349  bool operator==( const QgsNumericFormat &other ) const;
350  bool operator!=( const QgsNumericFormat &other ) const;
351 
352  protected:
353 
354  static constexpr int DEFAULT_SORT_KEY = 100;
355 };
356 
357 #endif // QGSNUMERICFORMAT_H
A numeric formatter which returns a simple text representation of a value.
A numeric formatter which returns a text representation of a direction/bearing.
A numeric formatter which returns a text representation of a currency value.
A basic numeric formatter which returns a simple text representation of a value.
A numeric formatter which returns a vulgar fractional representation of a decimal value (e....
A numeric formatter which returns a text representation of a geographic coordinate (latitude or longi...
A context for numeric formats.
void setThousandsSeparator(const QChar &separator)
Sets the thousands separator character.
QChar negativeSign() const
Returns the negative sign character.
QChar thousandsSeparator() const
Returns the thousands separator character.
void setPercent(const QChar &character)
Sets the percent character.
void setPositiveSign(const QChar &character)
Sets the positive sign character.
void setExponential(const QChar &character)
Sets the exponential character.
void setNegativeSign(const QChar &character)
Sets the negative sign character.
QChar zeroDigit() const
Returns the zero digit character.
QChar exponential() const
Returns the exponential character.
void setInterpretation(Interpretation interpretation)
Sets the interpretation of the numbers being converted.
QChar decimalSeparator() const
Returns the decimal separator character.
void setDecimalSeparator(const QChar &separator)
Returns the decimal separator character.
void setZeroDigit(const QChar &character)
Returns the zero digit character.
QChar positiveSign() const
Returns the positive sign character.
QChar percent() const
Returns the percent character.
Interpretation
Interpretation of numeric values.
A numeric formatter allows for formatting a numeric value for display, using a variety of different f...
virtual QString formatDouble(double value, const QgsNumericFormatContext &context) const =0
Returns a formatted string representation of a numeric double value.
virtual QgsNumericFormat * create(const QVariantMap &configuration, const QgsReadWriteContext &context) const =0
Creates a new copy of the format, using the supplied configuration.
QgsNumericFormat()=default
Default constructor.
virtual QString visibleName() const =0
Returns the translated, user-visible name for this format.
virtual QString id() const =0
Returns a unique id for this numeric format.
virtual QVariantMap configuration(const QgsReadWriteContext &context) const =0
Returns the current configuration of the formatter.
virtual QgsNumericFormat * clone() const =0
Clones the format, returning a new object.
virtual ~QgsNumericFormat()=default
A numeric formatter which returns a text representation of a percentage value.
The class is used as a container of context for various read/write operations on other objects.
A numeric formatter which returns a scientific notation representation of a value.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:191
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_END
Definition: qgis_sip.h:208
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)