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:
57
src/app.rs
57
src/app.rs
@@ -1,3 +1,5 @@
|
|||||||
|
use log::info;
|
||||||
|
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
@@ -12,6 +14,13 @@ use crate::plot::TimeSeriesPlot;
|
|||||||
|
|
||||||
use crate::signals::SingleFrequencySignal;
|
use crate::signals::SingleFrequencySignal;
|
||||||
|
|
||||||
|
#[derive(Clone, Copy,Debug, PartialEq, Eq)]
|
||||||
|
enum TabActive {
|
||||||
|
Single,
|
||||||
|
Multi,
|
||||||
|
Shortcuts,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct App {
|
pub struct App {
|
||||||
tree: DockState<String>,
|
tree: DockState<String>,
|
||||||
tab_viewer: TabViewer,
|
tab_viewer: TabViewer,
|
||||||
@@ -22,6 +31,7 @@ pub struct App {
|
|||||||
pub phase_series: Arc<Mutex<TimeSeriesPlot>>,
|
pub phase_series: Arc<Mutex<TimeSeriesPlot>>,
|
||||||
pub connected: Arc<AtomicBool>,
|
pub connected: Arc<AtomicBool>,
|
||||||
pub on: Arc<Mutex<bool>>,
|
pub on: Arc<Mutex<bool>>,
|
||||||
|
tab_active: TabActive,
|
||||||
pub data_frequency: Arc<AtomicF32>,
|
pub data_frequency: Arc<AtomicF32>,
|
||||||
pub single_frequency: Arc<Mutex<u32>>
|
pub single_frequency: Arc<Mutex<u32>>
|
||||||
}
|
}
|
||||||
@@ -146,6 +156,7 @@ impl App {
|
|||||||
let phase_series = Arc::new(Mutex::new(TimeSeriesPlot::new()));
|
let phase_series = Arc::new(Mutex::new(TimeSeriesPlot::new()));
|
||||||
let single_frequency = Arc::new(Mutex::new(50000));
|
let single_frequency = Arc::new(Mutex::new(50000));
|
||||||
let on = Arc::new(Mutex::new(true));
|
let on = Arc::new(Mutex::new(true));
|
||||||
|
let tab_active = TabActive::Single;
|
||||||
|
|
||||||
// Step 2: Now we can initialize tab_viewer
|
// Step 2: Now we can initialize tab_viewer
|
||||||
let tab_viewer = TabViewer {
|
let tab_viewer = TabViewer {
|
||||||
@@ -170,6 +181,7 @@ impl App {
|
|||||||
phase_series,
|
phase_series,
|
||||||
connected: Arc::new(AtomicBool::new(false)),
|
connected: Arc::new(AtomicBool::new(false)),
|
||||||
on,
|
on,
|
||||||
|
tab_active,
|
||||||
data_frequency: Arc::new(AtomicF32::new(0.0)),
|
data_frequency: Arc::new(AtomicF32::new(0.0)),
|
||||||
single_frequency,
|
single_frequency,
|
||||||
};
|
};
|
||||||
@@ -179,17 +191,22 @@ impl App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_start_stop(&self) {
|
pub fn update_start_stop(&self) {
|
||||||
match *self.on.lock().unwrap() {
|
match (self.tab_active, *self.on.lock().unwrap()) {
|
||||||
true => {
|
(TabActive::Single, true) => {
|
||||||
if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Start(*self.single_frequency.lock().unwrap())) {
|
if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Start(*self.single_frequency.lock().unwrap())) {
|
||||||
eprintln!("Failed to send start command: {:?}", e);
|
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) {
|
if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Stop) {
|
||||||
eprintln!("Failed to send stop command: {:?}", e);
|
eprintln!("Failed to send stop command: {:?}", e);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
(_, _) => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,7 +273,39 @@ impl eframe::App for App {
|
|||||||
.show_close_buttons(false)
|
.show_close_buttons(false)
|
||||||
.show_inside(ui, &mut self.tab_viewer);
|
.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
|
// CMD- or control-W to close window
|
||||||
if ctx.input(|i| i.modifiers.cmd_ctrl_matches(Modifiers::COMMAND))
|
if ctx.input(|i| i.modifiers.cmd_ctrl_matches(Modifiers::COMMAND))
|
||||||
&& ctx.input(|i| i.key_pressed(Key::W))
|
&& ctx.input(|i| i.key_pressed(Key::W))
|
||||||
|
|||||||
Reference in New Issue
Block a user