leptos_leaflet/components/events/
map_events.rs1use crate::leaflet_event;
2use leaflet::{ErrorEvent, Event, LocationEvent, Map, MouseEvent};
3use std::cell::RefCell;
4use std::rc::Rc;
5
6#[derive(Clone, Default)]
7pub struct MapEvents {
8 inner: Rc<RefCell<InnerMapEvents>>,
9}
10
11#[derive(Default)]
12struct InnerMapEvents {
13 location_found: Option<Box<dyn Fn(LocationEvent)>>,
14 location_error: Option<Box<dyn Fn(ErrorEvent)>>,
15 load: Option<Box<dyn Fn(Event)>>,
16 unload: Option<Box<dyn Fn(Event)>>,
17 resize: Option<Box<dyn Fn(Event)>>,
18 zoom: Option<Box<dyn Fn(Event)>>,
19 zoom_start: Option<Box<dyn Fn(Event)>>,
20 zoom_end: Option<Box<dyn Fn(Event)>>,
21 move_: Option<Box<dyn Fn(Event)>>,
22 move_start: Option<Box<dyn Fn(Event)>>,
23 move_end: Option<Box<dyn Fn(Event)>>,
24 mouse_click: Option<Box<dyn Fn(MouseEvent)>>,
25 mouse_double_click: Option<Box<dyn Fn(MouseEvent)>>,
26 mouse_context_menu: Option<Box<dyn Fn(MouseEvent)>>,
27 mouse_move: Option<Box<dyn Fn(MouseEvent)>>,
28 mouse_over: Option<Box<dyn Fn(MouseEvent)>>,
29 mouse_out: Option<Box<dyn Fn(MouseEvent)>>,
30 mouse_down: Option<Box<dyn Fn(MouseEvent)>>,
31 mouse_up: Option<Box<dyn Fn(MouseEvent)>>,
32}
33
34impl MapEvents {
35 pub fn new() -> Self {
36 Self::default()
37 }
38
39 pub fn setup(&self, map: &Map) {
40 if let Some(location_found) = self.inner.borrow_mut().location_found.take() {
41 map.on_location_found(location_found);
42 }
43 if let Some(location_error) = self.inner.borrow_mut().location_error.take() {
44 map.on_location_error(location_error);
45 }
46 if let Some(load) = self.inner.borrow_mut().load.take() {
47 map.on_load(load);
48 }
49 if let Some(unload) = self.inner.borrow_mut().unload.take() {
50 map.on_unload(unload);
51 }
52 if let Some(resize) = self.inner.borrow_mut().resize.take() {
53 map.on_resize(resize);
54 }
55 if let Some(zoom) = self.inner.borrow_mut().zoom.take() {
56 map.on_zoom(zoom);
57 }
58 if let Some(zoom_start) = self.inner.borrow_mut().zoom_start.take() {
59 map.on_zoom_start(zoom_start);
60 }
61 if let Some(zoom_end) = self.inner.borrow_mut().zoom_end.take() {
62 map.on_zoom_end(zoom_end);
63 }
64 if let Some(move_start) = self.inner.borrow_mut().move_start.take() {
65 map.on_move_start(move_start);
66 }
67 if let Some(move_end) = self.inner.borrow_mut().move_end.take() {
68 map.on_move_end(move_end);
69 }
70 if let Some(move_) = self.inner.borrow_mut().move_.take() {
71 map.on_move(move_);
72 }
73 if let Some(mouse_click) = self.inner.borrow_mut().mouse_click.take() {
74 map.on_mouse_click(mouse_click);
75 }
76 if let Some(mouse_double_click) = self.inner.borrow_mut().mouse_double_click.take() {
77 map.on_mouse_double_click(mouse_double_click);
78 }
79 if let Some(mouse_context_menu) = self.inner.borrow_mut().mouse_context_menu.take() {
80 map.on_mouse_context_menu(mouse_context_menu);
81 }
82 if let Some(mouse_move) = self.inner.borrow_mut().mouse_move.take() {
83 map.on_mouse_move(mouse_move);
84 }
85 if let Some(mouse_over) = self.inner.borrow_mut().mouse_over.take() {
86 map.on_mouse_over(mouse_over);
87 }
88 if let Some(mouse_out) = self.inner.borrow_mut().mouse_out.take() {
89 map.on_mouse_out(mouse_out);
90 }
91 if let Some(mouse_down) = self.inner.borrow_mut().mouse_down.take() {
92 map.on_mouse_down(mouse_down);
93 }
94 if let Some(mouse_up) = self.inner.borrow_mut().mouse_up.take() {
95 map.on_mouse_up(mouse_up);
96 }
97 }
98}
99
100leaflet_event!(MapEvents, location_found, LocationEvent);
101leaflet_event!(MapEvents, location_error, ErrorEvent);
102leaflet_event!(MapEvents, load, Event);
103leaflet_event!(MapEvents, unload, Event);
104leaflet_event!(MapEvents, resize, Event);
105leaflet_event!(MapEvents, zoom, Event);
106leaflet_event!(MapEvents, zoom_start, Event);
107leaflet_event!(MapEvents, zoom_end, Event);
108leaflet_event!(MapEvents, move_start, Event);
109leaflet_event!(MapEvents, move_end, Event);
110leaflet_event!(MapEvents, move_, Event);
111leaflet_event!(MapEvents, mouse_click, MouseEvent);
112leaflet_event!(MapEvents, mouse_double_click, MouseEvent);
113leaflet_event!(MapEvents, mouse_context_menu, MouseEvent);
114leaflet_event!(MapEvents, mouse_move, MouseEvent);
115leaflet_event!(MapEvents, mouse_over, MouseEvent);
116leaflet_event!(MapEvents, mouse_out, MouseEvent);
117leaflet_event!(MapEvents, mouse_down, MouseEvent);
118leaflet_event!(MapEvents, mouse_up, MouseEvent);