22class_name ParleyDeleteOperation
33extends ParleyGraphOperation
44
5- var selectedConnections : Array [ParleyGraphEdge ]
6- var selectedNodes : Array [ParleyGraphNode ]
7- var deletedNodes : Array [ParleyGraphNode ]
5+ var selected_connections : Array [ParleyGraphEdge ]
6+ var selected_nodes : Array [ParleyGraphNode ]
7+ var deleted_node_datas : Array [NodeData ]
88var graph_view : ParleyGraphView
99
1010func _init (_graph_view : ParleyGraphView , _selected_connections : Array [ParleyGraphEdge ], _selected_nodes : Array [ParleyGraphNode ]) -> void :
1111 graph_view = _graph_view
12- selectedConnections = _selected_connections .duplicate ()
13- selectedNodes = _selected_nodes .duplicate ()
12+ selected_connections = _selected_connections .duplicate ()
13+ selected_nodes = _selected_nodes .duplicate ()
1414
1515func undo () -> void :
16+ pass
1617 # Re-add deleted nodes
1718
18- # TODO this will be implemented shortly
19- # for node : GraphNode in selectedNodes:
20- # graph_view.add_child(node)
21- # graph_view.ast.add_ast_node(node.)
22-
23- for connection : ParleyGraphEdge in selectedConnections :
24- var result : int = connection .connect_node (graph_view )
25- if result == FAILED :
26- print ("Couldn't delete connection: " , connection .as_string ())
19+ selected_nodes .clear ()
20+ var graph_nodes : Dictionary = {}
21+ for node_data : NodeData in deleted_node_datas :
22+ var deleted_node : ParleyNodeAst = node_data .node_ast
23+ graph_view ._add_node (graph_nodes , deleted_node )
24+ graph_view .ast .add_node_from_ast (deleted_node )
25+ var added_node : ParleyGraphNode = graph_nodes [deleted_node .id ]
26+ added_node .position = deleted_node .position
2727
28+ for node_data : NodeData in deleted_node_datas :
29+ for connection : ParleyGraphEdge in node_data .connections :
30+ connection .to_node = graph_view .get_node (NodePath (connection.to_node_name)) as ParleyGraphNode
31+ connection .from_node = graph_view .get_node (NodePath (connection.from_node_name)) as ParleyGraphNode
32+ if node_data .node_name == connection .to_node_name :
33+ selected_nodes .append (connection .to_node )
34+ pass
35+ elif node_data .node_name == connection .from_node_name :
36+ selected_nodes .append (connection .from_node )
37+ pass
38+ connection .connect_node (graph_view )
39+
40+ for connection : ParleyGraphEdge in selected_connections :
41+ connection .to_node = graph_view .get_node (NodePath (connection.to_node_name)) as ParleyGraphNode
42+ connection .from_node = graph_view .get_node (NodePath (connection.from_node_name)) as ParleyGraphNode
43+ connection .connect_node (graph_view )
44+
45+ graph_view .generate ()
2846
2947func do () -> void :
30- # Remove deleted nodes
31- for connection : ParleyGraphEdge in selectedConnections :
48+ for selected_node : ParleyGraphNode in selected_nodes :
49+ if graph_view .has_node (NodePath (selected_node.name)):
50+ var ast : ParleyNodeAst = graph_view .ast .find_node_by_id (selected_node .id )
51+ var connections : Array [ParleyGraphEdge ] = get_connections_for_node (graph_view , selected_node )
52+ deleted_node_datas .append (NodeData .new (selected_node .name , ast , connections ))
53+
54+ for selected_node : ParleyGraphNode in selected_nodes :
55+ if graph_view .has_node (NodePath (selected_node.name)):
56+ print ("remove node" )
57+ var ast : ParleyNodeAst = graph_view .ast .find_node_by_id (selected_node .id )
58+ graph_view ._on_node_deselected (selected_node )
59+ graph_view .remove_child (selected_node )
60+ graph_view .ast .remove_node (selected_node .id )
61+
62+ for connection : ParleyGraphEdge in selected_connections :
63+ print ("disconnect connection" )
3264 connection .disconnect_node (graph_view )
65+
66+ graph_view .generate ()
67+
68+ func get_connections_for_node (graph_edit : GraphEdit , node : GraphNode ) -> Array [ParleyGraphEdge ]:
69+ var result : Array [ParleyGraphEdge ] = []
70+ var connections : Array [Dictionary ] = graph_edit .get_connection_list ()
71+
72+ for conn : Dictionary in connections :
73+ var from_name : String = conn .get ("from_node" )
74+ var to_name : String = conn .get ("to_node" )
75+ var from_port : int = conn .get ("from_port" )
76+ var to_port : int = conn .get ("to_port" )
77+ var to_node : ParleyGraphNode = graph_view .get_node (NodePath (to_name)) as ParleyGraphNode
78+ var from_node : ParleyGraphNode = graph_view .get_node (NodePath (from_name)) as ParleyGraphNode
79+
80+ if from_name == node .name or to_name == node .name :
81+ result .append (ParleyGraphEdge .new (from_node , from_port , to_node , to_port ))
82+
83+ return result
84+
85+
86+ class NodeData :
87+ var node_ast : ParleyNodeAst
88+ var connections : Array [ParleyGraphEdge ]
89+ var node_name : String
90+
91+ func _init (_node_name : String , _node_ast :ParleyNodeAst , _connections : Array [ParleyGraphEdge ]) -> void :
92+ node_name = _node_name
93+ node_ast = _node_ast
94+ connections = _connections
3395
34- for selectedNode : ParleyGraphNode in selectedNodes :
35- if graph_view .has_node (NodePath (selectedNode.name)):
36- graph_view ._on_node_deselected (selectedNode )
37- graph_view .remove_child (selectedNode )
38- graph_view .ast .remove_node (selectedNode .id )
39- deletedNodes .append (selectedNode )
40-
41- func flush () -> void :
42- for deletedNode : ParleyGraphNode in deletedNodes :
43- deletedNode .queue_free ()
44- pass
0 commit comments