@@ -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