Skip to content

Commit 715677e

Browse files
committed
move getValues, getDoubleValues to vector layer utils source file
1 parent 8495e8b commit 715677e

11 files changed

+227
-172
lines changed

python/core/qgsvectorlayer.sip.in

-34
Original file line numberDiff line numberDiff line change
@@ -2013,40 +2013,6 @@ Calculates an aggregated value from the layer's features.
20132013
:return: calculated aggregate value
20142014

20152015
.. versionadded:: 2.16
2016-
%End
2017-
2018-
QList< QVariant > getValues( const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, QgsFeedback *feedback = 0 ) const;
2019-
%Docstring
2020-
Fetches all values from a specified field name or expression.
2021-
2022-
:param fieldOrExpression: field name or an expression string
2023-
:param ok: will be set to false if field or expression is invalid, otherwise true
2024-
:param selectedOnly: set to true to get values from selected features only
2025-
:param feedback: optional feedback object to allow cancelation
2026-
2027-
:return: list of fetched values
2028-
2029-
.. versionadded:: 2.9
2030-
2031-
.. seealso:: :py:func:`getDoubleValues`
2032-
%End
2033-
2034-
QList< double > getDoubleValues( const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, int *nullCount = 0, QgsFeedback *feedback = 0 ) const;
2035-
%Docstring
2036-
Fetches all double values from a specified field name or expression. Null values or
2037-
invalid expression results are skipped.
2038-
2039-
:param fieldOrExpression: field name or an expression string evaluating to a double value
2040-
:param ok: will be set to false if field or expression is invalid, otherwise true
2041-
:param selectedOnly: set to true to get values from selected features only
2042-
:param nullCount: optional pointer to integer to store number of null values encountered in
2043-
:param feedback: optional feedback object to allow cancelation
2044-
2045-
:return: list of fetched values
2046-
2047-
.. versionadded:: 2.9
2048-
2049-
.. seealso:: :py:func:`getValues`
20502016
%End
20512017

20522018
void setFeatureBlendMode( QPainter::CompositionMode blendMode );

python/core/qgsvectorlayerutils.sip.in

+50
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,56 @@ Returns the duplicated features in the given layer
5757

5858
};
5959

60+
static QgsFeatureIterator getValuesIterator( const QgsVectorLayer *layer, const QString &fieldOrExpression, bool &ok, bool selectedOnly );
61+
%Docstring
62+
Create a feature iterator for a specified field name or expression.
63+
64+
:param layer: vector layer to retrieve values from
65+
:param fieldOrExpression: field name or an expression string
66+
:param ok: will be set to false if field or expression is invalid, otherwise true
67+
:param selectedOnly: set to true to get values from selected features only
68+
69+
:return: feature iterator
70+
71+
.. versionadded:: 3.0
72+
%End
73+
74+
static QList< QVariant > getValues( const QgsVectorLayer *layer, const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, QgsFeedback *feedback = 0 );
75+
%Docstring
76+
Fetches all values from a specified field name or expression.
77+
78+
:param layer: vector layer to retrieve values from
79+
:param fieldOrExpression: field name or an expression string
80+
:param ok: will be set to false if field or expression is invalid, otherwise true
81+
:param selectedOnly: set to true to get values from selected features only
82+
:param feedback: optional feedback object to allow cancelation
83+
84+
:return: list of fetched values
85+
86+
.. versionadded:: 3.0
87+
88+
.. seealso:: :py:func:`getDoubleValues`
89+
%End
90+
91+
static QList< double > getDoubleValues( const QgsVectorLayer *layer, const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, int *nullCount = 0, QgsFeedback *feedback = 0 );
92+
%Docstring
93+
Fetches all double values from a specified field name or expression. Null values or
94+
invalid expression results are skipped.
95+
96+
:param layer: vector layer to retrieve values from
97+
:param fieldOrExpression: field name or an expression string evaluating to a double value
98+
:param ok: will be set to false if field or expression is invalid, otherwise true
99+
:param selectedOnly: set to true to get values from selected features only
100+
:param nullCount: optional pointer to integer to store number of null values encountered in
101+
:param feedback: optional feedback object to allow cancelation
102+
103+
:return: list of fetched values
104+
105+
.. versionadded:: 3.0
106+
107+
.. seealso:: :py:func:`getValues`
108+
%End
109+
60110
static bool valueExists( const QgsVectorLayer *layer, int fieldIndex, const QVariant &value, const QgsFeatureIds &ignoreIds = QgsFeatureIds() );
61111
%Docstring
62112
Returns true if the specified value already exists within a field. This method can be used to test for uniqueness

src/app/qgsstatisticalsummarydockwidget.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "qgsdockwidget.h"
2525
#include "qgsfeedback.h"
2626
#include "qgsvectorlayer.h"
27+
#include "qgsvectorlayerutils.h"
2728
#include "qgis_app.h"
2829

2930
class QMenu;
@@ -60,7 +61,7 @@ class QgsStatisticsValueGatherer: public QThread
6061
connect( mFeedback, &QgsFeedback::progressChanged, this, &QgsStatisticsValueGatherer::progressChanged );
6162

6263
bool ok;
63-
mValues = mLayer->getValues( mExpression, ok, mSelectedOnly, mFeedback );
64+
mValues = QgsVectorLayerUtils::getValues( mLayer, mExpression, ok, mSelectedOnly, mFeedback );
6465
if ( !ok )
6566
{
6667
mWasCanceled = true;

src/core/qgshistogram.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include "qgsstatisticalsummary.h"
2121
#include "qgsvectorlayer.h"
22+
#include "qgsvectorlayerutils.h"
2223

2324
void QgsHistogram::prepareValues()
2425
{
@@ -45,7 +46,7 @@ bool QgsHistogram::setValues( const QgsVectorLayer *layer, const QString &fieldO
4546
return false;
4647

4748
bool ok;
48-
mValues = layer->getDoubleValues( fieldOrExpression, ok, false, nullptr, feedback );
49+
mValues = QgsVectorLayerUtils::getDoubleValues( layer, fieldOrExpression, ok, false, nullptr, feedback );
4950
if ( !ok )
5051
return false;
5152

src/core/qgsvectorlayer.cpp

-100
Original file line numberDiff line numberDiff line change
@@ -3655,106 +3655,6 @@ QVariant QgsVectorLayer::aggregate( QgsAggregateCalculator::Aggregate aggregate,
36553655
return c.calculate( aggregate, fieldOrExpression, context, ok );
36563656
}
36573657

3658-
QList<QVariant> QgsVectorLayer::getValues( const QString &fieldOrExpression, bool &ok, bool selectedOnly, QgsFeedback *feedback ) const
3659-
{
3660-
QList<QVariant> values;
3661-
3662-
std::unique_ptr<QgsExpression> expression;
3663-
QgsExpressionContext context;
3664-
3665-
int attrNum = mFields.lookupField( fieldOrExpression );
3666-
3667-
if ( attrNum == -1 )
3668-
{
3669-
// try to use expression
3670-
expression.reset( new QgsExpression( fieldOrExpression ) );
3671-
context.appendScopes( QgsExpressionContextUtils::globalProjectLayerScopes( this ) );
3672-
3673-
if ( expression->hasParserError() || !expression->prepare( &context ) )
3674-
{
3675-
ok = false;
3676-
return values;
3677-
}
3678-
}
3679-
3680-
QgsFeature f;
3681-
QSet<QString> lst;
3682-
if ( !expression )
3683-
lst.insert( fieldOrExpression );
3684-
else
3685-
lst = expression->referencedColumns();
3686-
3687-
QgsFeatureRequest request = QgsFeatureRequest()
3688-
.setFlags( ( expression && expression->needsGeometry() ) ?
3689-
QgsFeatureRequest::NoFlags :
3690-
QgsFeatureRequest::NoGeometry )
3691-
.setSubsetOfAttributes( lst, fields() );
3692-
3693-
QgsFeatureIterator fit;
3694-
if ( !selectedOnly )
3695-
{
3696-
fit = getFeatures( request );
3697-
}
3698-
else
3699-
{
3700-
fit = getSelectedFeatures( request );
3701-
}
3702-
3703-
// create list of non-null attribute values
3704-
while ( fit.nextFeature( f ) )
3705-
{
3706-
if ( expression )
3707-
{
3708-
context.setFeature( f );
3709-
QVariant v = expression->evaluate( &context );
3710-
values << v;
3711-
}
3712-
else
3713-
{
3714-
values << f.attribute( attrNum );
3715-
}
3716-
if ( feedback && feedback->isCanceled() )
3717-
{
3718-
ok = false;
3719-
return values;
3720-
}
3721-
}
3722-
ok = true;
3723-
return values;
3724-
}
3725-
3726-
QList<double> QgsVectorLayer::getDoubleValues( const QString &fieldOrExpression, bool &ok, bool selectedOnly, int *nullCount, QgsFeedback *feedback ) const
3727-
{
3728-
QList<double> values;
3729-
3730-
if ( nullCount )
3731-
*nullCount = 0;
3732-
3733-
QList<QVariant> variantValues = getValues( fieldOrExpression, ok, selectedOnly, feedback );
3734-
if ( !ok )
3735-
return values;
3736-
3737-
bool convertOk;
3738-
Q_FOREACH ( const QVariant &value, variantValues )
3739-
{
3740-
double val = value.toDouble( &convertOk );
3741-
if ( convertOk )
3742-
values << val;
3743-
else if ( value.isNull() )
3744-
{
3745-
if ( nullCount )
3746-
*nullCount += 1;
3747-
}
3748-
if ( feedback && feedback->isCanceled() )
3749-
{
3750-
ok = false;
3751-
return values;
3752-
}
3753-
}
3754-
ok = true;
3755-
return values;
3756-
}
3757-
37583658
void QgsVectorLayer::setFeatureBlendMode( QPainter::CompositionMode featureBlendMode )
37593659
{
37603660
mFeatureBlendMode = featureBlendMode;

src/core/qgsvectorlayer.h

-26
Original file line numberDiff line numberDiff line change
@@ -1821,32 +1821,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
18211821
QgsExpressionContext *context = nullptr,
18221822
bool *ok = nullptr ) const;
18231823

1824-
/**
1825-
* Fetches all values from a specified field name or expression.
1826-
* \param fieldOrExpression field name or an expression string
1827-
* \param ok will be set to false if field or expression is invalid, otherwise true
1828-
* \param selectedOnly set to true to get values from selected features only
1829-
* \param feedback optional feedback object to allow cancelation
1830-
* \returns list of fetched values
1831-
* \since QGIS 2.9
1832-
* \see getDoubleValues
1833-
*/
1834-
QList< QVariant > getValues( const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, QgsFeedback *feedback = nullptr ) const;
1835-
1836-
/**
1837-
* Fetches all double values from a specified field name or expression. Null values or
1838-
* invalid expression results are skipped.
1839-
* \param fieldOrExpression field name or an expression string evaluating to a double value
1840-
* \param ok will be set to false if field or expression is invalid, otherwise true
1841-
* \param selectedOnly set to true to get values from selected features only
1842-
* \param nullCount optional pointer to integer to store number of null values encountered in
1843-
* \param feedback optional feedback object to allow cancelation
1844-
* \returns list of fetched values
1845-
* \since QGIS 2.9
1846-
* \see getValues
1847-
*/
1848-
QList< double > getDoubleValues( const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, int *nullCount = nullptr, QgsFeedback *feedback = nullptr ) const;
1849-
18501824
//! Set the blending mode used for rendering each feature
18511825
void setFeatureBlendMode( QPainter::CompositionMode blendMode );
18521826
//! Returns the current blending mode for features

0 commit comments

Comments
 (0)