Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsexpressionfieldbuffer.cpp 3 : : --------------------------- 4 : : begin : May 27, 2014 5 : : copyright : (C) 2014 by Matthias Kuhn 6 : : email : matthias 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 "qgsexpressionfieldbuffer.h" 19 : : 20 : : #include "qgsvectorlayer.h" 21 : : 22 : : 23 : 0 : void QgsExpressionFieldBuffer::addExpression( const QString &exp, const QgsField &fld ) 24 : : { 25 : 0 : mExpressions << ExpressionField( exp, fld ); 26 : 0 : } 27 : : 28 : 0 : void QgsExpressionFieldBuffer::removeExpression( int index ) 29 : : { 30 : 0 : mExpressions.removeAt( index ); 31 : 0 : } 32 : : 33 : 0 : void QgsExpressionFieldBuffer::renameExpression( int index, const QString &name ) 34 : : { 35 : 0 : mExpressions[index].field.setName( name ); 36 : 0 : } 37 : : 38 : 0 : void QgsExpressionFieldBuffer::updateExpression( int index, const QString &exp ) 39 : : { 40 : 0 : mExpressions[index].cachedExpression = QgsExpression( exp ); 41 : 0 : } 42 : : 43 : 0 : void QgsExpressionFieldBuffer::writeXml( QDomNode &layerNode, QDomDocument &document ) const 44 : : { 45 : 0 : QDomElement expressionFieldsElem = document.createElement( QStringLiteral( "expressionfields" ) ); 46 : 0 : layerNode.appendChild( expressionFieldsElem ); 47 : : 48 : 0 : const auto constMExpressions = mExpressions; 49 : 0 : for ( const ExpressionField &fld : constMExpressions ) 50 : : { 51 : 0 : QDomElement fldElem = document.createElement( QStringLiteral( "field" ) ); 52 : : 53 : 0 : fldElem.setAttribute( QStringLiteral( "expression" ), fld.cachedExpression.expression() ); 54 : 0 : fldElem.setAttribute( QStringLiteral( "name" ), fld.field.name() ); 55 : 0 : fldElem.setAttribute( QStringLiteral( "precision" ), fld.field.precision() ); 56 : 0 : fldElem.setAttribute( QStringLiteral( "comment" ), fld.field.comment() ); 57 : 0 : fldElem.setAttribute( QStringLiteral( "length" ), fld.field.length() ); 58 : 0 : fldElem.setAttribute( QStringLiteral( "type" ), fld.field.type() ); 59 : 0 : fldElem.setAttribute( QStringLiteral( "subType" ), fld.field.subType() ); 60 : 0 : fldElem.setAttribute( QStringLiteral( "typeName" ), fld.field.typeName() ); 61 : : 62 : 0 : expressionFieldsElem.appendChild( fldElem ); 63 : 0 : } 64 : 0 : } 65 : : 66 : 0 : void QgsExpressionFieldBuffer::readXml( const QDomNode &layerNode ) 67 : : { 68 : 0 : mExpressions.clear(); 69 : : 70 : 0 : const QDomElement expressionFieldsElem = layerNode.firstChildElement( QStringLiteral( "expressionfields" ) ); 71 : : 72 : 0 : if ( !expressionFieldsElem.isNull() ) 73 : : { 74 : 0 : QDomNodeList fields = expressionFieldsElem.elementsByTagName( QStringLiteral( "field" ) ); 75 : : 76 : 0 : for ( int i = 0; i < fields.size(); ++i ) 77 : : { 78 : 0 : QDomElement field = fields.at( i ).toElement(); 79 : 0 : QString exp = field.attribute( QStringLiteral( "expression" ) ); 80 : 0 : QString name = field.attribute( QStringLiteral( "name" ) ); 81 : 0 : QString comment = field.attribute( QStringLiteral( "comment" ) ); 82 : 0 : int precision = field.attribute( QStringLiteral( "precision" ) ).toInt(); 83 : 0 : int length = field.attribute( QStringLiteral( "length" ) ).toInt(); 84 : 0 : QVariant::Type type = static_cast< QVariant::Type >( field.attribute( QStringLiteral( "type" ) ).toInt() ); 85 : 0 : QVariant::Type subType = static_cast< QVariant::Type >( field.attribute( QStringLiteral( "subType" ), QStringLiteral( "0" ) ).toInt() ); 86 : 0 : QString typeName = field.attribute( QStringLiteral( "typeName" ) ); 87 : : 88 : 0 : mExpressions.append( ExpressionField( exp, QgsField( name, type, typeName, length, precision, comment, subType ) ) ); 89 : 0 : } 90 : 0 : } 91 : 0 : } 92 : : 93 : 79 : void QgsExpressionFieldBuffer::updateFields( QgsFields &flds ) 94 : : { 95 : 79 : int index = 0; 96 : 79 : const auto constMExpressions = mExpressions; 97 : 79 : for ( const ExpressionField &fld : constMExpressions ) 98 : : { 99 : 0 : flds.appendExpressionField( fld.field, index ); 100 : 0 : ++index; 101 : : } 102 : 79 : }