package org.herac.tuxguitar.gui.system.keybindings; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.widgets.Control; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingReader; import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingWriter; import org.herac.tuxguitar.gui.util.TGFileUtils; public class KeyBindingActionManager { protected class KeyBindingListener implements KeyListener { public void keyPressed(KeyEvent event) { KeyBinding kb = new KeyBinding(); kb.setKey(event.keyCode); kb.setMask(event.stateMask); Action action = getActionForKeyBinding(kb); if (action != null) { action.process(event); } } public void keyReleased(KeyEvent evt) { // not implemented } } private List<KeyBindingAction> keyBindingsActions; private KeyBindingListener listener; public KeyBindingActionManager() { this.keyBindingsActions = new ArrayList<KeyBindingAction>(); this.init(); } public void appendListenersTo(Control control) { control.addKeyListener(this.listener); } public Action getActionForKeyBinding(KeyBinding kb) { Action action = KeyBindingReserveds.getActionForKeyBinding(kb); if (action != null) { return action; } for (final KeyBindingAction keyBindingAction : this.keyBindingsActions) { if (keyBindingAction.getKeyBinding() != null && kb.isSameAs(keyBindingAction.getKeyBinding())) { return TuxGuitar.instance().getAction(keyBindingAction.getAction()); } } return null; } public List<KeyBindingAction> getKeyBindingActions() { return this.keyBindingsActions; } public KeyBinding getKeyBindingForAction(String action) { KeyBinding kb = KeyBindingReserveds.getKeyBindingForAction(action); if (kb != null) { return kb; } for (final KeyBindingAction keyBindingAction : this.keyBindingsActions) { if (action.equals(keyBindingAction.getAction())) { return keyBindingAction.getKeyBinding(); } } return null; } private String getUserFileName() { return TGFileUtils.PATH_USER_CONFIG + File.separator + "shortcuts.xml"; } public void init() { List<KeyBindingAction> enabled = KeyBindingReader.getKeyBindings(getUserFileName()); this.keyBindingsActions.addAll((enabled != null ? enabled : KeyBindingActionDefaults.getDefaultKeyBindings())); this.listener = new KeyBindingListener(); } public void reset(List<KeyBindingAction> keyBindings) { this.keyBindingsActions.clear(); this.keyBindingsActions.addAll(keyBindings); } public void saveKeyBindings() { KeyBindingWriter.setBindings(getKeyBindingActions(), getUserFileName()); } }