From a9c3aa0c1aa242f36c25419f9917b93915386f96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 23 Feb 2021 14:53:27 +0100 Subject: [PATCH] [Editor] Enable RichTextFXs' internal undo/redo mechanism --- .../base/editor/code/component/CodeEditor.kt | 8 +++++ .../base/editor/code/view/CodeEditorView.kt | 30 +++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/component/CodeEditor.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/component/CodeEditor.kt index 3c05da2a..d1e100ae 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/component/CodeEditor.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/component/CodeEditor.kt @@ -47,6 +47,14 @@ class CodeEditor(private val highlighter: ObservableValue children += VirtualizedScrollPane(editor) } + fun undo() { + editor.undo() + } + + fun redo() { + editor.redo() + } + private fun initAutoIndents() { editor.addEventHandler(KeyEvent.KEY_PRESSED) { event -> if (event.code === KeyCode.ENTER) { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/view/CodeEditorView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/view/CodeEditorView.kt index 52216e70..56dd6f1e 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/view/CodeEditorView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/view/CodeEditorView.kt @@ -4,14 +4,18 @@ import com.bartlomiejpluta.base.editor.code.component.CodeEditor import com.bartlomiejpluta.base.editor.code.highlighting.JavaSyntaxHighlighter import com.bartlomiejpluta.base.editor.code.model.CodeType import com.bartlomiejpluta.base.editor.code.viewmodel.CodeVM +import com.bartlomiejpluta.base.editor.command.context.UndoableScope import javafx.beans.binding.Bindings -import tornadofx.View -import tornadofx.borderpane +import org.kordamp.ikonli.javafx.FontIcon +import tornadofx.* class CodeEditorView : View() { + override val scope = super.scope as UndoableScope + private val javaSyntaxHighlighter: JavaSyntaxHighlighter by di() private val codeVM = find() + private val highlighter = Bindings.createObjectBinding({ when (codeVM.type!!) { CodeType.JAVA -> javaSyntaxHighlighter @@ -21,6 +25,28 @@ class CodeEditorView : View() { private val editor = CodeEditor(highlighter, codeVM.codeProperty) override val root = borderpane { + top = toolbar { + button(graphic = FontIcon("fa-floppy-o")) { + shortcut("Ctrl+S") + } + + button(graphic = FontIcon("fa-undo")) { + shortcut("Ctrl+Z") + + action { + editor.undo() + } + } + + button(graphic = FontIcon("fa-repeat")) { + shortcut("Ctrl+Shift+Z") + + action { + editor.redo() + } + } + } + center = editor } } \ No newline at end of file