Skip to main content

maps/app_impl/
grid_settings.rs

1use eframe::egui;
2
3use crate::app::AppState;
4use crate::app_impl::ui_helpers::section_heading;
5use crate::grid_options::{GridLineDimension, GridOptions, SubLineVisibility};
6
7impl AppState {
8    pub(crate) fn grid_settings(&mut self, ui: &mut egui::Ui) {
9        section_heading(ui, "Grid", &mut self.options.collapsed.grid_settings);
10        if ui.button("Reset").clicked() {
11            self.options.grid = GridOptions::default();
12        }
13        if self.options.collapsed.grid_settings {
14            return;
15        }
16        ui.end_row();
17
18        ui.label("Show grid lines");
19        ui.checkbox(&mut self.options.grid.lines_visible, "");
20        ui.end_row();
21        if self.options.grid.lines_visible {
22            self.grid_lines_settings(ui);
23        }
24
25        ui.end_row();
26        ui.label("Show marker");
27        self.options.grid.marker_visibility.ui(ui);
28        ui.end_row();
29        if self.options.grid.marker_visibility.any_visible() {
30            ui.label("Marker length (meters)");
31            ui.add(egui::Slider::new(
32                &mut self.options.grid.marker_length_meters,
33                0.1..=25.0,
34            ));
35            ui.end_row();
36            ui.label("Marker width (meters)");
37            ui.add(egui::Slider::new(
38                &mut self.options.grid.marker_width_meters,
39                0.01..=5.,
40            ));
41            ui.end_row();
42            ui.label("Marker color (x, y, z)");
43            ui.horizontal(|ui| {
44                ui.color_edit_button_srgba(&mut self.options.grid.marker_x_color);
45                ui.color_edit_button_srgba(&mut self.options.grid.marker_y_color);
46                ui.color_edit_button_srgba(&mut self.options.grid.marker_z_color);
47            });
48            ui.end_row();
49        }
50        ui.end_row();
51        ui.label("Grid scale (points per meter)");
52        ui.add(egui::Slider::new(
53            &mut self.options.grid.scale,
54            self.options.grid.min_scale..=self.options.grid.max_scale,
55        ));
56        ui.end_row();
57        ui.label("Zoom delta (%)")
58            .on_hover_text("How much the grid zooms in/out when scrolling.");
59        ui.add(egui::Slider::new(
60            &mut self.options.grid.scroll_delta_percent,
61            0.01..=10.,
62        ));
63    }
64
65    pub(crate) fn tool_settings(&mut self, ui: &mut egui::Ui) {
66        if !section_heading(ui, "Tools", &mut self.options.collapsed.tool_settings) {
67            return;
68        }
69        ui.end_row();
70        ui.label("Measurement color")
71            .on_hover_text("Line color of the measurement tool.");
72        ui.color_edit_button_srgba(&mut self.options.grid.measure_stroke.color);
73        ui.end_row();
74        ui.label("Lens magnification")
75            .on_hover_text("Magnification factor for hovering / fixed lenses.");
76        ui.add(egui::Slider::new(
77            &mut self.options.grid.lens_magnification,
78            0.1..=10.0,
79        ));
80    }
81
82    fn grid_lines_settings(&mut self, ui: &mut egui::Ui) {
83        ui.label("Show sub grid lines")
84            .on_hover_text("Show sub lines between main grid lines.");
85        ui.horizontal(|ui| {
86            ui.selectable_value(
87                &mut self.options.grid.sub_lines_visible,
88                SubLineVisibility::OnlyLens,
89                "In Lens",
90            );
91            ui.selectable_value(
92                &mut self.options.grid.sub_lines_visible,
93                SubLineVisibility::Always,
94                "Always",
95            );
96            ui.selectable_value(
97                &mut self.options.grid.sub_lines_visible,
98                SubLineVisibility::Never,
99                "Never",
100            );
101        });
102        ui.end_row();
103        ui.label("Grid color");
104        ui.horizontal(|ui| {
105            ui.color_edit_button_srgba(&mut self.options.grid.line_stroke.color);
106            if self.options.grid.sub_lines_visible != SubLineVisibility::Never {
107                ui.color_edit_button_srgba(&mut self.options.grid.sub_lines_stroke.color);
108            }
109        });
110        ui.end_row();
111        ui.label("Grid spacing dimension");
112        ui.horizontal(|ui| {
113            ui.selectable_value(
114                &mut self.options.grid.line_dimension,
115                GridLineDimension::Screen,
116                "Screen",
117            );
118            ui.selectable_value(
119                &mut self.options.grid.line_dimension,
120                GridLineDimension::Metric,
121                "Metric",
122            );
123        });
124        ui.end_row();
125        match self.options.grid.line_dimension {
126            GridLineDimension::Screen => {
127                ui.label("Grid lines spacing (points)");
128                ui.add(egui::Slider::new(
129                    &mut self.options.grid.line_spacing_points,
130                    self.options.grid.min_line_spacing_points
131                        ..=self.options.grid.max_line_spacing_points,
132                ));
133            }
134            GridLineDimension::Metric => {
135                ui.label("Grid lines spacing (meters)");
136                ui.add(egui::Slider::new(
137                    &mut self.options.grid.line_spacing_meters,
138                    self.options.grid.min_line_spacing_meters
139                        ..=self.options.grid.max_line_spacing_meters,
140                ));
141            }
142        }
143        if self.options.grid.sub_lines_visible != SubLineVisibility::Never {
144            ui.end_row();
145            ui.label("Sub grid lines factor").on_hover_text(
146                "The multiplier for sub lines between main grid lines.\n\
147                1 means no sub lines, 2 means one sub line between main lines, etc.",
148            );
149            ui.add(egui::Slider::new(
150                &mut self.options.grid.sub_lines_factor,
151                1..=10,
152            ));
153        }
154        ui.end_row();
155        ui.end_row();
156        ui.label("Show tick labels");
157        ui.checkbox(&mut self.options.grid.tick_labels_visible, "");
158        ui.end_row();
159        ui.label("Tick label color");
160        ui.color_edit_button_srgba(&mut self.options.grid.tick_labels_color);
161        ui.end_row();
162    }
163}