diff --git a/pom.xml b/pom.xml index 2b4db6d..9f82b77 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 tdt4100-v2021 - project + banana-editor 1.0.0 UTF-8 @@ -99,9 +99,6 @@ @{argLine} --enable-preview 1 true - diff --git a/src/main/java/app/Main.java b/src/main/java/app/Main.java index f342938..0c26d03 100644 --- a/src/main/java/app/Main.java +++ b/src/main/java/app/Main.java @@ -37,11 +37,19 @@ public class Main extends Application { window.getIcons().add(new Image(getClass().getResourceAsStream(ICON_PATH))); } + /** + * Loads all FXML documents of the main UI and initializes all correlated subcontrollers + * @throws IOException + */ private void loadFXML() throws IOException { + // TODO: Error handle this function. this.fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml")); this.fxmlRoot = fxmlLoader.load(); } + /** + * Generates a scene for the window, and adds it to {@link Model} + */ private void createScene() { this.scene = new Scene(fxmlRoot); Model.setScene(scene); diff --git a/src/main/java/app/MainController.java b/src/main/java/app/MainController.java index facfb25..d80c36b 100644 --- a/src/main/java/app/MainController.java +++ b/src/main/java/app/MainController.java @@ -46,31 +46,47 @@ public class MainController implements Initializable { } /** - * Get the global eventbus. + * Get the global eventbus * - * @return The eventbus + * @return The EventBus object */ public EventBus getEventBus() { return this.eventBus; } + /** + * Get the global Host Services API + * + * @return The JavaFX HostServices object + * @see #setHostServices(HostServices) + */ public HostServices getHostServices() { return hostServices; } + /** + * Set a reference to the global Host Services API + * @param hostServices The JavaFX HostServices object + * @see #getHostServices() + */ public void setHostServices(HostServices hostServices) { this.hostServices = hostServices; } + /** + * Replace a CSS file in a specific location in the application CSS array + * @param position The position of the CSS file to replace + * @param cssPath The path in resources to the new CSS file + */ private void setCSSAt(int position, String cssPath) { + //TODO: Error check that position in range 0 to 1 String nextStyleSheet = getClass().getResource(cssPath).toExternalForm(); Model.getScene().getStylesheets().set(position, nextStyleSheet); } /** - * Change the CSS according to which language is being used. - * + * Change the CSS according to which language is being used * @param event */ @Subscribe @@ -78,19 +94,26 @@ public class MainController implements Initializable { this.setCSSAt(1, "/styling/languages/" + event.getLanguage().toLowerCase() + ".css"); } + /** + * Change the CSS according to which theme the user chooses + * @param event + */ @Subscribe private void handle(ThemeChangedEvent event) { this.setCSSAt(0, "/styling/themes/" + event.getTheme().toLowerCase().replace(" ", "-") + ".css"); } + /** + * Open a link in the browser. + * @param event + */ @Subscribe private void handle(OpenLinkInBrowserEvent event) { this.getHostServices().showDocument(event.getLink()); } /** - * Handle an exit request for the whole program. - * + * Handle an exit request for the whole program * @param event */ @Subscribe diff --git a/src/main/java/app/controllers/ModelineController.java b/src/main/java/app/controllers/ModelineController.java index f990196..c636cd5 100644 --- a/src/main/java/app/controllers/ModelineController.java +++ b/src/main/java/app/controllers/ModelineController.java @@ -53,7 +53,7 @@ public class ModelineController implements Initializable, Controller { */ @Subscribe private void handle(EditorChangedEvent event) { - this.setColumnRow(event.getColumn(), event.getLineNumber()); + this.setColumnRow(event.getColumn(), event.getLine()); } /** diff --git a/src/main/java/app/events/CopyEvent.java b/src/main/java/app/events/CopyEvent.java index 1a33b4e..11f537f 100644 --- a/src/main/java/app/events/CopyEvent.java +++ b/src/main/java/app/events/CopyEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing that something is being copied to the clipboard in an arbitrary place in the UI + */ public class CopyEvent extends Event { } diff --git a/src/main/java/app/events/CutEvent.java b/src/main/java/app/events/CutEvent.java index b2c6309..4059019 100644 --- a/src/main/java/app/events/CutEvent.java +++ b/src/main/java/app/events/CutEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing that something is being cut to the clipboard in an arbitrary place in the UI + */ public class CutEvent extends Event { } diff --git a/src/main/java/app/events/EditorChangedEvent.java b/src/main/java/app/events/EditorChangedEvent.java index 3bae935..d9bb43d 100644 --- a/src/main/java/app/events/EditorChangedEvent.java +++ b/src/main/java/app/events/EditorChangedEvent.java @@ -1,19 +1,33 @@ package app.events; +/** + * Event signalizing that the content or the cursor state in the editor has been modified + */ public class EditorChangedEvent extends Event { - private int lineNumber; + private int line; private int column; - public EditorChangedEvent(int lineNumber, int column) { - this.lineNumber = lineNumber; +/** + * Event signalizing that the content or the cursor state in the editor has been modified + * @param line The line number of the cursor + * @param column The column number of the cursor + */ + public EditorChangedEvent(int line, int column) { + this.line = line; this.column = column; } - public int getLineNumber() { - return this.lineNumber; + /** + * @return The line number of the cursor + */ + public int getLine() { + return this.line; } + /** + * @return The column number of the cursor + */ public int getColumn() { return column; } diff --git a/src/main/java/app/events/Event.java b/src/main/java/app/events/Event.java index ebec937..2438df1 100644 --- a/src/main/java/app/events/Event.java +++ b/src/main/java/app/events/Event.java @@ -1,3 +1,6 @@ package app.events; -class Event {} +/** + * Base class for any type of event of the eventbus + */ +abstract class Event {} diff --git a/src/main/java/app/events/ExitApplicationEvent.java b/src/main/java/app/events/ExitApplicationEvent.java index ed6e52f..57a628a 100644 --- a/src/main/java/app/events/ExitApplicationEvent.java +++ b/src/main/java/app/events/ExitApplicationEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing a shutdown request for the whole applicaton + */ public class ExitApplicationEvent extends Event { } diff --git a/src/main/java/app/events/FileSaveStateChangedEvent.java b/src/main/java/app/events/FileSaveStateChangedEvent.java index 6a3861b..75ab680 100644 --- a/src/main/java/app/events/FileSaveStateChangedEvent.java +++ b/src/main/java/app/events/FileSaveStateChangedEvent.java @@ -2,15 +2,25 @@ package app.events; import app.model.Model; +/** + * Event signalizing that the current file either has been modified or saved + */ public class FileSaveStateChangedEvent extends Event { private boolean isSaved; + /** + * Event signalizing that the current file either has been modified or saved + * @param isSaved Whether or not the file has been modified or saved + */ public FileSaveStateChangedEvent(boolean isSaved) { this.isSaved = isSaved; Model.setFileIsSaved(isSaved); } + /** + * @return Whether or not the file has been modified or saved + */ public boolean getIsSaved() { return this.isSaved; } diff --git a/src/main/java/app/events/FileSelectedEvent.java b/src/main/java/app/events/FileSelectedEvent.java index 6328ce3..052b187 100644 --- a/src/main/java/app/events/FileSelectedEvent.java +++ b/src/main/java/app/events/FileSelectedEvent.java @@ -1,15 +1,29 @@ package app.events; -public class FileSelectedEvent { +/** + * Event signalizing that a file was selected in the filetree. + * + * Not to be confused with {@link OpenFileEvent} + */ +public class FileSelectedEvent extends Event { - private String path; + private String path; - public FileSelectedEvent(String path) { - this.path = path; - } + /** + * Event signalizing that a file was selected in the filetree. + * + * Not to be confused with {@link OpenFileEvent} + * @param path The path of the selected file + */ + public FileSelectedEvent(String path) { + this.path = path; + } - public String getPath() { - return this.path; - } + /** + * @return The path of the selected file + */ + public String getPath() { + return this.path; + } } diff --git a/src/main/java/app/events/LanguageChangedEvent.java b/src/main/java/app/events/LanguageChangedEvent.java index 546687a..42709b1 100644 --- a/src/main/java/app/events/LanguageChangedEvent.java +++ b/src/main/java/app/events/LanguageChangedEvent.java @@ -1,13 +1,19 @@ package app.events; -import app.model.languages.Java; -import app.model.languages.Markdown; +import app.model.languages.*; import app.model.Model; +/** + * Event signalizing that the programming language of the editor has changed + */ public class LanguageChangedEvent extends Event { private String language; + /** + * Event signalizing that the programming language of the editor has changed + * @param language The name of the language, capitalized + */ public LanguageChangedEvent(String language) { this.language = language; @@ -26,6 +32,9 @@ public class LanguageChangedEvent extends Event { } } + /** + * @return The name of the language + */ public String getLanguage() { return language; } diff --git a/src/main/java/app/events/OpenFileEvent.java b/src/main/java/app/events/OpenFileEvent.java index 86983c6..8227135 100644 --- a/src/main/java/app/events/OpenFileEvent.java +++ b/src/main/java/app/events/OpenFileEvent.java @@ -1,13 +1,25 @@ package app.events; +/** + * Event signalizing that a file outside the current project is supposed to be opened in the editor. + * + * Not to be confused with {@link FileSelectedEvent} + */ public class OpenFileEvent extends Event { private String path; + /** + * Event signalizing that a file outside the current project is supposed to be opened in the editor. + * @param path The path of the file to be opened + */ public OpenFileEvent(String path) { this.path = path; } + /** + * @return The path of the file to be opened + */ public String getPath() { return this.path; } diff --git a/src/main/java/app/events/OpenLinkInBrowserEvent.java b/src/main/java/app/events/OpenLinkInBrowserEvent.java index 07fb855..ca01577 100644 --- a/src/main/java/app/events/OpenLinkInBrowserEvent.java +++ b/src/main/java/app/events/OpenLinkInBrowserEvent.java @@ -1,13 +1,23 @@ package app.events; +/** + * Event signalizing that the application is going to open a link in an external browser + */ public class OpenLinkInBrowserEvent extends Event { private String link; + /** + * Event signalizing that the application is going to open a link in an external browser + * @param link The link to open + */ public OpenLinkInBrowserEvent(String link) { this.link = link; } + /** + * @return The link to open + */ public String getLink() { return link; } diff --git a/src/main/java/app/events/OpenProjectEvent.java b/src/main/java/app/events/OpenProjectEvent.java index 31bbbf7..9701e84 100644 --- a/src/main/java/app/events/OpenProjectEvent.java +++ b/src/main/java/app/events/OpenProjectEvent.java @@ -1,13 +1,23 @@ package app.events; +/** + * Event signalizing that a folder is supposed to be opened in the filetree. + */ public class OpenProjectEvent extends Event { private String path; + /** + * Event signalizing that a folder is supposed to be opened in the filetree. + * @param path The path of the folder to be opened + */ public OpenProjectEvent(String path) { this.path = path; } + /** + * @return The path of the folder to be opened + */ public String getPath() { return this.path; } diff --git a/src/main/java/app/events/PasteEvent.java b/src/main/java/app/events/PasteEvent.java index ae904b0..1cf1f98 100644 --- a/src/main/java/app/events/PasteEvent.java +++ b/src/main/java/app/events/PasteEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing that something is being pasted from the clipboard in an arbitrary place in the UI + */ public class PasteEvent extends Event { } diff --git a/src/main/java/app/events/RedoEvent.java b/src/main/java/app/events/RedoEvent.java index 90f15c8..3c584f9 100644 --- a/src/main/java/app/events/RedoEvent.java +++ b/src/main/java/app/events/RedoEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing that an action is being undone in an arbitrary place in the UI + */ public class RedoEvent extends Event { } diff --git a/src/main/java/app/events/ThemeChangedEvent.java b/src/main/java/app/events/ThemeChangedEvent.java index b3452ee..ef66e6e 100644 --- a/src/main/java/app/events/ThemeChangedEvent.java +++ b/src/main/java/app/events/ThemeChangedEvent.java @@ -1,13 +1,23 @@ package app.events; -public class ThemeChangedEvent { +/** + * Event signalizing that the theme of the applicaton has been changed + */ +public class ThemeChangedEvent extends Event { private String theme; + /** + * Event signalizing that the theme of the applicaton has been changed + * @param theme The name of the theme + */ public ThemeChangedEvent(String theme) { this.theme = theme; } + /** + * @return The name of the theme + */ public String getTheme() { return theme; } diff --git a/src/main/java/app/events/ToggleCommentEvent.java b/src/main/java/app/events/ToggleCommentEvent.java index 3278015..073a5e7 100644 --- a/src/main/java/app/events/ToggleCommentEvent.java +++ b/src/main/java/app/events/ToggleCommentEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing that the editor is going to toggle a language specific comment of a line or selecton + */ public class ToggleCommentEvent extends Event { } diff --git a/src/main/java/app/events/ToggleWrapTextEvent.java b/src/main/java/app/events/ToggleWrapTextEvent.java index 6204100..28a1842 100644 --- a/src/main/java/app/events/ToggleWrapTextEvent.java +++ b/src/main/java/app/events/ToggleWrapTextEvent.java @@ -1,13 +1,23 @@ package app.events; +/** + * Event signalizing that the editor wrap text function was toggled on or off + */ public class ToggleWrapTextEvent extends Event { private boolean isWrapped; + /** + * Event signalizing that the editor wraptext function was toggled on or off + * @param isWrapped Whether or not wraptext was turned on or off + */ public ToggleWrapTextEvent(boolean isWrapped) { this.isWrapped = isWrapped; } + /** + * @return Whether or not wraptext was turned on or off + */ public boolean getIsWrapped() { return this.isWrapped; } diff --git a/src/main/java/app/events/UndoEvent.java b/src/main/java/app/events/UndoEvent.java index e7fab08..b8aee97 100644 --- a/src/main/java/app/events/UndoEvent.java +++ b/src/main/java/app/events/UndoEvent.java @@ -1,5 +1,8 @@ package app.events; +/** + * Event signalizing that an action is being undone in an arbitrary place in the UI + */ public class UndoEvent extends Event { } diff --git a/src/main/java/app/model/Model.java b/src/main/java/app/model/Model.java index 1f0a6ce..92e1d9f 100644 --- a/src/main/java/app/model/Model.java +++ b/src/main/java/app/model/Model.java @@ -8,7 +8,7 @@ import javafx.scene.Scene; * Data model of the application. * * Contains a static reference to state that has to be accessed by multiple - * pieces in the application, including the primary scene. + * pieces in the application, including the state like primary scene. */ public class Model { private static boolean fileIsSaved; diff --git a/src/main/java/app/service/LanguageOperations.java b/src/main/java/app/service/LanguageOperations.java index 10942b4..e6496ce 100644 --- a/src/main/java/app/service/LanguageOperations.java +++ b/src/main/java/app/service/LanguageOperations.java @@ -11,14 +11,28 @@ import app.model.ProgrammingLanguage; public class LanguageOperations { - private static String getMatch(Matcher m, Collection kws) { - return kws + /** + * Use a matcher to find the styleclass of the next match + * from several available styleclasses. + * @param m The matcher + * @param styleClasses Collection of styleclasses + * @return The styleclass of the next match + */ + private static String getMatch(Matcher m, Collection styleClasses) { + return styleClasses .stream() .filter(keyword -> m.group(keyword) != null) .findFirst() .orElse(""); // This is not possible, but is needed to convert Optional to String } + /** + * Calculate syntax highlighting data for a code area + * @param text The text to highlight + * @param language The language object to use for highlighting + * @return The syntax highlighting data + * @see app.controllers.EditorController#setHighlighting(StyleSpans) EditorController.setHighlighting() + */ public static StyleSpans> syntaxHighlight(String text, ProgrammingLanguage language) { Matcher matcher = language.getPattern().matcher(text); diff --git a/src/main/java/service/FileOperations.java b/src/main/java/service/FileOperations.java deleted file mode 100644 index 8472d57..0000000 --- a/src/main/java/service/FileOperations.java +++ /dev/null @@ -1,5 +0,0 @@ -package service; - -public class FileOperations { - -}