diff --git a/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in b/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in index 334e6014bb2..974d3bf6c7e 100644 --- a/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in +++ b/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in @@ -78,6 +78,8 @@ Sets the ``font`` used to render text in the item. virtual void hoverLeaveEvent( QGraphicsSceneHoverEvent *event ); + virtual QVariant itemChange( GraphicsItemChange change, const QVariant &value ); + QRectF itemRect() const; %Docstring diff --git a/python/plugins/processing/modeler/ModelerGraphicItem.py b/python/plugins/processing/modeler/ModelerGraphicItem.py index 4be9da01239..8b2dfb6846f 100644 --- a/python/plugins/processing/modeler/ModelerGraphicItem.py +++ b/python/plugins/processing/modeler/ModelerGraphicItem.py @@ -171,24 +171,6 @@ class ModelerGraphicItem(QgsModelComponentGraphicItem): else: return QPointF(0, 0) - def itemChange(self, change, value): - if change == QGraphicsItem.ItemPositionHasChanged: - self.updateArrowPaths.emit() - self.component().setPosition(self.pos()) - - # also need to update the model's stored component's position - if isinstance(self.component(), QgsProcessingModelChildAlgorithm): - self.model().childAlgorithm(self.component().childId()).setPosition(self.pos()) - elif isinstance(self.component(), QgsProcessingModelParameter): - self.model().parameterComponent(self.component().parameterName()).setPosition(self.pos()) - elif isinstance(self.component(), QgsProcessingModelOutput): - self.model().childAlgorithm(self.component().childId()).modelOutput( - self.component().name()).setPosition(self.pos()) - elif change == QGraphicsItem.ItemSelectedChange: - self.repaintArrows.emit() - - return super().itemChange(change, value) - class ModelerInputGraphicItem(ModelerGraphicItem): diff --git a/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp b/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp index 408d58d5de6..188cd07e8b9 100644 --- a/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp +++ b/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp @@ -21,6 +21,7 @@ #include "qgsmodelgraphicsscene.h" #include "qgsapplication.h" #include "qgsmodelgraphicitem.h" +#include "qgsprocessingmodelalgorithm.h" #include #include #include @@ -109,6 +110,39 @@ void QgsModelComponentGraphicItem::hoverLeaveEvent( QGraphicsSceneHoverEvent * ) } } +QVariant QgsModelComponentGraphicItem::itemChange( QGraphicsItem::GraphicsItemChange change, const QVariant &value ) +{ + switch ( change ) + { + case QGraphicsItem::ItemPositionHasChanged: + { + emit updateArrowPaths(); + mComponent->setPosition( pos() ); + + // also need to update the model's stored component's position + // TODO - this is not so nice, consider moving this to model class + if ( QgsProcessingModelChildAlgorithm *child = dynamic_cast< QgsProcessingModelChildAlgorithm * >( mComponent.get() ) ) + mModel->childAlgorithm( child->childId() ).setPosition( pos() ); + else if ( QgsProcessingModelParameter *param = dynamic_cast< QgsProcessingModelParameter * >( mComponent.get() ) ) + mModel->parameterComponent( param->parameterName() ).setPosition( pos() ); + else if ( QgsProcessingModelOutput *output = dynamic_cast< QgsProcessingModelOutput * >( mComponent.get() ) ) + mModel->childAlgorithm( output->childId() ).modelOutput( output->name() ).setPosition( pos() ); + + break; + } + case QGraphicsItem::ItemSelectedChange: + { + emit repaintArrows(); + break; + } + + default: + break; + } + + return QGraphicsObject::itemChange( change, value ); +} + QRectF QgsModelComponentGraphicItem::itemRect() const { return QRectF( -( mComponent->size().width() + 2 ) / 2.0, diff --git a/src/gui/processing/models/qgsmodelcomponentgraphicitem.h b/src/gui/processing/models/qgsmodelcomponentgraphicitem.h index 66366222da2..6c7f178a443 100644 --- a/src/gui/processing/models/qgsmodelcomponentgraphicitem.h +++ b/src/gui/processing/models/qgsmodelcomponentgraphicitem.h @@ -88,6 +88,7 @@ class GUI_EXPORT QgsModelComponentGraphicItem : public QGraphicsObject void hoverEnterEvent( QGraphicsSceneHoverEvent *event ) override; void hoverMoveEvent( QGraphicsSceneHoverEvent *event ) override; void hoverLeaveEvent( QGraphicsSceneHoverEvent *event ) override; + QVariant itemChange( GraphicsItemChange change, const QVariant &value ) override; /** * Returns the rectangle representing the body of the item.