@@ -45,7 +45,12 @@ void FilterController::clearLayerFilters( const QString &layerId )
4545
4646void FilterController::clearAllFilters ()
4747{
48- mFieldFilters .clear ();
48+ for ( FieldFilter &filter : mFieldFilters )
49+ {
50+ filter.value .clear ();
51+ }
52+ mFilteringEnabled = false ;
53+ emit hasFiltersEnabledChanged ();
4954
5055 const QMap<QString, QgsMapLayer *> layers = QgsProject::instance ()->mapLayers ();
5156 for ( auto it = layers.constBegin (); it != layers.constEnd (); ++it )
@@ -63,14 +68,15 @@ void FilterController::loadFilterConfig( const QgsProject *project )
6368 mFieldFilters .clear ();
6469
6570 bool valueRead = false ;
66- const bool filteringEnabled = project->readBoolEntry ( QStringLiteral ( " Mergin" ), QStringLiteral ( " Filtering/Enabled" ), false , &valueRead );
71+ const bool filteringAvailable = project->readBoolEntry ( QStringLiteral ( " Mergin" ), QStringLiteral ( " Filtering/Enabled" ), false , &valueRead );
6772
6873 // return early if filtering is not setup
6974 if ( !valueRead )
7075 {
7176 return ;
7277 }
73- mFilteringEnabled = filteringEnabled;
78+ mFilteringAvailable = filteringAvailable;
79+ emit hasFiltersAvailableChanged ();
7480
7581 const QString filtersDef = project->readEntry ( QStringLiteral ( " Mergin" ), QStringLiteral ( " Filtering/Filters" ) );
7682 QJsonParseError jsonError;
@@ -231,6 +237,12 @@ void FilterController::applyFiltersToLayer( QgsVectorLayer *layer )
231237 const QString filterExpr = generateFilterExpression ( layer->id () );
232238 const bool success = layer->setSubsetString ( filterExpr );
233239
240+ if ( !filterExpr.isEmpty () && success && !mFilteringEnabled )
241+ {
242+ mFilteringEnabled = true ;
243+ emit hasFiltersEnabledChanged ();
244+ }
245+
234246 qDebug () << " Applied filter to layer" << layer->name () << " :" << filterExpr << " success:" << success;
235247
236248 // Trigger a layer refresh to ensure the filter takes effect
@@ -242,7 +254,9 @@ void FilterController::applyFiltersToLayer( QgsVectorLayer *layer )
242254
243255void FilterController::applyFiltersToAllLayers ()
244256{
245- const bool hadFilters = mFilteringEnabled ;
257+ // Change filters enabled to false before enabling filters to find out if any are active
258+ mFilteringEnabled = false ;
259+ emit hasFiltersEnabledChanged ();
246260
247261 const QgsProject *project = QgsProject::instance ();
248262 if ( !project )
@@ -257,14 +271,6 @@ void FilterController::applyFiltersToAllLayers()
257271 applyFiltersToLayer ( vectorLayer );
258272 }
259273 }
260-
261- // TODO: probably can be removed
262- emit filtersChanged ();
263-
264- if ( hadFilters != mFilteringEnabled )
265- {
266- emit hasFiltersEnabledChanged ();
267- }
268274}
269275
270276bool FilterController::hasFiltersAvailable () const
0 commit comments