QGIS API Documentation 3.29.0-Master (ade4f0cf0f)
qgsstoredexpressionmanager.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsstoredexpressionmanager.cpp
3 -------------------
4 begin : August 2019
5 copyright : (C) 2019 David Signer
6 email : david at opengis dot ch
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
19#include "qgis.h"
20
21
22#include <QDomElement>
23
24QString QgsStoredExpressionManager::addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag )
25{
26 QgsStoredExpression storedExpression( name, expression, tag );
27
28 mStoredExpressions.append( storedExpression );
29
30 return storedExpression.id;
31}
32
34{
35 int i = 0;
36 for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
37 {
38 if ( storedExpression.id == id )
39 {
40 mStoredExpressions.removeAt( i );
41 //leave the loop after editing source
42 break;
43 }
44 ++i;
45 }
46}
47
48void QgsStoredExpressionManager::updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag )
49{
50 int i = 0;
51 for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
52 {
53 if ( storedExpression.id == id )
54 {
55 QgsStoredExpression newStoredExpression = storedExpression;
56 newStoredExpression.name = name;
57 newStoredExpression.expression = expression;
58 newStoredExpression.tag = tag;
59 mStoredExpressions.replace( i, newStoredExpression );
60 //leave the loop after editing source
61 break;
62 }
63 ++i;
64 }
65}
66
67void QgsStoredExpressionManager::addStoredExpressions( const QList< QgsStoredExpression > &storedExpressions )
68{
69 mStoredExpressions.append( storedExpressions );
70}
71
73{
74 QList< QgsStoredExpression > storedExpressions;
75
76 for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
77 {
78 if ( storedExpression.tag & tag )
79 {
81 }
82 }
83 return storedExpressions;
84}
85
87{
88 for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
89 {
90 if ( storedExpression.id == id )
91 {
92 return storedExpression;
93 }
94 }
95 return QgsStoredExpression();
96}
97
99{
100 for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
101 {
102 if ( storedExpression.expression == expression && storedExpression.tag & tag )
103 {
104 return storedExpression;
105 }
106 }
107 return QgsStoredExpression();
108}
109
111{
112 mStoredExpressions.clear();
113}
114
115bool QgsStoredExpressionManager::writeXml( QDomNode &layerNode ) const
116{
117 QDomElement aStoredExpressions = layerNode.ownerDocument().createElement( QStringLiteral( "storedexpressions" ) );
118
119 for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
120 {
121 QDomElement aStoredExpression = layerNode.ownerDocument().createElement( QStringLiteral( "storedexpression" ) );
122 aStoredExpression.setAttribute( QStringLiteral( "name" ), storedExpression.name );
123 aStoredExpression.setAttribute( QStringLiteral( "expression" ), storedExpression.expression );
124 aStoredExpression.setAttribute( QStringLiteral( "tag" ), storedExpression.tag );
125 aStoredExpressions.appendChild( aStoredExpression );
126 }
127 layerNode.appendChild( aStoredExpressions );
128
129 return true;
130}
131
132bool QgsStoredExpressionManager::readXml( const QDomNode &layerNode )
133{
135
136 QDomNode aaNode = layerNode.namedItem( QStringLiteral( "storedexpressions" ) );
137
138 if ( !aaNode.isNull() )
139 {
140 QDomNodeList aStoredExpressions = aaNode.toElement().elementsByTagName( QStringLiteral( "storedexpression" ) );
141 for ( int i = 0; i < aStoredExpressions.size(); ++i )
142 {
143 QDomElement aStoredExpression = aStoredExpressions.at( i ).toElement();
144 addStoredExpression( aStoredExpression.attribute( QStringLiteral( "name" ) ), aStoredExpression.attribute( QStringLiteral( "expression" ) ), QgsStoredExpression::Category( aStoredExpression.attribute( QStringLiteral( "tag" ) ).toInt() ) );
145 }
146 }
147 return true;
148}
void removeStoredExpression(const QString &id)
Removes an expression to the list.
QgsStoredExpression storedExpression(const QString &id) const
Returns an expression according to the id.
bool writeXml(QDomNode &layerNode) const
Writes the stored expressions out in XML format.
void clearStoredExpressions()
Clears list of stored expressions.
QgsStoredExpression findStoredExpressionByExpression(const QString &expression, const QgsStoredExpression::Category &tag=QgsStoredExpression::Category::All) const
Returns an expression according to the expression text.
QList< QgsStoredExpression > storedExpressions(const QgsStoredExpression::Category &tag=QgsStoredExpression::Category::All)
Returns the list of named expressions.
void addStoredExpressions(const QList< QgsStoredExpression > &storedExpressions)
Appends a list of expressions to the existing list.
void updateStoredExpression(const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag)
Updates an expression by id.
bool readXml(const QDomNode &layerNode)
Reads the stored expressions in in XML format.
QString addStoredExpression(const QString &name, const QString &expression, const QgsStoredExpression::Category &tag=QgsStoredExpression::Category::FilterExpression)
Adds an expression to the list.
Stored expression containing name, content (expression text) and a category tag.
QString expression
expression text
Category
Categories of use cases FilterExpression for stored expressions to filter attribute table DefaultValu...
QString id
generated uuid used for identification
Category tag
category of the expression use case
QString name
descriptive name of the expression