diff --git a/pom.xml b/pom.xml index 3b3adef..3ad42c4 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 3.8.0 1.8 - 1.8 + 1.8 diff --git a/src/main/java/brainfuck/gui/Controller.java b/src/main/java/brainfuck/gui/Controller.java index 5c9f44d..abbcc6c 100644 --- a/src/main/java/brainfuck/gui/Controller.java +++ b/src/main/java/brainfuck/gui/Controller.java @@ -1,21 +1,62 @@ package brainfuck.gui; +import brainfuck.interpreter.BfInterpreter; import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; +import javafx.scene.control.TextArea; +import javafx.scene.control.Alert.AlertType; public class Controller { @FXML - MenuBar menuBar; + private MenuBar menuBar; + @FXML - MenuItem saveMenu; + private TextArea textoutput; + + @FXML + private Button interpretButton; + + @FXML + private MenuItem saveMenu; + + @FXML + private TextArea textinput; + + @FXML + private Button loadButton; public void initialize() { saveMenu.setOnAction(e -> { System.out.println("menu clicked"); }); + interpretButton.setOnAction(e -> { + try { + interpretFromText(); + } catch (Exception e1) { + e1.printStackTrace(); + } + }); + + // interpretButton.setSkin(new ScaleSkin(interpretButton)); + } + + private void interpretFromText() throws Exception { + String inputCode = textinput.getText(); + if (inputCode == null || inputCode.isEmpty()) { + CustomAlert alert = new CustomAlert(AlertType.ERROR, "Nothing entered!", "Please enter some brainfuck code!", "No code entered"); + alert.showAndWait(); + } else { + BfInterpreter interpreter = new BfInterpreter(inputCode); + String interpreted = interpreter.interpret(); + textoutput.setText(interpreted); + } + + } } diff --git a/src/main/java/brainfuck/gui/CustomAlert.java b/src/main/java/brainfuck/gui/CustomAlert.java new file mode 100644 index 0000000..c2e9ff7 --- /dev/null +++ b/src/main/java/brainfuck/gui/CustomAlert.java @@ -0,0 +1,29 @@ +package brainfuck.gui; + +import javafx.scene.control.Alert; +import javafx.scene.control.DialogPane; + +/** + * CustomAlert + */ +public class CustomAlert extends Alert{ + + /** + * makes a new alert + * @param alert the alertType + * @param title the title + * @param message the message + * @param headerText the header text + */ + public CustomAlert(AlertType alert, String title, String message, String headerText) { + super(alert); + this.setTitle(title); + this.setContentText(message); + this.setHeaderText(headerText); + + DialogPane dialogPane = this.getDialogPane(); + dialogPane.getStylesheets().add("/css/stylesheet.css"); + } + + +} \ No newline at end of file diff --git a/src/main/java/brainfuck/interpreter/BfInterpreter.java b/src/main/java/brainfuck/interpreter/BfInterpreter.java index 1e94fcd..b757ccb 100644 --- a/src/main/java/brainfuck/interpreter/BfInterpreter.java +++ b/src/main/java/brainfuck/interpreter/BfInterpreter.java @@ -41,8 +41,9 @@ public class BfInterpreter { } - public void interpret() { + public String interpret() { int loop = 0; + StringBuilder result = new StringBuilder(); for (int i = 0; i < code.length(); i++) { // System.out.println("char is now " + this.code.charAt(i)); @@ -64,6 +65,7 @@ public class BfInterpreter { // System.out.println("printing"); // output the value in the array System.out.print((char) memory[pointer]); + result.append((char) memory[pointer]); } else if (code.charAt(i) == ',') { // the next value in the array is the next input character // System.out.println("input"); @@ -101,6 +103,7 @@ public class BfInterpreter { } sc.close(); + return result.toString(); } diff --git a/src/main/java/brainfuck/interpreter/Main.java b/src/main/java/brainfuck/interpreter/Main.java index 5526ae1..0937c26 100644 --- a/src/main/java/brainfuck/interpreter/Main.java +++ b/src/main/java/brainfuck/interpreter/Main.java @@ -20,11 +20,14 @@ public class Main extends Application { launch(Main.class); } + //TODO change alert style @Override public void start(Stage stage) throws Exception { Parent pane = FXMLLoader.load(getClass().getResource("/fxml/layout.fxml")); Scene scene = new Scene(pane); + scene.getStylesheets().add("/css/menuBar.css"); + scene.getStylesheets().add("/css/stylesheet.css"); stage.setTitle("Brainfuck Interpreter"); stage.setScene(scene); stage.show(); diff --git a/src/main/resources/css/menuBar.css b/src/main/resources/css/menuBar.css new file mode 100644 index 0000000..8a8b97b --- /dev/null +++ b/src/main/resources/css/menuBar.css @@ -0,0 +1,74 @@ +/* VARIABLE DEFINITIONS: Only these 4 variables have to be adjusted, the rest is copy-paste */ +* { + -fx-my-menu-color: #727374; /* Change according to your needs */ + -fx-my-menu-color-highlighted: #2a3b42; /* Change according to your needs */ + -fx-my-menu-font-color: #FFFFFF; /* Change according to your needs */ + -fx-my-menu-font-color-highlighted: #FFFFFF; /* Change according to your needs */ +} + +/* MENU BAR + Top-level MENU BUTTONS */ +/*** The menu bar itself ***/ +.menu-bar { + -fx-background-color: -fx-my-menu-color; +} + +/*** Top-level menu itself (not selected / hovered) ***/ +.menu-bar > .container > .menu-button { + -fx-background-color: -fx-my-menu-color; +} + +/*** Top-level menu's label (not selected / hovered) ***/ +.menu-bar > .container > .menu-button > .label { + -fx-text-fill: -fx-my-menu-font-color; +} + +/*** Top-level menu's label (disabled) ***/ +.menu-bar > .container > .menu-button > .label:disabled { + -fx-opacity: 1.0; +} + +/*** Top-level menu itself (selected / hovered) ***/ +.menu-bar > .container > .menu-button:hover, +.menu-bar > .container > .menu-button:focused, +.menu-bar > .container > .menu-button:showing { + -fx-background-color: -fx-my-menu-color-highlighted; +} + +/*** Top-level menu's label (selected / hovered) ***/ +.menu-bar > .container > .menu-button:hover > .label, +.menu-bar > .container > .menu-button:focused > .label, +.menu-bar > .container > .menu-button:showing > .label { + -fx-text-fill: -fx-my-menu-font-color-highlighted; +} + +/* MENU ITEM (children of a MENU BUTTON) */ +/*** The item itself (not hovered / focused) ***/ +.menu-item { + -fx-background-color: -fx-my-menu-color; +} + +/*** The item's label (not hovered / focused) ***/ +.menu-item .label { + -fx-text-fill: -fx-my-menu-font-color; +} + +/*** The item's label (disabled) ***/ +.menu-item .label:disabled { + -fx-opacity: 1.0; +} + +/*** The item itself (hovered / focused) ***/ +.menu-item:focused, .menu-item:hovered { + -fx-background-color: -fx-my-menu-color-highlighted; +} + +/*** The item's label (hovered / focused) ***/ +.menu-item:focused .label, .menu-item:hovered .label { + -fx-text-fill: -fx-my-menu-font-color-highlighted; +} + +/* CONTEXT MENU */ +/*** The context menu that contains a menu's menu items ***/ +.context-menu { + -fx-background-color: -fx-my-menu-color; +} \ No newline at end of file diff --git a/src/main/resources/css/stylesheet.css b/src/main/resources/css/stylesheet.css new file mode 100644 index 0000000..01dbfad --- /dev/null +++ b/src/main/resources/css/stylesheet.css @@ -0,0 +1,43 @@ +* { + -fx-font-family: "Consolas"; + -fx-font-size: 14px; + -fx-background-color: rgb(47, 45, 54); + -fx-button-color: rgb(12, 158, 126); + +} + +.button { + -fx-background-color: -fx-button-color; +} + +.textbox { + -fx-text-fill: rgb(33, 189, 33); +} +.textbox .content { + -fx-background-color: rgb(43, 43, 43); + -fx-text-fill: rgb(33, 189, 33); +} + + +.dialog-pane>.content { + -fx-text-fill: -fx-button-color; + -fx-font-weight: bold; + -fx-font-size: 14px; + -fx-padding: 0.833em; + /* 10 */ +} + + +.dialog-pane>.header-panel { + -fx-text-fill: -fx-button-color; + -fx-font-size: 14px; + -fx-padding: 0.833em 0 0 0.833em; + /* 10px 0px 0px 10px */ +} + +.dialog-pane>.header-panel>.label { + -fx-text-fill: -fx-button-color; + -fx-font-size: 14px; + -fx-padding: 0.833em 0 0 0.833em; + /* 10px 0px 0px 10px */ +} \ No newline at end of file diff --git a/src/main/resources/fxml/layout.fxml b/src/main/resources/fxml/layout.fxml index 19753fa..785bc19 100644 --- a/src/main/resources/fxml/layout.fxml +++ b/src/main/resources/fxml/layout.fxml @@ -1,5 +1,7 @@ + + @@ -9,7 +11,7 @@ - + @@ -18,5 +20,17 @@ + + +