Skip to content

Commit 7f9ca4b

Browse files
authored
Integrate some things for filtering (#4446)
1 parent 97c87f9 commit 7f9ca4b

13 files changed

Lines changed: 424 additions & 573 deletions

app/filter/uniquevaluesfiltermodel.cpp

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,8 @@
1515
#include <QtConcurrentRun>
1616

1717

18-
UniqueValuesFilterModel::UniqueValuesFilterModel( QObject *parent )
19-
: QAbstractListModel( parent )
18+
UniqueValuesFilterModel::UniqueValuesFilterModel( QObject *parent ) : QAbstractListModel( parent )
2019
{
21-
// <TODO> remove me once this class is used! :)
22-
const QMap<QString, QgsMapLayer *> layers = QgsProject::instance()->mapLayers();
23-
for ( auto it = layers.constBegin(); it != layers.constEnd(); ++it )
24-
{
25-
QgsVectorLayer *vectorLayer = qobject_cast<QgsVectorLayer *>( it.value() );
26-
if ( vectorLayer )
27-
{
28-
setLayer( vectorLayer );
29-
setFieldName( "fid" );
30-
break;
31-
}
32-
}
33-
// </TODO>
34-
3520
connect( &mResultWatcher, &QFutureWatcher<QVariantList>::finished, this, &UniqueValuesFilterModel::onLoadingFinished );
3621
}
3722

@@ -55,18 +40,18 @@ QVariant UniqueValuesFilterModel::data( const QModelIndex &index, int role ) con
5540
}
5641
}
5742

58-
QgsVectorLayer *UniqueValuesFilterModel::layer() const
43+
QString UniqueValuesFilterModel::layerId() const
5944
{
60-
return mLayer;
45+
return mLayerId;
6146
}
6247

63-
void UniqueValuesFilterModel::setLayer( QgsVectorLayer *layer )
48+
void UniqueValuesFilterModel::setLayerId( const QString &layerId )
6449
{
65-
if ( mLayer == layer )
50+
if ( mLayerId == layerId )
6651
return;
6752

68-
mLayer = layer;
69-
emit layerChanged();
53+
mLayerId = layerId;
54+
emit layerIdChanged();
7055
}
7156

7257
QString UniqueValuesFilterModel::fieldName() const
@@ -85,21 +70,30 @@ void UniqueValuesFilterModel::setFieldName( const QString &fieldName )
8570

8671
void UniqueValuesFilterModel::populate()
8772
{
88-
if ( !mLayer || mFieldName.isEmpty() )
89-
return;
73+
if ( mLayerId.isEmpty() || mFieldName.isEmpty() ) return;
74+
75+
QgsMapLayer *mapLayer = QgsProject::instance()->mapLayer( mLayerId );
76+
if ( !mapLayer )
77+
{
78+
CoreUtils::log( QStringLiteral( "Filtering" ), QStringLiteral( "Could not get layer %1" ).arg( mLayerId ) );
79+
}
80+
QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( mapLayer );
81+
82+
if ( !layer ) return;
9083

91-
int fieldIndex = mLayer->fields().lookupField( mFieldName );
84+
int fieldIndex = layer->fields().lookupField( mFieldName );
9285
if ( fieldIndex < 0 )
9386
{
9487
CoreUtils::log( QStringLiteral( "Filtering" ), QStringLiteral( "Error, field %1 could not be found, dropdown filter won't work." ).arg( mFieldName ) );
9588
return;
9689
}
9790

91+
// model already populated?
9892
if ( mItems.size() > 0 ) return;
9993

10094
if ( mResultWatcher.isRunning() ) return;
10195

102-
QgsVectorLayer *layerClone = mLayer->clone();
96+
QgsVectorLayer *layerClone = layer->clone();
10397

10498
mResultWatcher.setFuture( QtConcurrent::run( &UniqueValuesFilterModel::loadUniqueValues, this, layerClone, fieldIndex ) );
10599
}

app/filter/uniquevaluesfiltermodel.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class UniqueValuesFilterModel : public QAbstractListModel
2222
Q_OBJECT
2323
QML_ELEMENT
2424

25-
Q_PROPERTY( QgsVectorLayer *layer READ layer WRITE setLayer NOTIFY layerChanged )
25+
Q_PROPERTY( QString layerId READ layerId WRITE setLayerId NOTIFY layerIdChanged )
2626
Q_PROPERTY( QString fieldName READ fieldName WRITE setFieldName NOTIFY fieldNameChanged )
2727

2828
public:
@@ -32,16 +32,16 @@ class UniqueValuesFilterModel : public QAbstractListModel
3232
int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
3333
QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
3434

35-
QgsVectorLayer *layer() const;
36-
void setLayer( QgsVectorLayer *layer );
35+
QString layerId() const;
36+
void setLayerId( const QString &layerId );
3737

3838
QString fieldName() const;
3939
void setFieldName( const QString &fieldName );
4040

4141
Q_INVOKABLE void populate();
4242

4343
signals:
44-
void layerChanged();
44+
void layerIdChanged();
4545
void fieldNameChanged();
4646

4747
public slots:
@@ -50,7 +50,7 @@ class UniqueValuesFilterModel : public QAbstractListModel
5050
private:
5151
QVariantList loadUniqueValues( QgsVectorLayer *layer, int fieldIndex );
5252

53-
QgsVectorLayer *mLayer = nullptr;
53+
QString mLayerId;
5454
QString mFieldName;
5555

5656
QVariantList mItems;

0 commit comments

Comments
 (0)