1 /*************************************************************************** 2 qgsexpressionlocatorfilters.cpp 3 ---------------------------- 4 begin : May 2017 5 copyright : (C) 2017 by Nyall Dawson 6 email : nyall dot dawson at gmail dot com 7 ***************************************************************************/ 8 9 /*************************************************************************** 10 * * 11 * This program is free software; you can redistribute it and/or modify * 12 * it under the terms of the GNU General Public License as published by * 13 * the Free Software Foundation; either version 2 of the License, or * 14 * (at your option) any later version. * 15 * * 16 ***************************************************************************/ 17 18 #include "qgsexpressioncalculatorlocatorfilter.h" 19 #include "qgsexpressioncontext.h" 20 #include "qgsexpressioncontextutils.h" 21 #include "qgsproject.h" 22 #include "qgisapp.h" 23 24 #include <QClipboard> 25 26 27 QgsExpressionCalculatorLocatorFilter(QObject * parent)28QgsExpressionCalculatorLocatorFilter::QgsExpressionCalculatorLocatorFilter( QObject *parent ) 29 : QgsLocatorFilter( parent ) 30 { 31 setUseWithoutPrefix( false ); 32 } 33 clone() const34QgsExpressionCalculatorLocatorFilter *QgsExpressionCalculatorLocatorFilter::clone() const 35 { 36 return new QgsExpressionCalculatorLocatorFilter(); 37 } 38 fetchResults(const QString & string,const QgsLocatorContext &,QgsFeedback *)39void QgsExpressionCalculatorLocatorFilter::fetchResults( const QString &string, const QgsLocatorContext &, QgsFeedback * ) 40 { 41 QgsExpressionContext context; 42 context << QgsExpressionContextUtils::globalScope() 43 << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) 44 << QgsExpressionContextUtils::layerScope( QgisApp::instance()->activeLayer() ); 45 46 QString error; 47 if ( QgsExpression::checkExpression( string, &context, error ) ) 48 { 49 QgsExpression exp( string ); 50 const QString resultString = exp.evaluate( &context ).toString(); 51 if ( !resultString.isEmpty() ) 52 { 53 QgsLocatorResult result; 54 result.filter = this; 55 result.displayString = tr( "Copy “%1” to clipboard" ).arg( resultString ); 56 result.userData = resultString; 57 result.score = 1; 58 emit resultFetched( result ); 59 } 60 } 61 } 62 triggerResult(const QgsLocatorResult & result)63void QgsExpressionCalculatorLocatorFilter::triggerResult( const QgsLocatorResult &result ) 64 { 65 QApplication::clipboard()->setText( result.userData.toString() ); 66 } 67