maps/app_impl/
grid_settings.rs1use 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}