From 91d763d888dcdcd0fc28c64baed21409244096ac Mon Sep 17 00:00:00 2001 From: Almas Baim Date: Sat, 2 Dec 2023 14:29:39 +0000 Subject: [PATCH] feat: dialogue editor now supports node duplication, shortcut CTRL+D, related to #1322 --- .../com/almasb/fxgl/tools/dialogues/DialoguePane.kt | 13 ++++++++++++- .../com/almasb/fxgl/tools/dialogues/MainUI.kt | 13 +++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/DialoguePane.kt b/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/DialoguePane.kt index 6bf55a4a7..a81c30cd2 100644 --- a/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/DialoguePane.kt +++ b/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/DialoguePane.kt @@ -465,7 +465,7 @@ class DialoguePane(graph: DialogueGraph = DialogueGraph()) : Pane() { } private fun onSelectedNodeViewChanged(newNodeView: NodeView?) { - + } /** @@ -635,6 +635,17 @@ class DialoguePane(graph: DialogueGraph = DialogueGraph()) : Pane() { showMessage("TODO: Sorry, not implemented yet.") } + fun duplicate() { + selectedNodeView.value?.let { nodeView -> + // currently we do not allow multiple start nodes + if (nodeView.node.type != START) { + val node = nodeView.node.copy() + + performUIAction(AddNodeAction(graph, node)) + } + } + } + fun save(): SerializableGraph { isDirtyProperty.value = false diff --git a/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/MainUI.kt b/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/MainUI.kt index fe68a875b..4c2f57dc9 100644 --- a/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/MainUI.kt +++ b/fxgl-tools/src/main/kotlin/com/almasb/fxgl/tools/dialogues/MainUI.kt @@ -83,8 +83,7 @@ class MainUI : BorderPane() { val contextMenuEdit = FXGLContextMenu() contextMenuEdit.addItem("Undo (CTRL+Z)") { undo() } //contextMenuEdit.addItem("Redo") { redo() } - //contextMenuEdit.addItem("Copy (CTRL+C)") { } - //contextMenuEdit.addItem("Paste (CTRL+V)") { } + contextMenuEdit.addItem("Duplicate Node (CTRL+D)") { duplicate() } contextMenuEdit.addItem("Preferences") { openPreferencesDialog() } val contextMenuAdd = FXGLContextMenu() @@ -152,6 +151,12 @@ class MainUI : BorderPane() { undo() } }, KeyCode.Z, InputModifier.CTRL) + + getInput().addAction(object : UserAction("Duplicate") { + override fun onActionBegin() { + duplicate() + } + }, KeyCode.D, InputModifier.CTRL) } private fun makeRunButton(): Node { @@ -270,6 +275,10 @@ class MainUI : BorderPane() { currentTab?.pane?.redo() } + private fun duplicate() { + currentTab?.pane?.duplicate() + } + private fun openAboutDialog() { showMessage( "${getSettings().title}: v.${getSettings().version}\n\n"