QGIS API Documentation  3.2.0-Bonn (bc43194)
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 
19 #include "qgsrangefieldformatter.h"
20 
21 #include "qgssettings.h"
22 #include "qgsfield.h"
23 #include "qgsvectorlayer.h"
24 
25 
27 {
28  return QStringLiteral( "Range" );
29 }
30 
31 QString QgsRangeFieldFormatter::representValue( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value ) const
32 {
33  Q_UNUSED( cache )
34  Q_UNUSED( config )
35 
36  if ( value.isNull() )
37  {
39  }
40 
41  QString result;
42 
43  const QgsField field = layer->fields().at( fieldIndex );
44 
45  if ( field.type() == QVariant::Double &&
46  config.contains( QStringLiteral( "Precision" ) ) &&
47  value.isValid( ) )
48  {
49  bool ok;
50  double val( value.toDouble( &ok ) );
51  if ( ok )
52  {
53  int precision( config[ QStringLiteral( "Precision" ) ].toInt( &ok ) );
54  if ( ok )
55  {
56  // TODO: make the format configurable!
57  result = QLocale().toString( val, 'f', precision );
58  }
59  }
60  }
61  else if ( ( field.type() == QVariant::Int ) &&
62  value.isValid( ) )
63  {
64  bool ok;
65  double val( value.toInt( &ok ) );
66  if ( ok )
67  {
68  result = QLocale().toString( val, 'f', 0 );
69  }
70  }
71  else if ( ( field.type() == QVariant::LongLong ) &&
72  value.isValid( ) )
73  {
74  bool ok;
75  double val( value.toLongLong( &ok ) );
76  if ( ok )
77  {
78  result = QLocale().toString( val, 'f', 0 );
79  }
80  }
81  else
82  {
83  result = value.toString();
84  }
85  return result;
86 }
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
Definition: qgsfields.cpp:145
QgsFields fields() const override
Returns the list of fields of this layer.
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:48
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.
Represents a vector layer which manages a vector based data sets.
QVariant::Type type
Definition: qgsfield.h:55
QString id() const override
Returns a unique id for this field formatter.