From d4aff39f553c3be839d39c225b3435c1443e86d6 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 23 Feb 2021 12:59:08 +0100 Subject: [PATCH] Fix syntax highlight completing before char added --- .../app/controllers/EditorController.java | 29 +++++++++---------- .../java/app/events/EditorChangedEvent.java | 10 +------ .../resources/fxml/components/Editor.fxml | 2 +- 3 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/main/java/app/controllers/EditorController.java b/src/main/java/app/controllers/EditorController.java index 6ceaa6d..7d4b84d 100644 --- a/src/main/java/app/controllers/EditorController.java +++ b/src/main/java/app/controllers/EditorController.java @@ -3,6 +3,7 @@ package app.controllers; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; +import java.util.concurrent.CompletableFuture; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; @@ -19,7 +20,6 @@ import app.model.Model; import app.service.LanguageOperations; import javafx.fxml.FXML; import javafx.fxml.Initializable; -import javafx.scene.input.KeyEvent; public class EditorController implements Initializable, Controller { @@ -27,11 +27,18 @@ public class EditorController implements Initializable, Controller { private CodeArea editor; private EventBus eventBus; - private Model model; + /** + * Initializes the controller, and binds the event of change in editor content + * to {@link #editorChanged() editorChanged} + */ @Override public void initialize(URL url, ResourceBundle resourceBundle) { editor.setParagraphGraphicFactory(LineNumberFactory.get(editor)); + + editor + .textProperty() + .addListener((obs, oldV, newV) -> this.editorChanged()); } @Override @@ -42,6 +49,7 @@ public class EditorController implements Initializable, Controller { /** * Applies highlighting to the editor. + * * @param highlighting highlighting data */ private void setHighlighting(StyleSpans> highlighting) { @@ -52,26 +60,17 @@ public class EditorController implements Initializable, Controller { * Recalculates and refreshes the syntax highlighting of the editor. */ private void refreshHighlighting() { - this.setHighlighting( - LanguageOperations.syntaxHighlight( - this.editor.getText(), - Model.getLanguage())); + this.setHighlighting(LanguageOperations.syntaxHighlight(this.editor.getText(), Model.getLanguage())); } /** * Handles the event whenever the content of the editor is changed. - * @param event JavaFX event containing metadata */ - @FXML - public void editorChanged(KeyEvent event) { + public void editorChanged() { int offset = this.editor.getCaretPosition(); Position pos = this.editor.offsetToPosition(offset, Bias.Forward); - this.eventBus.post( - new EditorChangedEvent( - event.getCode(), - pos.getMajor() + 1, - pos.getMinor() - )); + this.eventBus.post(new EditorChangedEvent(pos.getMajor() + 1, pos.getMinor())); + this.refreshHighlighting(); } diff --git a/src/main/java/app/events/EditorChangedEvent.java b/src/main/java/app/events/EditorChangedEvent.java index 1effba0..3bae935 100644 --- a/src/main/java/app/events/EditorChangedEvent.java +++ b/src/main/java/app/events/EditorChangedEvent.java @@ -1,23 +1,15 @@ package app.events; -import javafx.scene.input.KeyCode; - public class EditorChangedEvent extends Event { - private KeyCode keyCode; private int lineNumber; private int column; - public EditorChangedEvent(KeyCode keyCode, int lineNumber, int column) { - this.keyCode = keyCode; + public EditorChangedEvent(int lineNumber, int column) { this.lineNumber = lineNumber; this.column = column; } - public KeyCode getKeyCode() { - return this.keyCode; - } - public int getLineNumber() { return this.lineNumber; } diff --git a/src/main/resources/fxml/components/Editor.fxml b/src/main/resources/fxml/components/Editor.fxml index 48751e3..4774175 100644 --- a/src/main/resources/fxml/components/Editor.fxml +++ b/src/main/resources/fxml/components/Editor.fxml @@ -9,6 +9,6 @@ xmlns:fx="http://javafx.com/fxml/1" fx:controller="app.controllers.EditorController"> - + \ No newline at end of file