Skip to main content

eulumdat_ui/widgets/
validation.rs

1//! Validation panel widget
2
3use egui::{Color32, RichText, Ui};
4use eulumdat::{validate, Eulumdat};
5
6/// Validation panel showing warnings
7pub struct ValidationPanel;
8
9impl ValidationPanel {
10    /// Show the validation panel
11    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        // Summary
64        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}