From a0a3b3974cab754c10a1517d82762b99482970ce Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Tue, 12 May 2026 19:01:27 -0400 Subject: update packages to latest versions --- src/ui/bodies_window.rs | 114 +++++++++++++++++------------------------------- 1 file changed, 39 insertions(+), 75 deletions(-) (limited to 'src/ui/bodies_window.rs') diff --git a/src/ui/bodies_window.rs b/src/ui/bodies_window.rs index 21a2060..7e24948 100644 --- a/src/ui/bodies_window.rs +++ b/src/ui/bodies_window.rs @@ -1,6 +1,3 @@ -use egui::Sense; - -use crate::eguictx::EguiCtx; use crate::ntree::{NTree, NTreeNode}; use crate::solar_system::body::{BodyId, OrbitalBody}; use crate::solar_system::{SolarSystem, SystemId}; @@ -11,8 +8,6 @@ use crate::timeman::TimeMan; pub struct BodiesWindowState { pub open: bool, - last_system: Option, - system_heirarchy: NTree, selected_body: Option } @@ -24,64 +19,19 @@ pub struct BodiesWindowAction impl BodiesWindowState { - fn build_system_heirarchy_rec( - bodies: &[OrbitalBody], - node: &mut NTreeNode) - { - for body in bodies { - let orbit = body.get_orbit(); - match orbit { - Some(orbit) => { - if orbit.parent() != *node.value() { - continue; - } - }, - None => { - continue; - } - } - let mut subnode = NTreeNode::new(body.id()); - BodiesWindowState::build_system_heirarchy_rec(bodies, &mut subnode); - node.insert_node(subnode); - } - } - - fn rebuild_system_heirarchy( + pub fn paint( &mut self, - star_system: &SolarSystem) - { - let mut root_node = NTreeNode::::new(0); - - let bodies = star_system.bodies(); - BodiesWindowState::build_system_heirarchy_rec(bodies, &mut root_node); - self.system_heirarchy.set_root(root_node); - } - - pub fn render( - &mut self, - current_system: &SolarSystem, - eguictx: &EguiCtx) + ui: &mut egui::Ui, + current_system: &SolarSystem) -> BodiesWindowAction { - match self.last_system { - Some(last_system) => { - if last_system != current_system.id() { - self.rebuild_system_heirarchy(current_system); - } - }, - None => { - self.rebuild_system_heirarchy(current_system); - } - } - self.last_system = Some(current_system.id()); - let mut action = BodiesWindowAction::default(); let mut bodies_window_open = self.open; egui::Window::new("Bodies") .open(&mut &mut bodies_window_open) .resizable(true) - .show(eguictx.context(), |ui| { + .show(ui.ctx(), |ui| { ui.horizontal(|ui| { self.paint_bodies_list(current_system, ui); @@ -142,8 +92,8 @@ impl BodiesWindowState .min_scrolled_height(200.0) .show(ui, |ui| { ui.vertical(|ui| { - let root = self.system_heirarchy.root(); - let new_sel = self.paint_bodies_node_rec(star_system, root.as_ref().unwrap(), ui); + let root = star_system.heirarchy(); + let new_sel = self.paint_bodies_node_rec(star_system, root, ui); if new_sel.is_some() { self.selected_body = new_sel; } @@ -176,26 +126,40 @@ impl BodiesWindowState }); ui.vertical(|ui| { - ui.vertical_centered(|ui| { - ui.label("Physical Properties"); - }); - ui.label(format!("Mass: {:.4E} kg", selected_body.mass())); - ui.label(format!("Radius: {} km", selected_body.radius())); - - if let Some(orbit) = selected_body.get_orbit() { - ui.vertical_centered(|ui| { - ui.label("Orbital Properties"); + ui.style_mut().interaction.selectable_labels = false; + egui_extras::TableBuilder::new(ui) + .column(egui_extras::Column::auto()) + .column(egui_extras::Column::remainder()) + .body(|mut body| { + body.row(16.0, |mut row| { + row.col(|col| { col.label("Mass"); }); + row.col(|col| { col.label(format!("{:.4E}", selected_body.mass())); }); }); - ui.label(format!("Orbiting {}", - star_system.body(orbit.parent()).name() - )); - ui.label(format!("Period: {}", - TimeMan::format_duration(orbit.period(selected_body)) - )); - ui.label(format!("Semi-major Axis: {:.4E} km", - orbit.sma() - )); - } + body.row(16.0, |mut row| { + row.col(|col| { col.label("Radius"); }); + row.col(|col| { col.label(format!("{:.4E}", selected_body.radius())); }); + }); + + if let Some(orbit) = selected_body.get_orbit() { + let parent = star_system.body(orbit.parent()); + body.row(16.0, |mut row| { + row.col(|col| { col.label("Orbiting"); }); + row.col(|col| { col.label(parent.name()); }); + }); + body.row(16.0, |mut row| { + row.col(|col| { col.label("Period"); }); + row.col(|col| { + col.label(format!("{}", + TimeMan::format_duration(orbit.period(selected_body)) + )); + }); + }); + body.row(16.0, |mut row| { + row.col(|col| { col.label("Semi-major Axis"); }); + row.col(|col| { col.label(format!("{:.4E} km", orbit.sma())); }); + }); + } + }); }); }); -- cgit v1.2.3