QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsrangefieldformatter.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsrangefieldformatter.cpp - QgsRangeFieldFormatter
3
4 ---------------------
5 begin : 01/02/2018
6 copyright : (C) 2018 by Alessandro Pasotti
7 email : elpaso at itopen dot it
8 ***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17#include <QLocale>
18
20
21#include "qgssettings.h"
22#include "qgsfield.h"
23#include "qgsvectorlayer.h"
24#include "qgsapplication.h"
25#include "qgsvariantutils.h"
26
28{
29 return QStringLiteral( "Range" );
30}
31
32QString QgsRangeFieldFormatter::representValue( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value ) const
33{
34 Q_UNUSED( cache )
35 Q_UNUSED( config )
36
37 if ( QgsVariantUtils::isNull( value ) )
38 {
40 }
41
42 QString result;
43
44 const QgsField field = layer->fields().at( fieldIndex );
45
46 if ( field.type() == QVariant::Double &&
47 config.contains( QStringLiteral( "Precision" ) ) &&
48 value.isValid( ) )
49 {
50 bool ok;
51 const double val( value.toDouble( &ok ) );
52 if ( ok )
53 {
54 const int precision( config[ QStringLiteral( "Precision" ) ].toInt( &ok ) );
55 if ( ok )
56 {
57 // TODO: make the format configurable!
58 result = QLocale().toString( val, 'f', precision );
59 }
60 }
61 }
62 else if ( ( field.type() == QVariant::Int ) &&
63 value.isValid( ) )
64 {
65 bool ok;
66 const double val( value.toInt( &ok ) );
67 if ( ok )
68 {
69 result = QLocale().toString( val, 'f', 0 );
70 }
71 }
72 else if ( ( field.type() == QVariant::LongLong ) &&
73 value.isValid( ) )
74 {
75 bool ok;
76 const double val( value.toLongLong( &ok ) );
77 if ( ok )
78 {
79 result = QLocale().toString( val, 'f', 0 );
80 }
81 }
82 else
83 {
84 result = value.toString();
85 }
86 return result;
87}
static QString nullRepresentation()
This string is used to represent the value NULL throughout QGIS.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:53
QVariant::Type type
Definition: qgsfield.h:60
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
Definition: qgsfields.cpp:163
QString id() const override
Returns a unique id for this field formatter.
QString representValue(QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value) const override
Create a pretty String representation of the value.
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.
Represents a vector layer which manages a vector based data sets.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
int precision