From ad9ee1c84ef6d60f3926b69beaaf4bb77bb53e64 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 26 Apr 2021 14:35:47 +0200 Subject: [PATCH] Update documentation for controllers --- src/main/java/app/MainController.java | 15 ++- src/main/java/app/controllers/Controller.java | 4 +- .../app/controllers/EditorController.java | 91 +++++++++++++------ .../app/controllers/FiletreeController.java | 46 +++++----- .../app/controllers/MenubarController.java | 90 ++++++++++++------ .../app/controllers/ModelineController.java | 22 ++++- 6 files changed, 180 insertions(+), 88 deletions(-) diff --git a/src/main/java/app/MainController.java b/src/main/java/app/MainController.java index 8b9d189..06d4bc4 100644 --- a/src/main/java/app/MainController.java +++ b/src/main/java/app/MainController.java @@ -20,6 +20,9 @@ import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.Initializable; +/** + * An FXML controller that controls the application and all subcontrollers + */ public class MainController implements Initializable { @FXML @@ -94,13 +97,17 @@ public class MainController implements Initializable { Model.getScene().getStylesheets().set(position, nextStyleSheet); } + /* ------------------------------------------------------------------------ */ + /* EVENT BUS LISTENERS */ + /* ------------------------------------------------------------------------ */ + /** * Change the CSS according to which language is being used * * @param event */ @Subscribe - private void handle(LanguageChangedEvent event) { + public void handle(LanguageChangedEvent event) { this.setCSSAt(1, "/styling/languages/" + event.getLanguage().toLowerCase() + ".css"); } @@ -110,7 +117,7 @@ public class MainController implements Initializable { * @param event */ @Subscribe - private void handle(ThemeChangedEvent event) { + public void handle(ThemeChangedEvent event) { this.setCSSAt(0, "/styling/themes/" + event.getTheme().toLowerCase().replace(" ", "-") + ".css"); } @@ -120,7 +127,7 @@ public class MainController implements Initializable { * @param event */ @Subscribe - private void handle(OpenLinkInBrowserEvent event) { + public void handle(OpenLinkInBrowserEvent event) { this.getHostServices().showDocument(event.getLink()); } @@ -132,7 +139,7 @@ public class MainController implements Initializable { * @param event */ @Subscribe - private void handle(ExitApplicationEvent event) { + public void handle(ExitApplicationEvent event) { if (!Model.getFileIsSaved()) { int g = JOptionPane.showConfirmDialog(null, "Your files are not saved.\nSave before exit?", "Exit", JOptionPane.YES_NO_OPTION); diff --git a/src/main/java/app/controllers/Controller.java b/src/main/java/app/controllers/Controller.java index 499b3af..65007c6 100644 --- a/src/main/java/app/controllers/Controller.java +++ b/src/main/java/app/controllers/Controller.java @@ -3,12 +3,12 @@ package app.controllers; import com.google.common.eventbus.EventBus; /** - * Interface describing a controller that contains an EventBus + * Interface describing a JavaFX controller that contains an EventBus */ public interface Controller { /** * Registers the main EventBus into the controller. - * @param eventBus The EventBus + * @param eventBus */ public void setEventBus(EventBus eventBus); } diff --git a/src/main/java/app/controllers/EditorController.java b/src/main/java/app/controllers/EditorController.java index 02d9af0..348120c 100644 --- a/src/main/java/app/controllers/EditorController.java +++ b/src/main/java/app/controllers/EditorController.java @@ -34,7 +34,7 @@ import javafx.fxml.Initializable; import javafx.stage.Stage; /** - * A FXML controller that controls the editor component of the UI + * An FXML controller that controls the CodeArea */ public class EditorController implements Initializable, Controller { @@ -60,15 +60,10 @@ public class EditorController implements Initializable, Controller { this.eventBus.register(this); } - // TODO: document - public CodeArea getEditor() { - return editor; - } - /** * Applies highlighting to the editor. * - * @param highlighting highlighting data + * @param highlighting Syntax highlighting data */ private void setHighlighting(StyleSpans> highlighting) { this.editor.setStyleSpans(0, highlighting); @@ -90,7 +85,6 @@ public class EditorController implements Initializable, Controller { * ProgrammingLanguage.commentLine(line) */ private void toggleComment() { - // TODO: This logic might need to be moved to LanguageOperations if (editor.getSelectedText().equals("")) { String currentLine = editor.getText(editor.getCurrentParagraph()); @@ -118,7 +112,7 @@ public class EditorController implements Initializable, Controller { /** * Updates the wraptext setting of the code area * - * @param isWrapText The new value for the setting + * @param isWrapText The updated setting value */ private void setWrapText(boolean isWrapText) { this.editor.setWrapText(isWrapText); @@ -143,14 +137,16 @@ public class EditorController implements Initializable, Controller { * * @param newContent The String to be inserted into the editor */ - public void setEditorContent(String newContent) { + private void setEditorContent(String newContent) { editor.clear(); editor.appendText(newContent); } /** - * Saving/Writing to the file based on the spesific filepath. Otherwise it will - * open an error dialog to give the user feedback about what has happened. + * Saving/Writing to the file based on the active filepath in {@link app.model.Model Model} + * if it is a new File. Otherwise it will open a dialog to ask the user where to save the file. + * + * @param isNewFile Whether or not the file already has a path */ public void saveCodeArea(boolean isNewFile) { Stage stage = (Stage) editor.getScene().getWindow(); @@ -166,17 +162,14 @@ public class EditorController implements Initializable, Controller { } } - /** - * Checking if all is saved before closing the app. The user can either choose - * to exit or go back to the application and save. - */ - /* ------------------------------------------------------------------------ */ - /* SUBSCRIPTIONS */ + /* EVENT BUS LISTENERS */ /* ------------------------------------------------------------------------ */ /** - * Updates Code Area (read from file) whenever the FileSelected is changed + * Updates the CodeArea whenever a new file is opened. + * + * @param event */ @Subscribe public void handle(OpenFileEvent event) { @@ -189,54 +182,96 @@ public class EditorController implements Initializable, Controller { } /** - * Save file (write to file) whenever the save in the menubare is selected + * Saves the editor content to a file + * + * @param event */ @Subscribe - private void handle(SaveFileEvent event) { + public void handle(SaveFileEvent event) { this.saveCodeArea(event.getIsNewFile()); } + /** + * Refreshes the syntax highlighting when the Programming language is changed + * + * @param event + */ @Subscribe - private void handle(LanguageChangedEvent event) { + public void handle(LanguageChangedEvent event) { this.refreshHighlighting(); } + /** + * Toggles a comment based on the editor state + * + * @param event + */ @Subscribe public void handle(ToggleCommentEvent event) { this.toggleComment(); } + /** + * Toggles the WrapText setting + * + * @param event + */ @Subscribe - private void handle(ToggleWrapTextEvent event) { + public void handle(ToggleWrapTextEvent event) { this.setWrapText(event.getIsWrapped()); } + /** + * Undo if focused + * + * @param event + */ @Subscribe - private void handle(UndoEvent event) { + public void handle(UndoEvent event) { if (this.editor.isFocused()) this.editor.undo(); } + /** + * Redo if focused + * + * @param event + */ @Subscribe - private void handle(RedoEvent event) { + public void handle(RedoEvent event) { if (this.editor.isFocused()) this.editor.redo(); } + /** + * Copy selected content if focused + * + * @param event + */ @Subscribe - private void handle(CopyEvent event) { + public void handle(CopyEvent event) { if (this.editor.isFocused()) this.editor.copy(); } + /** + * Cut selected content if focused + * + * @param event + */ @Subscribe - private void handle(CutEvent event) { + public void handle(CutEvent event) { if (this.editor.isFocused()) this.editor.cut(); } + /** + * Paste from clipboard if focused + * + * @param event + */ @Subscribe - private void handle(PasteEvent event) { + public void handle(PasteEvent event) { if (this.editor.isFocused()) this.editor.paste(); } diff --git a/src/main/java/app/controllers/FiletreeController.java b/src/main/java/app/controllers/FiletreeController.java index 5146680..475663c 100644 --- a/src/main/java/app/controllers/FiletreeController.java +++ b/src/main/java/app/controllers/FiletreeController.java @@ -26,7 +26,7 @@ import app.service.FiletreeOperations; import javafx.fxml.Initializable; /** - * A FXML controller that controls the filetree component of the UI + * An FXML controller that controls the Filetree */ public class FiletreeController implements Initializable, Controller { @@ -44,19 +44,16 @@ public class FiletreeController implements Initializable, Controller { this.eventBus.register(this); } - /* ------------------------------------------------------------------------ */ - /* FILETREE */ - /* ------------------------------------------------------------------------ */ - /** - * The displaying of the fileTree. The inputChosen(the path) is aquired from the - * eventBus (OpeFileProjectEvent). The root is created as a CheckBoxItems and - * sends it to generateTree, and after that setting it to the root. + * Generate a tree structure of a directory, and set the filetree to + * show the new tree + * + * @param rootDir Path to the directory to be the root of the tree */ - private void showTree(String inputChosen) { - CheckBoxTreeItem root = new CheckBoxTreeItem<>(inputChosen); + private void showTree(Path rootDir) { + CheckBoxTreeItem root = new CheckBoxTreeItem<>(rootDir.getFileName().toString()); filetree.setShowRoot(false); - File fileInputChosen = new File(inputChosen); + File fileInputChosen = rootDir.toFile(); try { FiletreeOperations.generateTree(fileInputChosen, root); @@ -67,18 +64,13 @@ public class FiletreeController implements Initializable, Controller { DialogBoxes.showErrorMessage( "Could not open folder.\n\n" + "Do you have the right permissions for this folder?\n" - + "Or does the folder contain any shortcut to somewhere within itself?"); + + "Or does the folder contain any shortcut to somewhere within itself?" + ); } } - /* ------------------------------------------------------------------------ */ - /* MouseClick */ - /* ------------------------------------------------------------------------ */ - /** - * Handles whenever a filetree item is clicked twice. A while loop to create the - * correct filepath. - */ + * Handles opening a file whenever a filetree item is clicked twice. */ @FXML private void handleMouseClick(MouseEvent event) { if (event.getClickCount() == 2) { @@ -98,27 +90,33 @@ public class FiletreeController implements Initializable, Controller { } /* ------------------------------------------------------------------------ */ - /* SUBSCRIPTIONS */ + /* EVENT BUS LISTENERS */ /* ------------------------------------------------------------------------ */ /** - * Updates the filetree whenever a new ProjectPath is selected. + * Updates the filetree whenever a new project is opened + * + * @param event */ - @Subscribe private void handle(OpenProjectEvent event) { event.getPath().ifPresentOrElse( - path -> this.showTree(path.toString()), + path -> this.showTree(path), () -> System.err.println("[ERROR] OpenProjectEvent was empty") ); } + /** + * Updates the filetree whenever a new file gets saved + * + * @param event + */ @Subscribe private void handle(SaveFileEvent event) { if (event.getIsNewFile()) Model .getProjectPath() - .ifPresent(path -> this.showTree(path.toString())); + .ifPresent(path -> this.showTree(path)); } } diff --git a/src/main/java/app/controllers/MenubarController.java b/src/main/java/app/controllers/MenubarController.java index d55211e..bf760a9 100644 --- a/src/main/java/app/controllers/MenubarController.java +++ b/src/main/java/app/controllers/MenubarController.java @@ -60,23 +60,25 @@ public class MenubarController implements Initializable, Controller { this.eventBus.register(this); } - /* ------------------------------------------------------------------------ */ - /* CREATE FILE */ - /* ------------------------------------------------------------------------ */ + /* ---------------------------------- File ---------------------------------- */ + + /** + * Handles whenever the New File button is pressed in the menubar + * + * @param event + */ @FXML private void handleNewFile() { this.eventBus.post(new OpenFileEvent(Optional.empty())); } - /* ------------------------------------------------------------------------ */ - /* OPEN FILE/PROJECT */ - /* ------------------------------------------------------------------------ */ - /** * Handles whenever the Open File button is pressed in the menubar + * + * @param event */ @FXML - public void handleOpenFile() { + private void handleOpenFile() { Stage stage = (Stage) menubar.getScene().getWindow(); try { @@ -90,6 +92,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the Open Project button is pressed in the menubar + * + * @param event */ @FXML private void handleOpenProject() { @@ -102,12 +106,11 @@ public class MenubarController implements Initializable, Controller { } catch (FileNotFoundException e) {} } - /* ------------------------------------------------------------------------ */ - /* SAVE FILE */ - /* ------------------------------------------------------------------------ */ /** * Handles whenever the Save button is pressed in the menubar + * + * @param event */ @FXML private void handleSaveFile() { @@ -116,6 +119,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the Save as button is pressed in the menubar + * + * @param event */ @FXML private void handleSaveAsFile() { @@ -124,6 +129,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the programming language is changed from the menubar. + * + * @param event */ @FXML private void handleLanguageChange(ActionEvent event) { @@ -132,6 +139,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the wraptext togglebutton is pressed in the menubar + * + * @param event */ @FXML private void handleToggleWraptext(ActionEvent event) { @@ -141,6 +150,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the theme is changed from the menubar + * + * @param event */ @FXML private void handleThemeChange(ActionEvent event) { @@ -149,18 +160,20 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the exit button is pressed in the menubar + * + * @param event */ @FXML private void handleExitApplication(ActionEvent event) { this.eventBus.post(new ExitApplicationEvent()); } - /* ------------------------------------------------------------------------ */ - /* EDIT */ - /* ------------------------------------------------------------------------ */ + /* ---------------------------------- Edit ---------------------------------- */ /** * Handles whenever the undo button is pressed in the menubar + * + * @param event */ @FXML private void handleUndo(ActionEvent event) { @@ -169,6 +182,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the redo button is pressed in the menubar + * + * @param event */ @FXML private void handleRedo(ActionEvent event) { @@ -177,6 +192,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the copy button is pressed in the menubar + * + * @param event */ @FXML private void handleCopy(ActionEvent event) { @@ -185,6 +202,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the cut button is pressed in the menubar + * + * @param event */ @FXML private void handleCut(ActionEvent event) { @@ -193,6 +212,8 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the paste button is pressed in the menubar + * + * @param event */ @FXML private void handlePaste(ActionEvent event) { @@ -201,18 +222,20 @@ public class MenubarController implements Initializable, Controller { /** * Handles whenever the Toggle Comment button is pressed in the menubar + * + * @param event */ @FXML private void handleToggleComment(ActionEvent event) { this.eventBus.post(new ToggleCommentEvent()); } - /* ------------------------------------------------------------------------ */ - /* ABOUT */ - /* ------------------------------------------------------------------------ */ + /* ---------------------------------- About --------------------------------- */ /** * Handles whenever the About button is pressed in the menubar + * + * @param event */ @FXML private void handleAbout(ActionEvent event) { @@ -226,22 +249,37 @@ public class MenubarController implements Initializable, Controller { /** * Updates menubuttons whenever the language is changed + * + * @param event */ @Subscribe - private void handle(LanguageChangedEvent event) { - this.languageToggleGroup.getToggles().stream().map(RadioMenuItem.class::cast) - .filter(t -> t.getId().equals("toggle" + event.getLanguage())).findFirst().orElseThrow().setSelected(true); + public void handle(LanguageChangedEvent event) { + this.languageToggleGroup + .getToggles() + .stream() + .map(RadioMenuItem.class::cast) + .filter(t -> t.getId().equals("toggle" + event.getLanguage())) + .findFirst() + // This should never happen! + .orElseThrow(() -> new IllegalStateException("Language button missing: " + event.getLanguage())) + .setSelected(true); } /** * Updates menubuttons whenever the theme is changed + * + * @param event */ - @Subscribe - private void handle(ThemeChangedEvent event) { - this.themeToggleGroup.getToggles().stream().map(RadioMenuItem.class::cast) - .filter(t -> t.getId().equals("toggle" + event.getTheme().replace(" ", "_"))).findFirst().orElseThrow().setSelected(true); - + public void handle(ThemeChangedEvent event) { + this.themeToggleGroup + .getToggles() + .stream() + .map(RadioMenuItem.class::cast) + .filter(t -> t.getId().equals("toggle" + event.getTheme().replace(" ", "_"))) + .findFirst() + // This should never happen! + .orElseThrow(() -> new IllegalStateException("Theme button missing: " + event.getTheme())) + .setSelected(true); } - } diff --git a/src/main/java/app/controllers/ModelineController.java b/src/main/java/app/controllers/ModelineController.java index f4c6e4d..1432791 100644 --- a/src/main/java/app/controllers/ModelineController.java +++ b/src/main/java/app/controllers/ModelineController.java @@ -53,34 +53,48 @@ public class ModelineController implements Initializable, Controller { this.columnrow.setText(String.format("[%d:%d]", row, column)); } + /* ------------------------------------------------------------------------ */ + /* SUBSCRIPTIONS */ + /* ------------------------------------------------------------------------ */ + /** * Updates the column-row number display whenever the editor cursor * changes position. + * + * @param event */ @Subscribe - private void handle(EditorChangedEvent event) { + public void handle(EditorChangedEvent event) { this.setColumnRow(event.getColumn(), event.getLine()); } /** * Updates the saveState label whenever the file either is saved or modified + * + * @param event */ @Subscribe - private void handle(FileSaveStateChangedEvent event) { + public void handle(FileSaveStateChangedEvent event) { // TODO: Add CSS styleclass for coloring the saveState label // whenever it changes this.saveState.setText(event.getIsSaved() ? "Saved!" : "Modified"); } /** - * Updates the modeline to display a new language - * whenever it is changed. + * Updates the modeline to display a new language when changed. + * + * @param event */ @Subscribe private void handle(LanguageChangedEvent event) { this.language.setText(event.getLanguage()); } + /** + * Updates the modeline to display the name of the current file when changed + * + * @param event + */ @Subscribe private void handle(OpenFileEvent event) { this.filename.setText(