eulumdat_ui/widgets/
mod.rs

1//! egui widgets for Eulumdat visualization
2
3mod cartesian;
4mod heatmap;
5mod info;
6mod polar;
7mod validation;
8
9pub use cartesian::CartesianWidget;
10pub use heatmap::HeatmapWidget;
11pub use info::InfoPanel;
12pub use polar::PolarWidget;
13pub use validation::ValidationPanel;
14
15/// Available diagram tabs
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
17#[cfg_attr(feature = "persistence", derive(serde::Serialize, serde::Deserialize))]
18pub enum DiagramTab {
19    Info,
20    #[default]
21    Polar,
22    Cartesian,
23    Heatmap,
24    #[cfg(feature = "3d")]
25    Viewer3D,
26    Validation,
27}
28
29/// Editor panel combining info editing and validation
30pub struct EditorPanel;
31
32impl EditorPanel {
33    pub fn show(ui: &mut egui::Ui, ldt: &mut eulumdat::Eulumdat) {
34        egui::ScrollArea::vertical().show(ui, |ui| {
35            ui.heading("Luminaire Information");
36            ui.separator();
37
38            egui::Grid::new("info_grid")
39                .num_columns(2)
40                .spacing([20.0, 4.0])
41                .show(ui, |ui| {
42                    ui.label("Name:");
43                    ui.text_edit_singleline(&mut ldt.luminaire_name);
44                    ui.end_row();
45
46                    ui.label("Manufacturer:");
47                    ui.text_edit_singleline(&mut ldt.identification);
48                    ui.end_row();
49
50                    ui.label("Description:");
51                    ui.text_edit_singleline(&mut ldt.luminaire_number);
52                    ui.end_row();
53                });
54
55            ui.separator();
56            ui.heading("Dimensions (mm)");
57
58            egui::Grid::new("dimensions_grid")
59                .num_columns(2)
60                .spacing([20.0, 4.0])
61                .show(ui, |ui| {
62                    ui.label("Length:");
63                    ui.add(egui::DragValue::new(&mut ldt.length).speed(1.0));
64                    ui.end_row();
65
66                    ui.label("Width:");
67                    ui.add(egui::DragValue::new(&mut ldt.width).speed(1.0));
68                    ui.end_row();
69
70                    ui.label("Height:");
71                    ui.add(egui::DragValue::new(&mut ldt.height).speed(1.0));
72                    ui.end_row();
73                });
74        });
75    }
76}