Skip to main content

leptos_leaflet/components/events/
map_events.rs

1use 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);