@@ -30,13 +30,13 @@ FilterController::FilterController( QObject *parent )
3030
3131void FilterController::clearLayerFilters ( const QString &layerId )
3232{
33- QgsMapLayer *layer = QgsProject::instance ()->mapLayers ().value (layerId);
33+ QgsMapLayer *layer = QgsProject::instance ()->mapLayers ().value ( layerId );
3434 QgsVectorLayer *vectorLayer = qobject_cast<QgsVectorLayer *>( layer );
35- vectorLayer->setSubsetString (QStringLiteral (" " ) );
35+ vectorLayer->setSubsetString ( QStringLiteral ( " " ) );
3636
3737 for ( FieldFilter filter : mFieldFilters )
3838 {
39- if (filter.layerId == layerId)
39+ if ( filter.layerId == layerId )
4040 {
4141 filter.value .clear ();
4242 }
@@ -48,15 +48,15 @@ void FilterController::clearAllFilters()
4848 mFieldFilters .clear ();
4949}
5050
51- void FilterController::loadFilterConfig (const QgsProject *project )
51+ void FilterController::loadFilterConfig ( const QgsProject *project )
5252{
5353 mFieldFilters .clear ();
5454
5555 bool valueRead = false ;
5656 const bool filteringEnabled = project->readBoolEntry ( QStringLiteral ( " Mergin" ), QStringLiteral ( " Filtering/Enabled" ), false , &valueRead );
5757
5858 // return early if filtering is not setup
59- if (!valueRead)
59+ if ( !valueRead )
6060 {
6161 return ;
6262 }
@@ -67,39 +67,44 @@ void FilterController::loadFilterConfig(const QgsProject *project )
6767 const QJsonDocument filtersRaw = QJsonDocument::fromJson ( filtersDef.toUtf8 (), &jsonError );
6868 if ( jsonError.error != QJsonParseError::NoError )
6969 {
70- CoreUtils::log (QStringLiteral (" Feature Filtering" ), QStringLiteral ( " Could not parse filters from json document." ) );
70+ CoreUtils::log ( QStringLiteral ( " Feature Filtering" ), QStringLiteral ( " Could not parse filters from json document." ) );
7171 return ;
7272 }
7373
7474 if ( !filtersRaw.isEmpty () && filtersRaw.isArray () )
7575 {
7676 const QJsonArray filtersArray = filtersRaw.array ();
77- for (auto filter = filtersArray.constBegin (); filter != filtersArray.constEnd (); ++filter)
77+ for ( auto filter = filtersArray.constBegin (); filter != filtersArray.constEnd (); ++filter )
7878 {
7979 FieldFilter newFieldFilter;
8080 QJsonObject filterObject = filter->toObject ();
8181
82- newFieldFilter.filterId = QUuid::createUuid ().toString (QUuid::WithoutBraces);
82+ newFieldFilter.filterId = QUuid::createUuid ().toString ( QUuid::WithoutBraces );
8383
8484 newFieldFilter.filterName = filterObject.value ( QStringLiteral ( " filter_name" ) ).toString ();
8585
8686 QString filterTypeRaw = filterObject.value ( QStringLiteral ( " filter_type" ) ).toString ();
8787 if ( filterTypeRaw == QStringLiteral ( " Text" ) )
8888 {
8989 newFieldFilter.filterType = FieldFilter::TextFilter;
90- } else if ( filterTypeRaw == QStringLiteral ( " Number" ) )
90+ }
91+ else if ( filterTypeRaw == QStringLiteral ( " Number" ) )
9192 {
9293 newFieldFilter.filterType = FieldFilter::NumberFilter;
93- } else if ( filterTypeRaw == QStringLiteral ( " Date" ) )
94+ }
95+ else if ( filterTypeRaw == QStringLiteral ( " Date" ) )
9496 {
9597 newFieldFilter.filterType = FieldFilter::DateFilter;
96- } else if ( filterTypeRaw == QStringLiteral ( " Checkbox" ) )
98+ }
99+ else if ( filterTypeRaw == QStringLiteral ( " Checkbox" ) )
97100 {
98101 newFieldFilter.filterType = FieldFilter::CheckboxFilter;
99- } else if ( filterTypeRaw == QStringLiteral ( " Single select" ) )
102+ }
103+ else if ( filterTypeRaw == QStringLiteral ( " Single select" ) )
100104 {
101105 newFieldFilter.filterType = FieldFilter::SingleSelectFilter;
102- } else if ( filterTypeRaw == QStringLiteral ( " Multi select" ) )
106+ }
107+ else if ( filterTypeRaw == QStringLiteral ( " Multi select" ) )
103108 {
104109 newFieldFilter.filterType = FieldFilter::MultiSelectFilter;
105110 }
@@ -109,39 +114,40 @@ void FilterController::loadFilterConfig(const QgsProject *project )
109114 newFieldFilter.sqlExpression = filterObject.value ( QStringLiteral ( " sql_expression" ) ).toString ();
110115 newFieldFilter.layerId = filterObject.value ( QStringLiteral ( " layer_id" ) ).toString ();
111116
112- mFieldFilters .append (newFieldFilter);
117+ mFieldFilters .append ( newFieldFilter );
113118 }
114119 }
115120}
116121
117122QString FilterController::buildFieldExpression ( const FieldFilter &filter ) const
118123{
119124 QString expressionCopy = filter.sqlExpression ;
120- switch (filter.filterType )
125+ switch ( filter.filterType )
121126 {
122127 case FieldFilter::TextFilter:
123128 {
124- const QString textValue = filter.value .toList ().at (0 ).toString ();
125- expressionCopy.replace (QStringLiteral ( " %%value%%" ), QgsExpression::quotedString (textValue) );
129+ const QString textValue = filter.value .toList ().at ( 0 ).toString ();
130+ expressionCopy.replace ( QStringLiteral ( " %%value%%" ), QgsExpression::quotedString ( textValue ) );
126131 break ;
127132 }
128133 case FieldFilter::CheckboxFilter:
129134 case FieldFilter::SingleSelectFilter:
130135 {
131- if (filter.value .toList ().at (0 ).typeId () == QMetaType::QString)
136+ if ( filter.value .toList ().at ( 0 ).typeId () == QMetaType::QString )
132137 {
133- expressionCopy.replace (QStringLiteral ( " %%value%%" ), QgsExpression::quotedString (filter.value .toList ().at (0 ).toString ()) );
134- } else
138+ expressionCopy.replace ( QStringLiteral ( " %%value%%" ), QgsExpression::quotedString ( filter.value .toList ().at ( 0 ).toString () ) );
139+ }
140+ else
135141 {
136- expressionCopy.replace (QStringLiteral ( " %%value%%" ), filter.value .toList ().at (0 ).toString () );
142+ expressionCopy.replace ( QStringLiteral ( " %%value%%" ), filter.value .toList ().at ( 0 ).toString () );
137143 }
138144
139145 break ;
140146 }
141147 case FieldFilter::NumberFilter:
142148 {
143- const QString valueFrom = filter.value .toList ().at (0 ).toString ();
144- const QString valueTo = filter.value .toList ().at (1 ).toString ();
149+ const QString valueFrom = filter.value .toList ().at ( 0 ).toString ();
150+ const QString valueTo = filter.value .toList ().at ( 1 ).toString ();
145151
146152 if ( valueFrom.isEmpty () || valueTo.isEmpty () )
147153 {
@@ -159,17 +165,17 @@ QString FilterController::buildFieldExpression( const FieldFilter &filter ) cons
159165 // so we must convert local datetimes to UTC before comparing.
160166 // Use a custom format to avoid the 'Z' suffix that Qt::ISODate adds for UTC.
161167 const QString isoFormat = QStringLiteral ( " yyyy-MM-ddTHH:mm:ss" );
162- const QString dateFrom = filter.value .toList ().at (0 ).toDateTime ().toUTC ().toString ( isoFormat );
163- const QString dateTo = filter.value .toList ().at (1 ).toDateTime ().toUTC ().toString ( isoFormat );
168+ const QString dateFrom = filter.value .toList ().at ( 0 ).toDateTime ().toUTC ().toString ( isoFormat );
169+ const QString dateTo = filter.value .toList ().at ( 1 ).toDateTime ().toUTC ().toString ( isoFormat );
164170
165171 if ( dateFrom.isEmpty () || dateTo.isEmpty () )
166172 {
167173 expressionCopy = {};
168174 break ;
169175 }
170176
171- expressionCopy.replace ( QStringLiteral ( " %%value_from%%" ), QgsExpression::quotedString (dateFrom) );
172- expressionCopy.replace ( QStringLiteral ( " %%value_to%%" ), QgsExpression::quotedString (dateTo) );
177+ expressionCopy.replace ( QStringLiteral ( " %%value_from%%" ), QgsExpression::quotedString ( dateFrom ) );
178+ expressionCopy.replace ( QStringLiteral ( " %%value_to%%" ), QgsExpression::quotedString ( dateTo ) );
173179 break ;
174180 }
175181 case FieldFilter::MultiSelectFilter:
@@ -186,7 +192,7 @@ QString FilterController::buildFieldExpression( const FieldFilter &filter ) cons
186192 {
187193 quotedValues << QgsExpression::quotedValue ( v );
188194 }
189- expressionCopy.replace (QStringLiteral ( " %%values%%" ), quotedValues.join ( QStringLiteral ( " , " ) ) );
195+ expressionCopy.replace ( QStringLiteral ( " %%values%%" ), quotedValues.join ( QStringLiteral ( " , " ) ) );
190196 break ;
191197 }
192198 }
@@ -198,9 +204,9 @@ QString FilterController::generateFilterExpression( const QString &layerId ) con
198204{
199205 QStringList expressions;
200206
201- for ( const FieldFilter& filter : mFieldFilters )
207+ for ( const FieldFilter & filter : mFieldFilters )
202208 {
203- if (filter.layerId != layerId) continue ;
209+ if ( filter.layerId != layerId ) continue ;
204210
205211 QString expr = buildFieldExpression ( filter );
206212 if ( !expr.isEmpty () )
@@ -269,7 +275,7 @@ bool FilterController::hasFiltersEnabled() const
269275 return mFilteringEnabled ;
270276}
271277
272- void FilterController::setFiltersEnabled (const bool filtersEnabled )
278+ void FilterController::setFiltersEnabled ( const bool filtersEnabled )
273279{
274280 if ( mFilteringEnabled != filtersEnabled )
275281 {
@@ -281,34 +287,34 @@ void FilterController::setFiltersEnabled(const bool filtersEnabled )
281287QVariantList FilterController::getFilters () const
282288{
283289 QVariantList uiFilters;
284- for (const FieldFilter &filter : mFieldFilters )
290+ for ( const FieldFilter &filter : mFieldFilters )
285291 {
286292 QVariantMap filterLite;
287- filterLite.insert (QStringLiteral ( " filterName" ), filter.filterName );
288- filterLite.insert (QStringLiteral ( " filterType" ), filter.filterType );
289- filterLite.insert (QStringLiteral ( " filterId" ), filter.filterId );
290- filterLite.insert (QStringLiteral ( " value" ), filter.value );
293+ filterLite.insert ( QStringLiteral ( " filterName" ), filter.filterName );
294+ filterLite.insert ( QStringLiteral ( " filterType" ), filter.filterType );
295+ filterLite.insert ( QStringLiteral ( " filterId" ), filter.filterId );
296+ filterLite.insert ( QStringLiteral ( " value" ), filter.value );
291297
292298 uiFilters.append ( filterLite );
293299 }
294300 return uiFilters;
295301}
296302
297- void FilterController::processFilters (const QVariantList& newFilters)
303+ void FilterController::processFilters ( const QVariantList & newFilters )
298304{
299305 // save all newFilter values to mFieldFilters values
300- for (const QVariant &newFilter : newFilters )
306+ for ( const QVariant &newFilter : newFilters )
301307 {
302308 QVariantMap newFilterMap = newFilter.toMap ();
303- if (newFilterMap[QStringLiteral (" value" )].isValid ())
309+ if ( newFilterMap[QStringLiteral ( " value" )].isValid () )
304310 {
305311 for ( FieldFilter &filter : mFieldFilters )
306312 {
307- if ( newFilterMap[QStringLiteral (" filterId" )].toString () == filter.filterId )
313+ if ( newFilterMap[QStringLiteral ( " filterId" )].toString () == filter.filterId )
308314 {
309315 // TODO: we need to have both upper and lower bounds for numbers and dates,
310316 // if user didn't supply use numeric_limits for numbers and year 1 to 9999 for dates
311- filter.value = newFilterMap[QStringLiteral (" value" )];
317+ filter.value = newFilterMap[QStringLiteral ( " value" )];
312318 }
313319 }
314320 }
@@ -341,25 +347,25 @@ QStringList FilterController::getFieldUniqueValues( QgsVectorLayer *layer, const
341347 return result;
342348}
343349
344- bool FilterController::hasActiveFilterOnLayer (const QString& layerId)
350+ bool FilterController::hasActiveFilterOnLayer ( const QString & layerId )
345351{
346352 const QgsProject *project = QgsProject::instance ();
347353 if ( !project )
348354 return false ;
349355
350- const QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( project->mapLayers ().value ( layerId ));
356+ const QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( project->mapLayers ().value ( layerId ) );
351357 return !layer->subsetString ().isEmpty ();
352358}
353359
354- QVariantList FilterController::getDropdownOptions ( const QString& filterId, const QString &searchText, const int limit )
360+ QVariantList FilterController::getDropdownOptions ( const QString & filterId, const QString &searchText, const int limit )
355361{
356362 if ( filterId.isEmpty () )
357363 return {};
358364
359365 FieldFilter fieldFilter;
360366 for ( const FieldFilter &filter : mFieldFilters )
361367 {
362- if (filterId == filter.filterId )
368+ if ( filterId == filter.filterId )
363369 {
364370 fieldFilter = filter;
365371 }
0 commit comments