From 8eb94f267b02bec87d9eeeb9b871c3e725d6d11f Mon Sep 17 00:00:00 2001 From: signedav Date: Sun, 12 Mar 2023 21:51:09 +0100 Subject: [PATCH] make operator name and expression more dynamic. E.g. '[ ]' value has no leading and tailing space. --- src/gui/qgsexpressiontreeview.cpp | 54 ++++++++++++++++--------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/gui/qgsexpressiontreeview.cpp b/src/gui/qgsexpressiontreeview.cpp index 0a9af21a5f5..9773a7e7e5d 100644 --- a/src/gui/qgsexpressiontreeview.cpp +++ b/src/gui/qgsexpressiontreeview.cpp @@ -258,34 +258,36 @@ void QgsExpressionTreeView::updateFunctionTree() mModel->clear(); mExpressionGroups.clear(); - static const QStringList operators = QStringList() << QStringLiteral( "+" ) - << QStringLiteral( "-" ) - << QStringLiteral( "*" ) - << QStringLiteral( "/" ) - << QStringLiteral( "%" ) - << QStringLiteral( "^" ) - << QStringLiteral( "=" ) - << QStringLiteral( "~" ) - << QStringLiteral( ">" ) - << QStringLiteral( "<" ) - << QStringLiteral( "<>" ) - << QStringLiteral( "<=" ) - << QStringLiteral( ">=" ) - << QStringLiteral( "[]" ) - << QStringLiteral( "||" ) - << QStringLiteral( "BETWEEN" ) - << QStringLiteral( "NOT BETWEEN" ) - << QStringLiteral( "IN" ) - << QStringLiteral( "LIKE" ) - << QStringLiteral( "ILIKE" ) - << QStringLiteral( "IS" ) - << QStringLiteral( "IS NOT" ) - << QStringLiteral( "OR" ) - << QStringLiteral( "AND" ) - << QStringLiteral( "NOT" ); + //list of pairs where the first is the name and the second is the expression value when adding it + static const QList< QPair > operators = QList< QPair >() + << QPair( QStringLiteral( "+" ), QStringLiteral( " + " ) ) + << QPair( QStringLiteral( "-" ), QStringLiteral( " - " ) ) + << QPair( QStringLiteral( "*" ), QStringLiteral( " * " ) ) + << QPair( QStringLiteral( "/" ), QStringLiteral( " / " ) ) + << QPair( QStringLiteral( "%" ), QStringLiteral( " % " ) ) + << QPair( QStringLiteral( "^" ), QStringLiteral( " ^ " ) ) + << QPair( QStringLiteral( "=" ), QStringLiteral( " = " ) ) + << QPair( QStringLiteral( "~" ), QStringLiteral( " ~ " ) ) + << QPair( QStringLiteral( ">" ), QStringLiteral( " > " ) ) + << QPair( QStringLiteral( "<" ), QStringLiteral( " < " ) ) + << QPair( QStringLiteral( "<>" ), QStringLiteral( " <> " ) ) + << QPair( QStringLiteral( "<=" ), QStringLiteral( " <= " ) ) + << QPair( QStringLiteral( ">=" ), QStringLiteral( " >= " ) ) + << QPair( QStringLiteral( "[]" ), QStringLiteral( "[ ]" ) ) + << QPair( QStringLiteral( "||" ), QStringLiteral( " || " ) ) + << QPair( QStringLiteral( "BETWEEN" ), QStringLiteral( " BETWEEN " ) ) + << QPair( QStringLiteral( "NOT BETWEEN" ), QStringLiteral( " NOT BETWEEN " ) ) + << QPair( QStringLiteral( "IN" ), QStringLiteral( " IN " ) ) + << QPair( QStringLiteral( "LIKE" ), QStringLiteral( " LIKE " ) ) + << QPair( QStringLiteral( "ILIKE" ), QStringLiteral( " ILIKE " ) ) + << QPair( QStringLiteral( "IS" ), QStringLiteral( " IS " ) ) + << QPair( QStringLiteral( "IS NOT" ), QStringLiteral( " IS NOT " ) ) + << QPair( QStringLiteral( "OR" ), QStringLiteral( " OR " ) ) + << QPair( QStringLiteral( "AND" ), QStringLiteral( " AND " ) ) + << QPair( QStringLiteral( "NOT" ), QStringLiteral( " NOT " ) ); for ( const auto &name : operators ) { - registerItem( QStringLiteral( "Operators" ), name, ' ' + name + ' ', QString(), QgsExpressionItem::ExpressionNode, false, -1, QIcon(), QgsExpression::tags( name ) ); + registerItem( QStringLiteral( "Operators" ), name.first, name.second, QString(), QgsExpressionItem::ExpressionNode, false, -1, QIcon(), QgsExpression::tags( name.first ) ); } QString casestring = QStringLiteral( "CASE WHEN condition THEN result END" );