27   if ( mSource != other.mSource )
 
   33       return mStaticValue == other.mStaticValue;
 
   35       return mChildId == other.mChildId && mOutputName == other.mOutputName;
 
   37       return mParameterName == other.mParameterName;
 
   39       return mExpression == other.mExpression;
 
   41       return mExpressionText == other.mExpressionText;
 
   48 QgsProcessingModelChildParameterSource QgsProcessingModelChildParameterSource::fromStaticValue( 
const QVariant &value )
 
   50   QgsProcessingModelChildParameterSource src;
 
   51   src.mSource = StaticValue;
 
   52   src.mStaticValue = value;
 
   56 QgsProcessingModelChildParameterSource QgsProcessingModelChildParameterSource::fromModelParameter( 
const QString ¶meterName )
 
   58   QgsProcessingModelChildParameterSource src;
 
   59   src.mSource = ModelParameter;
 
   60   src.mParameterName = parameterName;
 
   64 QgsProcessingModelChildParameterSource QgsProcessingModelChildParameterSource::fromChildOutput( 
const QString &childId, 
const QString &outputName )
 
   66   QgsProcessingModelChildParameterSource src;
 
   67   src.mSource = ChildOutput;
 
   68   src.mChildId = childId;
 
   69   src.mOutputName = outputName;
 
   73 QgsProcessingModelChildParameterSource QgsProcessingModelChildParameterSource::fromExpression( 
const QString &expression )
 
   75   QgsProcessingModelChildParameterSource src;
 
   76   src.mSource = Expression;
 
   77   src.mExpression = expression;
 
   81 QgsProcessingModelChildParameterSource QgsProcessingModelChildParameterSource::fromExpressionText( 
const QString &text )
 
   83   QgsProcessingModelChildParameterSource src;
 
   84   src.mSource = ExpressionText;
 
   85   src.mExpressionText = text;
 
   89 QgsProcessingModelChildParameterSource::Source QgsProcessingModelChildParameterSource::source()
 const 
   94 void QgsProcessingModelChildParameterSource::setSource( QgsProcessingModelChildParameterSource::Source source )
 
   99 QVariant QgsProcessingModelChildParameterSource::toVariant()
 const 
  102   map.insert( QStringLiteral( 
"source" ), mSource );
 
  106       map.insert( QStringLiteral( 
"parameter_name" ), mParameterName );
 
  110       map.insert( QStringLiteral( 
"child_id" ), mChildId );
 
  111       map.insert( QStringLiteral( 
"output_name" ), mOutputName );
 
  115       map.insert( QStringLiteral( 
"static_value" ), mStaticValue );
 
  119       map.insert( QStringLiteral( 
"expression" ), mExpression );
 
  123       map.insert( QStringLiteral( 
"expression_text" ), mExpressionText );
 
  132 bool QgsProcessingModelChildParameterSource::loadVariant( 
const QVariantMap &map )
 
  134   mSource = 
static_cast< Source 
>( map.value( QStringLiteral( 
"source" ) ).toInt() );
 
  138       mParameterName = map.value( QStringLiteral( 
"parameter_name" ) ).toString();
 
  142       mChildId = map.value( QStringLiteral( 
"child_id" ) ).toString();
 
  143       mOutputName = map.value( QStringLiteral( 
"output_name" ) ).toString();
 
  147       mStaticValue = map.value( QStringLiteral( 
"static_value" ) );
 
  151       mExpression = map.value( QStringLiteral( 
"expression" ) ).toString();
 
  155       mExpressionText = map.value( QStringLiteral( 
"expression_text" ) ).toString();
 
  169       return QStringLiteral( 
"parameters['%1']" ).arg( mParameterName );
 
  172       return QStringLiteral( 
"outputs['%1']['%2']" ).arg( friendlyChildNames.value( mChildId, mChildId ), mOutputName );
 
  189       return mExpressionText;
 
  222 QString QgsProcessingModelChildParameterSource::friendlyIdentifier( QgsProcessingModelAlgorithm *model )
 const 
  227       return model ? model->parameterDefinition( mParameterName )->description() : mParameterName;
 
  233         const QgsProcessingModelChildAlgorithm &alg = model->childAlgorithm( mChildId );
 
  234         QString outputName = alg.algorithm() && alg.algorithm()->outputDefinition( mOutputName ) ? alg.algorithm()->outputDefinition( mOutputName )->description() : mOutputName;
 
  236         const QMap<QString, QgsProcessingModelOutput> outputs = alg.modelOutputs();
 
  237         for ( 
auto it = outputs.constBegin(); it != outputs.constEnd(); ++it )
 
  239           if ( it.value().childOutputName() == mOutputName )
 
  241             outputName = it.key();
 
  245         return QObject::tr( 
"'%1' from algorithm '%2'" ).arg( outputName, alg.description() );
 
  249         return QObject::tr( 
"'%1' from algorithm '%2'" ).arg( mOutputName, mChildId );
 
  254       return mStaticValue.toString();
 
  260       return mExpressionText;
 
  268 QDataStream &
operator<<( QDataStream &out, 
const QgsProcessingModelChildParameterSource &source )
 
  270   out << source.source();
 
  271   out << source.staticValue();
 
  272   out << source.parameterName();
 
  273   out << source.outputChildId();
 
  274   out << source.outputName();
 
  275   out << source.expression();
 
  276   out << source.expressionText();
 
  280 QDataStream &
operator>>( QDataStream &in, QgsProcessingModelChildParameterSource &source )
 
  283   QVariant staticValue;
 
  284   QString parameterName;
 
  285   QString outputChildId;
 
  288   QString expressionText;
 
  290   in >> sourceType >> staticValue >> parameterName >> outputChildId >> outputName >> expression >> expressionText;
 
  292   source.setStaticValue( staticValue );
 
  293   source.setParameterName( parameterName );
 
  294   source.setOutputChildId( outputChildId );
 
  295   source.setOutputName( outputName );
 
  296   source.setExpression( expression );
 
  297   source.setExpressionText( expressionText );
 
  298   source.setSource( 
static_cast<QgsProcessingModelChildParameterSource::Source
>( sourceType ) );