~boginw/tapaal/multiplayer

« back to all changes in this revision

Viewing changes to src/net/tapaal/gui/DrawingSurfaceManager/AbstractDrawingSurfaceManager.java

  • Committer: Bogi Napoleon Wennerstrøm
  • Date: 2020-04-08 13:12:38 UTC
  • mfrom: (998.2.361 testbranch)
  • Revision ID: bogi.wennerstrom@gmail.com-20200408131238-6daa9ocph3zgx1ag
merged ~yrke changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package net.tapaal.gui.DrawingSurfaceManager;
 
2
 
 
3
import pipe.gui.graphicElements.PetriNetObject;
 
4
 
 
5
import java.awt.event.MouseEvent;
 
6
import java.awt.event.MouseWheelEvent;
 
7
import java.util.LinkedHashMap;
 
8
import java.util.Map;
 
9
import java.util.function.Consumer;
 
10
import java.util.function.Predicate;
 
11
 
 
12
public abstract class AbstractDrawingSurfaceManager {
 
13
 
 
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){}
 
20
 
 
21
    public enum MouseAction {
 
22
        clicked,
 
23
        pressed,
 
24
        released,
 
25
        dragged,
 
26
        entered,
 
27
        exited,
 
28
        wheel,
 
29
        moved
 
30
    }
 
31
    public static class DrawingSurfaceEvent {
 
32
 
 
33
 
 
34
        public final PetriNetObject pno;
 
35
        public final MouseEvent e;
 
36
        public final MouseAction a;
 
37
        //Mouse Event type eg click mouse over etc
 
38
 
 
39
        public DrawingSurfaceEvent(PetriNetObject pno, MouseEvent e, MouseAction a) {
 
40
            this.pno = pno;
 
41
            this.e = e;
 
42
            this.a = a;
 
43
        }
 
44
 
 
45
    }
 
46
 
 
47
    private Map<Predicate<DrawingSurfaceEvent>, Consumer<DrawingSurfaceEvent>> filter = new LinkedHashMap<>();
 
48
    private AbstractDrawingSurfaceManager next = null;
 
49
 
 
50
    public void registerManager(){}
 
51
    public void deregisterManager(){}
 
52
 
 
53
    public AbstractDrawingSurfaceManager() {
 
54
                        registerEvents();
 
55
    }
 
56
 
 
57
    public abstract void registerEvents();
 
58
    /*registerEvent(
 
59
                                        (event) -> event.pno instanceof Place && event.a == MouseAction.clicked,
 
60
                                        (event) -> placeClicked((Place) event.pno)
 
61
                        );
 
62
                        registerEvent(
 
63
                                        (event) -> event.pno instanceof PlaceTransitionObject,
 
64
                                        (event) -> System.out.println("clicked PTO")
 
65
                        );
 
66
                        registerEvent(
 
67
                                        (event) -> event.pno instanceof Transition,
 
68
                                        (event) -> System.out.println("clicked transition")
 
69
                        );*/
 
70
 
 
71
 
 
72
    protected final void registerEvent(
 
73
            //Class<? extends PetriNetObject> typeFilter,
 
74
            Predicate<DrawingSurfaceEvent> filterCondition,
 
75
            Consumer<DrawingSurfaceEvent> action
 
76
    ){
 
77
        filter.put(filterCondition, action);
 
78
    }
 
79
 
 
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)
 
83
 
 
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);
 
90
            }
 
91
        }
 
92
        if (!eventTriggered && next !=null) {
 
93
            next.triggerEvent(e);
 
94
        }
 
95
        */
 
96
        boolean handled = filter.keySet().stream().filter(f -> (f.test(e))).findFirst().
 
97
                map(
 
98
                        f->{
 
99
                            filter.get(f).accept(e);
 
100
                            return true;
 
101
                        }).orElse(false);
 
102
        if (!handled && next != null) {
 
103
            next.triggerEvent(e);
 
104
        }
 
105
 
 
106
    };
 
107
 
 
108
}