Bugfix: Stop-Button im Scheduler-Tab wird wieder aktiv
Die zentrale Status-Refresh-Timeline las den Scheduler-Use-Case aus dem unveraenderlichen GuiStartupContext. Beim regulaeren GUI-Start ohne --config ist dieser Optional leer; der via Auto-Load nachtraeglich verdrahtete Use Case wurde dadurch nie sichtbar, updateStatus wurde nie aufgerufen und der Stop-Button blieb dauerhaft deaktiviert. Die Timeline liest den Status jetzt ueber den Workspace, der den live im GuiSchedulerTab verdrahteten Use Case kennt. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+17
@@ -1157,6 +1157,23 @@ public final class GuiConfigurationEditorWorkspace {
|
|||||||
updateLockState(status);
|
updateLockState(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liest den aktuellen Scheduler-Status vom verdrahteten Use Case und reicht ihn an
|
||||||
|
* alle betroffenen Tabs weiter.
|
||||||
|
* <p>
|
||||||
|
* Im Gegensatz zu einem direkten Lesen am unveränderlichen
|
||||||
|
* {@code GuiStartupContext} berücksichtigt diese Methode den nach einem
|
||||||
|
* erfolgreichen Datei-Öffnen erst zur Laufzeit verdrahteten Use Case
|
||||||
|
* (Auto-Load der zuletzt geladenen Konfiguration oder manuelles Öffnen).
|
||||||
|
* Ist kein Use Case verdrahtet, ist der Aufruf ein No-op.
|
||||||
|
* <p>
|
||||||
|
* Muss auf dem JavaFX Application Thread aufgerufen werden.
|
||||||
|
*/
|
||||||
|
public void refreshSchedulerStatus() {
|
||||||
|
schedulerTab.currentSchedulerUseCase()
|
||||||
|
.ifPresent(uc -> onSchedulerStatusRefresh(uc.getStatus()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Aktualisiert den Sperr-Zustand des Konfig-Tabs anhand des aktuellen Scheduler-Status.
|
* Aktualisiert den Sperr-Zustand des Konfig-Tabs anhand des aktuellen Scheduler-Status.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
+14
@@ -146,6 +146,20 @@ public final class GuiSchedulerTab {
|
|||||||
startButton.setTooltip(null);
|
startButton.setTooltip(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt den aktuell verdrahteten Scheduler-Use-Case zurück.
|
||||||
|
* <p>
|
||||||
|
* Wird von der zentralen Status-Refresh-Timeline benötigt, weil der Use Case
|
||||||
|
* erst nach erfolgreichem Datei-Öffnen verfügbar wird (z. B. durch Auto-Load
|
||||||
|
* der zuletzt geladenen Konfiguration) und damit nicht im
|
||||||
|
* unveränderlichen {@code GuiStartupContext} steht.
|
||||||
|
*
|
||||||
|
* @return aktueller Use Case oder {@code Optional.empty()} wenn keiner verdrahtet ist
|
||||||
|
*/
|
||||||
|
public Optional<SchedulerControlUseCase> currentSchedulerUseCase() {
|
||||||
|
return schedulerUseCase;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Aktualisiert alle Tab-Elemente anhand des aktuellen Scheduler-Status.
|
* Aktualisiert alle Tab-Elemente anhand des aktuellen Scheduler-Status.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
+5
-5
@@ -3,7 +3,6 @@ package de.gecheckt.pdf.umbenenner.adapter.in.gui;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import de.gecheckt.pdf.umbenenner.application.port.in.SchedulerStatus;
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
@@ -153,10 +152,11 @@ public class PdfUmbenennerGuiApplication extends Application {
|
|||||||
* ist, wird der Aufruf ohne Fehler übersprungen.
|
* ist, wird der Aufruf ohne Fehler übersprungen.
|
||||||
*/
|
*/
|
||||||
private void refreshAllTabStates() {
|
private void refreshAllTabStates() {
|
||||||
guiStartupContext.schedulerControlUseCase().ifPresent(uc -> {
|
// Den Use Case nicht aus dem unveränderlichen GuiStartupContext lesen, sondern
|
||||||
SchedulerStatus status = uc.getStatus();
|
// den zur Laufzeit (z. B. durch Auto-Load) verdrahteten Use Case verwenden.
|
||||||
workspace.onSchedulerStatusRefresh(status);
|
// Andernfalls bliebe der Stop-Button dauerhaft deaktiviert, weil updateStatus
|
||||||
});
|
// nie aufgerufen würde.
|
||||||
|
workspace.refreshSchedulerStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user