This commit is contained in:
2024-05-06 14:30:43 +02:00
parent 68ddce74a8
commit f49e1ea09f
2 changed files with 26 additions and 79 deletions

View File

@ -31,6 +31,8 @@ import java.util.Objects;
public class Controller_Frontend {
private int [] prog;
private int [][] read;
private int [] ind;
@FXML
@ -74,57 +76,14 @@ public class Controller_Frontend {
@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<String>() {
@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);
while (DataRegister.getPC() < prog.length) {
stepintoButton(event);
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
@ -135,45 +94,27 @@ public class Controller_Frontend {
}
// 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;
}
int currentIndex = ind[DataRegister.getPC()];
// Scrollen zur ausgewählten Zeile
lstContentListView.scrollTo(currentIndex);
lstContentListView.scrollTo(currentIndex -2);
// 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<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(item);
if (getIndex() == finalCurrentIndex) {
setStyle(selectedRowStyle);
} else {
setStyle("");
}
lstContentListView.setCellFactory(column -> new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(item);
if (getIndex() == currentIndex) {
setStyle(selectedRowStyle);
} else {
setStyle("");
}
};
}
});
// Befehle ausführen
@ -182,6 +123,7 @@ public class Controller_Frontend {
Table.refresh();
Stage stage = (Stage) stepintoButton.getScene().getWindow();
CreateWindow.refreshTable(stage);
IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
}
@ -189,7 +131,9 @@ public class Controller_Frontend {
protected void selectFileLST(ActionEvent event){
File selectedFile = chooseLSTFile();
if(selectedFile != null){
prog = ParseFile.parseDatei(selectedFile.getAbsolutePath());
read = ParseFile.parseDatei(selectedFile.getAbsolutePath());
prog = read [0];
ind = read[1];
System.out.println(Arrays.toString(Arrays.stream(prog).toArray()));
displayLSTFileContent(selectedFile);
}

View File

@ -7,7 +7,7 @@ import java.util.ArrayList;
import java.util.List;
public class ParseFile {
public static int[] parseDatei(String dateiPfad) {
public static int[][] parseDatei(String dateiPfad) {
List<String> zeilen = new ArrayList<>();
// Bei diesem Schritt wird jetzt Zeile für Zeile das richtige Programm eingelesen
@ -23,10 +23,12 @@ public class ParseFile {
// Initialisierung des Programmspeichers mit 1024 Speicherplätzen
int[] programmspeicher = new int[1024]; // Wie viele Programmspeicherplätze gibt es? → 1024
int[] zeilenspeicher = new int[1024];
// Adresse und Befehle werden ignoriert und nur die Befehle werden in den Programmspeicher gespeichert
for (String zeile : zeilen) {
for (int i = 0; i<zeilen.toArray().length; i++) {
String zeile = zeilen.get(i);
String[] teile = zeile.split("\\s+"); // Spaltenweise werden die einzelnen Befehle getrennt
if (teile.length >= 2) {
try {
@ -36,6 +38,7 @@ public class ParseFile {
// Ausgabe der eingelesenen Zeile
System.out.printf("Gelesene Zeile: %s%n", zeile);
zeilenspeicher[adresse] = i;
programmspeicher[adresse] = befehl; // Befehl im Programmspeicher speichern
} catch (NumberFormatException e) {
// Wenn ein Fehler aufkommt, wird diese Zeile ignoriert funktioniert
@ -44,6 +47,6 @@ public class ParseFile {
}
}
return programmspeicher;
return new int[][]{programmspeicher, zeilenspeicher};
}
}