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