paiagram/interface/side_panel/
interval_stats.rs

1use crate::graph::{Graph, Interval, Station};
2use bevy::prelude::*;
3use egui::Ui;
4use moonshine_core::kind::Instance;
5
6pub fn show_interval_stats(
7    (InMut(ui), In((s1, s2))): (InMut<Ui>, In<(Instance<Station>, Instance<Station>)>),
8    mut interval_string: Local<String>,
9    station_name: Query<&Name, With<Station>>,
10    intervals: Query<&Interval>,
11    graph: Res<Graph>,
12) {
13    // Display basic statistics and edit functions
14    interval_string.clear();
15    interval_string.push_str(
16        station_name
17            .get(s1.entity())
18            .map_or("Unknown", Name::as_str),
19    );
20    interval_string.push_str(" ⇆ ");
21    interval_string.push_str(
22        station_name
23            .get(s2.entity())
24            .map_or("Unknown", Name::as_str),
25    );
26    ui.heading(interval_string.as_str());
27    let Some(&edge) = graph.edge_weight(s1, s2) else {
28        ui.label("Interval not found.");
29        return;
30    };
31    let Ok(info) = intervals.get(edge.entity()) else {
32        ui.label("Interval not found");
33        return;
34    };
35    // TODO: move the strings into their separate buffers;
36    egui::Grid::new("interval_info_grid")
37        .num_columns(2)
38        .striped(true)
39        .show(ui, |ui| {
40            ui.label("Length:");
41            ui.monospace(info.length.to_string());
42        });
43}