Skip to content

Commit 92ee039

Browse files
committed
[processing] added drag&drop support in modeler
1 parent 36bd2d0 commit 92ee039

File tree

1 file changed

+65
-2
lines changed

1 file changed

+65
-2
lines changed

python/plugins/processing/modeler/ModelerDialog.py

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,62 @@ def __init__(self, alg=None):
6565
self.scene = ModelerScene(self)
6666
self.scene.setSceneRect(QRectF(0, 0, 4000, 4000))
6767
self.view.setScene(self.scene)
68+
self.view.setAcceptDrops(True)
6869
self.view.ensureVisible(0, 0, 10, 10)
70+
71+
def _dragEnterEvent(event):
72+
if event.mimeData().hasText():
73+
event.acceptProposedAction()
74+
else:
75+
event.ignore()
76+
77+
def _dropEvent(event):
78+
if event.mimeData().hasText():
79+
text = event.mimeData().text()
80+
print text
81+
if text in ModelerParameterDefinitionDialog.paramTypes:
82+
self.addInputOfType(text)
83+
else:
84+
alg = ModelerUtils.getAlgorithm(text);
85+
if alg is not None:
86+
self._addAlgorithm(alg)
87+
event.accept()
88+
else:
89+
event.ignore()
90+
91+
def _dragMoveEvent(event):
92+
if event.mimeData().hasText():
93+
event.accept()
94+
else:
95+
event.ignore()
96+
97+
self.view.dragEnterEvent = _dragEnterEvent
98+
self.view.dropEvent = _dropEvent
99+
self.view.dragMoveEvent = _dragMoveEvent
100+
101+
102+
def _mimeDataInput(items):
103+
mimeData = QMimeData()
104+
text = items[0].text(0)
105+
mimeData.setText(text)
106+
return mimeData
107+
108+
self.inputsTree.mimeData = _mimeDataInput
109+
110+
self.inputsTree.setDragDropMode(QTreeWidget.DragOnly)
111+
self.inputsTree.setDropIndicatorShown(True)
112+
113+
def _mimeDataAlgorithm(items):
114+
item = items[0]
115+
if isinstance(item, TreeAlgorithmItem):
116+
mimeData = QMimeData()
117+
mimeData.setText(item.alg.commandLineName())
118+
return mimeData
119+
120+
self.algorithmTree.mimeData = _mimeDataAlgorithm
121+
122+
self.algorithmTree.setDragDropMode(QTreeWidget.DragOnly)
123+
self.algorithmTree.setDropIndicatorShown(True)
69124

70125
# Set icons
71126
self.btnOpen.setIcon(
@@ -285,9 +340,13 @@ def repaintModel(self):
285340
self.scene.paintModel(self.alg)
286341
self.view.setScene(self.scene)
287342

343+
288344
def addInput(self):
289345
item = self.inputsTree.currentItem()
290346
paramType = str(item.text(0))
347+
self.addInputOfType(paramType)
348+
349+
def addInputOfType(self, paramType):
291350
if paramType in ModelerParameterDefinitionDialog.paramTypes:
292351
dlg = ModelerParameterDefinitionDialog(self.alg, paramType)
293352
dlg.exec_()
@@ -301,11 +360,12 @@ def addInput(self):
301360
self.hasChanged = True
302361

303362
def fillInputsTree(self):
304-
parametersItem = QTreeWidgetItem()
363+
parametersItem = QTreeWidgetItem()
305364
parametersItem.setText(0, self.tr('Parameters'))
306365
for paramType in ModelerParameterDefinitionDialog.paramTypes:
307366
paramItem = QTreeWidgetItem()
308367
paramItem.setText(0, paramType)
368+
paramItem.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled)
309369
parametersItem.addChild(paramItem)
310370
self.inputsTree.addTopLevelItem(parametersItem)
311371
parametersItem.setExpanded(True)
@@ -314,7 +374,10 @@ def addAlgorithm(self):
314374
item = self.algorithmTree.currentItem()
315375
if isinstance(item, TreeAlgorithmItem):
316376
alg = ModelerUtils.getAlgorithm(item.alg.commandLineName())
317-
alg = alg.getCopy()
377+
self._addAlgorithm(alg)
378+
379+
def _addAlgorithm(self, alg):
380+
alg = alg.getCopy()
318381
dlg = alg.getCustomModelerParametersDialog(self.alg)
319382
if not dlg:
320383
dlg = ModelerParametersDialog(alg, self.alg)

0 commit comments

Comments
 (0)