Skip to content

Commit 189d6e6

Browse files
committed
- added new nodes_registered signal.
- fixed bugs in ``NodesPaletteWidget`` widgets.
1 parent 239b174 commit 189d6e6

File tree

2 files changed

+73
-5
lines changed

2 files changed

+73
-5
lines changed

NodeGraphQt/base/graph.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ class NodeGraph(QtCore.QObject):
4444
:width: 60%
4545
"""
4646

47+
nodes_registered = QtCore.Signal(list)
48+
"""
49+
Signal triggered when a node is registered into the node graph.
50+
51+
:parameters: list[:class:`NodeGraphQt.NodeObject`]
52+
:emits: registered nodes
53+
"""
54+
4755
node_created = QtCore.Signal(NodeObject)
4856
"""
4957
Signal triggered when a node is created in the node graph.
@@ -918,6 +926,7 @@ def register_node(self, node, alias=None):
918926
"""
919927
self._node_factory.register_node(node, alias)
920928
self._viewer.rebuild_tab_search()
929+
self.nodes_registered.emit([node])
921930

922931
def register_nodes(self, nodes):
923932
"""
@@ -928,6 +937,7 @@ def register_nodes(self, nodes):
928937
"""
929938
[self._node_factory.register_node(n) for n in nodes]
930939
self._viewer.rebuild_tab_search()
940+
self.nodes_registered.emit(nodes)
931941

932942
def create_node(self, node_type, name=None, selected=True, color=None,
933943
text_color=None, pos=None, push_undo=True):

NodeGraphQt/custom_widgets/nodes_palette.py

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def __init__(self, parent=None):
146146
self.setItemDelegate(NodesGridDelagate(self))
147147

148148
def clear(self):
149-
self.model().sourceMode().clear()
149+
self.model().sourceModel().clear()
150150

151151
def add_item(self, label, tooltip=''):
152152
item = QtGui.QStandardItem(label)
@@ -200,21 +200,58 @@ def __init__(self, parent=None, node_graph=None):
200200

201201
self._build_ui()
202202

203+
# update the ui if new nodes are registered post init.
204+
node_graph.nodes_registered.connect(self._on_nodes_registered)
205+
203206
def __repr__(self):
204207
return '<{} object at {}>'.format(
205208
self.__class__.__name__, hex(id(self))
206209
)
207210

211+
def _on_nodes_registered(self, nodes):
212+
"""
213+
Slot function when a new node has been registered into the node graph.
214+
215+
Args:
216+
nodes (list[NodeObject]): node objects.
217+
"""
218+
node_types = defaultdict(list)
219+
for node in nodes:
220+
name = node.NODE_NAME
221+
node_type = node.type_
222+
category = '.'.join(node_type.split('.')[:-1])
223+
node_types[category].append((node_type, name))
224+
225+
update_tabs = False
226+
for category, nodes_list in node_types.items():
227+
if not update_tabs and category not in self._category_tabs:
228+
update_tabs = True
229+
grid_view = self._add_category_tab(category)
230+
for node_id, node_name in nodes_list:
231+
grid_view.add_item(node_name, node_id)
232+
233+
if update_tabs:
234+
self._update_tab_labels()
235+
236+
def _update_tab_labels(self):
237+
"""
238+
Update the tab labels.
239+
"""
240+
tabs_idx = {self._tab_widget.tabText(x): x
241+
for x in range(self._tab_widget.count())}
242+
for category, label in self._custom_labels.items():
243+
if category in tabs_idx:
244+
idx = tabs_idx[category]
245+
self._tab_widget.setTabText(idx, label)
246+
208247
def _build_ui(self):
209248
"""
210249
populate the ui
211250
"""
212-
categories = set()
213251
node_types = defaultdict(list)
214252
for name, node_ids in self._factory.names.items():
215253
for nid in node_ids:
216254
category = '.'.join(nid.split('.')[:-1])
217-
categories.add(category)
218255
node_types[category].append((nid, name))
219256

220257
for category, nodes_list in node_types.items():
@@ -267,13 +304,34 @@ def set_category_label(self, category, label):
267304
break
268305
self._custom_labels[category] = label
269306

307+
def tab_widget(self):
308+
"""
309+
Get the tab widget.
310+
311+
Returns:
312+
QtWidgets.QTabWidget: tab widget.
313+
"""
314+
return self._tab_widget
315+
270316
def update(self):
271317
"""
272318
Update and refresh the node palette widget.
273319
"""
274-
self._build_tree()
275-
320+
for category, grid_view in self._category_tabs.items():
321+
grid_view.clear()
276322

323+
node_types = defaultdict(list)
324+
for name, node_ids in self._factory.names.items():
325+
for nid in node_ids:
326+
category = '.'.join(nid.split('.')[:-1])
327+
node_types[category].append((nid, name))
277328

329+
for category, nodes_list in node_types.items():
330+
grid_view = self._category_tabs.get(category)
331+
if not grid_view:
332+
grid_view = self._add_category_tab(category)
278333

334+
for node_id, node_name in nodes_list:
335+
grid_view.add_item(node_name, node_id)
279336

337+
self._update_tab_labels()

0 commit comments

Comments
 (0)