Skip to content

Commit 4e45300

Browse files
committed
viz: stop running and disable buttons when model.running is False
1 parent 038c9c2 commit 4e45300

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

mesa/visualization/solara_viz.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ def ModelController(model: solara.Reactive[Model], play_interval=100):
225225
play_interval (int, optional): Interval for playing the model steps in milliseconds.
226226
"""
227227
playing = solara.use_reactive(False)
228+
running = solara.use_reactive(True)
228229
original_model = solara.use_reactive(None)
229230

230231
def save_initial_model():
@@ -236,19 +237,23 @@ def save_initial_model():
236237
solara.use_effect(save_initial_model, [model.value])
237238

238239
async def step():
239-
while playing.value:
240+
while playing.value and running.value:
240241
await asyncio.sleep(play_interval / 1000)
241242
do_step()
242243

243-
solara.lab.use_task(step, dependencies=[playing.value], prefer_threaded=False)
244+
solara.lab.use_task(
245+
step, dependencies=[playing.value, running.value], prefer_threaded=False
246+
)
244247

245248
def do_step():
246249
"""Advance the model by one step."""
247250
model.value.step()
251+
running.value = model.value.running
248252

249253
def do_reset():
250254
"""Reset the model to its initial state."""
251255
playing.value = False
256+
running.value = True
252257
model.value = copy.deepcopy(original_model.value)
253258

254259
def do_play_pause():
@@ -261,9 +266,13 @@ def do_play_pause():
261266
label="▶" if not playing.value else "❚❚",
262267
color="primary",
263268
on_click=do_play_pause,
269+
disabled=not running.value,
264270
)
265271
solara.Button(
266-
label="Step", color="primary", on_click=do_step, disabled=playing.value
272+
label="Step",
273+
color="primary",
274+
on_click=do_step,
275+
disabled=playing.value or not running.value,
267276
)
268277

269278

0 commit comments

Comments
 (0)