QGIS/src/core/qgsfieldformatter.h
2017-04-03 13:18:35 +10:00

98 lines
3.7 KiB
C++

/***************************************************************************
qgsfieldformatter.h - QgsFieldFormatter
---------------------
begin : 2.12.2016
copyright : (C) 2016 by Matthias Kuhn
email : matthias@opengis.ch
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSFIELDKIT_H
#define QGSFIELDKIT_H
#include <QString>
#include <QVariant>
#include "qgis_core.h"
class QgsVectorLayer;
/**
* \ingroup core
* A field formatter helps to handle and display values for a field.
*
* It allows for using a shared configuration with the editor widgets
* for representation of attribute values.
* Field kits normally have one single instance which is managed by the
* QgsFieldFormatterRegistry. Custom field formatters should be registered there and
* field formatters for use within code should normally be obtained from there.
*
* This is an abstract base class and will always need to be subclassed.
*
* \since QGIS 3.0
*/
class CORE_EXPORT QgsFieldFormatter
{
public:
QgsFieldFormatter();
virtual ~QgsFieldFormatter() = default;
/**
* Return a unique id for this field formatter.
* This id will later be used to identify this field formatter in the registry with QgsFieldFormatterRegistry::fieldFormatter().
*
* This id matches the id of a QgsEditorWidgetFactory.
*/
virtual QString id() const = 0;
/**
* Create a pretty String representation of the value.
*
* \returns By default the string representation of the provided value as implied by the field definition is returned.
*
* \since QGIS 3.0
*/
virtual QString representValue( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value ) const;
/**
* If the default sort order should be overwritten for this widget, you can transform the value in here.
*
* \returns an unmodified value by default.
*
* \since QGIS 3.0
*/
virtual QVariant sortValue( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value ) const;
/**
* Return the alignment for a particular field. By default this will consider the field type but can be overwritten if mapped
* values are represented.
*
* \since QGIS 3.0
*/
virtual Qt::AlignmentFlag alignmentFlag( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config ) const;
/**
* Create a cache for a given field.
*
* This will be used in situations where a field is being represented various times in a loop. And will be passed
* to other methods on QgsFieldKit and QgsEditorWidgetWrapper.
*
* For example, the attribute table will create a cache once for each field and then use this
* cache for representation. The QgsValueRelationFieldFormatter and QgsValueRelationEditorWidget
* implement this functionality to create a lookuptable once (a QVariantMap / dict) and are
* make use of a cache if present.
*
* \since QGIS 3.0
*/
virtual QVariant createCache( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config ) const;
};
#endif // QGSFIELDKIT_H