Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsprocessingmodelcomponent.cpp 3 : : ------------------------------- 4 : : begin : June 2017 5 : : copyright : (C) 2017 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 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 "qgsprocessingmodelcomponent.h" 19 : : #include "qgsprocessingmodelcomment.h" 20 : : #include "qgssymbollayerutils.h" 21 : : 22 : : ///@cond NOT_STABLE 23 : : 24 : 0 : QgsProcessingModelComponent::QgsProcessingModelComponent( const QString &description ) 25 : 0 : : mDescription( description ) 26 : 0 : {} 27 : : 28 : 0 : QString QgsProcessingModelComponent::description() const 29 : : { 30 : 0 : return mDescription; 31 : : } 32 : : 33 : 0 : void QgsProcessingModelComponent::setDescription( const QString &description ) 34 : : { 35 : 0 : mDescription = description; 36 : 0 : } 37 : : 38 : 0 : QPointF QgsProcessingModelComponent::position() const 39 : : { 40 : 0 : return mPosition; 41 : : } 42 : : 43 : 0 : void QgsProcessingModelComponent::setPosition( QPointF position ) 44 : : { 45 : 0 : mPosition = position; 46 : 0 : } 47 : : 48 : 0 : QSizeF QgsProcessingModelComponent::size() const 49 : : { 50 : 0 : return mSize; 51 : : } 52 : : 53 : 0 : void QgsProcessingModelComponent::setSize( QSizeF size ) 54 : : { 55 : 0 : mSize = size; 56 : 0 : } 57 : : 58 : 0 : QColor QgsProcessingModelComponent::color() const 59 : : { 60 : 0 : return mColor; 61 : : } 62 : : 63 : 0 : void QgsProcessingModelComponent::setColor( const QColor &color ) 64 : : { 65 : 0 : mColor = color; 66 : 0 : } 67 : : 68 : 0 : bool QgsProcessingModelComponent::linksCollapsed( Qt::Edge edge ) const 69 : : { 70 : 0 : switch ( edge ) 71 : : { 72 : : case Qt::TopEdge: 73 : 0 : return mTopEdgeLinksCollapsed; 74 : : 75 : : case Qt::BottomEdge: 76 : 0 : return mBottomEdgeLinksCollapsed; 77 : : 78 : : case Qt::LeftEdge: 79 : : case Qt::RightEdge: 80 : 0 : return false; 81 : : } 82 : 0 : return false; 83 : 0 : } 84 : : 85 : 0 : void QgsProcessingModelComponent::setLinksCollapsed( Qt::Edge edge, bool collapsed ) 86 : : { 87 : 0 : switch ( edge ) 88 : : { 89 : : case Qt::TopEdge: 90 : 0 : mTopEdgeLinksCollapsed = collapsed; 91 : 0 : break; 92 : : 93 : : case Qt::BottomEdge: 94 : 0 : mBottomEdgeLinksCollapsed = collapsed; 95 : 0 : break; 96 : : 97 : : case Qt::LeftEdge: 98 : : case Qt::RightEdge: 99 : 0 : break; 100 : : } 101 : 0 : } 102 : : 103 : 0 : void QgsProcessingModelComponent::setComment( const QgsProcessingModelComment & ) 104 : : { 105 : : 106 : 0 : } 107 : : 108 : 0 : void QgsProcessingModelComponent::saveCommonProperties( QVariantMap &map ) const 109 : : { 110 : 0 : map.insert( QStringLiteral( "component_pos_x" ), mPosition.x() ); 111 : 0 : map.insert( QStringLiteral( "component_pos_y" ), mPosition.y() ); 112 : 0 : map.insert( QStringLiteral( "component_description" ), mDescription ); 113 : 0 : map.insert( QStringLiteral( "component_width" ), mSize.width() ); 114 : 0 : map.insert( QStringLiteral( "component_height" ), mSize.height() ); 115 : 0 : map.insert( QStringLiteral( "parameters_collapsed" ), mTopEdgeLinksCollapsed ); 116 : 0 : map.insert( QStringLiteral( "outputs_collapsed" ), mBottomEdgeLinksCollapsed ); 117 : 0 : map.insert( QStringLiteral( "color" ), mColor.isValid() ? QgsSymbolLayerUtils::encodeColor( mColor ) : QString() ); 118 : 0 : const QgsProcessingModelComment *thisComment = comment(); 119 : 0 : if ( thisComment ) 120 : 0 : map.insert( QStringLiteral( "comment" ), thisComment->toVariant() ); 121 : 0 : } 122 : : 123 : 0 : void QgsProcessingModelComponent::restoreCommonProperties( const QVariantMap &map ) 124 : : { 125 : 0 : QPointF pos; 126 : 0 : pos.setX( map.value( QStringLiteral( "component_pos_x" ) ).toDouble() ); 127 : 0 : pos.setY( map.value( QStringLiteral( "component_pos_y" ) ).toDouble() ); 128 : 0 : mPosition = pos; 129 : 0 : mDescription = map.value( QStringLiteral( "component_description" ) ).toString(); 130 : 0 : mSize.setWidth( map.value( QStringLiteral( "component_width" ), QString::number( DEFAULT_COMPONENT_WIDTH ) ).toDouble() ); 131 : 0 : mSize.setHeight( map.value( QStringLiteral( "component_height" ), QString::number( DEFAULT_COMPONENT_HEIGHT ) ).toDouble() ); 132 : 0 : mColor = map.value( QStringLiteral( "color" ) ).toString().isEmpty() ? QColor() : QgsSymbolLayerUtils::decodeColor( map.value( QStringLiteral( "color" ) ).toString() ); 133 : 0 : mTopEdgeLinksCollapsed = map.value( QStringLiteral( "parameters_collapsed" ) ).toBool(); 134 : 0 : mBottomEdgeLinksCollapsed = map.value( QStringLiteral( "outputs_collapsed" ) ).toBool(); 135 : 0 : QgsProcessingModelComment *thisComment = comment(); 136 : 0 : if ( thisComment ) 137 : 0 : thisComment->loadVariant( map.value( QStringLiteral( "comment" ) ).toMap() ); 138 : 0 : } 139 : : 140 : 0 : void QgsProcessingModelComponent::copyNonDefinitionProperties( const QgsProcessingModelComponent &other ) 141 : : { 142 : 0 : setPosition( other.position() ); 143 : 0 : setSize( other.size() ); 144 : 0 : setLinksCollapsed( Qt::TopEdge, other.linksCollapsed( Qt::TopEdge ) ); 145 : 0 : setLinksCollapsed( Qt::BottomEdge, other.linksCollapsed( Qt::BottomEdge ) ); 146 : 0 : QgsProcessingModelComment *thisComment = comment(); 147 : 0 : const QgsProcessingModelComment *otherComment = other.comment(); 148 : 0 : if ( thisComment && otherComment ) 149 : : { 150 : 0 : if ( !otherComment->position().isNull() ) 151 : 0 : thisComment->setPosition( otherComment->position() ); 152 : : else 153 : 0 : thisComment->setPosition( other.position() + QPointF( size().width(), -1.5 * size().height() ) ); 154 : 0 : thisComment->setSize( otherComment->size() ); 155 : 0 : } 156 : 0 : } 157 : : 158 : : ///@endcond