paiagram/interface/tabs/
tree_view.rs1use 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}