diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java
index a51de2f..2886b8f 100644
--- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java
+++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java
@@ -2,6 +2,8 @@ package fabrik.simulator.pic16f84;
import com.gluonhq.charm.glisten.control.ToggleButtonGroup;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
@@ -23,6 +25,7 @@ import javafx.stage.Stage;
import java.util.Arrays;
+import java.util.Objects;
public class Controller_Frontend {
@@ -33,12 +36,13 @@ public class Controller_Frontend {
@FXML
private Button stepintoButton;
-
@FXML
private TableView
tableView;
+
@FXML
- private TextArea lstContentLabel;
+ private ListView lstContentListView;
+
@FXML
private Label pclLabel;
@@ -57,13 +61,126 @@ public class Controller_Frontend {
+
+
+ @FXML
+ private Button stepButton;
+
+ @FXML
+ private Button autoRunButton;
+
+
+
+
+ @FXML
+ private void autoRun(ActionEvent event) throws IOException {
+ if (lstContentListView.getItems().isEmpty()) {
+ // Datei ist nicht geladen oder leer
+ return;
+ }
+
+ // Aktuelle Zeile abrufen
+ int currentIndex = lstContentListView.getSelectionModel().getSelectedIndex();
+ currentIndex = (currentIndex == -1) ? 0 : currentIndex + 1;
+
+ // Durch das gesamte Programm laufen
+ while (currentIndex < lstContentListView.getItems().size()) {
+ // Scrollen zur ausgewählten Zeile
+ lstContentListView.scrollTo(currentIndex);
+
+ // CSS-Stil nur auf die Zellen der ausgewählten Zeile anwenden
+ String selectedRowStyle = "-fx-control-inner-background: red;";
+ int finalCurrentIndex = currentIndex;
+ lstContentListView.setCellFactory(column -> {
+ return new ListCell() {
+ @Override
+ protected void updateItem(String item, boolean empty) {
+ super.updateItem(item, empty);
+ setText(item);
+ if (getIndex() == finalCurrentIndex) {
+ setStyle(selectedRowStyle);
+ } else {
+ setStyle(""); // Zurücksetzen des Stils für andere Zellen
+ }
+ }
+ };
+ });
+
+ // Befehle ausführen
+ Commands.decode(prog[DataRegister.getPC()]);
+ DataRegister.increasePC();
+ Table.refresh();
+ Stage stage = (Stage) autoRunButton.getScene().getWindow();
+ CreateWindow.refreshTable(stage);
+
+
+ try {
+ Thread.sleep(500); // Millisekunden
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ currentIndex++;
+ }
+
+ // Wenn das Ende der Datei erreicht ist, zeige eine Meldung an
+ System.out.println("End of file reached.");
+ }
+
@FXML
private void stepintoButton(ActionEvent event) throws IOException {
+ if (lstContentListView.getItems().isEmpty()) {
+ // Datei ist nicht geladen oder leer
+ return;
+ }
+
+ // Aktuelle Zeile abrufen
+ int currentIndex = lstContentListView.getSelectionModel().getSelectedIndex();
+
+ // Wenn keine Zeile ausgewählt ist, starte von der ersten Zeile
+ if (currentIndex == -1) {
+ currentIndex = 1;
+ } else {
+ // Gehe zur nächsten Zeile
+ currentIndex++;
+ }
+
+ // Überprüfen, ob currentIndex innerhalb der Grenzen liegt
+ if (currentIndex >= lstContentListView.getItems().size()) {
+ // Wenn das Ende der Datei erreicht ist, zeige eine Meldung an
+ System.out.println("End of file reached.");
+ return;
+ }
+
+ // Scrollen zur ausgewählten Zeile
+ lstContentListView.scrollTo(currentIndex);
+
+ // Zeile auswählen
+ lstContentListView.getSelectionModel().clearSelection();
+ lstContentListView.getSelectionModel().select(currentIndex);
+
+ String selectedRowStyle = "-fx-control-inner-background: red;";
+ int finalCurrentIndex = currentIndex + 1;
+ lstContentListView.setCellFactory(column -> {
+ return new ListCell() {
+ @Override
+ protected void updateItem(String item, boolean empty) {
+ super.updateItem(item, empty);
+ setText(item);
+ if (getIndex() == finalCurrentIndex) {
+ setStyle(selectedRowStyle);
+ } else {
+ setStyle("");
+ }
+ }
+ };
+ });
+
+ // Befehle ausführen
Commands.decode(prog[DataRegister.getPC()]);
DataRegister.increasePC();
Table.refresh();
Stage stage = (Stage) stepintoButton.getScene().getWindow();
- IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
CreateWindow.refreshTable(stage);
}
@@ -90,18 +207,47 @@ public class Controller_Frontend {
@FXML
private void displayLSTFileContent(File selectedFile) {
try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) {
- StringBuilder content = new StringBuilder();
+ ObservableList contentList = FXCollections.observableArrayList();
String line;
while ((line = reader.readLine()) != null) {
- content.append(line).append("\n");
+ contentList.add(line);
}
- lstContentLabel.setText(content.toString());
- }
- catch (IOException e) {
+ lstContentListView.setItems(contentList);
+ } catch (IOException e) {
e.printStackTrace();
}
}
+ @FXML
+ private void stepThroughFile(ActionEvent event) {
+ if (lstContentListView.getItems().isEmpty()) {
+ // Datei ist nicht geladen oder leer
+ return;
+ }
+
+ // Aktuelle Zeile abrufen
+ int currentIndex = lstContentListView.getSelectionModel().getSelectedIndex();
+
+ // Wenn keine Zeile ausgewählt ist, starte von der ersten Zeile
+ if (currentIndex == -1) {
+ currentIndex = 1;
+ } else {
+ // Gehe zur nächsten Zeile
+ currentIndex++;
+ }
+
+ // Überprüfen, ob currentIndex innerhalb der Grenzen liegt
+ if (currentIndex >= lstContentListView.getItems().size()) {
+ // Wenn das Ende der Datei erreicht ist, zeige eine Meldung an
+ System.out.println("End of file reached.");
+ return;
+ }
+
+ // Zeile auswählen und anzeigen
+ lstContentListView.getSelectionModel().select(currentIndex + 1);
+ lstContentListView.scrollTo(currentIndex + 1);
+ }
+
@FXML
private ToggleButtonGroup bgTRISA0;
@FXML
@@ -179,6 +325,10 @@ public class Controller_Frontend {
}
setTRISbuttons(allTRISButtons);
setPORTbuttons(allPORTButtons);
+
+ lstContentListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+
+ lstContentListView.getStylesheets().add(Objects.requireNonNull(getClass().getResource("styles.css")).toExternalForm());
}
private static void setTRISbuttons(ToggleButtonGroup[] allButtons) {
diff --git a/src/main/java/fabrik/simulator/pic16f84/styles.css b/src/main/java/fabrik/simulator/pic16f84/styles.css
new file mode 100644
index 0000000..b49b6c8
--- /dev/null
+++ b/src/main/java/fabrik/simulator/pic16f84/styles.css
@@ -0,0 +1,4 @@
+
+.list-cell:selected {
+ -fx-background-color: yellow;
+}
\ No newline at end of file
diff --git a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml
index 32f5622..bc3508f 100644
--- a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml
+++ b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml
@@ -19,11 +19,15 @@
-
+
+
+
-
-
+
+
+
+
diff --git a/src/main/resources/fabrik/simulator/pic16f84/styles.css b/src/main/resources/fabrik/simulator/pic16f84/styles.css
new file mode 100644
index 0000000..243eec8
--- /dev/null
+++ b/src/main/resources/fabrik/simulator/pic16f84/styles.css
@@ -0,0 +1,4 @@
+
+.list-cell:selected {
+ -fx-background-color: red;
+}
\ No newline at end of file