Branch data Line data Source code
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 : : 18 : : #include "qgsstoredexpressionmanager.h" 19 : : #include "qgis.h" 20 : : 21 : : 22 : : #include <QDomElement> 23 : : 24 : 0 : QString QgsStoredExpressionManager::addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag ) 25 : : { 26 : 0 : QgsStoredExpression storedExpression( name, expression, tag ); 27 : : 28 : 0 : mStoredExpressions.append( storedExpression ); 29 : : 30 : 0 : return storedExpression.id; 31 : 0 : } 32 : : 33 : 0 : void QgsStoredExpressionManager::removeStoredExpression( const QString &id ) 34 : : { 35 : 0 : int i = 0; 36 : 0 : for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) ) 37 : : { 38 : 0 : if ( storedExpression.id == id ) 39 : : { 40 : 0 : mStoredExpressions.removeAt( i ); 41 : : //leave the loop after editing source 42 : 0 : break; 43 : : } 44 : 0 : ++i; 45 : : } 46 : 0 : } 47 : : 48 : 0 : void QgsStoredExpressionManager::updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag ) 49 : : { 50 : 0 : int i = 0; 51 : 0 : for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) ) 52 : : { 53 : 0 : if ( storedExpression.id == id ) 54 : : { 55 : 0 : QgsStoredExpression newStoredExpression = storedExpression; 56 : 0 : newStoredExpression.name = name; 57 : 0 : newStoredExpression.expression = expression; 58 : 0 : newStoredExpression.tag = tag; 59 : 0 : mStoredExpressions.replace( i, newStoredExpression ); 60 : : //leave the loop after editing source 61 : : break; 62 : 0 : } 63 : 0 : ++i; 64 : : } 65 : 0 : } 66 : : 67 : 0 : void QgsStoredExpressionManager::addStoredExpressions( const QList< QgsStoredExpression > &storedExpressions ) 68 : : { 69 : 0 : mStoredExpressions.append( storedExpressions ); 70 : 0 : } 71 : : 72 : 0 : QList< QgsStoredExpression > QgsStoredExpressionManager::storedExpressions( const QgsStoredExpression::Category &tag ) 73 : : { 74 : 0 : QList< QgsStoredExpression > storedExpressions; 75 : : 76 : 0 : for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) ) 77 : : { 78 : 0 : if ( storedExpression.tag & tag ) 79 : : { 80 : 0 : storedExpressions.append( storedExpression ); 81 : 0 : } 82 : : } 83 : 0 : return storedExpressions; 84 : 0 : } 85 : : 86 : 0 : QgsStoredExpression QgsStoredExpressionManager::storedExpression( const QString &id ) const 87 : : { 88 : 0 : for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) ) 89 : : { 90 : 0 : if ( storedExpression.id == id ) 91 : : { 92 : 0 : return storedExpression; 93 : : } 94 : : } 95 : 0 : return QgsStoredExpression(); 96 : 0 : } 97 : : 98 : 0 : QgsStoredExpression QgsStoredExpressionManager::findStoredExpressionByExpression( const QString &expression, const QgsStoredExpression::Category &tag ) const 99 : : { 100 : 0 : for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) ) 101 : : { 102 : 0 : if ( storedExpression.expression == expression && storedExpression.tag & tag ) 103 : : { 104 : 0 : return storedExpression; 105 : : } 106 : : } 107 : 0 : return QgsStoredExpression(); 108 : 0 : } 109 : : 110 : 0 : void QgsStoredExpressionManager::clearStoredExpressions() 111 : : { 112 : 0 : mStoredExpressions.clear(); 113 : 0 : } 114 : : 115 : 0 : bool QgsStoredExpressionManager::writeXml( QDomNode &layerNode ) const 116 : : { 117 : 0 : QDomElement aStoredExpressions = layerNode.ownerDocument().createElement( QStringLiteral( "storedexpressions" ) ); 118 : : 119 : 0 : for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) ) 120 : : { 121 : 0 : QDomElement aStoredExpression = layerNode.ownerDocument().createElement( QStringLiteral( "storedexpression" ) ); 122 : 0 : aStoredExpression.setAttribute( QStringLiteral( "name" ), storedExpression.name ); 123 : 0 : aStoredExpression.setAttribute( QStringLiteral( "expression" ), storedExpression.expression ); 124 : 0 : aStoredExpression.setAttribute( QStringLiteral( "tag" ), storedExpression.tag ); 125 : 0 : aStoredExpressions.appendChild( aStoredExpression ); 126 : 0 : } 127 : 0 : layerNode.appendChild( aStoredExpressions ); 128 : : 129 : : return true; 130 : 0 : } 131 : : 132 : 0 : bool QgsStoredExpressionManager::readXml( const QDomNode &layerNode ) 133 : : { 134 : 0 : clearStoredExpressions(); 135 : : 136 : 0 : QDomNode aaNode = layerNode.namedItem( QStringLiteral( "storedexpressions" ) ); 137 : : 138 : 0 : if ( !aaNode.isNull() ) 139 : : { 140 : 0 : QDomNodeList aStoredExpressions = aaNode.toElement().elementsByTagName( QStringLiteral( "storedexpression" ) ); 141 : 0 : for ( int i = 0; i < aStoredExpressions.size(); ++i ) 142 : : { 143 : 0 : QDomElement aStoredExpression = aStoredExpressions.at( i ).toElement(); 144 : 0 : addStoredExpression( aStoredExpression.attribute( QStringLiteral( "name" ) ), aStoredExpression.attribute( QStringLiteral( "expression" ) ), QgsStoredExpression::Category( aStoredExpression.attribute( QStringLiteral( "tag" ) ).toInt() ) ); 145 : 0 : } 146 : 0 : } 147 : : return true; 148 : 0 : }