@@ -139,12 +139,13 @@ class _PortConnectionsContainer(QtWidgets.QWidget):
139139 under a tab in the ``NodePropWidget`` widget.
140140 """
141141
142- input_group_toggled = QtCore .Signal (bool )
143- output_group_toggled = QtCore .Signal (bool )
142+ ingroup_visible_toggled = QtCore .Signal (bool )
143+ outgroup_visible_toggled = QtCore .Signal (bool )
144144
145145 def __init__ (self , parent = None , node = None ):
146146 super (_PortConnectionsContainer , self ).__init__ (parent )
147147 self ._node = node
148+ self ._ports = {}
148149
149150 in_group , self .in_tree = self ._build_tree_group ('Input Ports' )
150151 for _ , port in node .inputs ().items ():
@@ -164,8 +165,12 @@ def __init__(self, parent=None, node=None):
164165 layout .addStretch ()
165166
166167 # wire up signals & slots
167- in_group .clicked .connect (lambda x : self .input_group_toggled .emit (x ))
168- out_group .clicked .connect (lambda x : self .output_group_toggled .emit (x ))
168+ in_group .clicked .connect (
169+ lambda x : self .ingroup_visible_toggled .emit (x )
170+ )
171+ out_group .clicked .connect (
172+ lambda x : self .outgroup_visible_toggled .emit (x )
173+ )
169174
170175 in_group .setChecked (False )
171176 self .in_tree .setVisible (False )
@@ -193,9 +198,10 @@ def _build_tree_group(title):
193198 group_box .setTitle (title )
194199 group_box .setLayout (QtWidgets .QVBoxLayout ())
195200
201+ headers = ['Locked' , 'Name' , 'Connections' , '' ]
196202 tree_widget = QtWidgets .QTreeWidget ()
197- tree_widget .setColumnCount (5 )
198- tree_widget .setHeaderLabels ([ 'Locked' , 'Name' , 'Connections' , '' , '' ] )
203+ tree_widget .setColumnCount (len ( headers ) )
204+ tree_widget .setHeaderLabels (headers )
199205 tree_widget .setHeaderHidden (False )
200206 tree_widget .header ().setStretchLastSection (False )
201207 QtCompat .QHeaderView .setSectionResizeMode (
@@ -206,8 +212,7 @@ def _build_tree_group(title):
206212
207213 return group_box , tree_widget
208214
209- @staticmethod
210- def _build_row (tree , port ):
215+ def _build_row (self , tree , port ):
211216 """
212217 Args:
213218 tree (QtWidgets.QTreeWidget):
@@ -220,29 +225,40 @@ def _build_row(tree, port):
220225 item .setToolTip (1 , 'Port Name' )
221226 item .setToolTip (2 , 'Select connected port.' )
222227 item .setToolTip (3 , 'Center on connected port node.' )
223- item .setToolTip (4 , 'Disconnect selected port connection.' )
224228
225229 lock_chb = QtWidgets .QCheckBox ()
230+ lock_chb .setChecked (port .locked ())
231+ lock_chb .clicked .connect (lambda x : port .set_locked (x ))
226232 tree .setItemWidget (item , 0 , lock_chb )
227233
228234 combo = QtWidgets .QComboBox ()
229- combo . addItems ([
230- '{} : "{}"' .format (p .name (), p .node ().name ())
231- for p in port . connected_ports ()
232- ] )
235+ for cp in port . connected_ports ():
236+ item_name = '{} : "{}"' .format (cp .name (), cp .node ().name ())
237+ self . _ports [ item_name ] = cp
238+ combo . addItem ( item_name )
233239 tree .setItemWidget (item , 2 , combo )
234240
235241 focus_btn = QtWidgets .QPushButton ()
236242 focus_btn .setIcon (QtGui .QIcon (tree .style ().standardPixmap (
237243 QtWidgets .QStyle .SP_DialogYesButton
238244 )))
245+ focus_btn .clicked .connect (
246+ lambda : self ._on_focus_on_node (self ._ports .get (combo .currentText ()))
247+ )
239248 tree .setItemWidget (item , 3 , focus_btn )
240249
241- disconnect_btn = QtWidgets .QPushButton ()
242- disconnect_btn .setIcon (QtGui .QIcon (tree .style ().standardPixmap (
243- QtWidgets .QStyle .SP_DialogNoButton
244- )))
245- tree .setItemWidget (item , 4 , disconnect_btn )
250+ def _on_focus_on_node (self , port ):
251+ """
252+ Slot function emits the node is of the connected port.
253+
254+ Args:
255+ port (NodeGraphQt.Port): connected port.
256+ """
257+ if port :
258+ node = port .node ()
259+ node .graph .center_on ([node ])
260+ node .graph .clear_selection ()
261+ node .set_selected (True )
246262
247263
248264class NodePropWidget (QtWidgets .QWidget ):
@@ -299,12 +315,12 @@ def __init__(self, parent=None, node=None):
299315 layout .addWidget (self .type_wgt )
300316
301317 self ._ports_container = self ._read_node (node )
302- self ._ports_container .input_group_toggled .connect (
318+ self ._ports_container .ingroup_visible_toggled .connect (
303319 lambda v : self .widget_visible_changed .emit (
304320 self .__node_id , v , self ._ports_container .in_tree
305321 )
306322 )
307- self ._ports_container .output_group_toggled .connect (
323+ self ._ports_container .outgroup_visible_toggled .connect (
308324 lambda v : self .widget_visible_changed .emit (
309325 self .__node_id , v , self ._ports_container .out_tree
310326 )
@@ -545,6 +561,15 @@ def __repr__(self):
545561 )
546562
547563 def __on_widget_visible_changed (self , node_id , visible , tree_widget ):
564+ """
565+ Triggered when the visibility of the port tree widget changes we
566+ resize the property list table row.
567+
568+ Args:
569+ node_id (str): node id.
570+ visible (bool): visibility state.
571+ tree_widget (QtWidgets.QTreeWidget): ports tree widget.
572+ """
548573 items = self ._prop_list .findItems (node_id , QtCore .Qt .MatchExactly )
549574 if items :
550575 tree_widget .setVisible (visible )
@@ -556,10 +581,23 @@ def __on_widget_visible_changed(self, node_id, visible, tree_widget):
556581 )
557582
558583 def __on_prop_close (self , node_id ):
584+ """
585+ Triggered when a node property widget is requested to be removed from
586+ the property list widget.
587+
588+ Args:
589+ node_id (str): node id.
590+ """
559591 items = self ._prop_list .findItems (node_id , QtCore .Qt .MatchExactly )
560592 [self ._prop_list .removeRow (i .row ()) for i in items ]
561593
562594 def __on_limit_changed (self , value ):
595+ """
596+ Sets the property list widget limit.
597+
598+ Args:
599+ value (int): limit value.
600+ """
563601 rows = self ._prop_list .rowCount ()
564602 if rows > value :
565603 self ._prop_list .removeRow (rows - 1 )
0 commit comments