Skip to content

Commit 270a47a

Browse files
committed
port connection updates.
1 parent 7d98e5c commit 270a47a

File tree

1 file changed

+58
-20
lines changed

1 file changed

+58
-20
lines changed

NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

248264
class 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

Comments
 (0)