Skip to content

Commit

Permalink
Simplify API
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Mar 27, 2021
1 parent 40ed793 commit 8f98880
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 33 deletions.
64 changes: 33 additions & 31 deletions src/core/vector/qgsvectorlayer.cpp
Expand Up @@ -4235,30 +4235,31 @@ QStringList QgsVectorLayer::uniqueStringsMatching( int index, const QString &sub
QVariant QgsVectorLayer::minimumValue( int index ) const
{
QVariant minimum;
QVariant maximum;
minimumOrMaximumValue( index, minimum, maximum, true, false );
minimumOrMaximumValue( index, &minimum, nullptr );
return minimum;
}

QVariant QgsVectorLayer::maximumValue( int index ) const
{
QVariant minimum;
QVariant maximum;
minimumOrMaximumValue( index, minimum, maximum, false, true );
minimumOrMaximumValue( index, nullptr, &maximum );
return maximum;
}

void QgsVectorLayer::minimumAndMaximumValue( int index, QVariant &minimum, QVariant &maximum ) const
{
minimumOrMaximumValue( index, minimum, maximum, true, true );
minimumOrMaximumValue( index, &minimum, &maximum );
}

void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant &minimum, QVariant &maximum, bool calculateMinimum, bool calculateMaximum ) const
void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant *minimum, QVariant *maximum ) const
{
if ( minimum )
*minimum = QVariant();
if ( maximum )
*maximum = QVariant();

if ( !mDataProvider )
{
minimum = QVariant();
maximum = QVariant();
return;
}

Expand All @@ -4268,15 +4269,15 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant &minimum, QVaria
{
case QgsFields::OriginUnknown:
{
minimum = QVariant();
maximum = QVariant();
return;
}

case QgsFields::OriginProvider: //a provider field
{
minimum = calculateMinimum ? mDataProvider->minimumValue( index ) : QVariant();
maximum = calculateMaximum ? mDataProvider->maximumValue( index ) : QVariant();
if ( minimum )
*minimum = mDataProvider->minimumValue( index );
if ( maximum )
*maximum = mDataProvider->maximumValue( index );
if ( mEditBuffer && ! mDataProvider->transaction() )
{
const QgsFeatureMap added = mEditBuffer->addedFeatures();
Expand All @@ -4285,21 +4286,21 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant &minimum, QVaria
{
addedIt.next();
const QVariant v = addedIt.value().attribute( index );
if ( calculateMinimum && v.isValid() && qgsVariantLessThan( v, minimum ) )
minimum = v;
if ( calculateMaximum && v.isValid() && qgsVariantGreaterThan( v, maximum ) )
maximum = v;
if ( minimum && v.isValid() && qgsVariantLessThan( v, *minimum ) )
*minimum = v;
if ( maximum && v.isValid() && qgsVariantGreaterThan( v, *maximum ) )
*maximum = v;
}

QMapIterator< QgsFeatureId, QgsAttributeMap > it( mEditBuffer->changedAttributeValues() );
while ( it.hasNext() )
{
it.next();
const QVariant v = it.value().value( index );
if ( calculateMinimum && v.isValid() && qgsVariantLessThan( v, minimum ) )
minimum = v;
if ( calculateMaximum && v.isValid() && qgsVariantGreaterThan( v, maximum ) )
maximum = v;
if ( minimum && v.isValid() && qgsVariantLessThan( v, *minimum ) )
*minimum = v;
if ( maximum && v.isValid() && qgsVariantGreaterThan( v, *maximum ) )
*maximum = v;
}
}
return;
Expand All @@ -4313,8 +4314,10 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant &minimum, QVaria
!mEditBuffer->deletedAttributeIds().contains( index ) &&
mEditBuffer->changedAttributeValues().isEmpty() ) )
{
minimum = calculateMinimum ? mDataProvider->minimumValue( index ) : QVariant();
maximum = calculateMaximum ? mDataProvider->maximumValue( index ) : QVariant();
if ( minimum )
*minimum = mDataProvider->minimumValue( index );
if ( maximum )
*maximum = mDataProvider->maximumValue( index );
return;
}
}
Expand All @@ -4323,9 +4326,6 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant &minimum, QVaria
case QgsFields::OriginExpression:
case QgsFields::OriginJoin:
{
minimum = QVariant();
maximum = QVariant();

// we need to go through each feature
QgsAttributeList attList;
attList << index;
Expand All @@ -4344,16 +4344,18 @@ void QgsVectorLayer::minimumOrMaximumValue( int index, QVariant &minimum, QVaria

if ( firstValue )
{
minimum = currentValue;
maximum = currentValue;
if ( minimum )
*minimum = currentValue;
if ( maximum )
*maximum = currentValue;
firstValue = false;
}
else
{
if ( calculateMinimum && currentValue.isValid() && qgsVariantLessThan( currentValue, minimum ) )
minimum = currentValue;
if ( calculateMaximum && currentValue.isValid() && qgsVariantGreaterThan( currentValue, maximum ) )
maximum = currentValue;
if ( minimum && currentValue.isValid() && qgsVariantLessThan( currentValue, *minimum ) )
*minimum = currentValue;
if ( maximum && currentValue.isValid() && qgsVariantGreaterThan( currentValue, *maximum ) )
*maximum = currentValue;
}
}
return;
Expand Down
3 changes: 1 addition & 2 deletions src/core/vector/qgsvectorlayer.h
Expand Up @@ -2868,9 +2868,8 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
QgsVectorLayer( const QgsVectorLayer &rhs );
#endif
//! Returns the minimum or maximum value
void minimumOrMaximumValue( int index, QVariant &minimum, QVariant &maximum, bool calculateMinimum, bool calculateMaximum ) const;
void minimumOrMaximumValue( int index, QVariant *minimum, QVariant *maximum ) const;

private: // Private attributes
QgsConditionalLayerStyles *mConditionalStyles = nullptr;

//! Pointer to data provider derived from the abastract base class QgsDataProvider
Expand Down

0 comments on commit 8f98880

Please sign in to comment.