Skip to content

Commit bb6e024

Browse files
committed
Operator TUI updates when joints are ready.
1 parent 3a0dc2f commit bb6e024

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/ms_operator/ms_operator/operator_tui.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ def __init__(self, node: OperatorNode):
153153
"selected_ik_legs": [], # last node.selected_ik_legs
154154
"selected_joints": [], # last node.selected_joints
155155
"selected_wheel_joints": [], # last node.selected_wheel_joints
156+
"joint_has_ready": False,
157+
"wheel_has_ready": False,
156158
}
157159

158160
# ───────────── CHECKBOX STORAGE ────────────────────────
@@ -278,10 +280,19 @@ def _refresh(self, loop, _data):
278280
cb.set_state(leg in sel)
279281
loop.draw_screen()
280282

281-
# if in joint_select, rebuild if legs changed
282283
elif mode == "joint_select":
283-
if legs != self.state.get("leg_list", []):
284+
joint_ready = any(
285+
jh.ready.done() and jh.limb_number in self.node.selected_legs
286+
for jh in self.node.joint_handlers
287+
)
288+
289+
if (
290+
legs != self.state.get("leg_list", [])
291+
or joint_ready != self.state.get("joint_has_ready", False)
292+
):
293+
# legs changed or ready state changed
284294
self.state["leg_list"] = legs
295+
self.state["joint_has_ready"] = joint_ready
285296
self.rebuild_joint_select(legs)
286297
loop.draw_screen()
287298
else:
@@ -290,7 +301,6 @@ def _refresh(self, loop, _data):
290301
)
291302
if current != self.state["selected_joints"]:
292303
self.state["selected_joints"] = current
293-
# update each tri-state checkbox
294304
for (leg, jn), cb in self.joint_checkboxes.items():
295305
if (leg, jn) in self.node.selected_joints:
296306
cb.set_state(True)
@@ -300,18 +310,26 @@ def _refresh(self, loop, _data):
300310
cb.set_state(False)
301311
loop.draw_screen()
302312

303-
# if in wheel_select, rebuild if legs changed
304313
elif mode == "wheel_select":
305-
if legs != self.state.get("leg_list", []):
314+
wheel_ready = any(
315+
jh.ready.done() and jh.limb_number in self.node.selected_legs
316+
for jh in self.node.joint_handlers
317+
)
318+
319+
if (
320+
legs != self.state.get("leg_list", [])
321+
or wheel_ready != self.state.get("wheel_has_ready", False)
322+
):
306323
self.state["leg_list"] = legs
324+
self.state["wheel_has_ready"] = wheel_ready
307325
self.rebuild_wheel_select(legs)
326+
loop.draw_screen()
308327
else:
309328
current = sorted(self.node.selected_wheel_joints) + sorted(
310329
self.node.selected_wheel_joints_inv
311330
)
312331
if current != self.state["selected_wheel_joints"]:
313332
self.state["selected_wheel_joints"] = current
314-
# update each tri-state checkbox
315333
for (leg, jn), cb in self.joint_checkboxes.items():
316334
if (leg, jn) in self.node.selected_wheel_joints:
317335
cb.set_state(True)

0 commit comments

Comments
 (0)