Files
wayvr/uidev/src/testbed/testbed_dashboard.rs
2025-11-08 11:16:19 +01:00

85 lines
1.8 KiB
Rust

use crate::testbed::{Testbed, TestbedUpdateParams};
use dash_frontend::{
frontend,
settings::{self, SettingsIO},
};
use wgui::layout::RcLayout;
struct SimpleSettingsIO {
settings: settings::Settings,
}
impl SimpleSettingsIO {
fn new() -> Self {
let mut res = Self {
settings: settings::Settings::default(),
};
res.read_from_disk();
res
}
}
// just a simple impl of a config io for dashboard frontend
// use ~/.config later
impl settings::SettingsIO for SimpleSettingsIO {
fn get_mut(&mut self) -> &mut settings::Settings {
&mut self.settings
}
fn get(&self) -> &dash_frontend::settings::Settings {
&self.settings
}
fn save_to_disk(&mut self) {
log::info!("saving settings");
let data = self.settings.save();
std::fs::write("/tmp/testbed_settings.json", data).unwrap();
}
fn read_from_disk(&mut self) {
log::info!("loading settings");
if let Ok(res) = std::fs::read("/tmp/testbed_settings.json") {
let data = String::from_utf8(res).unwrap();
self.settings = settings::Settings::load(&data).unwrap();
}
}
fn mark_as_dirty(&mut self) {
// just save it, at least for now
// save_to_disk should be called later in time or at exit, not instantly
self.save_to_disk();
}
}
pub struct TestbedDashboard {
layout: RcLayout,
frontend: frontend::RcFrontend,
}
impl TestbedDashboard {
pub fn new() -> anyhow::Result<Self> {
let settings = SimpleSettingsIO::new();
let (frontend, layout) = frontend::Frontend::new(frontend::InitParams {
settings: Box::new(settings),
})?;
Ok(Self { frontend, layout })
}
}
impl Testbed for TestbedDashboard {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()> {
let mut frontend = self.frontend.borrow_mut();
frontend.update(
&self.frontend,
params.width,
params.height,
params.timestep_alpha,
)
}
fn layout(&self) -> &RcLayout {
&self.layout
}
}