1515from .factory import NodeFactory
1616from .menu import NodeGraphMenu , NodesMenu
1717from .model import NodeGraphModel
18- from .node import NodeObject , BaseNode , BackdropNode
18+ from .node import NodeObject , BackdropNode , BaseNode
1919from .port import Port
2020from ..constants import (
2121 URI_SCHEME , URN_SCHEME ,
@@ -1002,14 +1002,26 @@ def delete_node(self, node):
10021002 'node must be a instance of a NodeObject.'
10031003 if node is self .root_node ():
10041004 return
1005- self .nodes_deleted .emit ([node .id ])
1005+
1006+ node_id = node .id
1007+ self ._undo_stack .beginMacro ('delete node: "{}"' .format (node .name ()))
1008+ if isinstance (node , BaseNode ):
1009+ for p in node .input_ports ():
1010+ if p .locked ():
1011+ p .set_locked (False , connected_ports = False )
1012+ p .clear_connections ()
1013+ for p in node .output_ports ():
1014+ if p .locked ():
1015+ p .set_locked (False , connected_ports = False )
1016+ p .clear_connections ()
1017+
10061018 if isinstance (node , SubGraph ):
1007- self ._undo_stack .beginMacro ('delete sub graph' )
10081019 self .delete_nodes (node .children ())
10091020 self ._undo_stack .push (NodeRemovedCmd (self , node ))
1010- self ._undo_stack .endMacro ()
1011- else :
1012- self ._undo_stack .push (NodeRemovedCmd (self , node ))
1021+
1022+ self ._undo_stack .push (NodeRemovedCmd (self , node ))
1023+ self ._undo_stack .endMacro ()
1024+ self .nodes_deleted .emit ([node_id ])
10131025
10141026 def delete_nodes (self , nodes ):
10151027 """
@@ -1018,14 +1030,29 @@ def delete_nodes(self, nodes):
10181030 Args:
10191031 nodes (list[NodeGraphQt.BaseNode]): list of node instances.
10201032 """
1033+ if not nodes :
1034+ return
10211035 if not self ._editable :
10221036 return
1037+ node_ids = [n .id for n in nodes ]
10231038 root_node = self .root_node ()
1024- self .nodes_deleted .emit ([n .id for n in nodes ])
10251039 self ._undo_stack .beginMacro ('delete nodes' )
1026- [self .delete_nodes (n .children ()) for n in nodes if isinstance (n , SubGraph )]
1027- [self ._undo_stack .push (NodeRemovedCmd (self , n )) for n in nodes if n is not root_node ]
1040+ for node in nodes :
1041+ if isinstance (node , BaseNode ):
1042+ for p in node .input_ports ():
1043+ if p .locked ():
1044+ p .set_locked (False , connected_ports = False )
1045+ p .clear_connections ()
1046+ for p in node .output_ports ():
1047+ if p .locked ():
1048+ p .set_locked (False , connected_ports = False )
1049+ p .clear_connections ()
1050+ if isinstance (node , SubGraph ):
1051+ self .delete_nodes (node .children ())
1052+ if node is not root_node :
1053+ self ._undo_stack .push (NodeRemovedCmd (self , node ))
10281054 self ._undo_stack .endMacro ()
1055+ self .nodes_deleted .emit (node_ids )
10291056
10301057 def delete_pipe (self , pipe ):
10311058 self ._on_connection_changed ([(pipe .input_port , pipe .output_port )], [])
0 commit comments