QGIS API Documentation 3.43.0-Master (32433f7016e)
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
42class GUI_EXPORT QgsFieldMappingModel : public QAbstractTableModel
43{
44 Q_OBJECT
45
46 public:
50 enum class ColumnDataIndex : int
51 {
52 SourceExpression,
53 DestinationName,
54 DestinationType,
55 DestinationLength,
56 DestinationPrecision,
57 DestinationConstraints,
58 DestinationAlias,
59 DestinationComment,
60 };
61
63
67 struct Field
68 {
70 QString originalName;
74 QString expression;
75 };
76
84 QgsFieldMappingModel( const QgsFields &sourceFields = QgsFields(), const QgsFields &destinationFields = QgsFields(), const QMap<QString, QString> &expressions = QMap<QString, QString>(), QObject *parent = nullptr );
85
95 void setNativeTypes( const QList< QgsVectorDataProvider::NativeType > &nativeTypes );
96
98 bool destinationEditable() const;
99
101 void setDestinationEditable( bool editable );
102
107 Q_DECL_DEPRECATED static const QMap<QMetaType::Type, QString> dataTypes();
108
113 static const QList<QgsVectorDataProvider::NativeType> supportedDataTypes();
114
116 QgsFields sourceFields() const;
117
119 QList<QgsFieldMappingModel::Field> mapping() const;
120
127 QMap<QString, QgsProperty> fieldPropertyMap() const;
128
134 void setFieldPropertyMap( const QMap<QString, QgsProperty> &map );
135
137 void appendField( const QgsField &field, const QString &expression = QString() );
138
140 bool removeField( const QModelIndex &index );
141
143 bool moveUp( const QModelIndex &index );
144
146 bool moveDown( const QModelIndex &index );
147
149 void setSourceFields( const QgsFields &sourceFields );
150
152 QgsExpressionContextGenerator *contextGenerator() const;
153
158 void setBaseExpressionContextGenerator( const QgsExpressionContextGenerator *generator );
159
165 void setDestinationFields( const QgsFields &destinationFields, const QMap<QString, QString> &expressions = QMap<QString, QString>() );
166
167
168 // QAbstractItemModel interface
169 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
170 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
171 QVariant data( const QModelIndex &index, int role ) const override;
172 QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
173 Qt::ItemFlags flags( const QModelIndex &index ) const override;
174 bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
175
176 private:
177 class ExpressionContextGenerator : public QgsExpressionContextGenerator
178 {
179 public:
180 ExpressionContextGenerator( const QgsFields &sourceFields );
181
182 // QgsExpressionContextGenerator interface
183 QgsExpressionContext createExpressionContext() const override;
184 void setBaseExpressionContextGenerator( const QgsExpressionContextGenerator *generator );
185 void setSourceFields( const QgsFields &fields );
186
187 private:
188 const QgsExpressionContextGenerator *mBaseGenerator = nullptr;
189
190 QgsFields mSourceFields;
191 };
192
193
194 QgsFieldConstraints::Constraints fieldConstraints( const QgsField &field ) const;
195
200 QString qgsFieldToTypeName( const QgsField &field ) const;
201
206 void setFieldTypeFromName( QgsField &field, const QString &name ) const;
207
208 bool moveUpOrDown( const QModelIndex &index, bool up = true );
209
219 QString findExpressionForDestinationField( const QgsFieldMappingModel::Field &field, QStringList &excludedFieldNames );
220
221 QList< QgsVectorDataProvider::NativeType > mNativeTypes;
222
223 QList<Field> mMapping;
224 bool mDestinationEditable = false;
225 QgsFields mSourceFields;
226 std::unique_ptr<ExpressionContextGenerator> mExpressionContextGenerator;
227
229};
230
231
232#endif // QGSFIELDMAPPINGMODEL_H
Holds mapping information for defining sets of aggregates of fields from a QgsFields object.
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
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.