Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsprocessingparameteraggregate.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 "qgsprocessingparameteraggregate.h" 17 : : 18 : : #include "qgsvectorlayer.h" 19 : : 20 : : 21 : 0 : QgsProcessingParameterAggregate::QgsProcessingParameterAggregate( 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 *QgsProcessingParameterAggregate::clone() const 28 : : { 29 : 0 : return new QgsProcessingParameterAggregate( *this ); 30 : 0 : } 31 : : 32 : 0 : QString QgsProcessingParameterAggregate::type() const 33 : : { 34 : 0 : return typeName(); 35 : : } 36 : : 37 : 0 : bool QgsProcessingParameterAggregate::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( "input" ) ) 58 : 0 : return false; 59 : 0 : if ( !inputItemMap.contains( "aggregate" ) ) 60 : 0 : return false; 61 : 0 : } 62 : : 63 : 0 : return true; 64 : 0 : } 65 : : 66 : 0 : QString QgsProcessingParameterAggregate::valueAsPythonString( const QVariant &value, QgsProcessingContext & ) const 67 : : { 68 : 0 : return QgsProcessingUtils::variantToPythonLiteral( value ); 69 : : } 70 : : 71 : 0 : QString QgsProcessingParameterAggregate::asPythonString( QgsProcessing::PythonOutputType outputType ) const 72 : : { 73 : 0 : switch ( outputType ) 74 : : { 75 : : case QgsProcessing::PythonQgsProcessingAlgorithmSubclass: 76 : : { 77 : 0 : QString code = QStringLiteral( "QgsProcessingParameterAggregate('%1', '%2'" ).arg( name(), description() ); 78 : 0 : if ( !mParentLayerParameterName.isEmpty() ) 79 : 0 : code += QStringLiteral( ", parentLayerParameterName=%1" ).arg( QgsProcessingUtils::stringToPythonLiteral( mParentLayerParameterName ) ); 80 : : 81 : 0 : if ( mFlags & FlagOptional ) 82 : 0 : code += QLatin1String( ", optional=True" ); 83 : 0 : code += ')'; 84 : 0 : return code; 85 : 0 : } 86 : : } 87 : 0 : return QString(); 88 : 0 : } 89 : : 90 : 0 : QVariantMap QgsProcessingParameterAggregate::toVariantMap() const 91 : : { 92 : 0 : QVariantMap map = QgsProcessingParameterDefinition::toVariantMap(); 93 : 0 : map.insert( QStringLiteral( "parent_layer" ), mParentLayerParameterName ); 94 : 0 : return map; 95 : 0 : } 96 : : 97 : 0 : bool QgsProcessingParameterAggregate::fromVariantMap( const QVariantMap &map ) 98 : : { 99 : 0 : QgsProcessingParameterDefinition::fromVariantMap( map ); 100 : 0 : mParentLayerParameterName = map.value( QStringLiteral( "parent_layer" ) ).toString(); 101 : 0 : return true; 102 : 0 : } 103 : : 104 : 0 : QStringList QgsProcessingParameterAggregate::dependsOnOtherParameters() const 105 : : { 106 : 0 : QStringList depends; 107 : 0 : if ( !mParentLayerParameterName.isEmpty() ) 108 : 0 : depends << mParentLayerParameterName; 109 : 0 : return depends; 110 : 0 : } 111 : : 112 : 0 : QString QgsProcessingParameterAggregate::parentLayerParameterName() const 113 : : { 114 : 0 : return mParentLayerParameterName; 115 : : } 116 : : 117 : 0 : void QgsProcessingParameterAggregate::setParentLayerParameterName( const QString &name ) 118 : : { 119 : 0 : mParentLayerParameterName = name; 120 : 0 : } 121 : :