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
7257QString UniqueValuesFilterModel::fieldName () const
@@ -85,21 +70,30 @@ void UniqueValuesFilterModel::setFieldName( const QString &fieldName )
8570
8671void 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}
0 commit comments