Only show action results when . prefix is used

This commit is contained in:
Nyall Dawson 2017-05-11 17:07:00 +10:00
parent 102a46662b
commit a53516d71d
5 changed files with 58 additions and 3 deletions

View File

@ -139,6 +139,21 @@ class QgsLocatorFilter : QObject
result. result.
%End %End
bool useWithoutPrefix() const;
%Docstring
Returns true if the filter should be used when no prefix
is entered.
.. seealso:: setUseWithoutPrefix()
:rtype: bool
%End
void setUseWithoutPrefix( bool useWithoutPrefix );
%Docstring
Sets whether the filter should be used when no prefix
is entered.
.. seealso:: useWithoutPrefix()
%End
signals: signals:
void resultFetched( const QgsLocatorResult &result ); void resultFetched( const QgsLocatorResult &result );

View File

@ -103,7 +103,7 @@ QgsActionLocatorFilter::QgsActionLocatorFilter( const QList<QWidget *> &parentOb
: QgsLocatorFilter( parent ) : QgsLocatorFilter( parent )
, mActionParents( parentObjectsForActions ) , mActionParents( parentObjectsForActions )
{ {
setUseWithoutPrefix( false );
} }
void QgsActionLocatorFilter::fetchResults( const QString &string, const QgsLocatorContext &context, QgsFeedback *feedback ) void QgsActionLocatorFilter::fetchResults( const QString &string, const QgsLocatorContext &context, QgsFeedback *feedback )

View File

@ -89,18 +89,25 @@ void QgsLocator::fetchResults( const QString &string, const QgsLocatorContext &c
} }
mFeedback = feedback; mFeedback = feedback;
mActiveFilters = mFilters; mActiveFilters.clear();
QString searchString = string; QString searchString = string;
if ( searchString.indexOf( ' ' ) > 0 ) if ( searchString.indexOf( ' ' ) > 0 )
{ {
QString prefix = searchString.left( searchString.indexOf( ' ' ) ); QString prefix = searchString.left( searchString.indexOf( ' ' ) );
if ( mPrefixedFilters.contains( prefix ) ) if ( mPrefixedFilters.contains( prefix ) )
{ {
mActiveFilters.clear();
mActiveFilters << mPrefixedFilters.value( prefix ); mActiveFilters << mPrefixedFilters.value( prefix );
searchString = searchString.mid( prefix.length() + 1 ); searchString = searchString.mid( prefix.length() + 1 );
} }
} }
if ( mActiveFilters.isEmpty() )
{
Q_FOREACH ( QgsLocatorFilter *filter, mFilters )
{
if ( filter->useWithoutPrefix() )
mActiveFilters << filter;
}
}
auto gatherFilterResults = [searchString, context, feedback]( QgsLocatorFilter * filter ) auto gatherFilterResults = [searchString, context, feedback]( QgsLocatorFilter * filter )
{ {

View File

@ -23,3 +23,18 @@ QgsLocatorFilter::QgsLocatorFilter( QObject *parent )
{ {
} }
bool QgsLocatorFilter::stringMatches( const QString &test, const QString &match )
{
return QgsStringUtils::containsFuzzy( match, test );
}
bool QgsLocatorFilter::useWithoutPrefix() const
{
return mUseWithoutPrefix;
}
void QgsLocatorFilter::setUseWithoutPrefix( bool useWithoutPrefix )
{
mUseWithoutPrefix = useWithoutPrefix;
}

View File

@ -154,6 +154,20 @@ class GUI_EXPORT QgsLocatorFilter : public QObject
*/ */
virtual void triggerResult( const QgsLocatorResult &result ) = 0; virtual void triggerResult( const QgsLocatorResult &result ) = 0;
/**
* Returns true if the filter should be used when no prefix
* is entered.
* \see setUseWithoutPrefix()
*/
bool useWithoutPrefix() const;
/**
* Sets whether the filter should be used when no prefix
* is entered.
* \see useWithoutPrefix()
*/
void setUseWithoutPrefix( bool useWithoutPrefix );
signals: signals:
/** /**
@ -162,6 +176,10 @@ class GUI_EXPORT QgsLocatorFilter : public QObject
*/ */
void resultFetched( const QgsLocatorResult &result ); void resultFetched( const QgsLocatorResult &result );
private:
bool mUseWithoutPrefix = true;
}; };
Q_DECLARE_METATYPE( QgsLocatorResult ) Q_DECLARE_METATYPE( QgsLocatorResult )