QGIS API Documentation 3.43.0-Master (b60ef06885e)
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
6 email : matthias@opengis.ch
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
36 Q_PROPERTY( QgsVectorLayer *sourceLayer READ sourceLayer WRITE setSourceLayer NOTIFY sourceLayerChanged )
37 Q_PROPERTY( QString displayExpression READ displayExpression WRITE setDisplayExpression NOTIFY displayExpressionChanged )
38 Q_PROPERTY( QString filterValue READ filterValue WRITE setFilterValue NOTIFY filterValueChanged )
39 Q_PROPERTY( QString filterExpression READ filterExpression WRITE setFilterExpression NOTIFY filterExpressionChanged )
40 Q_PROPERTY( bool allowNull READ allowNull WRITE setAllowNull NOTIFY allowNullChanged )
41 Q_PROPERTY( bool fetchGeometry READ fetchGeometry WRITE setFetchGeometry NOTIFY fetchGeometryChanged )
42 Q_PROPERTY( int fetchLimit READ fetchLimit WRITE setFetchLimit NOTIFY fetchLimitChanged )
43 Q_PROPERTY( int extraIdentifierValueIndex READ extraIdentifierValueIndex NOTIFY extraIdentifierValueIndexChanged )
44
45 public:
46
47 // *INDENT-OFF*
48
56 {
57 IdentifierValue SIP_MONKEYPATCH_COMPAT_NAME(IdentifierValueRole) = Qt::UserRole,
58 IdentifierValues SIP_MONKEYPATCH_COMPAT_NAME(IdentifierValuesRole),
59 Value SIP_MONKEYPATCH_COMPAT_NAME(ValueRole),
60 Feature SIP_MONKEYPATCH_COMPAT_NAME(FeatureRole),
61 FeatureId SIP_MONKEYPATCH_COMPAT_NAME(FeatureIdRole)
62 };
63 Q_ENUM( CustomRole )
64 // *INDENT-ON*
65
66
69 explicit QgsFeaturePickerModelBase( QObject *parent = nullptr );
71
75 QgsVectorLayer *sourceLayer() const;
76
80 void setSourceLayer( QgsVectorLayer *sourceLayer );
81
88 QString displayExpression() const;
89
96 void setDisplayExpression( const QString &displayExpression );
97
103 QString filterValue() const;
104
110 void setFilterValue( const QString &filterValue );
111
112 QModelIndex index( int row, int column, const QModelIndex &parent ) const override;
113 QModelIndex parent( const QModelIndex &child ) const override;
114 int rowCount( const QModelIndex &parent ) const override;
115 int columnCount( const QModelIndex &parent ) const override
116 {
117 Q_UNUSED( parent )
118 return 1;
119 }
120 QVariant data( const QModelIndex &index, int role ) const override;
121
126 QString filterExpression() const;
127
132 void setFilterExpression( const QString &filterExpression );
133
138 QgsFeature formFeature() const;
139
144 void setFormFeature( const QgsFeature &feature );
145
150 QgsFeature parentFormFeature() const;
151
156 void setParentFormFeature( const QgsFeature &feature );
157
161 bool isLoading() const;
162
168
172 int extraIdentifierValueIndex() const;
173
177 bool extraValueDoesNotExist() const;
178
182 bool allowNull() const;
183
187 void setAllowNull( bool allowNull );
188
192 bool fetchGeometry() const;
193
197 void setFetchGeometry( bool fetchGeometry );
198
202 int fetchLimit() const;
203
208 void setFetchLimit( int fetchLimit );
209
210 signals:
211
219
224
232
239
245
251
257
262
267
273
278
283
288
292 void endUpdate();
293
298
303
308
309
310 private slots:
311 void updateCompleter();
312 void scheduledReload();
313
314 protected:
315
320 QVariant extraIdentifierValue() const;
321
326 void setExtraIdentifierValue( const QVariant &extraIdentifierValue );
327
330
332 void setExtraIdentifierValueUnguarded( const QVariant &identifierValue );
333
334#ifndef SIP_RUN
335
340 virtual QSet<QString> requestedAttributes() const {return {};}
341
343 virtual QgsFeatureExpressionValuesGatherer *createValuesGatherer( const QgsFeatureRequest &request ) const = 0;
344
346 virtual QgsFeatureExpressionValuesGatherer::Entry createEntry( const QVariant &identifier ) const = 0;
347
349 virtual QVariant entryIdentifier( const QgsFeatureExpressionValuesGatherer::Entry &entry ) const = 0;
350
352 virtual bool compareEntries( const QgsFeatureExpressionValuesGatherer::Entry &a, const QgsFeatureExpressionValuesGatherer::Entry &b ) const = 0;
353
355 virtual QVariant nullIdentifier() const = 0;
356
361 virtual bool identifierIsNull( const QVariant &identifier ) const = 0;
362
363 QVector<QgsFeatureExpressionValuesGatherer::Entry> mEntries;
364#endif
365
368
370 int mExtraValueIndex = -1;
371
372 private:
373 void setExtraIdentifierValueIndex( int index, bool force = false );
374 void setExtraValueDoesNotExist( bool extraValueDoesNotExist );
375 void reload();
376 void reloadCurrentFeature();
377 QSet<QString> requestedAttributesForStyle() const;
378
379 QgsConditionalStyle featureStyle( const QgsFeature &feature ) const;
380
381 QgsVectorLayer *mSourceLayer = nullptr;
382 QgsExpression mDisplayExpression;
383 QString mFilterValue;
384 QString mFilterExpression;
385
386 QgsFeature mFormFeature;
387 QgsFeature mParentFormFeature;
388
389 mutable QgsExpressionContext mExpressionContext;
390 mutable QMap< QgsFeatureId, QgsConditionalStyle > mEntryStylesMap;
391
392 QgsFeatureExpressionValuesGatherer *mGatherer = nullptr;
393 bool mFetchGeometry = true;
394 int mFetchLimit = 100;
395
396 QTimer mReloadTimer;
397 bool mShouldReloadCurrentFeature = false;
398 bool mKeepCurrentEntry = false; // need to keep the current value after a reload or if the value does not exist
399 bool mExtraValueDoesNotExist = false;
400 bool mAllowNull = false;
401 bool mIsSettingExtraIdentifierValue = false;
402
403 friend class TestQgsFeatureListComboBox;
404};
405
406#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.
virtual void setExtraIdentifierValueToNull()=0
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.
int columnCount(const QModelIndex &parent) const override
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 extraIdentifierValueChanged()
Allows specifying one value that does not need to match the filter criteria but will still be availab...
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.
void filterJobCompleted()
Indicates that a filter job has been completed and new data may be available.
QVariant mExtraIdentifierValue
The current identifier value.
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...
void fetchLimitChanged()
Emitted when the fetching limit for the feature request changes.
void sourceLayerChanged()
The source layer from which features will be fetched.
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 fetchGeometryChanged()
Emitted when the fetching of the geometry changes.
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.
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:271
#define SIP_ABSTRACT
Definition qgis_sip.h:213
#define SIP_MONKEYPATCH_COMPAT_NAME(FORMERNAME)
Definition qgis_sip.h:273