package com.himamis.retex.editor.share.controller; import com.himamis.retex.editor.share.event.KeyEvent; public class KeyListenerImpl { private EditorState editorState; private CursorController cursorController; private InputController inputController; public KeyListenerImpl(CursorController cursorController, InputController inputController) { this.cursorController = cursorController; this.inputController = inputController; } public void setEditorState(EditorState editorState) { this.editorState = editorState; } public boolean onKeyPressed(KeyEvent keyEvent) { switch (keyEvent.getKeyCode()) { case KeyEvent.VK_A: if ((keyEvent.getKeyModifiers() & KeyEvent.CTRL_MASK) > 0) { editorState.selectAll(); return true; } return false; case KeyEvent.VK_V: if ((keyEvent.getKeyModifiers() & KeyEvent.CTRL_MASK) > 0) { inputController.paste(); return inputController.getMathField().useCustomPaste(); } return false; case KeyEvent.VK_C: if ((keyEvent.getKeyModifiers() & KeyEvent.CTRL_MASK) > 0) { inputController.copy(); return true; } return false; case KeyEvent.VK_X: if ((keyEvent.getKeyModifiers() & KeyEvent.CTRL_MASK) > 0) { inputController.copy(); InputController.deleteSelection(editorState); return true; } return false; case KeyEvent.VK_ESCAPE: inputController.escSymbol(editorState); return true; case KeyEvent.VK_HOME: CursorController.firstField(editorState); return true; case KeyEvent.VK_END: CursorController.lastField(editorState); return true; case KeyEvent.VK_LEFT: cursorController.prevCharacter(editorState); if ((keyEvent.getKeyModifiers() & KeyEvent.SHIFT_MASK) > 0) { editorState.extendSelection(true); } else { editorState.resetSelection(); } return true; case KeyEvent.VK_RIGHT: if (InputController.trySelectNext(editorState)) { return true; } cursorController.nextCharacter(editorState); if ((keyEvent.getKeyModifiers() & KeyEvent.SHIFT_MASK) > 0) { editorState.extendSelection(false); } else { editorState.resetSelection(); } return true; case KeyEvent.VK_UP: cursorController.upField(editorState); return true; case KeyEvent.VK_DOWN: cursorController.downField(editorState); return true; case KeyEvent.VK_DELETE: if (!InputController.deleteSelection(editorState)) { inputController.delCharacter(editorState); } return true; case KeyEvent.VK_BACK_SPACE: if (!InputController.deleteSelection(editorState)) { inputController.bkspCharacter(editorState); } return true; case KeyEvent.VK_SHIFT: return false; case KeyEvent.VK_OPEN_BRACKET: case KeyEvent.VK_OPEN_PAREN: return false; case KeyEvent.VK_TAB: if (!InputController.trySelectNext(editorState)) { InputController.trySelectFirst(editorState); } return true; default: // InputController.deleteSelection(editorState); return false; } } public boolean onKeyTyped(char ch) { return inputController.handleChar(editorState, ch); } }