paiagram/interface/side_panel/
interval_stats.rs1use 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 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 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}