egui_charts/config/
interaction.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
9pub enum TrackingModeExitMode {
10 OnTouchEnd,
12
13 OnMouseLeave,
15
16 #[default]
18 OnNextTap,
19}
20
21#[derive(Debug, Clone, Copy, Default, PartialEq, serde::Serialize, serde::Deserialize)]
24pub struct TrackingModeOptions {
25 pub exit_mode: TrackingModeExitMode,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)]
34#[serde(default)]
35pub struct HandleScrollOptions {
36 pub enabled: bool,
39
40 pub mouse_wheel: bool,
43
44 pub pressed_mouse_move: bool,
47
48 pub horz_touch_drag: bool,
51
52 pub vert_touch_drag: bool,
55}
56
57impl Default for HandleScrollOptions {
58 fn default() -> Self {
59 Self {
60 enabled: true,
61 mouse_wheel: true,
62 pressed_mouse_move: true,
63 horz_touch_drag: true,
64 vert_touch_drag: true,
65 }
66 }
67}
68
69#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)]
71pub struct AxisPressedMouseMoveOptions {
72 pub time: bool,
75
76 pub price: bool,
79}
80
81impl Default for AxisPressedMouseMoveOptions {
82 fn default() -> Self {
83 Self {
84 time: true,
85 price: true,
86 }
87 }
88}
89
90#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)]
92pub struct AxisDoubleClickResetOptions {
93 pub time: bool,
96
97 pub price: bool,
100}
101
102impl Default for AxisDoubleClickResetOptions {
103 fn default() -> Self {
104 Self {
105 time: true,
106 price: true,
107 }
108 }
109}
110
111#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)]
115#[serde(default)]
116pub struct HandleScaleOptions {
117 pub enabled: bool,
120
121 pub mouse_wheel: bool,
124
125 pub pinch: bool,
128
129 pub axis_pressed_mouse_move: AxisPressedMouseMoveOptions,
131
132 pub axis_double_click_reset: AxisDoubleClickResetOptions,
134}
135
136impl Default for HandleScaleOptions {
137 fn default() -> Self {
138 Self {
139 enabled: true,
140 mouse_wheel: true,
141 pinch: true,
142 axis_pressed_mouse_move: AxisPressedMouseMoveOptions::default(),
143 axis_double_click_reset: AxisDoubleClickResetOptions::default(),
144 }
145 }
146}
147
148#[cfg(test)]
149mod tests {
150 use super::*;
151
152 #[test]
153 fn test_tracking_mode_exit_mode_default() {
154 let mode = TrackingModeExitMode::default();
155 assert_eq!(mode, TrackingModeExitMode::OnNextTap);
156 }
157
158 #[test]
160 fn saved_handler_options_default_missing_group_switches_to_enabled() {
161 let scroll: HandleScrollOptions = serde_json::from_value(serde_json::json!({
162 "mouse_wheel": false, "pressed_mouse_move": true,
163 "horz_touch_drag": false, "vert_touch_drag": true
164 }))
165 .unwrap();
166 let scale: HandleScaleOptions = serde_json::from_value(serde_json::json!({
167 "mouse_wheel": true, "pinch": false,
168 "axis_pressed_mouse_move": {"time": false, "price": true},
169 "axis_double_click_reset": {"time": true, "price": false}
170 }))
171 .unwrap();
172 assert!(scroll.enabled && scale.enabled);
173 assert!(!scroll.mouse_wheel && !scroll.horz_touch_drag);
174 assert!(!scale.pinch && !scale.axis_pressed_mouse_move.time);
175 assert!(!scale.axis_double_click_reset.price);
176 }
177}