Promote FieldOrigin to enum class, move to Qgis

This commit is contained in:
Nyall Dawson 2024-05-27 09:58:16 +10:00 committed by Julien Cabieces
parent 740075b8e8
commit e2157cfe1f
41 changed files with 296 additions and 216 deletions

View File

@ -1420,6 +1420,31 @@ Qgis.SublayerPromptMode.NeverAskLoadAll.__doc__ = "Never ask users to select sub
Qgis.SublayerPromptMode.__doc__ = "Specifies how to handle layer sources with multiple sublayers.\n\n.. versionadded:: 3.22\n\n" + '* ``AlwaysAsk``: ' + Qgis.SublayerPromptMode.AlwaysAsk.__doc__ + '\n' + '* ``AskExcludingRasterBands``: ' + Qgis.SublayerPromptMode.AskExcludingRasterBands.__doc__ + '\n' + '* ``NeverAskSkip``: ' + Qgis.SublayerPromptMode.NeverAskSkip.__doc__ + '\n' + '* ``NeverAskLoadAll``: ' + Qgis.SublayerPromptMode.NeverAskLoadAll.__doc__
# --
Qgis.SublayerPromptMode.baseClass = Qgis
QgsFields.FieldOrigin = Qgis.FieldOrigin
# monkey patching scoped based enum
QgsFields.OriginUnknown = Qgis.FieldOrigin.Unknown
QgsFields.FieldOrigin.OriginUnknown = Qgis.FieldOrigin.Unknown
QgsFields.OriginUnknown.is_monkey_patched = True
QgsFields.OriginUnknown.__doc__ = "The field origin has not been specified"
QgsFields.OriginProvider = Qgis.FieldOrigin.Provider
QgsFields.FieldOrigin.OriginProvider = Qgis.FieldOrigin.Provider
QgsFields.OriginProvider.is_monkey_patched = True
QgsFields.OriginProvider.__doc__ = "Field originates from the underlying data provider of the vector layer"
QgsFields.OriginJoin = Qgis.FieldOrigin.Join
QgsFields.FieldOrigin.OriginJoin = Qgis.FieldOrigin.Join
QgsFields.OriginJoin.is_monkey_patched = True
QgsFields.OriginJoin.__doc__ = "Field originates from a joined layer"
QgsFields.OriginEdit = Qgis.FieldOrigin.Edit
QgsFields.FieldOrigin.OriginEdit = Qgis.FieldOrigin.Edit
QgsFields.OriginEdit.is_monkey_patched = True
QgsFields.OriginEdit.__doc__ = "Field has been temporarily added in editing mode"
QgsFields.OriginExpression = Qgis.FieldOrigin.Expression
QgsFields.FieldOrigin.OriginExpression = Qgis.FieldOrigin.Expression
QgsFields.OriginExpression.is_monkey_patched = True
QgsFields.OriginExpression.__doc__ = "Field is calculated from an expression"
Qgis.FieldOrigin.__doc__ = "Field origin.\n\n.. note::\n\n Prior to QGIS 3.38 this was available as :py:class:`QgsFields`.FieldOrigin\n\n.. versionadded:: 3.38\n\n" + '* ``OriginUnknown``: ' + Qgis.FieldOrigin.Unknown.__doc__ + '\n' + '* ``OriginProvider``: ' + Qgis.FieldOrigin.Provider.__doc__ + '\n' + '* ``OriginJoin``: ' + Qgis.FieldOrigin.Join.__doc__ + '\n' + '* ``OriginEdit``: ' + Qgis.FieldOrigin.Edit.__doc__ + '\n' + '* ``OriginExpression``: ' + Qgis.FieldOrigin.Expression.__doc__
# --
Qgis.FieldOrigin.baseClass = Qgis
# monkey patching scoped based enum
Qgis.FieldConfigurationFlag.NoFlag.__doc__ = "No flag is defined"
Qgis.FieldConfigurationFlag.NotSearchable.__doc__ = "Defines if the field is searchable (used in the locator search for instance)"

View File

@ -1,6 +0,0 @@
# The following has been generated automatically from src/core/qgsfields.h
QgsFields.OriginUnknown = QgsFields.FieldOrigin.OriginUnknown
QgsFields.OriginProvider = QgsFields.FieldOrigin.OriginProvider
QgsFields.OriginJoin = QgsFields.FieldOrigin.OriginJoin
QgsFields.OriginEdit = QgsFields.FieldOrigin.OriginEdit
QgsFields.OriginExpression = QgsFields.FieldOrigin.OriginExpression

View File

@ -792,6 +792,15 @@ The development version
NeverAskLoadAll,
};
enum class FieldOrigin /BaseType=IntEnum/
{
Unknown,
Provider,
Join,
Edit,
Expression
};
enum class FieldConfigurationFlag /BaseType=IntFlag/
{
NoFlag,

View File

@ -33,15 +33,6 @@ In addition to storing a list of :py:class:`QgsField` instances, it also:
public:
enum FieldOrigin /BaseType=IntEnum/
{
OriginUnknown,
OriginProvider,
OriginJoin,
OriginEdit,
OriginExpression
};
QgsFields() /HoldGIL/;
%Docstring
@ -61,9 +52,17 @@ Copy constructor
Removes all fields
%End
bool append( const QgsField &field, FieldOrigin origin = OriginProvider, int originIndex = -1 ) /HoldGIL/;
bool append( const QgsField &field, Qgis::FieldOrigin origin = Qgis::FieldOrigin::Provider, int originIndex = -1 ) /HoldGIL/;
%Docstring
Appends a field. The field must have unique name, otherwise it is rejected (returns ``False``)
Appends a ``field``.
The field must have a unique name, otherwise it is rejected (returns ``False``).
The ``originIndex`` argument must be set to a value corresponding to the ``origin`` type:
- :py:class:`Qgis`.FieldOrigin.Provider: The field's originIndex is the index in provider's fields.
- :py:class:`Qgis`.FieldOrigin.Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
- :py:class:`Qgis`.FieldOrigin.Edit: The originIndex is the index in the list of added attributes
%End
bool rename( int fieldIdx, const QString &name ) /HoldGIL/;
@ -225,7 +224,7 @@ Returns the field with matching name.
%End
FieldOrigin fieldOrigin( int fieldIdx ) const /HoldGIL/;
Qgis::FieldOrigin fieldOrigin( int fieldIdx ) const /HoldGIL/;
%Docstring
Returns the field's origin (value from an enumeration).
@ -248,6 +247,10 @@ Returns the field's origin (value from an enumeration).
%Docstring
Returns the field's origin index (its meaning is specific to each type of origin).
- :py:class:`Qgis`.FieldOrigin.Provider: The field's originIndex is the index in provider's fields.
- :py:class:`Qgis`.FieldOrigin.Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
- :py:class:`Qgis`.FieldOrigin.Edit: The originIndex is the index in the list of added attributes
:raises KeyError: if no field exists at the specified index
%End
%MethodCode

View File

@ -1393,6 +1393,31 @@ Qgis.SublayerPromptMode.NeverAskLoadAll.__doc__ = "Never ask users to select sub
Qgis.SublayerPromptMode.__doc__ = "Specifies how to handle layer sources with multiple sublayers.\n\n.. versionadded:: 3.22\n\n" + '* ``AlwaysAsk``: ' + Qgis.SublayerPromptMode.AlwaysAsk.__doc__ + '\n' + '* ``AskExcludingRasterBands``: ' + Qgis.SublayerPromptMode.AskExcludingRasterBands.__doc__ + '\n' + '* ``NeverAskSkip``: ' + Qgis.SublayerPromptMode.NeverAskSkip.__doc__ + '\n' + '* ``NeverAskLoadAll``: ' + Qgis.SublayerPromptMode.NeverAskLoadAll.__doc__
# --
Qgis.SublayerPromptMode.baseClass = Qgis
QgsFields.FieldOrigin = Qgis.FieldOrigin
# monkey patching scoped based enum
QgsFields.OriginUnknown = Qgis.FieldOrigin.Unknown
QgsFields.FieldOrigin.OriginUnknown = Qgis.FieldOrigin.Unknown
QgsFields.OriginUnknown.is_monkey_patched = True
QgsFields.OriginUnknown.__doc__ = "The field origin has not been specified"
QgsFields.OriginProvider = Qgis.FieldOrigin.Provider
QgsFields.FieldOrigin.OriginProvider = Qgis.FieldOrigin.Provider
QgsFields.OriginProvider.is_monkey_patched = True
QgsFields.OriginProvider.__doc__ = "Field originates from the underlying data provider of the vector layer"
QgsFields.OriginJoin = Qgis.FieldOrigin.Join
QgsFields.FieldOrigin.OriginJoin = Qgis.FieldOrigin.Join
QgsFields.OriginJoin.is_monkey_patched = True
QgsFields.OriginJoin.__doc__ = "Field originates from a joined layer"
QgsFields.OriginEdit = Qgis.FieldOrigin.Edit
QgsFields.FieldOrigin.OriginEdit = Qgis.FieldOrigin.Edit
QgsFields.OriginEdit.is_monkey_patched = True
QgsFields.OriginEdit.__doc__ = "Field has been temporarily added in editing mode"
QgsFields.OriginExpression = Qgis.FieldOrigin.Expression
QgsFields.FieldOrigin.OriginExpression = Qgis.FieldOrigin.Expression
QgsFields.OriginExpression.is_monkey_patched = True
QgsFields.OriginExpression.__doc__ = "Field is calculated from an expression"
Qgis.FieldOrigin.__doc__ = "Field origin.\n\n.. note::\n\n Prior to QGIS 3.38 this was available as :py:class:`QgsFields`.FieldOrigin\n\n.. versionadded:: 3.38\n\n" + '* ``OriginUnknown``: ' + Qgis.FieldOrigin.Unknown.__doc__ + '\n' + '* ``OriginProvider``: ' + Qgis.FieldOrigin.Provider.__doc__ + '\n' + '* ``OriginJoin``: ' + Qgis.FieldOrigin.Join.__doc__ + '\n' + '* ``OriginEdit``: ' + Qgis.FieldOrigin.Edit.__doc__ + '\n' + '* ``OriginExpression``: ' + Qgis.FieldOrigin.Expression.__doc__
# --
Qgis.FieldOrigin.baseClass = Qgis
# monkey patching scoped based enum
Qgis.FieldConfigurationFlag.NoFlag.__doc__ = "No flag is defined"
Qgis.FieldConfigurationFlag.NotSearchable.__doc__ = "Defines if the field is searchable (used in the locator search for instance)"

View File

@ -792,6 +792,15 @@ The development version
NeverAskLoadAll,
};
enum class FieldOrigin
{
Unknown,
Provider,
Join,
Edit,
Expression
};
enum class FieldConfigurationFlag
{
NoFlag,

View File

@ -33,15 +33,6 @@ In addition to storing a list of :py:class:`QgsField` instances, it also:
public:
enum FieldOrigin
{
OriginUnknown,
OriginProvider,
OriginJoin,
OriginEdit,
OriginExpression
};
QgsFields() /HoldGIL/;
%Docstring
@ -61,9 +52,17 @@ Copy constructor
Removes all fields
%End
bool append( const QgsField &field, FieldOrigin origin = OriginProvider, int originIndex = -1 ) /HoldGIL/;
bool append( const QgsField &field, Qgis::FieldOrigin origin = Qgis::FieldOrigin::Provider, int originIndex = -1 ) /HoldGIL/;
%Docstring
Appends a field. The field must have unique name, otherwise it is rejected (returns ``False``)
Appends a ``field``.
The field must have a unique name, otherwise it is rejected (returns ``False``).
The ``originIndex`` argument must be set to a value corresponding to the ``origin`` type:
- :py:class:`Qgis`.FieldOrigin.Provider: The field's originIndex is the index in provider's fields.
- :py:class:`Qgis`.FieldOrigin.Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
- :py:class:`Qgis`.FieldOrigin.Edit: The originIndex is the index in the list of added attributes
%End
bool rename( int fieldIdx, const QString &name ) /HoldGIL/;
@ -225,7 +224,7 @@ Returns the field with matching name.
%End
FieldOrigin fieldOrigin( int fieldIdx ) const /HoldGIL/;
Qgis::FieldOrigin fieldOrigin( int fieldIdx ) const /HoldGIL/;
%Docstring
Returns the field's origin (value from an enumeration).
@ -248,6 +247,10 @@ Returns the field's origin (value from an enumeration).
%Docstring
Returns the field's origin index (its meaning is specific to each type of origin).
- :py:class:`Qgis`.FieldOrigin.Provider: The field's originIndex is the index in provider's fields.
- :py:class:`Qgis`.FieldOrigin.Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
- :py:class:`Qgis`.FieldOrigin.Edit: The originIndex is the index in the list of added attributes
:raises KeyError: if no field exists at the specified index
%End
%MethodCode

View File

@ -84,7 +84,7 @@ QVariantMap QgsAttributeIndexAlgorithm::processAlgorithm( const QVariantMap &par
QgsVectorDataProvider *provider = layer->dataProvider();
const int fieldIndex = layer->fields().lookupField( field );
if ( fieldIndex < 0 || layer->fields().fieldOrigin( fieldIndex ) != QgsFields::OriginProvider )
if ( fieldIndex < 0 || layer->fields().fieldOrigin( fieldIndex ) != Qgis::FieldOrigin::Provider )
{
feedback->pushInfo( QObject::tr( "Can not create attribute index on %1" ).arg( field ) );
}

View File

@ -143,7 +143,7 @@ void QgsMapToolChangeLabelProperties::applyChanges( const QgsAttributeMap &chang
bool needsEdit = false;
for ( auto it = changes.constBegin(); it != changes.constEnd(); ++it )
{
if ( vlayer->fields().fieldOrigin( it.key() ) != QgsFields::OriginJoin )
if ( vlayer->fields().fieldOrigin( it.key() ) != Qgis::FieldOrigin::Join )
{
needsEdit = true;
break;

View File

@ -194,8 +194,8 @@ void QgsMapToolMoveLabel::cadCanvasPressEvent( QgsMapMouseEvent *e )
return;
}
const bool usesAuxFields = vlayer->fields().fieldOrigin( xCol ) == QgsFields::OriginJoin
&& vlayer->fields().fieldOrigin( yCol ) == QgsFields::OriginJoin;
const bool usesAuxFields = vlayer->fields().fieldOrigin( xCol ) == Qgis::FieldOrigin::Join
&& vlayer->fields().fieldOrigin( yCol ) == Qgis::FieldOrigin::Join;
if ( !usesAuxFields && !vlayer->isEditable() )
{
if ( vlayer->startEditing() )
@ -366,8 +366,8 @@ void QgsMapToolMoveLabel::cadCanvasPressEvent( QgsMapMouseEvent *e )
if ( ( isCurvedOrLine && lineAnchorPercentCol >= 0 ) || ( xCol >= 0 && yCol >= 0 ) )
{
const bool usesAuxFields =
( isCurvedOrLine && lineAnchorPercentCol >= 0 && vlayer->fields().fieldOrigin( lineAnchorPercentCol ) == QgsFields::OriginJoin ) ||
( vlayer->fields().fieldOrigin( xCol ) == QgsFields::OriginJoin && vlayer->fields().fieldOrigin( yCol ) == QgsFields::OriginJoin );
( isCurvedOrLine && lineAnchorPercentCol >= 0 && vlayer->fields().fieldOrigin( lineAnchorPercentCol ) == Qgis::FieldOrigin::Join ) ||
( vlayer->fields().fieldOrigin( xCol ) == Qgis::FieldOrigin::Join && vlayer->fields().fieldOrigin( yCol ) == Qgis::FieldOrigin::Join );
if ( !usesAuxFields && !vlayer->isEditable() )
{
if ( vlayer->startEditing() )

View File

@ -128,7 +128,7 @@ void QgsMapToolRotateLabel::canvasPressEvent( QgsMapMouseEvent *e )
case PropertyStatus::Valid:
{
const bool usesAuxField = mCurrentLabel.layer->fields().fieldOrigin( rotationCol ) == QgsFields::OriginJoin;
const bool usesAuxField = mCurrentLabel.layer->fields().fieldOrigin( rotationCol ) == Qgis::FieldOrigin::Join;
if ( !usesAuxField && !mCurrentLabel.layer->isEditable() )
{
if ( mCurrentLabel.layer->startEditing() )

View File

@ -9755,7 +9755,7 @@ void QgisApp::mergeAttributesOfSelectedFeatures()
QVariant val = merged.at( i );
QgsField fld( vl->fields().at( i ) );
bool isDefaultValue = vl->fields().fieldOrigin( i ) == QgsFields::OriginProvider &&
bool isDefaultValue = vl->fields().fieldOrigin( i ) == Qgis::FieldOrigin::Provider &&
vl->dataProvider() &&
vl->dataProvider()->defaultValueClause( vl->fields().fieldOriginIndex( i ) ) == val;

View File

@ -20,7 +20,6 @@
#include "qgsfields.h"
#include "qgsvectordataprovider.h"
#include "qgsvectorlayer.h"
#include "qgssettings.h"
#include "qgsgui.h"
QgsDelAttrDialog::QgsDelAttrDialog( const QgsVectorLayer *vl )
@ -38,11 +37,11 @@ QgsDelAttrDialog::QgsDelAttrDialog( const QgsVectorLayer *vl )
QListWidgetItem *item = new QListWidgetItem( layerAttributes.at( idx ).name(), listBox2 );
switch ( vl->fields().fieldOrigin( idx ) )
{
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Expression:
item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpression.svg" ) ) );
break;
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/join.svg" ) ) );
item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
break;

View File

@ -742,7 +742,7 @@ QgsIdentifyResultsFeatureItem *QgsIdentifyResultsDialog::createFeatureItem( QgsV
continue;
}
QString defVal;
if ( fields.fieldOrigin( i ) == QgsFields::OriginProvider && vlayer->dataProvider() )
if ( fields.fieldOrigin( i ) == Qgis::FieldOrigin::Provider && vlayer->dataProvider() )
defVal = vlayer->dataProvider()->defaultValueClause( fields.fieldOriginIndex( i ) );
const QString originalValue = defVal == attrs.at( i ) ? defVal : fields.at( i ).displayString( attrs.at( i ) );

View File

@ -235,8 +235,8 @@ bool QgsEditFormConfig::readOnly( int idx ) const
{
if ( idx >= 0 && idx < d->mFields.count() )
{
if ( d->mFields.fieldOrigin( idx ) == QgsFields::OriginJoin
|| d->mFields.fieldOrigin( idx ) == QgsFields::OriginExpression )
if ( d->mFields.fieldOrigin( idx ) == Qgis::FieldOrigin::Join
|| d->mFields.fieldOrigin( idx ) == Qgis::FieldOrigin::Expression )
return true;
return !d->mFieldEditables.value( d->mFields.at( idx ).name(), true );
}

View File

@ -351,7 +351,7 @@ std::tuple<QVariant::Type, int> QgsExpressionUtils::determineResultType( const Q
const QgsFields fields = layer->fields();
for ( int i = 0; i < fields.count(); i++ )
{
if ( fields.fieldOrigin( i ) != QgsFields::OriginExpression )
if ( fields.fieldOrigin( i ) != Qgis::FieldOrigin::Expression )
attributes << i;
}
request.setSubsetOfAttributes( attributes );

View File

@ -1670,7 +1670,7 @@ bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags, QgsFeatureId
for ( int ogrAttributeId = 0; qgisAttributeId < attributes.count(); ++qgisAttributeId, ++ogrAttributeId )
{
// Skip fields that have no provider origin
if ( qgisFields.exists( qgisAttributeId ) && qgisFields.fieldOrigin( qgisAttributeId ) != QgsFields::FieldOrigin::OriginProvider )
if ( qgisFields.exists( qgisAttributeId ) && qgisFields.fieldOrigin( qgisAttributeId ) != Qgis::FieldOrigin::Provider )
{
qgisAttributeId++;
continue;

View File

@ -1341,6 +1341,23 @@ class CORE_EXPORT Qgis
};
Q_ENUM( SublayerPromptMode )
/**
* Field origin.
*
* \note Prior to QGIS 3.38 this was available as QgsFields::FieldOrigin
*
* \since QGIS 3.38
*/
enum class FieldOrigin SIP_MONKEYPATCH_SCOPEENUM_UNNEST( QgsFields, FieldOrigin ) : int
{
Unknown SIP_MONKEYPATCH_COMPAT_NAME( OriginUnknown ), //!< The field origin has not been specified
Provider SIP_MONKEYPATCH_COMPAT_NAME( OriginProvider ), //!< Field originates from the underlying data provider of the vector layer
Join SIP_MONKEYPATCH_COMPAT_NAME( OriginJoin ), //!< Field originates from a joined layer
Edit SIP_MONKEYPATCH_COMPAT_NAME( OriginEdit ), //!< Field has been temporarily added in editing mode
Expression SIP_MONKEYPATCH_COMPAT_NAME( OriginExpression ) //!< Field is calculated from an expression
};
Q_ENUM( FieldOrigin )
/**
* Configuration flags for fields
* These flags are meant to be user-configurable

View File

@ -30,7 +30,7 @@ QString QgsFieldFormatter::representValue( QgsVectorLayer *layer, int fieldIndex
return QString();
QString defVal;
if ( layer->fields().fieldOrigin( fieldIndex ) == QgsFields::OriginProvider && layer->dataProvider() )
if ( layer->fields().fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Provider && layer->dataProvider() )
defVal = layer->dataProvider()->defaultValueClause( layer->fields().fieldOriginIndex( fieldIndex ) );
if ( !defVal.isNull() && defVal == value )

View File

@ -17,10 +17,6 @@
#include <QIcon>
#include "qgsfieldmodel.h"
#include "qgsmaplayermodel.h"
#include "qgsmaplayerproxymodel.h"
#include "qgslogger.h"
#include "qgsapplication.h"
#include "qgsvectorlayer.h"
#include "qgsvectorlayerjoinbuffer.h"
@ -376,7 +372,7 @@ QVariant QgsFieldModel::data( const QModelIndex &index, int role ) const
{
if ( exprIdx < 0 && !isEmpty )
{
if ( mLayer && mFields.fieldOrigin( index.row() - fieldOffset ) == QgsFields::OriginJoin )
if ( mLayer && mFields.fieldOrigin( index.row() - fieldOffset ) == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *info = mLayer->joinBuffer()->joinForFieldIndex( index.row() - fieldOffset, mLayer->fields(), srcFieldIndex );
@ -506,7 +502,7 @@ QString QgsFieldModel::fieldToolTipExtended( const QgsField &field, const QgsVec
if ( fieldIdx < 0 )
return QString();
const QString expressionString = fields.fieldOrigin( fieldIdx ) == QgsFields::OriginExpression
const QString expressionString = fields.fieldOrigin( fieldIdx ) == Qgis::FieldOrigin::Expression
? layer->expressionField( fieldIdx )
: QString();

View File

@ -41,10 +41,10 @@ bool QgsFieldProxyModel::isReadOnly( const QModelIndex &index ) const
return true;
}
const QgsFields::FieldOrigin origin = static_cast< QgsFields::FieldOrigin >( originVariant.toInt() );
const Qgis::FieldOrigin origin = static_cast< Qgis::FieldOrigin >( originVariant.toInt() );
switch ( origin )
{
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
{
// show joined fields (e.g. auxiliary fields) only if they have a non-hidden editor widget.
// This enables them to be bulk field-calculated when a user needs to, but hides them by default
@ -55,13 +55,13 @@ bool QgsFieldProxyModel::isReadOnly( const QModelIndex &index ) const
return !sourceModel()->data( index, static_cast< int >( QgsFieldModel::CustomRole::JoinedFieldIsEditable ) ).toBool();
}
case QgsFields::OriginUnknown:
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Unknown:
case Qgis::FieldOrigin::Expression:
//read only
return true;
case QgsFields::OriginEdit:
case QgsFields::OriginProvider:
case Qgis::FieldOrigin::Edit:
case Qgis::FieldOrigin::Provider:
{
if ( !sourceModel()->data( index, static_cast< int >( QgsFieldModel::CustomRole::FieldIsWidgetEditable ) ).toBool() )
{
@ -87,16 +87,16 @@ bool QgsFieldProxyModel::filterAcceptsRow( int source_row, const QModelIndex &so
if ( mFilters.testFlag( QgsFieldProxyModel::OriginProvider ) )
{
const QgsFields::FieldOrigin origin = static_cast< QgsFields::FieldOrigin >( sourceModel()->data( index, static_cast< int >( QgsFieldModel::CustomRole::FieldOrigin ) ).toInt() );
const Qgis::FieldOrigin origin = static_cast< Qgis::FieldOrigin >( sourceModel()->data( index, static_cast< int >( QgsFieldModel::CustomRole::FieldOrigin ) ).toInt() );
switch ( origin )
{
case QgsFields::OriginUnknown:
case QgsFields::OriginJoin:
case QgsFields::OriginEdit:
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Unknown:
case Qgis::FieldOrigin::Join:
case Qgis::FieldOrigin::Edit:
case Qgis::FieldOrigin::Expression:
return false;
case QgsFields::OriginProvider:
case Qgis::FieldOrigin::Provider:
break;
}
}

View File

@ -56,12 +56,12 @@ void QgsFields::clear()
* See details in QEP #17
****************************************************************************/
bool QgsFields::append( const QgsField &field, FieldOrigin origin, int originIndex )
bool QgsFields::append( const QgsField &field, Qgis::FieldOrigin origin, int originIndex )
{
if ( d->nameToIndex.contains( field.name() ) )
return false;
if ( originIndex == -1 && origin == OriginProvider )
if ( originIndex == -1 && origin == Qgis::FieldOrigin::Provider )
originIndex = d->fields.count();
d->fields.append( Field( field, origin, originIndex ) );
@ -92,7 +92,7 @@ bool QgsFields::appendExpressionField( const QgsField &field, int originIndex )
if ( d->nameToIndex.contains( field.name() ) )
return false;
d->fields.append( Field( field, OriginExpression, originIndex ) );
d->fields.append( Field( field, Qgis::FieldOrigin::Expression, originIndex ) );
d->nameToIndex.insert( field.name(), d->fields.count() - 1 );
return true;
@ -186,10 +186,10 @@ QgsField QgsFields::operator[]( int i ) const
return d->fields[i].field;
}
QgsFields::FieldOrigin QgsFields::fieldOrigin( int fieldIdx ) const
Qgis::FieldOrigin QgsFields::fieldOrigin( int fieldIdx ) const
{
if ( !exists( fieldIdx ) )
return OriginUnknown;
return Qgis::FieldOrigin::Unknown;
return d->fields[fieldIdx].origin;
}
@ -278,10 +278,10 @@ QIcon QgsFields::iconForField( int fieldIdx, bool considerOrigin ) const
{
switch ( fieldOrigin( fieldIdx ) )
{
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Expression:
return QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpression.svg" ) );
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
return QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/join.svg" ) );
default:

View File

@ -19,6 +19,7 @@
#include "qgis_sip.h"
#include "qgis_core.h"
#include "qgis.h"
#include "qgsfield.h"
class QgsFieldsPrivate;
@ -41,7 +42,7 @@ class QgsFieldsPrivate;
*
* \note QgsFields objects are implicitly shared.
*/
class CORE_EXPORT QgsFields
class CORE_EXPORT QgsFields
{
Q_GADGET
@ -51,15 +52,6 @@ class CORE_EXPORT QgsFields
public:
enum FieldOrigin
{
OriginUnknown, //!< It has not been specified where the field comes from
OriginProvider, //!< Field comes from the underlying data provider of the vector layer (originIndex = index in provider's fields)
OriginJoin, //!< Field comes from a joined layer (originIndex / 1000 = index of the join, originIndex % 1000 = index within the join)
OriginEdit, //!< Field has been temporarily added in editing mode (originIndex = index in the list of added attributes)
OriginExpression //!< Field is calculated from an expression
};
#ifndef SIP_RUN
typedef struct Field
@ -67,7 +59,7 @@ class CORE_EXPORT QgsFields
Field()
{}
Field( const QgsField &f, FieldOrigin o, int oi )
Field( const QgsField &f, Qgis::FieldOrigin o, int oi )
: field( f )
, origin( o )
, originIndex( oi )
@ -79,7 +71,7 @@ class CORE_EXPORT QgsFields
bool operator!=( const Field &other ) const { return !( *this == other ); }
QgsField field; //!< Field
FieldOrigin origin = OriginUnknown ; //!< Origin of the field
Qgis::FieldOrigin origin = Qgis::FieldOrigin::Unknown ; //!< Origin of the field
int originIndex = -1 ; //!< Index specific to the origin
} Field;
@ -105,8 +97,18 @@ class CORE_EXPORT QgsFields
//! Removes all fields
void clear() SIP_HOLDGIL;
//! Appends a field. The field must have unique name, otherwise it is rejected (returns FALSE)
bool append( const QgsField &field, FieldOrigin origin = OriginProvider, int originIndex = -1 ) SIP_HOLDGIL;
/**
* Appends a \a field.
*
* The field must have a unique name, otherwise it is rejected (returns FALSE).
*
* The \a originIndex argument must be set to a value corresponding to the \a origin type:
*
* - Qgis::FieldOrigin::Provider: The field's originIndex is the index in provider's fields.
* - Qgis::FieldOrigin::Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
* - Qgis::FieldOrigin::Edit: The originIndex is the index in the list of added attributes
*/
bool append( const QgsField &field, Qgis::FieldOrigin origin = Qgis::FieldOrigin::Provider, int originIndex = -1 ) SIP_HOLDGIL;
/**
* Renames a name of field. The field must have unique name, otherwise change is rejected (returns FALSE)
@ -298,7 +300,7 @@ class CORE_EXPORT QgsFields
/**
* Returns the field's origin (value from an enumeration).
*/
FieldOrigin fieldOrigin( int fieldIdx ) const;
Qgis::FieldOrigin fieldOrigin( int fieldIdx ) const;
#else
/**
@ -306,7 +308,7 @@ class CORE_EXPORT QgsFields
*
* \throws KeyError if no field exists at the specified index
*/
FieldOrigin fieldOrigin( int fieldIdx ) const SIP_HOLDGIL;
Qgis::FieldOrigin fieldOrigin( int fieldIdx ) const SIP_HOLDGIL;
% MethodCode
if ( a0 < 0 || a0 >= sipCpp->count() )
{
@ -324,6 +326,10 @@ class CORE_EXPORT QgsFields
/**
* Returns the field's origin index (its meaning is specific to each type of origin).
*
* - Qgis::FieldOrigin::Provider: The field's originIndex is the index in provider's fields.
* - Qgis::FieldOrigin::Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
* - Qgis::FieldOrigin::Edit: The originIndex is the index in the list of added attributes
*/
int fieldOriginIndex( int fieldIdx ) const;
#else
@ -331,6 +337,10 @@ class CORE_EXPORT QgsFields
/**
* Returns the field's origin index (its meaning is specific to each type of origin).
*
* - Qgis::FieldOrigin::Provider: The field's originIndex is the index in provider's fields.
* - Qgis::FieldOrigin::Join: The field's originIndex / 1000 = index of the join, originIndex % 1000 = index within the join
* - Qgis::FieldOrigin::Edit: The originIndex is the index in the list of added attributes
*
* \throws KeyError if no field exists at the specified index
*/
int fieldOriginIndex( int fieldIdx ) const SIP_HOLDGIL;

View File

@ -370,7 +370,7 @@ QgsVectorLayer *QgsVectorLayer::clone() const
layer->setFieldConstraint( i, constraintIt.key(), constraintIt.value() );
}
if ( fields().fieldOrigin( i ) == QgsFields::OriginExpression )
if ( fields().fieldOrigin( i ) == Qgis::FieldOrigin::Expression )
{
layer->addExpressionField( expressionField( i ), fields().at( i ) );
}
@ -3406,22 +3406,22 @@ bool QgsVectorLayer::changeAttributeValue( QgsFeatureId fid, int field, const QV
switch ( fields().fieldOrigin( field ) )
{
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
result = mJoinBuffer->changeAttributeValue( fid, field, newValue, oldValue );
if ( result )
emit attributeValueChanged( fid, field, newValue );
break;
case QgsFields::OriginProvider:
case QgsFields::OriginEdit:
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Provider:
case Qgis::FieldOrigin::Edit:
case Qgis::FieldOrigin::Expression:
{
if ( mEditBuffer && mDataProvider )
result = mEditBuffer->changeAttributeValue( fid, field, newValue, oldValue );
break;
}
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Unknown:
break;
}
@ -3454,21 +3454,21 @@ bool QgsVectorLayer::changeAttributeValues( QgsFeatureId fid, const QgsAttribute
switch ( fields().fieldOrigin( field ) )
{
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
newValuesJoin[field] = newValue;
oldValuesJoin[field] = oldValue;
break;
case QgsFields::OriginProvider:
case QgsFields::OriginEdit:
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Provider:
case Qgis::FieldOrigin::Edit:
case Qgis::FieldOrigin::Expression:
{
newValuesNotJoin[field] = newValue;
oldValuesNotJoin[field] = oldValue;
break;
}
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Unknown:
break;
}
}
@ -3531,7 +3531,7 @@ bool QgsVectorLayer::renameAttribute( int index, const QString &newName )
switch ( mFields.fieldOrigin( index ) )
{
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Expression:
{
if ( mExpressionFieldBuffer )
{
@ -3546,16 +3546,16 @@ bool QgsVectorLayer::renameAttribute( int index, const QString &newName )
}
}
case QgsFields::OriginProvider:
case QgsFields::OriginEdit:
case Qgis::FieldOrigin::Provider:
case Qgis::FieldOrigin::Edit:
if ( !mEditBuffer || !mDataProvider )
return false;
return mEditBuffer->renameAttribute( index, newName );
case QgsFields::OriginJoin:
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Join:
case Qgis::FieldOrigin::Unknown:
return false;
}
@ -3699,7 +3699,7 @@ bool QgsVectorLayer::deleteAttribute( int index )
if ( index < 0 || index >= fields().count() )
return false;
if ( mFields.fieldOrigin( index ) == QgsFields::OriginExpression )
if ( mFields.fieldOrigin( index ) == Qgis::FieldOrigin::Expression )
{
removeExpressionField( index );
return true;
@ -3866,7 +3866,7 @@ QgsAttributeList QgsVectorLayer::primaryKeyAttributes() const
QgsAttributeList providerIndexes = mDataProvider->pkAttributeIndexes();
for ( int i = 0; i < mFields.count(); ++i )
{
if ( mFields.fieldOrigin( i ) == QgsFields::OriginProvider &&
if ( mFields.fieldOrigin( i ) == Qgis::FieldOrigin::Provider &&
providerIndexes.contains( mFields.fieldOriginIndex( i ) ) )
pkAttributesList << i;
}
@ -4252,7 +4252,7 @@ bool QgsVectorLayer::isAuxiliaryField( int index, int &srcIndex ) const
if ( !auxiliaryLayer() )
return auxiliaryField;
if ( index >= 0 && fields().fieldOrigin( index ) == QgsFields::OriginJoin )
if ( index >= 0 && fields().fieldOrigin( index ) == Qgis::FieldOrigin::Join )
{
const QgsVectorLayerJoinInfo *info = mJoinBuffer->joinForFieldIndex( index, fields(), srcIndex );
@ -4451,7 +4451,7 @@ QString QgsVectorLayer::expressionField( int index ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
if ( mFields.fieldOrigin( index ) != QgsFields::OriginExpression )
if ( mFields.fieldOrigin( index ) != Qgis::FieldOrigin::Expression )
return QString();
int oi = mFields.fieldOriginIndex( index );
@ -4702,13 +4702,13 @@ QSet<QVariant> QgsVectorLayer::uniqueValues( int index, int limit ) const
return uniqueValues;
}
QgsFields::FieldOrigin origin = mFields.fieldOrigin( index );
Qgis::FieldOrigin origin = mFields.fieldOrigin( index );
switch ( origin )
{
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Unknown:
return uniqueValues;
case QgsFields::OriginProvider: //a provider field
case Qgis::FieldOrigin::Provider: //a provider field
{
uniqueValues = mDataProvider->uniqueValues( index, limit );
@ -4758,7 +4758,7 @@ QSet<QVariant> QgsVectorLayer::uniqueValues( int index, int limit ) const
return uniqueValues;
}
case QgsFields::OriginEdit:
case Qgis::FieldOrigin::Edit:
// the layer is editable, but in certain cases it can still be avoided going through all features
if ( mDataProvider->transaction() || (
mEditBuffer->deletedFeatureIds().isEmpty() &&
@ -4771,8 +4771,8 @@ QSet<QVariant> QgsVectorLayer::uniqueValues( int index, int limit ) const
}
[[fallthrough]];
//we need to go through each feature
case QgsFields::OriginJoin:
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Join:
case Qgis::FieldOrigin::Expression:
{
QgsAttributeList attList;
attList << index;
@ -4812,13 +4812,13 @@ QStringList QgsVectorLayer::uniqueStringsMatching( int index, const QString &sub
return results;
}
QgsFields::FieldOrigin origin = mFields.fieldOrigin( index );
Qgis::FieldOrigin origin = mFields.fieldOrigin( index );
switch ( origin )
{
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Unknown:
return results;
case QgsFields::OriginProvider: //a provider field
case Qgis::FieldOrigin::Provider: //a provider field
{
results = mDataProvider->uniqueStringsMatching( index, substring, limit, feedback );
@ -4859,7 +4859,7 @@ QStringList QgsVectorLayer::uniqueStringsMatching( int index, const QString &sub
return results;
}
case QgsFields::OriginEdit:
case Qgis::FieldOrigin::Edit:
// the layer is editable, but in certain cases it can still be avoided going through all features
if ( mDataProvider->transaction() || ( mEditBuffer->deletedFeatureIds().isEmpty() &&
mEditBuffer->addedFeatures().isEmpty() &&
@ -4870,8 +4870,8 @@ QStringList QgsVectorLayer::uniqueStringsMatching( int index, const QString &sub
}
[[fallthrough]];
//we need to go through each feature
case QgsFields::OriginJoin:
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Join:
case Qgis::FieldOrigin::Expression:
{
QgsAttributeList attList;
attList << index;
@ -4944,16 +4944,16 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant *minimum, QVaria
return;
}
QgsFields::FieldOrigin origin = mFields.fieldOrigin( index );
Qgis::FieldOrigin origin = mFields.fieldOrigin( index );
switch ( origin )
{
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Unknown:
{
return;
}
case QgsFields::OriginProvider: //a provider field
case Qgis::FieldOrigin::Provider: //a provider field
{
if ( minimum )
*minimum = mDataProvider->minimumValue( index );
@ -4987,7 +4987,7 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant *minimum, QVaria
return;
}
case QgsFields::OriginEdit:
case Qgis::FieldOrigin::Edit:
{
// the layer is editable, but in certain cases it can still be avoided going through all features
if ( mDataProvider->transaction() || ( mEditBuffer->deletedFeatureIds().isEmpty() &&
@ -5004,8 +5004,8 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant *minimum, QVaria
}
[[fallthrough]];
// no choice but to go through all features
case QgsFields::OriginExpression:
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Expression:
case Qgis::FieldOrigin::Join:
{
// we need to go through each feature
QgsAttributeList attList;
@ -5115,8 +5115,8 @@ QVariant QgsVectorLayer::aggregate( Qgis::Aggregate aggregate, const QString &fi
{
// aggregate is based on a field - if it's a provider field, we could possibly hand over the calculation
// to the provider itself
QgsFields::FieldOrigin origin = mFields.fieldOrigin( attrIndex );
if ( origin == QgsFields::OriginProvider )
Qgis::FieldOrigin origin = mFields.fieldOrigin( attrIndex );
if ( origin == Qgis::FieldOrigin::Provider )
{
bool providerOk = false;
QVariant val = mDataProvider->aggregate( aggregate, attrIndex, parameters, context, providerOk, fids );
@ -6174,7 +6174,7 @@ QgsFieldConstraints::Constraints QgsVectorLayer::fieldConstraints( int fieldInde
QgsFieldConstraints::Constraints constraints = mFields.at( fieldIndex ).constraints().constraints();
// make sure provider constraints are always present!
if ( mFields.fieldOrigin( fieldIndex ) == QgsFields::OriginProvider )
if ( mFields.fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Provider )
{
constraints |= mDataProvider->fieldConstraints( mFields.fieldOriginIndex( fieldIndex ) );
}

View File

@ -81,7 +81,7 @@ void QgsVectorLayerEditBuffer::updateFields( QgsFields &fields )
// add new fields
for ( int i = 0; i < mAddedAttributes.count(); ++i )
{
fields.append( mAddedAttributes.at( i ), QgsFields::OriginEdit, i );
fields.append( mAddedAttributes.at( i ), Qgis::FieldOrigin::Edit, i );
}
}
@ -291,8 +291,8 @@ bool QgsVectorLayerEditBuffer::changeAttributeValue( QgsFeatureId fid, int field
}
if ( field < 0 || field >= L->fields().count() ||
L->fields().fieldOrigin( field ) == QgsFields::OriginJoin ||
L->fields().fieldOrigin( field ) == QgsFields::OriginExpression )
L->fields().fieldOrigin( field ) == Qgis::FieldOrigin::Join ||
L->fields().fieldOrigin( field ) == Qgis::FieldOrigin::Expression )
return false;
L->undoStack()->push( new QgsVectorLayerUndoCommandChangeAttribute( this, fid, field, newValue, oldValue ) );
@ -332,13 +332,13 @@ bool QgsVectorLayerEditBuffer::deleteAttribute( int index )
return false;
// find out source of the field
QgsFields::FieldOrigin origin = L->fields().fieldOrigin( index );
Qgis::FieldOrigin origin = L->fields().fieldOrigin( index );
int originIndex = L->fields().fieldOriginIndex( index );
if ( origin == QgsFields::OriginProvider && mDeletedAttributeIds.contains( originIndex ) )
if ( origin == Qgis::FieldOrigin::Provider && mDeletedAttributeIds.contains( originIndex ) )
return false;
if ( origin == QgsFields::OriginJoin )
if ( origin == Qgis::FieldOrigin::Join )
return false;
L->undoStack()->push( new QgsVectorLayerUndoCommandDeleteAttribute( this, index ) );

View File

@ -866,7 +866,7 @@ bool QgsVectorLayerEditUtils::mergeFeatures( const QgsFeatureId &targetFeatureId
{
QVariant val = mergeAttributes.at( i );
bool isDefaultValue = mLayer->fields().fieldOrigin( i ) == QgsFields::OriginProvider &&
bool isDefaultValue = mLayer->fields().fieldOrigin( i ) == Qgis::FieldOrigin::Provider &&
mLayer->dataProvider() &&
mLayer->dataProvider()->defaultValueClause( mLayer->fields().fieldOriginIndex( i ) ) == val;

View File

@ -202,7 +202,7 @@ QgsVectorLayerFeatureIterator::QgsVectorLayerFeatureIterator( QgsVectorLayerFeat
const auto usedAttributeIndices = mRequest.orderBy().usedAttributeIndices( mSource->mFields );
for ( const int attrIndex : usedAttributeIndices )
{
if ( mSource->mFields.fieldOrigin( attrIndex ) != QgsFields::OriginProvider )
if ( mSource->mFields.fieldOrigin( attrIndex ) != Qgis::FieldOrigin::Provider )
mDelegatedOrderByToProvider = false;
attributeIndexes << attrIndex;
@ -263,7 +263,7 @@ QgsVectorLayerFeatureIterator::QgsVectorLayerFeatureIterator( QgsVectorLayerFeat
{
if ( attrIndex < 0 || attrIndex >= nPendingFields )
continue;
if ( mSource->mFields.fieldOrigin( attrIndex ) == QgsFields::OriginProvider )
if ( mSource->mFields.fieldOrigin( attrIndex ) == Qgis::FieldOrigin::Provider )
providerSubset << mSource->mFields.fieldOriginIndex( attrIndex );
}
@ -294,7 +294,7 @@ QgsVectorLayerFeatureIterator::QgsVectorLayerFeatureIterator( QgsVectorLayerFeat
// If there are fields in the expression which are not of origin provider, the provider will not be able to filter based on them.
// In this case we disable the expression filter.
if ( source->mFields.fieldOrigin( idx ) != QgsFields::OriginProvider )
if ( source->mFields.fieldOrigin( idx ) != Qgis::FieldOrigin::Provider )
{
mProviderRequest.disableFilter();
// can't limit at provider side
@ -798,7 +798,7 @@ void QgsVectorLayerFeatureIterator::prepareJoin( int fieldIdx )
if ( !mSource->mFields.exists( fieldIdx ) )
return;
if ( mSource->mFields.fieldOrigin( fieldIdx ) != QgsFields::OriginJoin )
if ( mSource->mFields.fieldOrigin( fieldIdx ) != Qgis::FieldOrigin::Join )
return;
int sourceLayerIndex;
@ -939,7 +939,7 @@ void QgsVectorLayerFeatureIterator::createOrderedJoinList()
QList< int >::const_iterator prepFieldIt = mPreparedFields.constBegin();
for ( ; prepFieldIt != mPreparedFields.constEnd(); ++prepFieldIt )
{
if ( mSource->mFields.fieldOrigin( *prepFieldIt ) != QgsFields::OriginJoin )
if ( mSource->mFields.fieldOrigin( *prepFieldIt ) != Qgis::FieldOrigin::Join )
{
resolvedFields.insert( *prepFieldIt );
}
@ -1044,20 +1044,20 @@ void QgsVectorLayerFeatureIterator::prepareField( int fieldIdx )
{
switch ( mSource->mFields.fieldOrigin( fieldIdx ) )
{
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Expression:
prepareExpression( fieldIdx );
break;
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
if ( mSource->mJoinBuffer->containsJoins() )
{
prepareJoin( fieldIdx );
}
break;
case QgsFields::OriginUnknown:
case QgsFields::OriginProvider:
case QgsFields::OriginEdit:
case Qgis::FieldOrigin::Unknown:
case Qgis::FieldOrigin::Provider:
case Qgis::FieldOrigin::Edit:
break;
}
}

View File

@ -191,7 +191,7 @@ void QgsVectorLayerJoinBuffer::cacheJoinLayer( QgsVectorLayerJoinInfo &joinInfo
// Check for name collisions
int fieldIndex = mLayer->fields().indexFromName( joinFieldName );
if ( fieldIndex >= 0
&& mLayer->fields().fieldOrigin( fieldIndex ) != QgsFields::OriginJoin )
&& mLayer->fields().fieldOrigin( fieldIndex ) != Qgis::FieldOrigin::Join )
continue;
attributesCache.append( attrs.at( i ) );
@ -273,7 +273,7 @@ void QgsVectorLayerJoinBuffer::updateFields( QgsFields &fields )
{
QgsField f = joinFields.at( idx );
f.setName( prefix + f.name() );
fields.append( f, QgsFields::OriginJoin, idx + ( joinIdx * 1000 ) );
fields.append( f, Qgis::FieldOrigin::Join, idx + ( joinIdx * 1000 ) );
}
}
}
@ -413,7 +413,7 @@ int QgsVectorLayerJoinBuffer::joinedFieldsOffset( const QgsVectorLayerJoinInfo *
for ( int i = 0; i < fields.count(); ++i )
{
if ( fields.fieldOrigin( i ) != QgsFields::OriginJoin )
if ( fields.fieldOrigin( i ) != Qgis::FieldOrigin::Join )
continue;
if ( fields.fieldOriginIndex( i ) / 1000 == joinIndex )
@ -424,7 +424,7 @@ int QgsVectorLayerJoinBuffer::joinedFieldsOffset( const QgsVectorLayerJoinInfo *
const QgsVectorLayerJoinInfo *QgsVectorLayerJoinBuffer::joinForFieldIndex( int index, const QgsFields &fields, int &sourceFieldIndex ) const
{
if ( fields.fieldOrigin( index ) != QgsFields::OriginJoin )
if ( fields.fieldOrigin( index ) != Qgis::FieldOrigin::Join )
return nullptr;
int originIndex = fields.fieldOriginIndex( index );
@ -645,7 +645,7 @@ bool QgsVectorLayerJoinBuffer::addFeatures( QgsFeatureList &features, QgsFeature
bool QgsVectorLayerJoinBuffer::changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue )
{
if ( mLayer->fields().fieldOrigin( field ) != QgsFields::OriginJoin )
if ( mLayer->fields().fieldOrigin( field ) != Qgis::FieldOrigin::Join )
return false;
int srcFieldIndex;

View File

@ -315,7 +315,7 @@ QgsVectorLayerUndoCommandAddAttribute::QgsVectorLayerUndoCommandAddAttribute( Qg
{
const QgsFields &fields = layer()->fields();
int i;
for ( i = 0; i < fields.count() && fields.fieldOrigin( i ) != QgsFields::OriginJoin; i++ )
for ( i = 0; i < fields.count() && fields.fieldOrigin( i ) != Qgis::FieldOrigin::Join; i++ )
;
mFieldIndex = i;
}
@ -346,9 +346,9 @@ QgsVectorLayerUndoCommandDeleteAttribute::QgsVectorLayerUndoCommandDeleteAttribu
, mFieldIndex( fieldIndex )
{
const QgsFields &fields = layer()->fields();
const QgsFields::FieldOrigin origin = fields.fieldOrigin( mFieldIndex );
const Qgis::FieldOrigin origin = fields.fieldOrigin( mFieldIndex );
mOriginIndex = fields.fieldOriginIndex( mFieldIndex );
mProviderField = ( origin == QgsFields::OriginProvider );
mProviderField = ( origin == Qgis::FieldOrigin::Provider );
mFieldName = fields.field( mFieldIndex ).name();
if ( !mProviderField )
@ -447,9 +447,9 @@ QgsVectorLayerUndoCommandRenameAttribute::QgsVectorLayerUndoCommandRenameAttribu
, mNewName( newName )
{
const QgsFields &fields = layer()->fields();
const QgsFields::FieldOrigin origin = fields.fieldOrigin( mFieldIndex );
const Qgis::FieldOrigin origin = fields.fieldOrigin( mFieldIndex );
mOriginIndex = fields.fieldOriginIndex( mFieldIndex );
mProviderField = ( origin == QgsFields::OriginProvider );
mProviderField = ( origin == Qgis::FieldOrigin::Provider );
}
void QgsVectorLayerUndoCommandRenameAttribute::undo()

View File

@ -163,7 +163,7 @@ bool QgsVectorLayerUtils::valueExists( const QgsVectorLayer *layer, int fieldInd
return false;
// If it's a joined field search the value in the source layer
if ( fields.fieldOrigin( fieldIndex ) == QgsFields::FieldOrigin::OriginJoin )
if ( fields.fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *joinInfo { layer->joinBuffer()->joinForFieldIndex( fieldIndex, fields, srcFieldIndex ) };
@ -431,7 +431,7 @@ bool QgsVectorLayerUtils::validateAttribute( const QgsVectorLayer *layer, const
&& ( origin == QgsFieldConstraints::ConstraintOriginNotSet || origin == constraints.constraintOrigin( QgsFieldConstraints::ConstraintNotNull ) ) )
{
bool exempt = false;
if ( fields.fieldOrigin( attributeIndex ) == QgsFields::OriginProvider
if ( fields.fieldOrigin( attributeIndex ) == Qgis::FieldOrigin::Provider
&& constraints.constraintOrigin( QgsFieldConstraints::ConstraintNotNull ) == QgsFieldConstraints::ConstraintOriginProvider )
{
int providerIdx = fields.fieldOriginIndex( attributeIndex );
@ -459,7 +459,7 @@ bool QgsVectorLayerUtils::validateAttribute( const QgsVectorLayer *layer, const
&& ( origin == QgsFieldConstraints::ConstraintOriginNotSet || origin == constraints.constraintOrigin( QgsFieldConstraints::ConstraintUnique ) ) )
{
bool exempt = false;
if ( fields.fieldOrigin( attributeIndex ) == QgsFields::OriginProvider
if ( fields.fieldOrigin( attributeIndex ) == Qgis::FieldOrigin::Provider
&& constraints.constraintOrigin( QgsFieldConstraints::ConstraintNotNull ) == QgsFieldConstraints::ConstraintOriginProvider )
{
int providerIdx = fields.fieldOriginIndex( attributeIndex );
@ -571,7 +571,7 @@ QgsFeatureList QgsVectorLayerUtils::createFeatures( const QgsVectorLayer *layer,
// note - not an else if deliberately. Users may return null from a default value expression to fallback to provider defaults
if ( ( QgsVariantUtils::isNull( v ) || ( hasUniqueConstraint
&& checkUniqueValue( idx, v ) ) )
&& fields.fieldOrigin( idx ) == QgsFields::OriginProvider )
&& fields.fieldOrigin( idx ) == Qgis::FieldOrigin::Provider )
{
int providerIndex = fields.fieldOriginIndex( idx );
QString providerDefault = layer->dataProvider()->defaultValueClause( providerIndex );
@ -587,7 +587,7 @@ QgsFeatureList QgsVectorLayerUtils::createFeatures( const QgsVectorLayer *layer,
if ( ( QgsVariantUtils::isNull( v ) || ( checkUnique
&& hasUniqueConstraint
&& checkUniqueValue( idx, v ) ) )
&& fields.fieldOrigin( idx ) == QgsFields::OriginProvider )
&& fields.fieldOrigin( idx ) == Qgis::FieldOrigin::Provider )
{
int providerIndex = fields.fieldOriginIndex( idx );
v = layer->dataProvider()->defaultValue( providerIndex );
@ -898,7 +898,7 @@ bool _fieldIsEditable( const QgsVectorLayer *layer, int fieldIndex, const QgsFea
bool QgsVectorLayerUtils::fieldIsReadOnly( const QgsVectorLayer *layer, int fieldIndex )
{
if ( layer->fields().fieldOrigin( fieldIndex ) == QgsFields::OriginJoin )
if ( layer->fields().fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *info = layer->joinBuffer()->joinForFieldIndex( fieldIndex, layer->fields(), srcFieldIndex );
@ -926,7 +926,7 @@ bool QgsVectorLayerUtils::fieldIsReadOnly( const QgsVectorLayer *layer, int fiel
bool QgsVectorLayerUtils::fieldEditabilityDependsOnFeature( const QgsVectorLayer *layer, int fieldIndex )
{
// editability will vary feature-by-feature only for joined fields
if ( layer->fields().fieldOrigin( fieldIndex ) == QgsFields::OriginJoin )
if ( layer->fields().fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *info = layer->joinBuffer()->joinForFieldIndex( fieldIndex, layer->fields(), srcFieldIndex );
@ -946,7 +946,7 @@ bool QgsVectorLayerUtils::fieldEditabilityDependsOnFeature( const QgsVectorLayer
bool QgsVectorLayerUtils::fieldIsEditable( const QgsVectorLayer *layer, int fieldIndex, const QgsFeature &feature )
{
if ( layer->fields().fieldOrigin( fieldIndex ) == QgsFields::OriginJoin )
if ( layer->fields().fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *info = layer->joinBuffer()->joinForFieldIndex( fieldIndex, layer->fields(), srcFieldIndex );

View File

@ -61,8 +61,8 @@ QgsAttributeTypeDialog::QgsAttributeTypeDialog( QgsVectorLayer *vl, int fieldIdx
connect( mWidgetTypeComboBox, static_cast< void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsAttributeTypeDialog::onCurrentWidgetChanged );
if ( vl->fields().fieldOrigin( fieldIdx ) == QgsFields::OriginJoin ||
vl->fields().fieldOrigin( fieldIdx ) == QgsFields::OriginExpression )
if ( vl->fields().fieldOrigin( fieldIdx ) == Qgis::FieldOrigin::Join ||
vl->fields().fieldOrigin( fieldIdx ) == Qgis::FieldOrigin::Expression )
{
isFieldEditableCheckBox->setEnabled( false );
}

View File

@ -26,7 +26,6 @@
#include "qgseditorwidgetregistry.h"
#include "qgseditorwidgetwrapper.h"
#include "qgsfeatureselectionmodel.h"
#include "qgslogger.h"
#include "qgsvectordataprovider.h"
#include "qgsactionmanager.h"
#include "qgsgui.h"
@ -80,9 +79,9 @@ QWidget *QgsAttributeTableDelegate::createEditor( QWidget *parent, const QStyleO
w->setAutoFillBackground( true );
w->setFocusPolicy( Qt::StrongFocus ); // to make sure QMouseEvents are propagated to the editor widget
const int fieldOrigin = vl->fields().fieldOrigin( fieldIdx );
const Qgis::FieldOrigin fieldOrigin = vl->fields().fieldOrigin( fieldIdx );
bool readOnly = true;
if ( fieldOrigin == QgsFields::OriginJoin )
if ( fieldOrigin == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *info = vl->joinBuffer()->joinForFieldIndex( fieldIdx, vl->fields(), srcFieldIndex );

View File

@ -1163,7 +1163,7 @@ QgsAttributeList QgsDualView::requiredAttributes( const QgsVectorLayer *layer )
const QSet<int> colAttrs { attributes };
for ( const int attrIdx : std::as_const( colAttrs ) )
{
if ( layer->fields().fieldOrigin( attrIdx ) == QgsFields::FieldOrigin::OriginExpression )
if ( layer->fields().fieldOrigin( attrIdx ) == Qgis::FieldOrigin::Expression )
{
attributes += QgsExpression( layer->expressionField( attrIdx ) ).referencedAttributeIndexes( layer->fields() );
}

View File

@ -17,24 +17,16 @@
#include <QMessageBox>
#include "qgsorganizetablecolumnsdialog.h"
#include "qgsattributetablemodel.h"
#include "qgsattributetablefiltermodel.h"
#include "qgsattributetableview.h"
#include "qgsdockwidget.h"
#include "qgsapplication.h"
#include "qgsvectordataprovider.h"
#include "qgsvectorlayer.h"
#include "qgsexpression.h"
#include "qgssearchquerybuilder.h"
#include "qgslogger.h"
#include "qgsmapcanvas.h"
#include "qgsproject.h"
#include "qgsexpressionbuilderdialog.h"
#include "qgsmessagebar.h"
#include "qgsexpressionselectiondialog.h"
#include "qgsfeaturelistmodel.h"
#include "qgsrubberband.h"
#include "qgsfields.h"
#include "qgseditorwidgetregistry.h"
@ -75,11 +67,11 @@ QgsOrganizeTableColumnsDialog::QgsOrganizeTableColumnsDialog( const QgsVectorLay
switch ( vl->fields().fieldOrigin( idx ) )
{
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Expression:
item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpression.svg" ) ) );
break;
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/join.svg" ) ) );
break;

View File

@ -95,7 +95,7 @@ QgsEditorWidgetSetup QgsEditorWidgetAutoConf::editorWidgetSetup( const QgsVector
if ( fieldIndex >= 0 )
{
if ( vl->fields().fieldOrigin( fieldIndex ) == QgsFields::OriginProvider )
if ( vl->fields().fieldOrigin( fieldIndex ) == Qgis::FieldOrigin::Provider )
{
// important check - for provider fields, we CANNOT use auto configured widgets if the field
// uses a default value clause - otherwise the widget will obliterate the default value clause

View File

@ -42,7 +42,6 @@
#include "qgsrelationmanager.h"
#include "qgslogger.h"
#include "qgstabwidget.h"
#include "qgssettings.h"
#include "qgsscrollarea.h"
#include "qgsvectorlayerjoinbuffer.h"
#include "qgsvectorlayerutils.h"
@ -1174,7 +1173,7 @@ void QgsAttributeForm::updateConstraint( const QgsFeature &ft, QgsEditorWidgetWr
QgsFieldConstraints::ConstraintOrigin constraintOrigin = mLayer->isEditable() ? QgsFieldConstraints::ConstraintOriginNotSet : QgsFieldConstraints::ConstraintOriginLayer;
if ( eww->layer()->fields().fieldOrigin( eww->fieldIdx() ) == QgsFields::OriginJoin )
if ( eww->layer()->fields().fieldOrigin( eww->fieldIdx() ) == Qgis::FieldOrigin::Join )
{
int srcFieldIdx;
const QgsVectorLayerJoinInfo *info = eww->layer()->joinBuffer()->joinForFieldIndex( eww->fieldIdx(), eww->layer()->fields(), srcFieldIdx );
@ -3255,7 +3254,7 @@ void QgsAttributeForm::updateIcon( QgsEditorWidgetWrapper *eww )
if ( !eww->widget()->isEnabled() && mLayer->isEditable() )
{
if ( mLayer->fields().fieldOrigin( eww->fieldIdx() ) == QgsFields::OriginJoin )
if ( mLayer->fields().fieldOrigin( eww->fieldIdx() ) == Qgis::FieldOrigin::Join )
{
int srcFieldIndex;
const QgsVectorLayerJoinInfo *info = mLayer->joinBuffer()->joinForFieldIndex( eww->fieldIdx(), mLayer->fields(), srcFieldIndex );

View File

@ -1080,8 +1080,8 @@ QgsAttributesFormProperties::FieldConfig::FieldConfig( QgsVectorLayer *layer, in
mDataDefinedProperties = layer->editFormConfig().dataDefinedFieldProperties( layer->fields().at( idx ).name() );
mComment = layer->fields().at( idx ).comment();
mEditable = !layer->editFormConfig().readOnly( idx );
mEditableEnabled = layer->fields().fieldOrigin( idx ) != QgsFields::OriginJoin
&& layer->fields().fieldOrigin( idx ) != QgsFields::OriginExpression;
mEditableEnabled = layer->fields().fieldOrigin( idx ) != Qgis::FieldOrigin::Join
&& layer->fields().fieldOrigin( idx ) != Qgis::FieldOrigin::Expression;
mLabelOnTop = layer->editFormConfig().labelOnTop( idx );
mReuseLastValues = layer->editFormConfig().reuseLastValue( idx );
mFieldConstraints = layer->fields().at( idx ).constraints();

View File

@ -491,16 +491,16 @@ void QgsFieldCalculator::populateFields()
{
switch ( fields.fieldOrigin( idx ) )
{
case QgsFields::OriginExpression:
case QgsFields::OriginUnknown:
case Qgis::FieldOrigin::Expression:
case Qgis::FieldOrigin::Unknown:
continue; // can't be edited
case QgsFields::OriginProvider:
case QgsFields::OriginEdit:
case Qgis::FieldOrigin::Provider:
case Qgis::FieldOrigin::Edit:
break; // can always be edited
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
{
// show joined fields (e.g. auxiliary fields) only if they have a non-hidden editor widget.
// This enables them to be bulk field-calculated when a user needs to, but hides them by default

View File

@ -163,12 +163,12 @@ void QgsSourceFieldsProperties::attributeAdded( int idx )
switch ( mLayer->fields().fieldOrigin( idx ) )
{
case QgsFields::OriginExpression:
case Qgis::FieldOrigin::Expression:
if ( i == 7 ) continue;
mFieldsList->item( row, i )->setBackground( expressionColor );
break;
case QgsFields::OriginJoin:
case Qgis::FieldOrigin::Join:
mFieldsList->item( row, i )->setBackground( joinColor );
break;
@ -213,7 +213,7 @@ void QgsSourceFieldsProperties::setRow( int row, int idx, const QgsField &field
mFieldsList->setItem( row, AttrLengthCol, new QTableWidgetItem( QString::number( field.length() ) ) );
mFieldsList->setItem( row, AttrPrecCol, new QTableWidgetItem( QString::number( field.precision() ) ) );
if ( mLayer->fields().fieldOrigin( idx ) == QgsFields::OriginExpression )
if ( mLayer->fields().fieldOrigin( idx ) == Qgis::FieldOrigin::Expression )
{
QWidget *expressionWidget = new QWidget;
expressionWidget->setLayout( new QHBoxLayout );
@ -245,7 +245,7 @@ void QgsSourceFieldsProperties::setRow( int row, int idx, const QgsField &field
const auto constNotEditableCols = notEditableCols;
for ( const int i : constNotEditableCols )
{
if ( notEditableCols[i] != AttrCommentCol || mLayer->fields().fieldOrigin( idx ) != QgsFields::OriginExpression )
if ( notEditableCols[i] != AttrCommentCol || mLayer->fields().fieldOrigin( idx ) != Qgis::FieldOrigin::Expression )
mFieldsList->item( row, i )->setFlags( mFieldsList->item( row, i )->flags() & ~Qt::ItemIsEditable );
if ( notEditableCols[i] == AttrAliasCol )
mFieldsList->item( row, i )->setToolTip( tr( "Edit alias in the Form config tab" ) );
@ -347,7 +347,7 @@ void QgsSourceFieldsProperties::deleteAttributeClicked()
if ( idx < 0 )
continue;
if ( mLayer->fields().fieldOrigin( idx ) == QgsFields::OriginExpression )
if ( mLayer->fields().fieldOrigin( idx ) == Qgis::FieldOrigin::Expression )
expressionFields << idx;
else
providerFields << idx;
@ -444,7 +444,7 @@ void QgsSourceFieldsProperties::updateButtons()
if ( item->column() == 0 )
{
const int idx = mIndexedWidgets.indexOf( item );
if ( mLayer->fields().fieldOrigin( idx ) != QgsFields::OriginExpression )
if ( mLayer->fields().fieldOrigin( idx ) != Qgis::FieldOrigin::Expression )
{
mDeleteAttributeButton->setEnabled( false );
break;

View File

@ -4687,7 +4687,7 @@ class TestQgsExpression: public QObject
f.setFields( fields );
//also add a joined field - this will not be available in feature's field collection
fields.append( QgsField( QStringLiteral( "j1" ), QVariant::String ), QgsFields::OriginJoin, 1 );
fields.append( QgsField( QStringLiteral( "j1" ), QVariant::String ), Qgis::FieldOrigin::Join, 1 );
f.setAttributes( QgsAttributes() << QVariant( "f1" ) << QVariant( "j1" ) );
f.setValid( true );

View File

@ -267,7 +267,7 @@ void TestQgsFields::extend()
QgsFields source;
const QgsField field3( QStringLiteral( "testfield3" ) );
source.append( field3, QgsFields::OriginJoin, 5 );
source.append( field3, Qgis::FieldOrigin::Join, 5 );
const QgsField field4( QStringLiteral( "testfield4" ) );
source.append( field4 );
@ -314,34 +314,34 @@ void TestQgsFields::fieldOrigin()
{
QgsFields fields;
const QgsField field( QStringLiteral( "testfield" ) );
fields.append( field, QgsFields::OriginJoin );
fields.append( field, Qgis::FieldOrigin::Join );
const QgsField field2( QStringLiteral( "testfield2" ) );
fields.append( field2, QgsFields::OriginExpression );
fields.append( field2, Qgis::FieldOrigin::Expression );
QCOMPARE( fields.fieldOrigin( 0 ), QgsFields::OriginJoin );
QCOMPARE( fields.fieldOrigin( 1 ), QgsFields::OriginExpression );
QCOMPARE( fields.fieldOrigin( 2 ), QgsFields::OriginUnknown );
QCOMPARE( fields.fieldOrigin( 0 ), Qgis::FieldOrigin::Join );
QCOMPARE( fields.fieldOrigin( 1 ), Qgis::FieldOrigin::Expression );
QCOMPARE( fields.fieldOrigin( 2 ), Qgis::FieldOrigin::Unknown );
}
void TestQgsFields::fieldOriginIndex()
{
QgsFields fields;
const QgsField field( QStringLiteral( "testfield" ) );
fields.append( field, QgsFields::OriginProvider, 5 );
fields.append( field, Qgis::FieldOrigin::Provider, 5 );
QCOMPARE( fields.fieldOriginIndex( 0 ), 5 );
const QgsField field2( QStringLiteral( "testfield2" ) );
fields.append( field2, QgsFields::OriginProvider, 10 );
fields.append( field2, Qgis::FieldOrigin::Provider, 10 );
QCOMPARE( fields.fieldOriginIndex( 1 ), 10 );
const QgsField field3( QStringLiteral( "testfield3" ) );
//field origin index not specified with OriginProvider, should be automatic
fields.append( field3, QgsFields::OriginProvider );
fields.append( field3, Qgis::FieldOrigin::Provider );
QCOMPARE( fields.fieldOriginIndex( 2 ), 2 );
const QgsField field4( QStringLiteral( "testfield4" ) );
//field origin index not specified with other than OriginProvider, should remain -1
fields.append( field4, QgsFields::OriginEdit );
fields.append( field4, Qgis::FieldOrigin::Edit );
QCOMPARE( fields.fieldOriginIndex( 3 ), -1 );
}
@ -435,7 +435,7 @@ void TestQgsFields::appendExpressionField()
const QgsField exprField( QStringLiteral( "expression" ) );
QVERIFY( fields.appendExpressionField( exprField, 5 ) );
QCOMPARE( fields.count(), 3 );
QCOMPARE( fields.fieldOrigin( 2 ), QgsFields::OriginExpression );
QCOMPARE( fields.fieldOrigin( 2 ), Qgis::FieldOrigin::Expression );
QCOMPARE( fields.fieldOriginIndex( 2 ), 5 );
}
@ -485,22 +485,22 @@ void TestQgsFields::field()
original.setPrecision( 2 );
//test constructors for QgsFields::Field
const QgsFields::Field fieldConstructor1( original, QgsFields::OriginJoin, 5 );
const QgsFields::Field fieldConstructor1( original, Qgis::FieldOrigin::Join, 5 );
QCOMPARE( fieldConstructor1.field, original );
QCOMPARE( fieldConstructor1.origin, QgsFields::OriginJoin );
QCOMPARE( fieldConstructor1.origin, Qgis::FieldOrigin::Join );
QCOMPARE( fieldConstructor1.originIndex, 5 );
const QgsFields::Field fieldConstructor2;
QCOMPARE( fieldConstructor2.origin, QgsFields::OriginUnknown );
QCOMPARE( fieldConstructor2.origin, Qgis::FieldOrigin::Unknown );
QCOMPARE( fieldConstructor2.originIndex, -1 );
//test equality operators
const QgsFields::Field field1( original, QgsFields::OriginJoin, 5 );
const QgsFields::Field field2( original, QgsFields::OriginJoin, 5 );
const QgsFields::Field field1( original, Qgis::FieldOrigin::Join, 5 );
const QgsFields::Field field2( original, Qgis::FieldOrigin::Join, 5 );
QVERIFY( field1 == field2 );
const QgsFields::Field field3( original, QgsFields::OriginEdit, 5 );
const QgsFields::Field field3( original, Qgis::FieldOrigin::Edit, 5 );
QVERIFY( field1 != field3 );
const QgsFields::Field field4( original, QgsFields::OriginJoin, 6 );
const QgsFields::Field field4( original, Qgis::FieldOrigin::Join, 6 );
QVERIFY( field1 != field4 );
}