Skip to content
Permalink
Browse files

[processing] Fix crashes and random behavior after dropping algorithms

to model designer

Also fixes drag and drop within the algorithm parameter dialog and
the qt warnings thrown during these operations
  • Loading branch information
nyalldawson committed Mar 4, 2019
1 parent e09b97f commit 30f786c12975394c71bbe57d0b47af8ab59c547e
Showing with 16 additions and 8 deletions.
  1. +16 −8 python/plugins/processing/modeler/ModelerDialog.py
@@ -46,7 +46,8 @@
pyqtSignal,
QDataStream,
QIODevice,
QUrl)
QUrl,
QTimer)
from qgis.PyQt.QtWidgets import (QGraphicsView,
QTreeWidget,
QMessageBox,
@@ -342,19 +343,26 @@ def _dragEnterEvent(event):
event.ignore()

def _dropEvent(event):
if event.mimeData().hasFormat('application/x-vnd.qgis.qgis.algorithmid'):
data = event.mimeData().data('application/x-vnd.qgis.qgis.algorithmid')
stream = QDataStream(data, QIODevice.ReadOnly)
algorithm_id = stream.readQString()
def alg_dropped(algorithm_id, pos):
alg = QgsApplication.processingRegistry().createAlgorithmById(algorithm_id)
if alg is not None:
self._addAlgorithm(alg, event.pos())
self._addAlgorithm(alg, pos)
else:
assert False, algorithm_id

def input_dropped(id, pos):
if id in [param.id() for param in QgsApplication.instance().processingRegistry().parameterTypes()]:
self.addInputOfType(itemId, pos)

if event.mimeData().hasFormat('application/x-vnd.qgis.qgis.algorithmid'):
data = event.mimeData().data('application/x-vnd.qgis.qgis.algorithmid')
stream = QDataStream(data, QIODevice.ReadOnly)
algorithm_id = stream.readQString()
QTimer.singleShot(0, lambda id=algorithm_id, pos=event.pos(): alg_dropped(id, pos))
event.accept()
elif event.mimeData().hasText():
itemId = event.mimeData().text()
if itemId in [param.id() for param in QgsApplication.instance().processingRegistry().parameterTypes()]:
self.addInputOfType(itemId, event.pos())
QTimer.singleShot(0, lambda id=itemId, pos=event.pos(): input_dropped(id, pos))
event.accept()
else:
event.ignore()

0 comments on commit 30f786c

Please sign in to comment.
You can’t perform that action at this time.