Skip to content

Commit 821e84d

Browse files
committed
updated node list widget.
1 parent 7fb3928 commit 821e84d

File tree

5 files changed

+44
-8
lines changed

5 files changed

+44
-8
lines changed

NodeGraphQt/base/graph.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
23
import json
34
import os
45
import re
@@ -13,6 +14,7 @@
1314
from NodeGraphQt.base.model import NodeGraphModel
1415
from NodeGraphQt.base.node import NodeObject
1516
from NodeGraphQt.base.port import Port
17+
from NodeGraphQt.constants import DRAG_DROP_ID
1618
from NodeGraphQt.widgets.node_list import NodeListWidget
1719
from NodeGraphQt.widgets.properties_bin import PropertiesBinWidget
1820
from NodeGraphQt.widgets.viewer import NodeViewer
@@ -122,6 +124,18 @@ def _on_node_data_dropped(self, data, pos):
122124
data (QtCore.QMimeData): mime data.
123125
pos (QtCore.QPoint): scene position relative to the drop.
124126
"""
127+
128+
# don't emit signal for internal widget drops.
129+
if data.hasFormat('text/plain'):
130+
if data.text().startswith('<${}>:'.format(DRAG_DROP_ID)):
131+
node_ids = data.text()[len('<${}>:'.format(DRAG_DROP_ID)):]
132+
x, y = pos.x(), pos.y()
133+
for node_id in node_ids.split(','):
134+
self.create_node(node_id, pos=[x, y])
135+
x += 20
136+
y += 20
137+
return
138+
125139
self.data_dropped.emit(data, pos)
126140

127141
def _on_nodes_moved(self, node_data):

NodeGraphQt/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565

6666
SCENE_AREA = 8000.0
6767

68+
DRAG_DROP_ID = 'n0deGraphQT'
69+
6870
# === PATHS ===
6971

7072
BASE_PATH = os.path.dirname(os.path.abspath(__file__))

NodeGraphQt/widgets/node_list.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1+
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
13
from NodeGraphQt import QtWidgets, QtCore
4+
from NodeGraphQt.constants import DRAG_DROP_ID
5+
6+
7+
TYPE_NODE = QtWidgets.QTreeWidgetItem.UserType + 1
8+
TYPE_CATEGORY = QtWidgets.QTreeWidgetItem.UserType + 2
29

310

411
class BaseListWidgetItem(QtWidgets.QListWidgetItem):
@@ -11,10 +18,17 @@ class NodeListWidget(QtWidgets.QTreeWidget):
1118

1219
def __init__(self, parent=None):
1320
super(NodeListWidget, self).__init__(parent)
21+
self.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly)
1422
self.setHeaderHidden(True)
1523
self._factory = None
1624
self._custom_labels = {}
1725

26+
def mimeData(self, items):
27+
node_ids = ','.join(i.toolTip(0) for i in items)
28+
mime_data = super(NodeListWidget, self).mimeData(items)
29+
mime_data.setText('<${}>:{}'.format(DRAG_DROP_ID, node_ids))
30+
return mime_data
31+
1832
def _build_tree(self):
1933
"""
2034
Populate the node tree.
@@ -33,22 +47,27 @@ def _build_tree(self):
3347
label = self._custom_labels[category]
3448
else:
3549
label = '- {}'.format(category)
36-
item = QtWidgets.QTreeWidgetItem(self, [label])
37-
item.setFirstColumnSpanned(True)
38-
item.setFlags(QtCore.Qt.ItemIsEnabled)
39-
self.addTopLevelItem(item)
40-
item.setExpanded(True)
41-
category_items[category] = item
50+
cat_item = QtWidgets.QTreeWidgetItem(
51+
self, [label], type=TYPE_CATEGORY
52+
)
53+
cat_item.setFirstColumnSpanned(True)
54+
cat_item.setFlags(QtCore.Qt.ItemIsEnabled)
55+
self.addTopLevelItem(cat_item)
56+
cat_item.setExpanded(True)
57+
category_items[category] = cat_item
4258

4359
for node_id, node_name in node_types.items():
4460
category = '.'.join(node_id.split('.')[:-1])
4561
category_item = category_items[category]
4662

47-
item = QtWidgets.QTreeWidgetItem(category_item, [node_name])
63+
item = QtWidgets.QTreeWidgetItem(
64+
category_item, [node_name], type=TYPE_NODE
65+
)
4866
item.setToolTip(0, node_id)
4967

5068
category_item.addChild(item)
5169

70+
5271
def set_node_factory(self, factory):
5372
"""
5473
Set current node factory.

NodeGraphQt/widgets/viewer.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
23
import os
34

45
from NodeGraphQt import QtGui, QtCore, QtWidgets

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
PySide2>=5.12
2-
2+
Qt.py>=1.2.0.b2
33
python>=3.6

0 commit comments

Comments
 (0)