Reconnect links when deleting a node (#1405)

* fix: avoid deleting inner network's input nodes

* [wip]feat: set primary input on node deletion

- set input's input value to deleted node's primary input

* fix: check deleting node's output is used by other node(s)

* feat: enable conditionally reconnecting input

- user can press a key to avoid reconnecting nodes during deletion

* refactor: improve and restructure code

- make code quality improvements
- add NodeGraphHandlerData struct to replace big tuple

* fix: avoid deleting inner network's input nodes

* [wip]feat: set primary input on node deletion

- set input's input value to deleted node's primary input

* fix: check deleting node's output is used by other node(s)

* feat: enable conditionally reconnecting input

- user can press a key to avoid reconnecting nodes during deletion

* refactor: improve and restructure code

- make code quality improvements
- add NodeGraphHandlerData struct to replace big tuple

* Remove unnecessary recursion

* Code review cleanup

---------

Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
Dhruv
2023-09-02 08:32:37 +00:00
committed by GitHub
co-authored by 0hypercube Keavon Chambers
parent ee1a228bfd
commit 81a7c2dfcf
4 changed files with 120 additions and 68 deletions
@@ -40,8 +40,10 @@ pub fn default_mapping() -> Mapping {
// NORMAL PRIORITY:
//
// NodeGraphMessage
entry!(KeyDown(Delete); action_dispatch=NodeGraphMessage::DeleteSelectedNodes),
entry!(KeyDown(Backspace); action_dispatch=NodeGraphMessage::DeleteSelectedNodes),
entry!(KeyDown(Delete); modifiers=[Accel], action_dispatch=NodeGraphMessage::DeleteSelectedNodes { reconnect: false }),
entry!(KeyDown(Backspace); modifiers=[Accel], action_dispatch=NodeGraphMessage::DeleteSelectedNodes { reconnect: false }),
entry!(KeyDown(Delete); action_dispatch=NodeGraphMessage::DeleteSelectedNodes { reconnect: true }),
entry!(KeyDown(Backspace); action_dispatch=NodeGraphMessage::DeleteSelectedNodes { reconnect: true }),
entry!(KeyDown(KeyX); modifiers=[Accel], action_dispatch=NodeGraphMessage::Cut),
entry!(KeyDown(KeyC); modifiers=[Accel], action_dispatch=NodeGraphMessage::Copy),
entry!(KeyDown(KeyD); modifiers=[Accel], action_dispatch=NodeGraphMessage::DuplicateSelectedNodes),