package org.apollo; import java.util.List; import org.apollo.ApolloGestureActions.ApolloGestureType; import org.apollo.gio.gesture.data.TrackAdjustmentGestureData; import org.expeditee.gio.gesture.ExpediteeKBMGestureTranslator; import org.expeditee.gio.gesture.Gesture; import org.expeditee.gio.gesture.StandardGestureActions.StandardGestureType; import org.expeditee.gio.gesture.data.GestureData; import org.expeditee.gio.gesture.data.ItemSpecificGestureData; import org.expeditee.gio.gesture.data.RefreshGestureData; import org.expeditee.gio.input.InputEvent; import org.expeditee.gio.input.InputEvent.InputType; import org.expeditee.gio.input.InputEventToGestureTranslator; import org.expeditee.gio.input.InputEventToGestureTranslatorSet; import org.expeditee.gio.input.KBMInputEvent; import org.expeditee.gio.input.KBMInputEvent.Key; import org.expeditee.gio.input.KBMInputEvent.MouseButton; import org.expeditee.gui.FrameUtils; import org.expeditee.gio.input.StandardInputEventListeners; public class ApolloKBMGestureTranslator extends InputEventToGestureTranslatorSet { public static final long TRACK_WIDGET_TIMELINE_ADJUSTMENT = 50; public static final long TRACK_WIDGET_VERTICAL_ADJUSTMENT = 5; public ApolloKBMGestureTranslator() { // Create the list of sub-translators initialiseApolloTranslators(); } public void initialiseApolloTranslators() { // Add the CTRL + LEFT/RIGHT -> ADJUST_INITIATION_TIME gesture recogniser addTranslator(new InputEventToGestureTranslator(InputType.KBM) { @Override public String details() { return "CTRL + LEFT/RIGHT -> ADJUST_INITIATION_TIME"; } @Override public List onInputEvent(InputEvent event) { // Cast to keyboard/mouse event KBMInputEvent kbmEvent = (KBMInputEvent) event; // Check that ctrl is down if (!StandardInputEventListeners.kbmStateListener.isKeyDown(Key.CTRL)) return null; // Calculate the adjustment amount long adjustment; if (kbmEvent.getKeyDown() == Key.LEFT_ARROW) { adjustment = -TRACK_WIDGET_TIMELINE_ADJUSTMENT; } else if (kbmEvent.getKeyDown() == Key.RIGHT_ARROW) { adjustment = TRACK_WIDGET_TIMELINE_ADJUSTMENT; } else { return null; } // Return the gesture return apolloSingle(ApolloGestureType.ADJUST_INITIATION_TIME, new TrackAdjustmentGestureData(adjustment)); } }); // Add the CTRL + UP/DOWN -> ADJUST_VERTICAL_POSITION gesture recogniser addTranslator(new InputEventToGestureTranslator(InputType.KBM) { @Override public String details() { return "CTRL + UP/DOWN -> ADJUST_VERTICAL_POSITION"; } @Override public List onInputEvent(InputEvent event) { // Cast to keyboard/mouse event KBMInputEvent kbmEvent = (KBMInputEvent) event; // Check that ctrl is down if (!StandardInputEventListeners.kbmStateListener.isKeyDown(Key.CTRL)) return null; // Calculate the adjustment amount long adjustment; if (kbmEvent.getKeyDown() == Key.UP_ARROW) { adjustment = -TRACK_WIDGET_VERTICAL_ADJUSTMENT; } else if (kbmEvent.getKeyDown() == Key.DOWN_ARROW) { adjustment = TRACK_WIDGET_VERTICAL_ADJUSTMENT; } else { return null; } // Return the gesture return apolloSingle(ApolloGestureType.ADJUST_VERTICAL_POSITION, new TrackAdjustmentGestureData(adjustment)); } }); // Add the CTRL + SHIFT + F -> MOD_POSITION gesture recogniser addTranslator(new InputEventToGestureTranslator(InputType.KBM) { @Override public String details() { return "CTRL + SHIFT + F -> MOD_POSITION"; } @Override public List onInputEvent(InputEvent event) { // Cast to keyboard/mouse event KBMInputEvent kbmEvent = (KBMInputEvent) event; // Check that ctrl is down if (!StandardInputEventListeners.kbmStateListener.isKeyDown(Key.CTRL)) return null; // Check that shift is down if (!StandardInputEventListeners.kbmStateListener.isKeyDown(Key.SHIFT)) return null; // Check that F was pressed if (kbmEvent.getKeyDown() != Key.F) return null; // Return the gesture return apolloSingle(ApolloGestureType.MODULUS_POSITION, null); } }); // Add the CTRL + L -> CREATE_LINKED_TRACKS gesture recogniser addTranslator(new InputEventToGestureTranslator(InputType.KBM) { @Override public String details() { return "CTRL + L -> CREATE_LINKED_TRACKS"; } @Override public List onInputEvent(InputEvent event) { // Cast to keyboard/mouse event KBMInputEvent kbmEvent = (KBMInputEvent) event; // Check that ctrl is down if (!StandardInputEventListeners.kbmStateListener.isKeyDown(Key.CTRL)) return null; // Check that no Items are selected (Apollo uses widgets) if(FrameUtils.getCurrentItem() != null) return null; // Check that L was pressed if (kbmEvent.getKeyDown() != Key.L) return null; // Return the gesture boolean isShiftDown = StandardInputEventListeners.kbmStateListener.isKeyDown(Key.SHIFT); return apolloSingle(ApolloGestureType.CREATE_LINKED_TRACKS, new ItemSpecificGestureData(isShiftDown)); } }); // Add the CTRL + G -> TOGGLE_QUALITY_GRAPHICS gesture recogniser addTranslator(new InputEventToGestureTranslator(InputType.KBM) { @Override public String details() { return "CTRL + G -> TOGGLE_QUALITY_GRAPHICS"; } @Override public List onInputEvent(InputEvent event) { // Cast to keyboard/mouse event KBMInputEvent kbmEvent = (KBMInputEvent) event; // Check that ctrl is down if (!StandardInputEventListeners.kbmStateListener.isKeyDown(Key.CTRL)) return null; // Check that G was pressed if (kbmEvent.getKeyDown() != Key.G) return null; // Return the gesture return apolloSingle(ApolloGestureType.TOGGLE_QUALITY_GRAPHICS, null); } }); // Add the CTRL -> REFRESH gesture recogniser addTranslator(new InputEventToGestureTranslator(InputType.KBM) { @Override public String details() { return "CTRL -> REFRESH"; } @Override public List onInputEvent(InputEvent event) { // Cast to keyboard/mouse event KBMInputEvent kbmEvent = (KBMInputEvent) event; // Check that ctrl was pressed if (kbmEvent.getKeyDown() != Key.CTRL) return null; // Return the gesture return ExpediteeKBMGestureTranslator.standardSingle(StandardGestureType.REFRESH, new RefreshGestureData(false, false)); } }); } public boolean isKeyDown(Key key) { return StandardInputEventListeners.kbmStateListener.isKeyDown(key); } public boolean isMouseButtonDown(MouseButton button) { return StandardInputEventListeners.kbmStateListener.isMouseButtonDown(button); } public boolean isOnlyMouseButtonDown(MouseButton button) { return StandardInputEventListeners.kbmStateListener.isOnlyMouseButtonDown(button); } public boolean isAnyMouseButtonDown() { return StandardInputEventListeners.kbmStateListener.isAnyMouseButtonDown(); } /** Convenience function to create a single standard gesture. */ private List apolloSingle(ApolloGestureType type, GestureData data) { return Gesture.single(ApolloGestureActions.getInstance().gestureType(type), data); } }