QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsfeaturepickermodelbase.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfeaturefiltermodel.h - QgsFeatureFilterModel
3 ---------------------
4 begin : 10.3.2017
5 copyright : (C) 2017 by Matthias Kuhn
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSFEATUREFILTERMODELBASE_H
16#define QGSFEATUREFILTERMODELBASE_H
17
18#include "qgsconditionalstyle.h"
20
21#include <QAbstractItemModel>
22#include <QTimer>
23
32class CORE_EXPORT QgsFeaturePickerModelBase : public QAbstractItemModel SIP_ABSTRACT
33{
34 Q_OBJECT
35
38 Q_PROPERTY( QString filterValue READ filterValue WRITE setFilterValue NOTIFY filterValueChanged )
41 Q_PROPERTY( Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder NOTIFY sortOrderChanged )
42 Q_PROPERTY( bool allowNull READ allowNull WRITE setAllowNull NOTIFY allowNullChanged )
44 Q_PROPERTY( int fetchLimit READ fetchLimit WRITE setFetchLimit NOTIFY fetchLimitChanged )
46
47 public:
48
49 // *INDENT-OFF*
50
58 {
59 IdentifierValue SIP_MONKEYPATCH_COMPAT_NAME(IdentifierValueRole) = Qt::UserRole,
60 IdentifierValues SIP_MONKEYPATCH_COMPAT_NAME(IdentifierValuesRole),
61 Value SIP_MONKEYPATCH_COMPAT_NAME(ValueRole),
62 Feature SIP_MONKEYPATCH_COMPAT_NAME(FeatureRole),
63 FeatureId SIP_MONKEYPATCH_COMPAT_NAME(FeatureIdRole)
64 };
65 Q_ENUM( CustomRole )
66 // *INDENT-ON*
67
68
71 explicit QgsFeaturePickerModelBase( QObject *parent = nullptr );
73
77 QgsVectorLayer *sourceLayer() const;
78
82 void setSourceLayer( QgsVectorLayer *sourceLayer );
83
90 QString displayExpression() const;
91
98 void setDisplayExpression( const QString &displayExpression );
99
105 QString filterValue() const;
106
112 void setFilterValue( const QString &filterValue );
113
114 QModelIndex index( int row, int column, const QModelIndex &parent ) const override;
115 QModelIndex parent( const QModelIndex &child ) const override;
116 int rowCount( const QModelIndex &parent ) const override;
117 int columnCount( const QModelIndex &parent ) const override
118 {
119 Q_UNUSED( parent )
120 return 1;
121 }
122 QVariant data( const QModelIndex &index, int role ) const override;
123
128 QString filterExpression() const;
129
134 void setFilterExpression( const QString &filterExpression );
135
140 QString orderExpression() const;
141
146 void setOrderExpression( const QString &orderExpression );
147
152 Qt::SortOrder sortOrder() const;
153
158 void setSortOrder( const Qt::SortOrder sortOrder );
159
160
165 QgsFeature formFeature() const;
166
171 void setFormFeature( const QgsFeature &feature );
172
177 QgsFeature parentFormFeature() const;
178
183 void setParentFormFeature( const QgsFeature &feature );
184
188 bool isLoading() const;
189
195
199 int extraIdentifierValueIndex() const;
200
204 bool extraValueDoesNotExist() const;
205
209 bool allowNull() const;
210
214 void setAllowNull( bool allowNull );
215
219 bool fetchGeometry() const;
220
224 void setFetchGeometry( bool fetchGeometry );
225
229 int fetchLimit() const;
230
235 void setFetchLimit( int fetchLimit );
236
237 signals:
238
246
251
259
266
272
279
286
292
298
303
308
314
319
324
329
333 void endUpdate();
334
339
344
349
350
351 private slots:
352 void updateCompleter();
353 void scheduledReload();
354
355 protected:
356
361 QVariant extraIdentifierValue() const;
362
367 void setExtraIdentifierValue( const QVariant &extraIdentifierValue );
368
371
373 void setExtraIdentifierValueUnguarded( const QVariant &identifierValue );
374
375#ifndef SIP_RUN
376
381 virtual QSet<QString> requestedAttributes() const {return {};}
382
384 virtual QgsFeatureExpressionValuesGatherer *createValuesGatherer( const QgsFeatureRequest &request ) const = 0;
385
387 virtual QgsFeatureExpressionValuesGatherer::Entry createEntry( const QVariant &identifier ) const = 0;
388
390 virtual QVariant entryIdentifier( const QgsFeatureExpressionValuesGatherer::Entry &entry ) const = 0;
391
393 virtual bool compareEntries( const QgsFeatureExpressionValuesGatherer::Entry &a, const QgsFeatureExpressionValuesGatherer::Entry &b ) const = 0;
394
396 virtual QVariant nullIdentifier() const = 0;
397
402 virtual bool identifierIsNull( const QVariant &identifier ) const = 0;
403
404 QVector<QgsFeatureExpressionValuesGatherer::Entry> mEntries;
405#endif
406
409
412
413 private:
414 void setExtraIdentifierValueIndex( int index, bool force = false );
415 void setExtraValueDoesNotExist( bool extraValueDoesNotExist );
416 void reload();
417 void reloadCurrentFeature();
418 QSet<QString> requestedAttributesForStyle() const;
419
420 QgsConditionalStyle featureStyle( const QgsFeature &feature ) const;
421
422 QgsVectorLayer *mSourceLayer = nullptr;
423 QgsExpression mDisplayExpression;
424 QString mFilterValue;
425 QString mFilterExpression;
426 QgsExpression mOrderExpression;
427 Qt::SortOrder mSortOrder = Qt::AscendingOrder;
428
429 QgsFeature mFormFeature;
430 QgsFeature mParentFormFeature;
431
432 mutable QgsExpressionContext mExpressionContext;
433 mutable QMap< QgsFeatureId, QgsConditionalStyle > mEntryStylesMap;
434
435 QgsFeatureExpressionValuesGatherer *mGatherer = nullptr;
436 bool mFetchGeometry = true;
437 int mFetchLimit = 100;
438
439 QTimer mReloadTimer;
440 bool mShouldReloadCurrentFeature = false;
441 bool mKeepCurrentEntry = false; // need to keep the current value after a reload or if the value does not exist
442 bool mExtraValueDoesNotExist = false;
443 bool mAllowNull = false;
444 bool mIsSettingExtraIdentifierValue = false;
445
447};
448
449#endif // QGSFEATUREFILTERMODELBASE_H
Conditional styling for a rule.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Handles parsing and evaluation of expressions (formerly called "search strings").
Provides a list of features based on filter conditions.
void extraIdentifierValueIndexChanged(int index)
The index at which the extra identifier value is available within the model.
void beginUpdate()
Notification that the model is about to be changed because a job was completed.
virtual QVariant entryIdentifier(const QgsFeatureExpressionValuesGatherer::Entry &entry) const =0
Returns the identifier of the given entry.
void filterValueChanged()
This value will be used to filter the features available from this model.
void setFilterValue(const QString &filterValue)
This value will be used to filter the features available from this model.
virtual void setExtraIdentifierValueToNull()=0
Allows specifying one value that does not need to match the filter criteria but will still be availab...
void setExtraIdentifierValue(const QVariant &extraIdentifierValue)
Allows specifying one value that does not need to match the filter criteria but will still be availab...
virtual void requestToReloadCurrentFeature(QgsFeatureRequest &request)=0
Update the request to match the current feature to be reloaded.
void parentFormFeatureChanged()
A parent attribute form feature to be used alongside the filter expression.
void filterExpressionChanged()
An additional filter expression to apply, next to the filterValue.
void setFetchLimit(int fetchLimit)
Defines the feature request fetch limit If set to 0, no limit is applied when fetching.
int columnCount(const QModelIndex &parent) const override
QVariant extraIdentifierValue() const
Allows specifying one value that does not need to match the filter criteria but will still be availab...
void extraValueDoesNotExistChanged(bool found)
Notification whether the model has found a feature tied to the extraIdentifierValue or not.
virtual QgsFeatureExpressionValuesGatherer * createValuesGatherer(const QgsFeatureRequest &request) const =0
Creates the value gatherer.
void setSortOrder(const Qt::SortOrder sortOrder)
The order direction will be used for sort values in the combobox.
void setFetchGeometry(bool fetchGeometry)
Defines if the geometry will be fetched.
void setExtraIdentifierValueUnguarded(const QVariant &identifierValue)
This will set the identifier value to be set in the model even if it doesn't exist currently in the d...
void extraIdentifierValueChanged()
Allows specifying one value that does not need to match the filter criteria but will still be availab...
void setOrderExpression(const QString &orderExpression)
The order expression will be used for sort values in the combobox.
virtual QSet< QString > requestedAttributes() const
Returns the attributes to be fetched in the request.
CustomRole
Extra roles that can be used to fetch data from this model.
QModelIndex parent(const QModelIndex &child) const override
void filterJobCompleted()
Indicates that a filter job has been completed and new data may be available.
void setAllowNull(bool allowNull)
Add a NULL entry to the list.
void setDisplayExpression(const QString &displayExpression)
The display expression will be used for.
QVariant mExtraIdentifierValue
The current identifier value.
QgsFeaturePickerModelBase(QObject *parent=nullptr)
Create a new QgsFeaturePickerModelBase, optionally specifying a parent.
virtual QgsFeatureExpressionValuesGatherer::Entry createEntry(const QVariant &identifier) const =0
Creates an entry with just the identifier so the feature can be retrieved in a next iteration.
virtual bool identifierIsNull(const QVariant &identifier) const =0
Returns true if the entry is null The identifier can be either the feature ID or the list of identifi...
QModelIndex index(int row, int column, const QModelIndex &parent) const override
void fetchLimitChanged()
Emitted when the fetching limit for the feature request changes.
void sourceLayerChanged()
The source layer from which features will be fetched.
void setFilterExpression(const QString &filterExpression)
An additional filter expression to apply, next to the filterValue.
void allowNullChanged()
Add a NULL entry to the list.
virtual bool compareEntries(const QgsFeatureExpressionValuesGatherer::Entry &a, const QgsFeatureExpressionValuesGatherer::Entry &b) const =0
Returns true if the 2 entries refers to the same feature.
void currentFeatureChanged()
Emitted when the current feature in the model has changed This emitted both when the extra value chan...
void orderExpressionChanged()
An expression for generating values for sorting.
void fetchGeometryChanged()
Emitted when the fetching of the geometry changes.
void sortOrderChanged()
The direction used for sorting.
void isLoadingChanged()
Indicator if the model is currently performing any feature iteration in the background.
void formFeatureChanged()
An attribute form feature to be used alongside the filter expression.
QVector< QgsFeatureExpressionValuesGatherer::Entry > mEntries
virtual QVariant nullIdentifier() const =0
Returns a null identifier.
void endUpdate()
Notification that the model change is finished.
void displayExpressionChanged()
The display expression will be used for.
void setSourceLayer(QgsVectorLayer *sourceLayer)
The source layer from which features will be fetched.
bool extraValueDoesNotExist() const
Flag indicating that the extraIdentifierValue does not exist in the data.
Wraps a request for features to a vector layer (or directly its vector data provider).
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:58
Represents a vector layer which manages a vector based dataset.
#define SIP_MONKEYPATCH_SCOPEENUM_UNNEST(OUTSIDE_CLASS, FORMERNAME)
Definition qgis_sip.h:268
#define SIP_ABSTRACT
Definition qgis_sip.h:221
#define SIP_MONKEYPATCH_COMPAT_NAME(FORMERNAME)
Definition qgis_sip.h:270