From 0b428d94e751dc4a5fbe19418bfb5994cebfa54c Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Sun, 24 May 2026 13:04:10 -0400 Subject: major ui rework --- src/ui/current_system_widget.rs | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/ui/current_system_widget.rs (limited to 'src/ui/current_system_widget.rs') diff --git a/src/ui/current_system_widget.rs b/src/ui/current_system_widget.rs new file mode 100644 index 0000000..f7aa940 --- /dev/null +++ b/src/ui/current_system_widget.rs @@ -0,0 +1,47 @@ +use crate::solar_system::{SolarSystem, SystemId}; + +pub struct CurrentSystemWidget<'frame> +{ + star_systems: &'frame [SolarSystem], + current_system: &'frame mut Option, +} + +impl<'frame> CurrentSystemWidget<'frame> { + pub fn new( + star_systems: &'frame [SolarSystem], + current_system: &'frame mut Option) + -> Self { + Self { + star_systems, + current_system + } + } +} + +impl<'frame> egui::Widget for CurrentSystemWidget<'frame> +{ + fn ui(self, ui: &mut egui::Ui) -> egui::Response { + let selected_label = match self.current_system { + Some(id) => &self.star_systems[*id].name(), + None => "Click to open" + }; + + ui.vertical(|vertical| { + vertical.label("Current System"); + let resp = egui::ComboBox::new("current_system", egui::WidgetText::default()) + .selected_text(selected_label) + .show_ui(vertical, + |combo_box| { + for system in self.star_systems.iter() { + let entry_value = Some(system.id()); + combo_box.selectable_value( + self.current_system, + entry_value, + system.name()); + } + }); + + resp.response + }).inner + } +} -- cgit v1.2.3