eulumdat_ui/widgets/
validation.rs1use egui::{Color32, RichText, Ui};
4use eulumdat::{validate, Eulumdat};
5
6pub struct ValidationPanel;
8
9impl ValidationPanel {
10 pub fn show(ui: &mut Ui, ldt: &Eulumdat) {
12 let warnings = validate(ldt);
13
14 ui.heading("Validation Results");
15 ui.separator();
16
17 if warnings.is_empty() {
18 ui.horizontal(|ui| {
19 ui.label(
20 RichText::new("✓")
21 .color(Color32::from_rgb(80, 200, 80))
22 .size(20.0),
23 );
24 ui.label("No validation issues found.");
25 });
26 } else {
27 ui.horizontal(|ui| {
28 ui.label(
29 RichText::new(format!("⚠ {} issue(s) found", warnings.len()))
30 .color(Color32::from_rgb(220, 180, 50))
31 .size(14.0),
32 );
33 });
34
35 ui.add_space(10.0);
36
37 egui::ScrollArea::vertical()
38 .auto_shrink([false, false])
39 .show(ui, |ui| {
40 for warning in &warnings {
41 ui.horizontal(|ui| {
42 ui.label(
43 RichText::new("⚠")
44 .color(Color32::from_rgb(220, 180, 50))
45 .monospace(),
46 );
47
48 ui.vertical(|ui| {
49 ui.label(
50 RichText::new(warning.code).monospace().color(Color32::GRAY),
51 );
52 ui.label(&warning.message);
53 });
54 });
55
56 ui.separator();
57 }
58 });
59 }
60
61 ui.add_space(20.0);
62
63 ui.collapsing("Validation Summary", |ui| {
65 egui::Grid::new("validation_summary")
66 .num_columns(2)
67 .spacing([20.0, 4.0])
68 .show(ui, |ui| {
69 ui.label("Total warnings:");
70 ui.label(format!("{}", warnings.len()));
71 ui.end_row();
72
73 ui.label("Data points:");
74 ui.label(format!("{}", ldt.c_angles.len() * ldt.g_angles.len()));
75 ui.end_row();
76
77 ui.label("C-planes:");
78 ui.label(format!("{}", ldt.c_angles.len()));
79 ui.end_row();
80
81 ui.label("Gamma angles:");
82 ui.label(format!("{}", ldt.g_angles.len()));
83 ui.end_row();
84 });
85 });
86 }
87}