From df41e3df58612da41b89e48c4f48fed60f156c53 Mon Sep 17 00:00:00 2001 From: Oystein Date: Tue, 6 Apr 2021 20:45:15 +0200 Subject: [PATCH] Added some to saving, add more to exceptions tomorrow --- .../app/controllers/EditorController.java | 22 ++++++- .../app/controllers/FiletreeController.java | 4 ++ .../app/controllers/MenubarController.java | 61 ++++++++++++++++++- src/main/java/app/events/SaveFile.java | 25 ++++++++ .../resources/fxml/components/Menubar.fxml | 8 +-- 5 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 src/main/java/app/events/SaveFile.java diff --git a/src/main/java/app/controllers/EditorController.java b/src/main/java/app/controllers/EditorController.java index c365eed..b4905ac 100644 --- a/src/main/java/app/controllers/EditorController.java +++ b/src/main/java/app/controllers/EditorController.java @@ -2,6 +2,7 @@ package app.controllers; import java.io.File; import java.io.FileNotFoundException; +import java.io.PrintWriter; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; @@ -22,6 +23,7 @@ import app.events.EditorChangedEvent; import app.events.LanguageChangedEvent; import app.events.PasteEvent; import app.events.RedoEvent; +import app.events.SaveFile; import app.events.ToggleCommentEvent; import app.events.ToggleWrapTextEvent; import app.events.UndoEvent; @@ -76,11 +78,12 @@ public class EditorController implements Initializable, Controller { } /** - * Uses the {@link app.model.ProgrammingLanguage ProgrammingLanguage} in + * Uses the {@link app.model.ProgrammingLanguage ProgrammingLanguage} in * {@link app.model.Model Model} to determine whether the current line/selection * is commented or not, and toggles the comment. * - * @see app.model.ProgrammingLanguage#commentLine(String) ProgrammingLanguage.commentLine(line) + * @see app.model.ProgrammingLanguage#commentLine(String) + * ProgrammingLanguage.commentLine(line) */ private void toggleComment() { if (editor.getSelectedText().equals("")) { @@ -109,6 +112,7 @@ public class EditorController implements Initializable, Controller { /** * Updates the wraptext setting of the code area + * * @param isWrapText The new value for the setting */ private void setWrapText(boolean isWrapText) { @@ -131,6 +135,7 @@ public class EditorController implements Initializable, Controller { /** * Updates the content of the editor to a specific filepath + * * @param filePath The path of the file * @throws FileNotFoundException */ @@ -147,11 +152,24 @@ public class EditorController implements Initializable, Controller { } } + private void saveCodeArea(String filePath) { + try (PrintWriter writer = new PrintWriter(new File(filePath))) { + writer.println(editor.getText()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + @Subscribe private void handle(FileSelectedEvent event) { this.setEditorContent(event.getPath()); } + @Subscribe + private void handle(SaveFile event) { + this.saveCodeArea(event.getPath()); + } + @Subscribe private void handle(LanguageChangedEvent event) { this.refreshHighlighting(); diff --git a/src/main/java/app/controllers/FiletreeController.java b/src/main/java/app/controllers/FiletreeController.java index e33b23b..cb84074 100644 --- a/src/main/java/app/controllers/FiletreeController.java +++ b/src/main/java/app/controllers/FiletreeController.java @@ -10,6 +10,8 @@ import javafx.scene.input.MouseEvent; import java.io.File; import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; @@ -143,6 +145,8 @@ public class FiletreeController implements Initializable, Controller { } path = Model.getProjectPath() + path; + Path pathToString = Paths.get(path); + Model.setActiveFilePath(pathToString); this.eventBus.post(new FileSelectedEvent(path)); } } diff --git a/src/main/java/app/controllers/MenubarController.java b/src/main/java/app/controllers/MenubarController.java index f8558aa..22750e0 100644 --- a/src/main/java/app/controllers/MenubarController.java +++ b/src/main/java/app/controllers/MenubarController.java @@ -1,7 +1,11 @@ package app.controllers; import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ResourceBundle; import com.google.common.eventbus.EventBus; @@ -16,6 +20,7 @@ import app.events.OpenLinkInBrowserEvent; import app.events.OpenProjectEvent; import app.events.PasteEvent; import app.events.RedoEvent; +import app.events.SaveFile; import app.events.ThemeChangedEvent; import app.events.ToggleCommentEvent; import app.events.ToggleWrapTextEvent; @@ -57,7 +62,20 @@ public class MenubarController implements Initializable, Controller { } /* ------------------------------------------------------------------------ */ - /* FILE */ + /* CREATE FILE/DIRECTORY */ + /* ------------------------------------------------------------------------ */ + @FXML + private void handleNewFile() { + + } + + @FXML + private void handleNewFolder() { + + } + + /* ------------------------------------------------------------------------ */ + /* OPEN FILE */ /* ------------------------------------------------------------------------ */ /** @@ -93,6 +111,47 @@ public class MenubarController implements Initializable, Controller { } + /* ------------------------------------------------------------------------ */ + /* SAVE FILE */ + /* ------------------------------------------------------------------------ */ + + /** + * Handles whenever the Save button is pressed in the menubar + */ + @FXML + private void handleSaveFile() { + if (Model.getActiveFilePath() != null) { + this.eventBus.post(new SaveFile(Model.getActiveFilePath().toString())); + } else { + handleSaveAsFile(); + } + } + + /** + * Handles whenever the Save as button is pressed in the menubar + */ + @FXML + private void handleSaveAsFile() { + FileChooser fc = new FileChooser(); + fc.setTitle("Save as"); + Stage stage = (Stage) menubar.getScene().getWindow(); + + FileChooser.ExtensionFilter extJava = new FileChooser.ExtensionFilter("Java", "*.java"); + FileChooser.ExtensionFilter extMd = new FileChooser.ExtensionFilter("Markdown", "*.md"); + + fc.getExtensionFilters().addAll(extJava, extMd); + + File chosenLocation = fc.showSaveDialog(stage); + + if (chosenLocation != null) { + String chosenLocationToString = chosenLocation.toString(); + this.eventBus.post(new SaveFile(chosenLocationToString)); + this.eventBus.post(new FileSelectedEvent(chosenLocationToString)); + Path chosenLocationToPath = Paths.get(chosenLocationToString); + Model.setActiveFilePath(chosenLocationToPath); + } + } + /** * Handles whenever the programming language is changed from the menubar. */ diff --git a/src/main/java/app/events/SaveFile.java b/src/main/java/app/events/SaveFile.java new file mode 100644 index 0000000..f79407e --- /dev/null +++ b/src/main/java/app/events/SaveFile.java @@ -0,0 +1,25 @@ +package app.events; + +public class SaveFile extends Event { + + private String path; + + /** + * Event signalizing that a file is to be saved. + * + * Not to be confused with {@link FileSelectedEvent} + * + * @param path The path of the selected file + */ + public SaveFile(String path) { + this.path = path; + } + + /** + * @return The path of the selected file to be saved. + */ + public String getPath() { + return this.path; + } + +} diff --git a/src/main/resources/fxml/components/Menubar.fxml b/src/main/resources/fxml/components/Menubar.fxml index 222a348..1844bca 100644 --- a/src/main/resources/fxml/components/Menubar.fxml +++ b/src/main/resources/fxml/components/Menubar.fxml @@ -18,14 +18,14 @@ - - + + - - + +