Skip to main content

csi_webclient/ui/
control.rs

1use crate::state::{AppState, UserIntent};
2
3/// Render the control view.
4pub fn render(ui: &mut egui::Ui, state: &mut AppState) {
5    ui.heading("Control");
6    ui.separator();
7
8    ui.horizontal(|ui| {
9        ui.label("Duration (seconds, optional)");
10        ui.text_edit_singleline(&mut state.persistent.start_duration_seconds);
11    });
12
13    ui.horizontal(|ui| {
14        if ui.button("Start Collection").clicked() {
15            state.push_intent(UserIntent::StartCollection {
16                duration_seconds: state.persistent.start_duration_seconds.clone(),
17            });
18        }
19
20        if ui.button("Reset Device (RTS)").clicked() {
21            state.push_intent(UserIntent::ResetDevice);
22        }
23
24        if ui.button("Fetch Config").clicked() {
25            state.push_intent(UserIntent::FetchConfig);
26        }
27    });
28
29    ui.separator();
30
31    ui.horizontal(|ui| {
32        if !state.runtime.ws_connected {
33            if ui.button("Connect WebSocket").clicked() {
34                state.push_intent(UserIntent::ConnectWebSocket);
35            }
36        } else if ui.button("Disconnect WebSocket").clicked() {
37            state.push_intent(UserIntent::DisconnectWebSocket);
38        }
39
40        if ui.button("Clear Stream Frames").clicked() {
41            state.push_intent(UserIntent::ClearFrames);
42        }
43    });
44}