QGIS API Documentation
4.3.0-Master (1c7cf7431bd)
Toggle main menu visibility
Loading...
Searching...
No Matches
src
core
fieldformatter
qgsvaluemapfieldformatter.cpp
Go to the documentation of this file.
1
/***************************************************************************
2
qgsvaluemapfieldformatter.cpp - QgsValueMapFieldFormatter
3
4
---------------------
5
begin : 3.12.2016
6
copyright : (C) 2016 by Matthias Kuhn
7
email : matthias@opengis.ch
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
#include "
qgsvaluemapfieldformatter.h
"
17
18
#include "
qgsvariantutils.h
"
19
#include "
qgsvectorlayer.h
"
20
21
#include <QString>
22
23
using namespace
Qt::StringLiterals;
24
25
const
QString
QgsValueMapFieldFormatter::NULL_VALUE
= u
"{2839923C-8B7D-419E-B84B-CA2FE9B80EC7}"
_s;
26
27
QgsValueMapFieldFormatter::QgsValueMapFieldFormatter
()
28
{
29
setFlags
(
flags
() | QgsFieldFormatter::CanProvideAvailableValues );
30
}
31
32
QString
QgsValueMapFieldFormatter::id
()
const
33
{
34
return
u
"ValueMap"
_s;
35
}
36
37
QString
QgsValueMapFieldFormatter::representValue
(
QgsVectorLayer
*layer,
int
fieldIndex,
const
QVariantMap &config,
const
QVariant &cache,
const
QVariant &value )
const
38
{
39
Q_UNUSED( cache )
40
41
QString valueInternalText;
42
if
(
QgsVariantUtils::isNull
( value ) )
43
valueInternalText =
NULL_VALUE
;
44
else
45
valueInternalText = value.toString();
46
47
const
QVariant v = config.value( u
"map"
_s );
48
const
QVariantList list = v.toList();
49
if
( !list.empty() )
50
{
51
for
(
const
QVariant &item : list )
52
{
53
const
QVariantMap map = item.toMap();
54
// no built-in Qt way to check if a map contains a value, so iterate through each value
55
for
(
auto
it = map.constBegin(); it != map.constEnd(); ++it )
56
{
57
if
( it.value().toString() == valueInternalText )
58
return
it.key();
59
}
60
}
61
return
u
"(%1)"
_s.arg( layer->
fields
().
at
( fieldIndex ).
displayString
( value ) );
62
}
63
else
64
{
65
// old style config
66
const
QVariantMap map = v.toMap();
67
return
map.key( valueInternalText, QVariant( u
"(%1)"
_s.arg( layer->
fields
().
at
( fieldIndex ).
displayString
( value ) ) ).toString() );
68
}
69
}
70
71
QVariant
QgsValueMapFieldFormatter::sortValue
(
QgsVectorLayer
*layer,
int
fieldIndex,
const
QVariantMap &config,
const
QVariant &cache,
const
QVariant &value )
const
72
{
73
return
representValue
( layer, fieldIndex, config, cache, value );
74
}
75
76
QVariantList
QgsValueMapFieldFormatter::availableValues
(
const
QVariantMap &config,
int
countLimit,
const
QgsFieldFormatterContext
&context )
const
77
{
78
Q_UNUSED( context )
79
80
QVariantList values;
81
const
QList<QVariant> valueList = config.value( u
"map"
_s ).toList();
82
for
(
const
QVariant &item : valueList )
83
{
84
values.append( item.toMap().constBegin().value() );
85
if
( values.count() == countLimit )
86
break
;
87
}
88
89
return
values;
90
}
QgsFieldFormatterContext
A context for field formatter containing information like the project.
Definition
qgsfieldformatter.h:34
QgsFieldFormatter::flags
Flags flags() const
Returns the flags.
Definition
qgsfieldformatter.h:168
QgsFieldFormatter::setFlags
void setFlags(const Flags &flags)
Sets the flags.
Definition
qgsfieldformatter.cpp:102
QgsField::displayString
QString displayString(const QVariant &v) const
Formats string for display.
Definition
qgsfield.cpp:324
QgsFields::at
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
Definition
qgsfields.cpp:209
QgsValueMapFieldFormatter::id
QString id() const override
Returns a unique id for this field formatter.
Definition
qgsvaluemapfieldformatter.cpp:32
QgsValueMapFieldFormatter::QgsValueMapFieldFormatter
QgsValueMapFieldFormatter()
Default constructor of field formatter for a value map field.
Definition
qgsvaluemapfieldformatter.cpp:27
QgsValueMapFieldFormatter::sortValue
QVariant sortValue(QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value) const override
If the default sort order should be overwritten for this widget, you can transform the value in here.
Definition
qgsvaluemapfieldformatter.cpp:71
QgsValueMapFieldFormatter::representValue
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.
Definition
qgsvaluemapfieldformatter.cpp:37
QgsValueMapFieldFormatter::NULL_VALUE
static const QString NULL_VALUE
Will be saved in the configuration when a value is NULL.
Definition
qgsvaluemapfieldformatter.h:48
QgsValueMapFieldFormatter::availableValues
QVariantList availableValues(const QVariantMap &config, int countLimit, const QgsFieldFormatterContext &context) const override
Returns a list of the values that would be possible to select with this widget type On a RelationRefe...
Definition
qgsvaluemapfieldformatter.cpp:76
QgsVariantUtils::isNull
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.
Definition
qgsvariantutils.cpp:176
QgsVectorLayer
Represents a vector layer which manages a vector based dataset.
Definition
qgsvectorlayer.h:414
QgsVectorLayer::fields
QgsFields fields
Definition
qgsvectorlayer.h:422
qgsvaluemapfieldformatter.h
qgsvariantutils.h
qgsvectorlayer.h
Generated on
for QGIS API Documentation by
1.17.0