package org.freeplane.core.ui; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.List; import javax.swing.KeyStroke; import org.freeplane.core.extension.IExtension; public class KeyBindingProcessor implements IExtension { private final List<IKeyStrokeProcessor> processors = new ArrayList<IKeyStrokeProcessor>(); /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ /*********************************************************************************** * METHODS **********************************************************************************/ public boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { synchronized (processors) { boolean consumed = false; for(int i = processors.size()-1; i >= 0; i--) { //maybe break after the first interception? consumed = processors.get(i).processKeyBinding(ks, e, condition, pressed, consumed) || consumed; } return consumed; } } public void addKeyStrokeProcessor(IKeyStrokeProcessor processor) { synchronized (processors) { if(!processors.contains(processor)) { processors.add(processor); } } } public void removeKeyStrokeProcessor(IKeyStrokeProcessor processor) { synchronized (processors) { if(processors.contains(processor)) { processors.remove(processor); } } } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ }