@@ -65,7 +65,62 @@ def __init__(self, alg=None):
65
65
self .scene = ModelerScene (self )
66
66
self .scene .setSceneRect (QRectF (0 , 0 , 4000 , 4000 ))
67
67
self .view .setScene (self .scene )
68
+ self .view .setAcceptDrops (True )
68
69
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 )
69
124
70
125
# Set icons
71
126
self .btnOpen .setIcon (
@@ -285,9 +340,13 @@ def repaintModel(self):
285
340
self .scene .paintModel (self .alg )
286
341
self .view .setScene (self .scene )
287
342
343
+
288
344
def addInput (self ):
289
345
item = self .inputsTree .currentItem ()
290
346
paramType = str (item .text (0 ))
347
+ self .addInputOfType (paramType )
348
+
349
+ def addInputOfType (self , paramType ):
291
350
if paramType in ModelerParameterDefinitionDialog .paramTypes :
292
351
dlg = ModelerParameterDefinitionDialog (self .alg , paramType )
293
352
dlg .exec_ ()
@@ -301,11 +360,12 @@ def addInput(self):
301
360
self .hasChanged = True
302
361
303
362
def fillInputsTree (self ):
304
- parametersItem = QTreeWidgetItem ()
363
+ parametersItem = QTreeWidgetItem ()
305
364
parametersItem .setText (0 , self .tr ('Parameters' ))
306
365
for paramType in ModelerParameterDefinitionDialog .paramTypes :
307
366
paramItem = QTreeWidgetItem ()
308
367
paramItem .setText (0 , paramType )
368
+ paramItem .setFlags (Qt .ItemIsEnabled | Qt .ItemIsSelectable | Qt .ItemIsDragEnabled )
309
369
parametersItem .addChild (paramItem )
310
370
self .inputsTree .addTopLevelItem (parametersItem )
311
371
parametersItem .setExpanded (True )
@@ -314,7 +374,10 @@ def addAlgorithm(self):
314
374
item = self .algorithmTree .currentItem ()
315
375
if isinstance (item , TreeAlgorithmItem ):
316
376
alg = ModelerUtils .getAlgorithm (item .alg .commandLineName ())
317
- alg = alg .getCopy ()
377
+ self ._addAlgorithm (alg )
378
+
379
+ def _addAlgorithm (self , alg ):
380
+ alg = alg .getCopy ()
318
381
dlg = alg .getCustomModelerParametersDialog (self .alg )
319
382
if not dlg :
320
383
dlg = ModelerParametersDialog (alg , self .alg )
0 commit comments