Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsprocessingparameterfieldmap.cpp 3 : : ------------------------- 4 : : begin : June 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include "qgsprocessingparameterfieldmap.h" 17 : : 18 : : #include "qgsvectorlayer.h" 19 : : 20 : : 21 : 0 : QgsProcessingParameterFieldMapping::QgsProcessingParameterFieldMapping( const QString &name, const QString &description, const QString &parentLayerParameterName, bool optional ) 22 : 0 : : QgsProcessingParameterDefinition( name, description, QVariant(), optional ) 23 : 0 : , mParentLayerParameterName( parentLayerParameterName ) 24 : 0 : { 25 : 0 : } 26 : : 27 : 0 : QgsProcessingParameterDefinition *QgsProcessingParameterFieldMapping::clone() const 28 : : { 29 : 0 : return new QgsProcessingParameterFieldMapping( *this ); 30 : 0 : } 31 : : 32 : 0 : QString QgsProcessingParameterFieldMapping::type() const 33 : : { 34 : 0 : return typeName(); 35 : : } 36 : : 37 : 0 : bool QgsProcessingParameterFieldMapping::checkValueIsAcceptable( const QVariant &input, QgsProcessingContext * ) const 38 : : { 39 : 0 : if ( !input.isValid() ) 40 : 0 : return mFlags & FlagOptional; 41 : : 42 : 0 : if ( input.type() != QVariant::List ) 43 : 0 : return false; 44 : : 45 : 0 : const QVariantList inputList = input.toList(); 46 : 0 : for ( const QVariant &inputItem : inputList ) 47 : : { 48 : 0 : if ( inputItem.type() != QVariant::Map ) 49 : 0 : return false; 50 : : 51 : 0 : const QVariantMap inputItemMap = inputItem.toMap(); 52 : : 53 : 0 : if ( !inputItemMap.contains( "name" ) ) 54 : 0 : return false; 55 : 0 : if ( !inputItemMap.contains( "type" ) ) 56 : 0 : return false; 57 : 0 : if ( !inputItemMap.contains( "expression" ) ) 58 : 0 : return false; 59 : 0 : } 60 : : 61 : 0 : return true; 62 : 0 : } 63 : : 64 : 0 : QString QgsProcessingParameterFieldMapping::valueAsPythonString( const QVariant &value, QgsProcessingContext & ) const 65 : : { 66 : 0 : return QgsProcessingUtils::variantToPythonLiteral( value ); 67 : : } 68 : : 69 : 0 : QString QgsProcessingParameterFieldMapping::asPythonString( QgsProcessing::PythonOutputType outputType ) const 70 : : { 71 : 0 : switch ( outputType ) 72 : : { 73 : : case QgsProcessing::PythonQgsProcessingAlgorithmSubclass: 74 : : { 75 : 0 : QString code = QStringLiteral( "QgsProcessingParameterFieldMapping('%1', '%2'" ).arg( name(), description() ); 76 : 0 : if ( !mParentLayerParameterName.isEmpty() ) 77 : 0 : code += QStringLiteral( ", parentLayerParameterName=%1" ).arg( QgsProcessingUtils::stringToPythonLiteral( mParentLayerParameterName ) ); 78 : : 79 : 0 : if ( mFlags & FlagOptional ) 80 : 0 : code += QLatin1String( ", optional=True" ); 81 : 0 : code += ')'; 82 : 0 : return code; 83 : 0 : } 84 : : } 85 : 0 : return QString(); 86 : 0 : } 87 : : 88 : 0 : QVariantMap QgsProcessingParameterFieldMapping::toVariantMap() const 89 : : { 90 : 0 : QVariantMap map = QgsProcessingParameterDefinition::toVariantMap(); 91 : 0 : map.insert( QStringLiteral( "parent_layer" ), mParentLayerParameterName ); 92 : 0 : return map; 93 : 0 : } 94 : : 95 : 0 : bool QgsProcessingParameterFieldMapping::fromVariantMap( const QVariantMap &map ) 96 : : { 97 : 0 : QgsProcessingParameterDefinition::fromVariantMap( map ); 98 : 0 : mParentLayerParameterName = map.value( QStringLiteral( "parent_layer" ) ).toString(); 99 : 0 : return true; 100 : 0 : } 101 : : 102 : 0 : QStringList QgsProcessingParameterFieldMapping::dependsOnOtherParameters() const 103 : : { 104 : 0 : QStringList depends; 105 : 0 : if ( !mParentLayerParameterName.isEmpty() ) 106 : 0 : depends << mParentLayerParameterName; 107 : 0 : return depends; 108 : 0 : } 109 : : 110 : 0 : QString QgsProcessingParameterFieldMapping::parentLayerParameterName() const 111 : : { 112 : 0 : return mParentLayerParameterName; 113 : : } 114 : : 115 : 0 : void QgsProcessingParameterFieldMapping::setParentLayerParameterName( const QString &name ) 116 : : { 117 : 0 : mParentLayerParameterName = name; 118 : 0 : } 119 : :