Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/main/java/module-info.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module org.example.jnote {
requires javafx.controls;
requires javafx.fxml;
requires java.desktop;


opens org.example.jnote to javafx.fxml;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/example/jnote/AccessLayer.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -11,4 +12,5 @@ public class AccessLayer {
public static PrimaryTextArea primaryTextArea;
public static File file;
public static DependencyResolver DI;
public static VBox sideBar;
}
8 changes: 4 additions & 4 deletions src/main/java/org/example/jnote/Builders/ButtonBuilder.java
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
});


}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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<Button> _openButton = Optional.empty();

private void _loadUIElements() {
_fileOrDirLabel = new Label(_name);
this.getChildren().add(_fileOrDirLabel);

if(_isFile){
return;
}
Region spacer = new Region();
HBox.setHgrow(spacer, Priority.ALWAYS);
_openButton = Optional.of(new Button(">"));
this.getChildren().addAll(spacer, _openButton.get());
}
}
3 changes: 2 additions & 1 deletion src/main/java/org/example/jnote/Enums/IJNButtonEnum.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public enum IJNButtonEnum {
None,
Save,
Open,
OpenFolder,
Close,
Other
Other,
}
29 changes: 29 additions & 0 deletions src/main/java/org/example/jnote/Events/SideBarEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.example.jnote.Events;

import javafx.scene.layout.VBox;
import org.example.jnote.AccessLayer;
import org.example.jnote.Common.IJNoteSideBar.DirectoryOrFile;

import java.io.File;

public class SideBarEvents {
public static void Load(){
AccessLayer.sideBar.getChildren().clear();
Load(AccessLayer.sideBar, AccessLayer.file);
}

public static void Load(VBox sideBar, File fileOrDir){
boolean isFile = fileOrDir.isFile();
String name = fileOrDir.getName();
DirectoryOrFile obj = new DirectoryOrFile(name, isFile);
sideBar.getChildren().add(obj);

if(isFile) {
return;
}

for(var subFile : fileOrDir.listFiles()){
Load(sideBar, subFile);
}
}
}
5 changes: 3 additions & 2 deletions src/main/java/org/example/jnote/Primary/PrimaryMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ public void initMenuOptions() {
_optionList.add((btnMgr.getInstance("Search", IJNButtonEnum.Other)));

//todo - move them to a sub menu
_optionList.add((btnMgr.getInstance("Save", IJNButtonEnum.Save)));
_optionList.add((btnMgr.getInstance("Open", IJNButtonEnum.Open)));
_optionList.add(btnMgr.getInstance("Save", IJNButtonEnum.Save));
_optionList.add(btnMgr.getInstance("Open", IJNButtonEnum.Open));
_optionList.add(btnMgr.getInstance("OpenFolder", IJNButtonEnum.OpenFolder));
}


Expand Down
24 changes: 22 additions & 2 deletions src/main/java/org/example/jnote/Primary/PrimaryStageManager.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
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.*;

public class PrimaryStageManager {
private final PrimaryMenu _primaryMenu;
private final PrimaryTextArea _primaryTextArea;
Expand Down Expand Up @@ -39,9 +44,17 @@ public PrimaryStageManager setStage(Stage stage){
public PrimaryStageManager loadControls(){
_primaryMenu.initMenuOptions();
_primaryTextArea.initTextArea();
_loadSidebar();
return this;
}

private void _loadSidebar() {
var sideBar = new VBox();
sideBar.setPrefWidth(150);
sideBar.setStyle("-fx-background-color: #333;");
AccessLayer.sideBar = sideBar;
}

public PrimaryStageManager setTitle(String title){
_stage.setTitle(title);
return this;
Expand All @@ -57,9 +70,16 @@ public PrimaryStageManager setScene(){
AnchorPane textBox = _getTextBoxPane();

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(AccessLayer.sideBar, textBox);

vBox.getChildren().add(directoryAndTextarea);
VBox.setVgrow(directoryAndTextarea, Priority.ALWAYS);

_stage.setScene(new Scene(vBox));
return this;
}
Expand Down