mikronova/kyokkou
src/app.rs
use crate::art_scenes::ArtScenes;
use crate::common::Scene;
use crate::data_graphs::DataGraphs;
use crate::rack_topology::RackTopology;
use crate::renderer::{RenderState, Renderer};
use crate::system_topology::SystemTopology;
#[derive(Debug, Clone, PartialEq)]
enum Flik {
ArtScenes,
SystemTopology,
DataGraphs,
RackTopology,
}
pub struct KokkouApp {
active_flik: Flik,
art_scenes: ArtScenes,
system_topology: SystemTopology,
data_graphs: DataGraphs,
rack_topology: RackTopology,
renderer: Renderer,
}
impl Default for KokkouApp {
fn default() -> Self {
Self {
active_flik: Flik::ArtScenes,
art_scenes: ArtScenes::default(),
system_topology: SystemTopology::default(),
data_graphs: DataGraphs::default(),
rack_topology: RackTopology::default(),
renderer: Renderer::default(),
}
}
}
impl eframe::App for KokkouApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::TopBottomPanel::top("flikar").show(ctx, |ui| {
ui.horizontal(|ui| {
ui.selectable_value(&mut self.active_flik, Flik::ArtScenes, "Art scenes");
ui.selectable_value(&mut self.active_flik, Flik::SystemTopology, "System topology");
ui.selectable_value(&mut self.active_flik, Flik::DataGraphs, "Data graphs");
ui.selectable_value(&mut self.active_flik, Flik::RackTopology, "Rack topology");
});
});
egui::TopBottomPanel::bottom("render_status").show(ctx, |ui| {
let state = self.renderer.state.lock().unwrap().clone();
match &state {
RenderState::Idle => { ui.label("Ready"); }
RenderState::Rendering => { ui.label("Rendering..."); }
RenderState::Done(path) => { ui.colored_label(egui::Color32::GREEN, format!("Done: {path}")); }
RenderState::Error(e) => { ui.colored_label(egui::Color32::RED, format!("Error: {e}")); }
}
});
let result = egui::CentralPanel::default().show(ctx, |ui| {
match self.active_flik {
Flik::ArtScenes => self.art_scenes.show(ui),
Flik::SystemTopology => self.system_topology.show(ui),
Flik::DataGraphs => self.data_graphs.show(ui),
Flik::RackTopology => self.rack_topology.show(ui),
}
});
if let Some(yaml) = result.inner {
self.renderer.submit(yaml, ctx.clone());
}
}
}