source: trunk/src/org/expeditee/gio/input/InputEventToGestureTranslatorSet.java@ 1097

Last change on this file since 1097 was 1097, checked in by davidb, 6 years ago

Newly structured files from Corey's work on logic/graphics separation

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