diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b5ca8f7..f2c9d6c 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,6 +1,7 @@ module org.example.jnote { requires javafx.controls; requires javafx.fxml; + requires java.desktop; opens org.example.jnote to javafx.fxml; diff --git a/src/main/java/org/example/jnote/AccessLayer.java b/src/main/java/org/example/jnote/AccessLayer.java index a714cd6..9209a04 100644 --- a/src/main/java/org/example/jnote/AccessLayer.java +++ b/src/main/java/org/example/jnote/AccessLayer.java @@ -1,6 +1,7 @@ package org.example.jnote; import javafx.scene.control.TextArea; +import javafx.scene.layout.VBox; import javafx.stage.Stage; import org.example.jnote.Primary.PrimaryTextArea; @@ -11,4 +12,5 @@ public class AccessLayer { public static PrimaryTextArea primaryTextArea; public static File file; public static DependencyResolver DI; + public static VBox sideBar; } diff --git a/src/main/java/org/example/jnote/Builders/ButtonBuilder.java b/src/main/java/org/example/jnote/Builders/ButtonBuilder.java index ba85261..a6f1418 100644 --- a/src/main/java/org/example/jnote/Builders/ButtonBuilder.java +++ b/src/main/java/org/example/jnote/Builders/ButtonBuilder.java @@ -1,10 +1,7 @@ package org.example.jnote.Builders; import org.example.jnote.Common.IJNoteButton; -import org.example.jnote.Common.IJNoteButtons.CloseButton; -import org.example.jnote.Common.IJNoteButtons.DynamicButton; -import org.example.jnote.Common.IJNoteButtons.OpenButton; -import org.example.jnote.Common.IJNoteButtons.SaveButton; +import org.example.jnote.Common.IJNoteButtons.*; import org.example.jnote.Enums.IJNButtonEnum; public class ButtonBuilder { @@ -23,6 +20,9 @@ public static IJNoteButton GetInstance(IJNButtonEnum type, String name) throws case IJNButtonEnum.Open: btn = new OpenButton(name); break; + case IJNButtonEnum.OpenFolder: + btn = new OpenFolderButton(name); + break; default: throw new Exception("Unknown Button Type"); } diff --git a/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java index eb45d9c..9c25e95 100644 --- a/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java +++ b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java @@ -4,6 +4,7 @@ import org.example.jnote.AccessLayer; import org.example.jnote.Common.IJNoteButton; import org.example.jnote.Enums.IJNButtonEnum; +import org.example.jnote.Events.SideBarEvents; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -27,14 +28,22 @@ public OpenButton(String name){ private void triggerOpen() throws IOException { FileChooser fil_chooser = new FileChooser(); var file = fil_chooser.showOpenDialog(AccessLayer.stage); - if(file != null && file.canRead()){ - AccessLayer.file = file; - AccessLayer.primaryTextArea.getPrimaryTextArea().clear(); - Files.lines(Path.of(file.getPath())) - .forEach(x-> { - var line = new String(x.getBytes(StandardCharsets.UTF_8)); - AccessLayer.primaryTextArea.getPrimaryTextArea().appendText(line); - }); + if(file == null || !file.canRead()){ + return; } + + AccessLayer.file = file; + AccessLayer.primaryTextArea.getPrimaryTextArea().clear(); + + //todo - make it async + SideBarEvents.Load(); + + Files.lines(Path.of(file.getPath())) + .forEach(x-> { + var line = new String(x.getBytes(StandardCharsets.UTF_8)); + AccessLayer.primaryTextArea.getPrimaryTextArea().appendText(line); + }); + + } } diff --git a/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenFolderButton.java b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenFolderButton.java new file mode 100644 index 0000000..dda90f6 --- /dev/null +++ b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenFolderButton.java @@ -0,0 +1,39 @@ +package org.example.jnote.Common.IJNoteButtons; + +import javafx.stage.DirectoryChooser; +import org.example.jnote.AccessLayer; +import org.example.jnote.Common.IJNoteButton; +import org.example.jnote.Events.SideBarEvents; + +import java.io.File; +import java.io.IOException; + +public class OpenFolderButton extends IJNoteButton { + public OpenFolderButton(String name){ + super(name); + } + + @Override public void fire(){ + try { + triggerOpen(); + } catch (IOException e) { + throw new RuntimeException(e); + } + super.fire(); + } + + private void triggerOpen() throws IOException { + DirectoryChooser dirChooser = new DirectoryChooser(); + File folder = dirChooser.showDialog(AccessLayer.stage); + + if(folder == null || !folder.canRead()){ + return; + } + + AccessLayer.file = folder; + AccessLayer.primaryTextArea.getPrimaryTextArea().clear(); + + //todo - make it async + SideBarEvents.Load(); + } +} diff --git a/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryOrFile.java b/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryOrFile.java new file mode 100644 index 0000000..6c774a5 --- /dev/null +++ b/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryOrFile.java @@ -0,0 +1,64 @@ +package org.example.jnote.Common.IJNoteSideBar; + +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; +import javafx.scene.layout.Region; +import org.example.jnote.AccessLayer; + +import java.io.File; +import java.util.Optional; + +public class DirectoryOrFile extends HBox { + private String _name; + private boolean _isFile; + private File _fileOrDir; + + + public DirectoryOrFile(String name, boolean isFile){ + this._name = name; + this._isFile = isFile; + this._init(); + } + + + private void _init() { + _loadUIElements(); + _applyStyle(); + } + + private void _applyStyle() { + this.setStyle( + "-fx-padding: 6 8;" + + "-fx-background-color: #17468C;" + + "-fx-border-color: transparent;" + ); + + _openButton.ifPresent(button -> + button.setStyle( + "-fx-background-color: #17468C;" + + "-fx-text-fill: white;" + + "-fx-border-color: transparent;" + ) + ); + + this._fileOrDirLabel.setStyle("-fx-text-fill: white;"); + } + + private Label _fileOrDirLabel; + private Optional