@@ -44,42 +44,40 @@ void QgsLocator::deregisterFilter( QgsLocatorFilter *filter )
4444{
4545 cancelRunningQuery ();
4646 mFilters .removeAll ( filter );
47- mPrefixedFilters .remove ( mPrefixedFilters .key ( filter ), filter );
4847 delete filter;
4948}
5049
51- QList<QgsLocatorFilter *> QgsLocator::filters ()
50+ QList<QgsLocatorFilter *> QgsLocator::filters ( const QString &prefix )
5251{
53- return mFilters ;
54- }
55-
56- QMultiMap<QString, QgsLocatorFilter *> QgsLocator::prefixedFilters () const
57- {
58- return mPrefixedFilters ;
59- }
60-
61- void QgsLocator::setCustomPrefix ( QgsLocatorFilter *filter, const QString &prefix )
62- {
63- if ( filter )
52+ if ( !prefix.isEmpty () )
6453 {
65- mPrefixedFilters .remove ( mPrefixedFilters .key ( filter ), filter );
66- if ( !prefix.isEmpty () && prefix != filter->prefix () )
67- {
68- QgsSettings ().setValue ( QStringLiteral ( " locator_filters/prefix_%1" ).arg ( filter->name () ), prefix, QgsSettings::Section::Gui );
69- mPrefixedFilters .insert ( prefix, filter );
70- }
71- else
54+ QList<QgsLocatorFilter *> filters = QList<QgsLocatorFilter *>();
55+ for ( QgsLocatorFilter *filter : mFilters )
7256 {
73- // reset the setting if the string is empty or equal to the native prefix
74- // one should the default checkbox instead
75- QgsSettings ().remove ( QStringLiteral ( " locator_filters/prefix_%1" ).arg ( filter->name () ), QgsSettings::Section::Gui );
57+ if ( !filter->activePrefix ().isEmpty () && filter->activePrefix () == prefix )
58+ {
59+ filters << filter;
60+ }
7661 }
62+ return filters;
63+ }
64+ else
65+ {
66+ return mFilters ;
7767 }
7868}
7969
80- QString QgsLocator::customPrefix ( QgsLocatorFilter *filter ) const
70+ QMap< QString, QgsLocatorFilter *> QgsLocator::prefixedFilters ( ) const
8171{
82- return mPrefixedFilters .key ( filter, QString () );
72+ QMap<QString, QgsLocatorFilter *> filters = QMap<QString, QgsLocatorFilter *>();
73+ for ( QgsLocatorFilter *filter : mFilters )
74+ {
75+ if ( !filter->activePrefix ().isEmpty () && filter->enabled () )
76+ {
77+ filters.insertMulti ( filter->activePrefix (), filter );
78+ }
79+ }
80+ return filters;
8381}
8482
8583void QgsLocator::registerFilter ( QgsLocatorFilter *filter )
@@ -91,18 +89,22 @@ void QgsLocator::registerFilter( QgsLocatorFilter *filter )
9189 QgsSettings settings;
9290 bool enabled = settings.value ( QStringLiteral ( " locator_filters/enabled_%1" ).arg ( filter->name () ), true , QgsSettings::Section::Gui ).toBool ();
9391 bool byDefault = settings.value ( QStringLiteral ( " locator_filters/default_%1" ).arg ( filter->name () ), filter->useWithoutPrefix (), QgsSettings::Section::Gui ).toBool ();
94- QString customPrefix = settings.value ( QStringLiteral ( " locator_filters/prefix_%1" ).arg ( filter->name () ), filter->prefix (), QgsSettings::Section::Gui ).toString ();
92+ QString prefix = settings.value ( QStringLiteral ( " locator_filters/prefix_%1" ).arg ( filter->name () ), filter->prefix (), QgsSettings::Section::Gui ).toString ();
93+ if ( prefix.isEmpty () )
94+ {
95+ prefix = filter->prefix ();
96+ }
9597
96- if ( !customPrefix .isEmpty () )
98+ if ( !prefix .isEmpty () )
9799 {
98100 if ( CORE_FILTERS.contains ( filter->name () ) )
99101 {
100102 // inbuilt filter, no prefix check
101- mPrefixedFilters . insert ( customPrefix, filter );
103+ filter-> setActivePrefix ( prefix );
102104 }
103- else if ( customPrefix .length () >= 3 || customPrefix != filter->prefix () )
105+ else if ( prefix .length () >= 3 || prefix != filter->prefix () )
104106 {
105- mPrefixedFilters . insert ( customPrefix, filter );
107+ filter-> setActivePrefix ( prefix );
106108 }
107109 }
108110
@@ -136,15 +138,12 @@ void QgsLocator::fetchResults( const QString &string, const QgsLocatorContext &c
136138 QString prefix = searchString.left ( std::max ( searchString.indexOf ( ' ' ), 0 ) );
137139 if ( !prefix.isEmpty () )
138140 {
139- QMultiMap<QString, QgsLocatorFilter *>::const_iterator it = mPrefixedFilters .constFind ( prefix );
140- while ( it != mPrefixedFilters .constEnd () && it.key () == prefix )
141+ for ( QgsLocatorFilter *filter : qgis::as_const ( mFilters ) )
141142 {
142- QgsLocatorFilter *filter = it.value ();
143- if ( filter->enabled () )
143+ if ( filter->activePrefix () == prefix && filter->enabled () )
144144 {
145145 activeFilters << filter;
146146 }
147- ++it;
148147 }
149148 context.usingPrefix = !activeFilters.empty ();
150149 }
0 commit comments