1
package net.tapaal.gui.DrawingSurfaceManager;
3
import pipe.gui.graphicElements.PetriNetObject;
5
import java.awt.event.MouseEvent;
6
import java.awt.event.MouseWheelEvent;
7
import java.util.LinkedHashMap;
9
import java.util.function.Consumer;
10
import java.util.function.Predicate;
12
public abstract class AbstractDrawingSurfaceManager {
14
public void drawingSurfaceMouseClicked(MouseEvent e) {}
15
public void drawingSurfaceMousePressed(MouseEvent e) {}
16
public void drawingSurfaceMouseReleased(MouseEvent e){}
17
public void drawingSurfaceMouseDragged(MouseEvent e) {}
18
public void drawingSurfaceMouseWheelMoved(MouseWheelEvent e) {}
19
public void drawingSurfaceMouseMoved(MouseEvent e){}
21
public enum MouseAction {
31
public static class DrawingSurfaceEvent {
34
public final PetriNetObject pno;
35
public final MouseEvent e;
36
public final MouseAction a;
37
//Mouse Event type eg click mouse over etc
39
public DrawingSurfaceEvent(PetriNetObject pno, MouseEvent e, MouseAction a) {
47
private Map<Predicate<DrawingSurfaceEvent>, Consumer<DrawingSurfaceEvent>> filter = new LinkedHashMap<>();
48
private AbstractDrawingSurfaceManager next = null;
50
public void registerManager(){}
51
public void deregisterManager(){}
53
public AbstractDrawingSurfaceManager() {
57
public abstract void registerEvents();
59
(event) -> event.pno instanceof Place && event.a == MouseAction.clicked,
60
(event) -> placeClicked((Place) event.pno)
63
(event) -> event.pno instanceof PlaceTransitionObject,
64
(event) -> System.out.println("clicked PTO")
67
(event) -> event.pno instanceof Transition,
68
(event) -> System.out.println("clicked transition")
72
protected final void registerEvent(
73
//Class<? extends PetriNetObject> typeFilter,
74
Predicate<DrawingSurfaceEvent> filterCondition,
75
Consumer<DrawingSurfaceEvent> action
77
filter.put(filterCondition, action);
80
public final void triggerEvent(DrawingSurfaceEvent e){
81
//Select and run event from filter
82
//If not matched, run next if not null (else ignore)
84
/* ALTERNATIVE IMPLEMENTATION
85
boolean eventTriggered = false;
86
for (Predicate<DrawingSurfaceEvent> predicate : filter.keySet()){
87
if (predicate.test(e)) {
88
eventTriggered = true;
89
filter.get(predicate).accept(e);
92
if (!eventTriggered && next !=null) {
96
boolean handled = filter.keySet().stream().filter(f -> (f.test(e))).findFirst().
99
filter.get(f).accept(e);
102
if (!handled && next != null) {
103
next.triggerEvent(e);