1 | package org.expeditee.gio.input;
|
---|
2 |
|
---|
3 | import java.util.LinkedList;
|
---|
4 | import java.util.List;
|
---|
5 | import java.util.Set;
|
---|
6 |
|
---|
7 | import org.expeditee.gio.gesture.Gesture;
|
---|
8 | import org.expeditee.gio.input.InputEvent.InputType;
|
---|
9 |
|
---|
10 | /**
|
---|
11 | * An input-event -> gesture translator that is the aggregation of a set of
|
---|
12 | * other translators.
|
---|
13 | *
|
---|
14 | * @author cts16
|
---|
15 | */
|
---|
16 | public class InputEventToGestureTranslatorSet extends InputEventToGestureTranslator {
|
---|
17 | /** The individual gesture recognisers. */
|
---|
18 | private List<InputEventToGestureTranslator> _recognisers;
|
---|
19 |
|
---|
20 | public InputEventToGestureTranslatorSet() {
|
---|
21 | _recognisers = new LinkedList<InputEventToGestureTranslator>();
|
---|
22 | }
|
---|
23 |
|
---|
24 | /** Adds a sub-translator to this translator set. */
|
---|
25 | public void addTranslator(InputEventToGestureTranslator translator) {
|
---|
26 | if (translator == null)
|
---|
27 | return;
|
---|
28 |
|
---|
29 | _recognisers.add(translator);
|
---|
30 |
|
---|
31 | Set<InputType> recogniserMonitoredTypes = translator.getMonitoredInputTypes();
|
---|
32 | if (recogniserMonitoredTypes != null)
|
---|
33 | _monitoredInputTypes.addAll(recogniserMonitoredTypes);
|
---|
34 | }
|
---|
35 |
|
---|
36 | @Override
|
---|
37 | public String details() {
|
---|
38 | if (_recognisers.isEmpty())
|
---|
39 | return "";
|
---|
40 |
|
---|
41 | // Aggregate the details of the individual gesture recognisers
|
---|
42 | String details = "";
|
---|
43 | for (InputEventToGestureTranslator recogniser : _recognisers) {
|
---|
44 | String recogniserDetails = recogniser.details();
|
---|
45 | if (recogniserDetails != null && recogniserDetails != "") {
|
---|
46 | if (details != "")
|
---|
47 | details += "\n";
|
---|
48 | details += recogniserDetails;
|
---|
49 | }
|
---|
50 | }
|
---|
51 |
|
---|
52 | return details;
|
---|
53 | }
|
---|
54 |
|
---|
55 | @Override
|
---|
56 | public List<Gesture> onInputEvent(InputEvent event) {
|
---|
57 | if (_recognisers.isEmpty())
|
---|
58 | return null;
|
---|
59 |
|
---|
60 | // Only interested in monitored events
|
---|
61 | if (event == null || !isMonitoredType(event.getInputType()))
|
---|
62 | return null;
|
---|
63 |
|
---|
64 | // Aggregate the responses of all individual gesture listeners
|
---|
65 | List<Gesture> gestures = new LinkedList<Gesture>();
|
---|
66 |
|
---|
67 | for (InputEventToGestureTranslator recogniser : _recognisers) {
|
---|
68 | if (recogniser.isMonitoredType(event.getInputType())) {
|
---|
69 | List<Gesture> recogniserGestures = recogniser.onInputEvent(event);
|
---|
70 | if (recogniserGestures != null) {
|
---|
71 | gestures.addAll(recogniserGestures);
|
---|
72 | }
|
---|
73 | }
|
---|
74 | }
|
---|
75 |
|
---|
76 | return gestures;
|
---|
77 | }
|
---|
78 | }
|
---|