1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use crate::engine::d2::util::Disposable;
use super::{Dynamic, Event, IEventDispatcher};
pub type Listener = Box<dyn Fn(Dynamic)>;
/// Manages a group of event listeners. When the group is disposed, all listeners are removed.
pub struct EventGroup {
entries: Vec<Entry>,
}
impl EventGroup {
pub fn new() -> Self {
Self {
entries: Vec::new(),
}
}
/// Register a listener with this group.
pub fn add_listener(&self, dispatcher: IEventDispatcher, type_: String, listener: Listener) {
// dispatcher.addEventListener(type_, listener, false);
// self.entries.push(Entry::new(dispatcher, type_, listener));
unimplemented!()
}
/// Register a listener with this group, all listeners are removed when it's fired.
pub fn add_disposing_listener(
&self,
dispatcher: IEventDispatcher,
type_: String,
listener: Listener,
) {
// self.add_listener(dispatcher, type_, Box::new(|event: Event| {
// self.dispose();
// listener(event);
// }));
unimplemented!()
}
}
impl Disposable for EventGroup {
/// Detach all listeners registered with this group.
fn dispose(&self) {
// for entry in self.entries {
// entry.dispatcher.removeEventListener(entry.type_, entry.listener, false);
// }
// self.entries = Vec::new();
unimplemented!()
}
}
pub struct Entry {
pub dispatcher: IEventDispatcher,
pub type_: String,
pub listener: Listener,
}
impl Entry {
pub fn new(dispatcher: IEventDispatcher, type_: String, listener: Listener) -> Self {
Self {
dispatcher,
type_,
listener,
}
}
}