csi_webclient/ui/
control.rs1use crate::state::{AppState, UserIntent};
2
3pub 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}