summaryrefslogtreecommitdiffstats
path: root/src/ui/current_system_widget.rs
blob: f7aa940bc6d75809aac386d12b5124ca3d668cec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::solar_system::{SolarSystem, SystemId};

pub struct CurrentSystemWidget<'frame>
{
    star_systems: &'frame [SolarSystem],
    current_system: &'frame mut Option<SystemId>,
}

impl<'frame> CurrentSystemWidget<'frame> {
    pub fn new(
        star_systems: &'frame [SolarSystem],
        current_system: &'frame mut Option<SystemId>)
    -> 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
    }
}