Simulation progression

This commit is contained in:
Joppe Blondel
2026-08-19 11:33:40 +02:00
parent 6ebeb2607b
commit be9e05732f
7 changed files with 111 additions and 18 deletions
@@ -25,6 +25,7 @@ class SimulationRunController(QObject):
run_cancelled = Signal()
run_failed = Signal(object)
run_progress = Signal(int)
segment_completed = Signal()
simulation_state_changed = Signal()
def __init__(self, window: SimulationWindow, files: SimulationFileController, session_factory: SessionFactory = _create_session) -> None:
@@ -45,6 +46,7 @@ class SimulationRunController(QObject):
self.run_cancelled.connect(self._cancelled)
self.run_failed.connect(self._failed)
self.run_progress.connect(self.window.ui.progressBar.setValue)
self.segment_completed.connect(self._segment_completed)
self._load_session()
@property
@@ -98,7 +100,7 @@ class SimulationRunController(QObject):
self.run_completed.emit(result)
async def _run_with_progress(self, session: SimulationSession) -> SimulationResult:
task = asyncio.create_task(session.run_next())
task = asyncio.create_task(session.run_next_segmented(lambda _result: self.segment_completed.emit()))
last_progress = -1
while not task.done():
progress = min(session.get_progress(), 99)
@@ -108,6 +110,12 @@ class SimulationRunController(QObject):
await asyncio.sleep(0.1)
return await task
def _segment_completed(self) -> None:
self._store_session_state()
if self.session is not None:
self.window.statusBar().showMessage(f"Simulation running · current time {self.session.current_end_time}")
logger.debug("Simulation segment completed at time %s", self.session.current_end_time)
def _completed(self, result: SimulationResult) -> None:
self._running = False
self._store_session_state()