package org.expeditee.gio.input; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.expeditee.gio.gesture.Gesture; import org.expeditee.gio.input.InputEvent.InputType; /** * An input-event -> gesture translator that is the aggregation of a set of * other translators. * * @author cts16 */ public class InputEventToGestureTranslatorSet extends InputEventToGestureTranslator { /** The individual gesture recognisers. */ private List _recognisers; public InputEventToGestureTranslatorSet() { _recognisers = new LinkedList(); } /** Adds a sub-translator to this translator set. */ public void addTranslator(InputEventToGestureTranslator translator) { if (translator == null) return; _recognisers.add(translator); Set recogniserMonitoredTypes = translator.getMonitoredInputTypes(); if (recogniserMonitoredTypes != null) _monitoredInputTypes.addAll(recogniserMonitoredTypes); } @Override public String details() { if (_recognisers.isEmpty()) return ""; // Aggregate the details of the individual gesture recognisers String details = ""; for (InputEventToGestureTranslator recogniser : _recognisers) { String recogniserDetails = recogniser.details(); if (recogniserDetails != null && recogniserDetails != "") { if (details != "") details += "\n"; details += recogniserDetails; } } return details; } @Override public List onInputEvent(InputEvent event) { if (_recognisers.isEmpty()) return null; // if (event instanceof KBMInputEvent) { // KBMInputEvent kEvent = (KBMInputEvent) event; // if (kEvent.getKeyDown() != null) { // System.err.println("onInputEvent:::" + kEvent.toString()); // } // } // Only interested in monitored events if (event == null || !isMonitoredType(event.getInputType())) return null; // Aggregate the responses of all individual gesture listeners List gestures = new LinkedList(); for (InputEventToGestureTranslator recogniser : _recognisers) { if (recogniser.isMonitoredType(event.getInputType())) { List recogniserGestures = recogniser.onInputEvent(event); if (recogniserGestures != null) { gestures.addAll(recogniserGestures); } } } return gestures; } }