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 { public class Controller_Frontend {
private int [] prog; private int [] prog;
private int [][] read;
private int [] ind;
@FXML @FXML
@ -74,57 +76,14 @@ public class Controller_Frontend {
@FXML @FXML
private void autoRun(ActionEvent event) throws IOException { private void autoRun(ActionEvent event) throws IOException {
if (lstContentListView.getItems().isEmpty()) { while (DataRegister.getPC() < prog.length) {
// Datei ist nicht geladen oder leer stepintoButton(event);
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);
try { try {
Thread.sleep(500); // Millisekunden Thread.sleep(500); // Millisekunden
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
currentIndex++;
} }
// Wenn das Ende der Datei erreicht ist, zeige eine Meldung an
System.out.println("End of file reached.");
} }
@FXML @FXML
@ -135,45 +94,27 @@ public class Controller_Frontend {
} }
// Aktuelle Zeile abrufen // Aktuelle Zeile abrufen
int currentIndex = lstContentListView.getSelectionModel().getSelectedIndex(); int currentIndex = ind[DataRegister.getPC()];
// 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 // Scrollen zur ausgewählten Zeile
lstContentListView.scrollTo(currentIndex); lstContentListView.scrollTo(currentIndex -2);
// Zeile auswählen // Zeile auswählen
lstContentListView.getSelectionModel().clearSelection(); lstContentListView.getSelectionModel().clearSelection();
lstContentListView.getSelectionModel().select(currentIndex); lstContentListView.getSelectionModel().select(currentIndex);
String selectedRowStyle = "-fx-control-inner-background: red;"; String selectedRowStyle = "-fx-control-inner-background: red;";
int finalCurrentIndex = currentIndex + 1; lstContentListView.setCellFactory(column -> new ListCell<String>() {
lstContentListView.setCellFactory(column -> { @Override
return new ListCell<String>() { protected void updateItem(String item, boolean empty) {
@Override super.updateItem(item, empty);
protected void updateItem(String item, boolean empty) { setText(item);
super.updateItem(item, empty); if (getIndex() == currentIndex) {
setText(item); setStyle(selectedRowStyle);
if (getIndex() == finalCurrentIndex) { } else {
setStyle(selectedRowStyle); setStyle("");
} else {
setStyle("");
}
} }
}; }
}); });
// Befehle ausführen // Befehle ausführen
@ -182,6 +123,7 @@ public class Controller_Frontend {
Table.refresh(); Table.refresh();
Stage stage = (Stage) stepintoButton.getScene().getWindow(); Stage stage = (Stage) stepintoButton.getScene().getWindow();
CreateWindow.refreshTable(stage); CreateWindow.refreshTable(stage);
IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
} }
@ -189,7 +131,9 @@ public class Controller_Frontend {
protected void selectFileLST(ActionEvent event){ protected void selectFileLST(ActionEvent event){
File selectedFile = chooseLSTFile(); File selectedFile = chooseLSTFile();
if(selectedFile != null){ 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())); System.out.println(Arrays.toString(Arrays.stream(prog).toArray()));
displayLSTFileContent(selectedFile); displayLSTFileContent(selectedFile);
} }

View File

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