Skip to content

Commit 7cd10a9

Browse files
committed
tightening up deletion logic for group nodes.
1 parent 4efe7a2 commit 7cd10a9

File tree

5 files changed

+51
-9
lines changed

5 files changed

+51
-9
lines changed

NodeGraphQt/base/factory.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@ def create_node_instance(self, node_type=None):
5656
node_type = self.aliases[node_type]
5757

5858
_NodeClass = self.__nodes.get(node_type)
59-
if not _NodeClass:
60-
print('can\'t find node type {}'.format(node_type))
61-
return _NodeClass()
59+
if _NodeClass:
60+
return _NodeClass()
6261

6362
def register_node(self, node, alias=None):
6463
"""

NodeGraphQt/base/graph.py

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
PortTypeEnum,
2525
ViewerEnum
2626
)
27+
from NodeGraphQt.errors import NodeCreationError, NodeDeletionError
2728
from NodeGraphQt.nodes.backdrop_node import BackdropNode
2829
from NodeGraphQt.nodes.base_node import BaseNode
2930
from NodeGraphQt.nodes.group_node import GroupNode
@@ -1123,7 +1124,7 @@ def format_color(clr):
11231124

11241125
self.node_created.emit(node)
11251126
return node
1126-
raise TypeError('\n\n>> Cannot find node:\t"{}"\n'.format(node_type))
1127+
raise NodeCreationError('Can\'t find node: "{}"'.format(node_type))
11271128

11281129
def add_node(self, node, pos=None, selected=True, push_undo=True):
11291130
"""
@@ -1198,6 +1199,10 @@ def delete_node(self, node, push_undo=True):
11981199
push_undo=push_undo)
11991200
p.clear_connections()
12001201

1202+
# collapse group node before removing.
1203+
if isinstance(node, GroupNode) and node.is_expanded:
1204+
node.collapse()
1205+
12011206
if push_undo:
12021207
self._undo_stack.push(NodeRemovedCmd(self, node))
12031208
self._undo_stack.endMacro()
@@ -1223,6 +1228,10 @@ def remove_node(self, node, push_undo=True):
12231228
if push_undo:
12241229
self._undo_stack.beginMacro('delete node: "{}"'.format(node.name()))
12251230

1231+
# collapse group node before removing.
1232+
if isinstance(node, GroupNode) and node.is_expanded:
1233+
node.collapse()
1234+
12261235
if isinstance(node, BaseNode):
12271236
for p in node.input_ports():
12281237
if p.locked():
@@ -1260,6 +1269,11 @@ def delete_nodes(self, nodes, push_undo=True):
12601269
if push_undo:
12611270
self._undo_stack.beginMacro('deleted "{}" nodes'.format(len(nodes)))
12621271
for node in nodes:
1272+
1273+
# collapse group node before removing.
1274+
if isinstance(node, GroupNode) and node.is_expanded:
1275+
node.collapse()
1276+
12631277
if isinstance(node, BaseNode):
12641278
for p in node.input_ports():
12651279
if p.locked():
@@ -2472,12 +2486,34 @@ def delete_node(self, node, push_undo=True):
24722486
if node in port_nodes and node.parent_port is not None:
24732487
# note: port nodes can only be deleted by deleting the parent
24742488
# port object.
2475-
raise RuntimeError(
2476-
'Can\'t delete node "{}" it is attached to port "{}"'
2477-
.format(node, node.parent_port)
2489+
raise NodeDeletionError(
2490+
'{} can\'t be deleted as it is attached to a port!'.format(node)
24782491
)
24792492
super(SubGraph, self).delete_node(node, push_undo=push_undo)
24802493

2494+
def delete_nodes(self, nodes, push_undo=True):
2495+
"""
2496+
Remove a list of specified nodes from the node graph.
2497+
2498+
Args:
2499+
nodes (list[NodeGraphQt.BaseNode]): list of node instances.
2500+
push_undo (bool): register the command to the undo stack. (default: True)
2501+
"""
2502+
if not nodes:
2503+
return
2504+
2505+
port_nodes = self.get_input_port_nodes() + self.get_output_port_nodes()
2506+
for node in nodes:
2507+
if node in port_nodes and node.parent_port is not None:
2508+
# note: port nodes can only be deleted by deleting the parent
2509+
# port object.
2510+
raise NodeDeletionError(
2511+
'{} can\'t be deleted as it is attached to a port!'
2512+
.format(node)
2513+
)
2514+
2515+
super(SubGraph, self).delete_nodes(nodes, push_undo=push_undo)
2516+
24812517
def collapse_graph(self, clear_session=True):
24822518
"""
24832519
Collapse the current sub graph and hide its widget.

NodeGraphQt/errors.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ class NodePropertyError(Exception): pass
1111
class NodeWidgetError(Exception): pass
1212

1313

14+
class NodeCreationError(Exception): pass
15+
16+
17+
class NodeDeletionError(Exception): pass
18+
19+
1420
class NodeRegistrationError(Exception): pass
1521

1622

NodeGraphQt/widgets/dialogs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def message_dialog(text='', title='Message'):
4848
dlg.setWindowTitle(title)
4949
dlg.setInformativeText(text)
5050
dlg.setStandardButtons(QtWidgets.QMessageBox.Ok)
51-
return dlg.exec_()
51+
dlg.exec_()
5252

5353
@staticmethod
5454
def question_dialog(text='', title='Are you sure?'):

examples/basic_example.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@
9797
n_backdrop = graph.create_node('Backdrop')
9898
n_backdrop.wrap_nodes([n_custom_ports, n_combo_menu])
9999

100-
# fit node selection to the viewer.
100+
# fit nodes to the viewer.
101+
graph.clear_selection()
101102
graph.fit_to_selection()
102103

103104
# Custom builtin widgets from NodeGraphQt

0 commit comments

Comments
 (0)