From 6ecd67c633b7d38f127176a727858c2203e2c5d9 Mon Sep 17 00:00:00 2001 From: Abhijith T V Date: Sun, 7 Dec 2025 21:27:22 +0530 Subject: [PATCH 1/4] feat: Basic Side Bar LayOut --- .idea/vcs.xml | 2 +- src/main/java/module-info.java | 1 + .../Common/IJNoteButtons/OpenButton.java | 19 +++++++++++-------- .../Common/IJNoteSideBar/DirectoryBar.java | 4 ++++ .../jnote/Primary/PrimaryStageManager.java | 16 ++++++++++++++-- 5 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java 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/Common/IJNoteButtons/OpenButton.java b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java index eb45d9c..0f2129a 100644 --- a/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java +++ b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java @@ -27,14 +27,17 @@ 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(); + + 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/IJNoteSideBar/DirectoryBar.java b/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java new file mode 100644 index 0000000..eb5e5c5 --- /dev/null +++ b/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java @@ -0,0 +1,4 @@ +package org.example.jnote.Common.IJNoteSideBar; + +public class DirectoryBar { +} diff --git a/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java b/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java index ea5ee82..9a599f2 100644 --- a/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java +++ b/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java @@ -5,6 +5,9 @@ import javafx.stage.Stage; import org.example.jnote.AccessLayer; +import javax.swing.*; +import java.awt.*; + public class PrimaryStageManager { private final PrimaryMenu _primaryMenu; private final PrimaryTextArea _primaryTextArea; @@ -56,10 +59,19 @@ public PrimaryStageManager setScene(){ HBox menuBox = _getMenuBox(); AnchorPane textBox = _getTextBoxPane(); + VBox sidebar = new VBox(); + sidebar.setPrefWidth(150); + sidebar.setStyle("-fx-background-color: #333;"); + + VBox vBox = new VBox(); - VBox.setVgrow(textBox, Priority.ALWAYS); vBox.getChildren().add(menuBox); - vBox.getChildren().add(textBox); + + HBox directoryAndTextarea = new HBox(); + HBox.setHgrow(textBox, Priority.ALWAYS); + directoryAndTextarea.getChildren().addAll(sidebar, textBox); + vBox.getChildren().add(directoryAndTextarea); + VBox.setVgrow(directoryAndTextarea, Priority.ALWAYS); _stage.setScene(new Scene(vBox)); return this; } From 5e4f67a92f723dd795ee6e68a4741a1db39c4042 Mon Sep 17 00:00:00 2001 From: Abhijith T V Date: Sun, 7 Dec 2025 22:49:54 +0530 Subject: [PATCH 2/4] feat: UI for side Bar btn --- .../jnote/Primary/PrimaryStageManager.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java b/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java index 9a599f2..8da6ccf 100644 --- a/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java +++ b/src/main/java/org/example/jnote/Primary/PrimaryStageManager.java @@ -1,12 +1,14 @@ package org.example.jnote.Primary; import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; import javafx.scene.layout.*; +import javafx.scene.text.Text; import javafx.stage.Stage; import org.example.jnote.AccessLayer; import javax.swing.*; -import java.awt.*; public class PrimaryStageManager { private final PrimaryMenu _primaryMenu; @@ -63,10 +65,33 @@ public PrimaryStageManager setScene(){ sidebar.setPrefWidth(150); sidebar.setStyle("-fx-background-color: #333;"); + Label label = new Label("D:"); + Button openButton = new Button(">"); + + HBox btn1Wrapper = new HBox(); + Region spacer = new Region(); + HBox.setHgrow(spacer, Priority.ALWAYS); + + btn1Wrapper.getChildren().addAll(label, spacer, openButton); + btn1Wrapper.setStyle( + "-fx-padding: 6 8;" + + "-fx-background-color: #17468C;" + + "-fx-border-color: transparent;" + ); + + label.setStyle("-fx-text-fill: white;"); + + openButton.setStyle( + "-fx-background-color: #17468C;" + + "-fx-text-fill: white;" + + "-fx-border-color: transparent;" + ); + sidebar.getChildren().add(btn1Wrapper); VBox vBox = new VBox(); vBox.getChildren().add(menuBox); + HBox directoryAndTextarea = new HBox(); HBox.setHgrow(textBox, Priority.ALWAYS); directoryAndTextarea.getChildren().addAll(sidebar, textBox); From 2059dc2a67b7258b34ea578620690da318281958 Mon Sep 17 00:00:00 2001 From: Abhijith T V Date: Mon, 8 Dec 2025 00:00:51 +0530 Subject: [PATCH 3/4] feat: Static Side bar load event --- .../java/org/example/jnote/AccessLayer.java | 2 + .../Common/IJNoteButtons/OpenButton.java | 3 + .../Common/IJNoteSideBar/DirectoryBar.java | 4 -- .../Common/IJNoteSideBar/DirectoryOrFile.java | 62 +++++++++++++++++++ .../example/jnote/Events/SideBarEvents.java | 13 ++++ .../jnote/Primary/PrimaryStageManager.java | 41 ++++-------- 6 files changed, 92 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java create mode 100644 src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryOrFile.java create mode 100644 src/main/java/org/example/jnote/Events/SideBarEvents.java 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/Common/IJNoteButtons/OpenButton.java b/src/main/java/org/example/jnote/Common/IJNoteButtons/OpenButton.java index 0f2129a..9c6ecbc 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; @@ -39,5 +40,7 @@ private void triggerOpen() throws IOException { AccessLayer.primaryTextArea.getPrimaryTextArea().appendText(line); }); + //todo - make it async + SideBarEvents.Load(); } } diff --git a/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java b/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java deleted file mode 100644 index eb5e5c5..0000000 --- a/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryBar.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.example.jnote.Common.IJNoteSideBar; - -public class DirectoryBar { -} 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..87e208c --- /dev/null +++ b/src/main/java/org/example/jnote/Common/IJNoteSideBar/DirectoryOrFile.java @@ -0,0 +1,62 @@ +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 java.io.File; +import java.util.Optional; + +public class DirectoryOrFile extends HBox { + private String _name; + private boolean _isFile; + private File _file; + + + 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