paiagram/interface/tabs/
tree_view.rs

1use crate::interface::AppTab;
2use crate::interface::tabs::diagram::DiagramTab;
3use crate::interface::tabs::{displayed_lines, vehicle};
4use crate::vehicles::Vehicle;
5use crate::vehicles::vehicle_set::VehicleSet;
6use crate::{interface::UiCommand, lines::DisplayedLine};
7use bevy::prelude::*;
8use egui::Id;
9
10#[derive(Hash, PartialEq, Eq, Clone, Copy)]
11enum TreeViewItem {
12    VehicleSet(Entity),
13    Vehicle(Entity),
14}
15
16pub fn show_tree_view(
17    InMut(ui): InMut<egui::Ui>,
18    vehicle_sets: Query<(Entity, &Name, &Children), With<VehicleSet>>,
19    displayed_lines: Query<(Entity, &Name), With<DisplayedLine>>,
20    vehicles: Query<(Entity, &Name), With<Vehicle>>,
21    mut msg_open_tab: MessageWriter<UiCommand>,
22) {
23    ui.vertical(|ui| {
24        if ui.button("All displayed lines").clicked() {
25            msg_open_tab.write(UiCommand::OpenOrFocusTab(AppTab::DisplayedLines(
26                displayed_lines::DisplayedLinesTab,
27            )));
28        }
29        for (entity, name) in displayed_lines {
30            if ui.button(name.as_str()).clicked() {
31                msg_open_tab.write(UiCommand::OpenOrFocusTab(AppTab::Diagram(DiagramTab::new(
32                    entity,
33                ))));
34            }
35        }
36    });
37    for (set_entity, set_name, set) in vehicle_sets {
38        ui.label(set_name.as_str());
39        for vehicle in set.into_iter().copied() {
40            let Ok((entity, name)) = vehicles.get(vehicle) else {
41                continue;
42            };
43            if ui.button(name.as_str()).clicked() {
44                msg_open_tab.write(UiCommand::OpenOrFocusTab(AppTab::Vehicle(
45                    vehicle::VehicleTab(entity),
46                )));
47            }
48        }
49    }
50}