mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
b577a0d67ad0e62316f3a30ac8587c310e3870f9
Vertical slice to establish the Phase 3 pattern before replicating it across all commands: logic moves into controller commands, the UI becomes event-driven, and frontends call commands instead of poking widgets. - TRadioController.SetMute now carries the real logic (state + FDSPEngine. SetMute), then fires OnStateChanged(rfMute). - MainForm subscribes via OnControllerState (controller -> UI). It restyles BtnMute from controller state. FSyncingFromController guards against re-entrancy when a programmatic widget change would retrigger OnChange. - BtnMuteClick -> FController.ToggleMute; SyncWebMute -> FController.SetMute. The button/web no longer own the mute logic or the restyle. Proves the command/event/refresh loop end-to-end (UI click and web both route through the controller). Remaining commands follow this pattern. Builds clean (cocoa); behavior unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Languages
Pascal
96.4%
Python
2.9%
Shell
0.6%