QGIS API Documentation 3.43.0-Master (3ee7834ace6)
qgsfieldmappingmodel.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfieldmappingmodel.h - QgsFieldMappingModel
3
4 ---------------------
5 begin : 17.3.2020
6 copyright : (C) 2020 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#ifndef QGSFIELDMAPPINGMODEL_H
17#define QGSFIELDMAPPINGMODEL_H
18
19#include <QAbstractTableModel>
20#include <QStyledItemDelegate>
21
22#include "qgsfields.h"
24#include "qgsfieldconstraints.h"
25#include "qgsproperty.h"
27#include "qgis_gui.h"
28
29
40class GUI_EXPORT QgsFieldMappingModel : public QAbstractTableModel
41{
42 Q_OBJECT
43
44 public:
48 enum class ColumnDataIndex : int
49 {
50 SourceExpression,
51 DestinationName,
52 DestinationType,
53 DestinationLength,
54 DestinationPrecision,
55 DestinationConstraints,
56 DestinationAlias,
57 DestinationComment,
58 };
59
61
65 struct Field
66 {
68 QString originalName;
72 QString expression;
73 };
74
82 QgsFieldMappingModel( const QgsFields &sourceFields = QgsFields(), const QgsFields &destinationFields = QgsFields(), const QMap<QString, QString> &expressions = QMap<QString, QString>(), QObject *parent = nullptr );
83
93 void setNativeTypes( const QList< QgsVectorDataProvider::NativeType > &nativeTypes );
94
96 bool destinationEditable() const;
97
99 void setDestinationEditable( bool editable );
100
105 Q_DECL_DEPRECATED static const QMap<QMetaType::Type, QString> dataTypes();
106
111 static const QList<QgsVectorDataProvider::NativeType> supportedDataTypes();
112
114 QgsFields sourceFields() const;
115
117 QList<QgsFieldMappingModel::Field> mapping() const;
118
125 QMap<QString, QgsProperty> fieldPropertyMap() const;
126
132 void setFieldPropertyMap( const QMap<QString, QgsProperty> &map );
133
135 void appendField( const QgsField &field, const QString &expression = QString() );
136
138 bool removeField( const QModelIndex &index );
139
141 bool moveUp( const QModelIndex &index );
142
144 bool moveDown( const QModelIndex &index );
145
147 void setSourceFields( const QgsFields &sourceFields );
148
150 QgsExpressionContextGenerator *contextGenerator() const;
151
156 void setBaseExpressionContextGenerator( const QgsExpressionContextGenerator *generator );
157
163 void setDestinationFields( const QgsFields &destinationFields, const QMap<QString, QString> &expressions = QMap<QString, QString>() );
164
165
166 // QAbstractItemModel interface
167 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
168 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
169 QVariant data( const QModelIndex &index, int role ) const override;
170 QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
171 Qt::ItemFlags flags( const QModelIndex &index ) const override;
172 bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
173
174 private:
175 class ExpressionContextGenerator : public QgsExpressionContextGenerator
176 {
177 public:
178 ExpressionContextGenerator( const QgsFields &sourceFields );
179
180 // QgsExpressionContextGenerator interface
181 QgsExpressionContext createExpressionContext() const override;
182 void setBaseExpressionContextGenerator( const QgsExpressionContextGenerator *generator );
183 void setSourceFields( const QgsFields &fields );
184
185 private:
186 const QgsExpressionContextGenerator *mBaseGenerator = nullptr;
187
188 QgsFields mSourceFields;
189 };
190
191
192 QgsFieldConstraints::Constraints fieldConstraints( const QgsField &field ) const;
193
198 QString qgsFieldToTypeName( const QgsField &field ) const;
199
204 void setFieldTypeFromName( QgsField &field, const QString &name ) const;
205
206 bool moveUpOrDown( const QModelIndex &index, bool up = true );
207
217 QString findExpressionForDestinationField( const QgsFieldMappingModel::Field &field, QStringList &excludedFieldNames );
218
219 QList< QgsVectorDataProvider::NativeType > mNativeTypes;
220
221 QList<Field> mMapping;
222 bool mDestinationEditable = false;
223 QgsFields mSourceFields;
224 std::unique_ptr<ExpressionContextGenerator> mExpressionContextGenerator;
225
227};
228
229
230#endif // QGSFIELDMAPPINGMODEL_H
The QgsAggregateMappingModel holds mapping information for defining sets of aggregates of fields from...
Abstract interface for generating an expression context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QFlags< Constraint > Constraints
The QgsFieldMappingModel holds mapping information for mapping from one set of QgsFields to another,...
ColumnDataIndex
The ColumnDataIndex enum represents the column index for the view.
Q_ENUM(ColumnDataIndex)
Encapsulate a field in an attribute table or data source.
Definition qgsfield.h:53
Container of fields for a vector layer.
Definition qgsfields.h:46
The Field struct holds information about a mapped field.
QgsField field
The field in its current status (it might have been renamed)
QString expression
The expression for the mapped field from the source fields.
QString originalName
The original name of the field.