mirror of
https://github.com/hubaldv/bioz-host-rs.git
synced 2025-12-06 05:11:17 +00:00
Included active tab variable to stop amplifier after tab change.
This commit is contained in:
55
src/app.rs
55
src/app.rs
@@ -1,3 +1,5 @@
|
||||
use log::info;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
|
||||
@@ -12,6 +14,13 @@ use crate::plot::TimeSeriesPlot;
|
||||
|
||||
use crate::signals::SingleFrequencySignal;
|
||||
|
||||
#[derive(Clone, Copy,Debug, PartialEq, Eq)]
|
||||
enum TabActive {
|
||||
Single,
|
||||
Multi,
|
||||
Shortcuts,
|
||||
}
|
||||
|
||||
pub struct App {
|
||||
tree: DockState<String>,
|
||||
tab_viewer: TabViewer,
|
||||
@@ -22,6 +31,7 @@ pub struct App {
|
||||
pub phase_series: Arc<Mutex<TimeSeriesPlot>>,
|
||||
pub connected: Arc<AtomicBool>,
|
||||
pub on: Arc<Mutex<bool>>,
|
||||
tab_active: TabActive,
|
||||
pub data_frequency: Arc<AtomicF32>,
|
||||
pub single_frequency: Arc<Mutex<u32>>
|
||||
}
|
||||
@@ -146,6 +156,7 @@ impl App {
|
||||
let phase_series = Arc::new(Mutex::new(TimeSeriesPlot::new()));
|
||||
let single_frequency = Arc::new(Mutex::new(50000));
|
||||
let on = Arc::new(Mutex::new(true));
|
||||
let tab_active = TabActive::Single;
|
||||
|
||||
// Step 2: Now we can initialize tab_viewer
|
||||
let tab_viewer = TabViewer {
|
||||
@@ -170,6 +181,7 @@ impl App {
|
||||
phase_series,
|
||||
connected: Arc::new(AtomicBool::new(false)),
|
||||
on,
|
||||
tab_active,
|
||||
data_frequency: Arc::new(AtomicF32::new(0.0)),
|
||||
single_frequency,
|
||||
};
|
||||
@@ -179,17 +191,22 @@ impl App {
|
||||
}
|
||||
|
||||
pub fn update_start_stop(&self) {
|
||||
match *self.on.lock().unwrap() {
|
||||
true => {
|
||||
match (self.tab_active, *self.on.lock().unwrap()) {
|
||||
(TabActive::Single, true) => {
|
||||
if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Start(*self.single_frequency.lock().unwrap())) {
|
||||
eprintln!("Failed to send start command: {:?}", e);
|
||||
}
|
||||
},
|
||||
false => {
|
||||
(TabActive::Multi, true) => {
|
||||
// For future use
|
||||
info!("Multi frequency mode not implemented yet");
|
||||
},
|
||||
(_, false) => {
|
||||
if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Stop) {
|
||||
eprintln!("Failed to send stop command: {:?}", e);
|
||||
}
|
||||
},
|
||||
(_, _) => {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,6 +274,38 @@ impl eframe::App for App {
|
||||
.show_inside(ui, &mut self.tab_viewer);
|
||||
});
|
||||
|
||||
// Do something when a tab is changed
|
||||
if let Some((_, tab)) = self.tree.find_active_focused() {
|
||||
match tab.as_str() {
|
||||
"Single" => {
|
||||
if self.tab_active != TabActive::Single {
|
||||
self.tab_active = TabActive::Single;
|
||||
*self.on.lock().unwrap() = false;
|
||||
self.update_start_stop();
|
||||
info!("Switched to Single tab");
|
||||
}
|
||||
}
|
||||
"Multi" => {
|
||||
if self.tab_active != TabActive::Multi {
|
||||
self.tab_active = TabActive::Multi;
|
||||
*self.on.lock().unwrap() = false;
|
||||
self.update_start_stop();
|
||||
info!("Switched to Multi tab");
|
||||
}
|
||||
}
|
||||
"Shortcuts" => {
|
||||
// if self.tab_active != TabActive::Shortcuts {
|
||||
// self.tab_active = TabActive::Shortcuts;
|
||||
// *self.on.lock().unwrap() = false;
|
||||
// self.update_start_stop();
|
||||
// info!("Switched to Shortcuts tab");
|
||||
// }
|
||||
}
|
||||
_ => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CMD- or control-W to close window
|
||||
if ctx.input(|i| i.modifiers.cmd_ctrl_matches(Modifiers::COMMAND))
|
||||
&& ctx.input(|i| i.key_pressed(Key::W))
|
||||
|
||||
Reference in New Issue
Block a user