package dasherJava.core.alphabets.actions; import dasherJava.DasherJava; import dasherJava.core.output.AccessibilityInterface; import dasherJava.core.output.KeyboardOutput; import dasherJava.core.output.PauseDasherTarget; import dasherJava.core.output.SocketOutput; import dasherJava.core.output.TextCharOutput; import dasherJava.core.output.TextCharOutput.TextRange; import dasherJava.core.output.TextCharOutput.TextTarget; public interface Action { static void doAction(Action action) { //System.out.println("Do Action "+action); if (action instanceof TextCharAction) { TextCharAction textCharAction = (TextCharAction) action; TextCharOutput textCharOutput = DasherJava.getTextCharOutput(); if (textCharOutput!=null) textCharOutput.outputChar(textCharAction.getUnicode()); } else if (action instanceof DeleteTextAction) { DeleteTextAction deleteTextAction = (DeleteTextAction) action; TextCharOutput textCharOutput = DasherJava.getTextCharOutput(); if (textCharOutput!=null) textCharOutput.deleteText(deleteTextAction.getRange()); } else if (action instanceof MoveTextCaretAction) { MoveTextCaretAction moveTextCaretAction = (MoveTextCaretAction) action; TextCharOutput textCharOutput = DasherJava.getTextCharOutput(); if (textCharOutput!=null) textCharOutput.moveTextCaret(moveTextCaretAction.getTarget()); } else if (action instanceof PauseDasherAction) { PauseDasherAction pauseDasherAction = (PauseDasherAction) action; PauseDasherTarget pauseDasherTarget = DasherJava.getPauseDasherTarget(); if (pauseDasherTarget!=null) pauseDasherTarget.pauseForTime(pauseDasherAction.getTime()); } else if (action instanceof ChangeAlphabetAction) { ChangeAlphabetAction changeAlphabetAction = (ChangeAlphabetAction) action; DasherJava.changeAlphabet(changeAlphabetAction.getAlphabetName()); } else if (action instanceof KeyboardAction) { KeyboardAction keyboardAction = (KeyboardAction) action; KeyboardOutput keyboardOutput = DasherJava.getKeyboardOutput(); if (keyboardOutput!=null) { if (keyboardAction.getPress()>=0) keyboardOutput.pressKey(keyboardAction.getPress()); if (keyboardAction.getKey()>=0) keyboardOutput.typeKey(keyboardAction.getKey()); if (keyboardAction.getRelease()>=0) keyboardOutput.releaseKey(keyboardAction.getRelease()); } } else if (action instanceof AccessibilityAction) { AccessibilityAction accessibilityAction = (AccessibilityAction) action; AccessibilityInterface accessibilityInterface = DasherJava.getAccessibilityInterface(); String s = accessibilityAction.getDoAction(); if (s!=null && accessibilityInterface!=null) accessibilityInterface.doAction(s); } else if (action instanceof SocketOutputAction) { SocketOutputAction socketOutputAction = (SocketOutputAction) action; SocketOutput socketOutput = DasherJava.getSocketOutput(); String s = socketOutputAction.getDoString(); if (s!=null && socketOutput!=null) socketOutput.sendString(s, socketOutputAction.isSuppressNewline()); } } static void undoAction(Action action) { //System.out.println("Undo Action "+action); if (action instanceof TextCharAction) { TextCharOutput textCharOutput = DasherJava.getTextCharOutput(); if (textCharOutput!=null) textCharOutput.deleteLastChar(); } else if (action instanceof KeyboardAction) { KeyboardAction keyboardAction = (KeyboardAction) action; KeyboardOutput keyboardOutput = DasherJava.getKeyboardOutput(); if (keyboardOutput!=null) { if (keyboardAction.getUndoPress()>=0) keyboardOutput.pressKey(keyboardAction.getUndoPress()); if (keyboardAction.getUndoKey()>=0) keyboardOutput.typeKey(keyboardAction.getUndoKey()); if (keyboardAction.getUndoRelease()>=0) keyboardOutput.releaseKey(keyboardAction.getUndoRelease()); } } else if (action instanceof AccessibilityAction) { AccessibilityAction accessibilityAction = (AccessibilityAction) action; AccessibilityInterface accessibilityInterface = DasherJava.getAccessibilityInterface(); String s = accessibilityAction.getUndoAction(); if (s!=null && accessibilityInterface!=null) accessibilityInterface.doAction(s); } else if (action instanceof SocketOutputAction) { SocketOutputAction socketOutputAction = (SocketOutputAction) action; SocketOutput socketOutput = DasherJava.getSocketOutput(); String s = socketOutputAction.getUndoString(); if (s!=null && socketOutput!=null) socketOutput.sendString(s, socketOutputAction.isSuppressNewline()); } } class TextCharAction implements Action { private final int unicode; public TextCharAction(int unicode) { this.unicode=unicode; } public int getUnicode() { return unicode; } } class DeleteTextAction implements Action { private final TextRange range; public DeleteTextAction(TextRange range) { this.range=range; } public TextRange getRange() { return range; } } class MoveTextCaretAction implements Action { private final TextTarget target; public MoveTextCaretAction(TextTarget target) { this.target=target; } public TextTarget getTarget() { return target; } } class PauseDasherAction implements Action { private final int time; //in milliseconds, or forever if negative public PauseDasherAction(int time) { this.time=time; } public int getTime() { return time; } } class ChangeAlphabetAction implements Action { private final String alphabetName; public ChangeAlphabetAction(String alphabetName) { this.alphabetName=alphabetName; } public String getAlphabetName() { return alphabetName; } } class KeyboardAction implements Action { private final int press; //Java virtual keycode, none if negative private final int key; //Java virtual keycode, none if negative private final int release; //Java virtual keycode, none if negative private final int undoPress; //Java virtual keycode, none if negative private final int undoKey; //Java virtual keycode, none if negative private final int undoRelease; //Java virtual keycode, none if negative public KeyboardAction(int press, int key, int release, int undoPress, int undoKey, int undoRelease) { this.press=press; this.key=key; this.release=release; this.undoPress=undoPress; this.undoKey=undoKey; this.undoRelease=undoRelease; } public int getPress() { return press; } public int getKey() { return key; } public int getRelease() { return release; } public int getUndoPress() { return undoPress; } public int getUndoKey() { return undoKey; } public int getUndoRelease() { return undoRelease; } } class AccessibilityAction implements Action { private final String doAction; private final String undoAction; public AccessibilityAction(String doAction, String undoAction) { this.doAction=doAction; this.undoAction=undoAction; } public String getDoAction() { return doAction; } public String getUndoAction() { return undoAction; } } class SocketOutputAction implements Action { private final String doString; private final String undoString; private final boolean suppressNewline; public SocketOutputAction(String doString, String undoString, boolean suppressNewline) { this.doString=doString; this.undoString=undoString; this.suppressNewline=suppressNewline; } public String getDoString() { return doString; } public String getUndoString() { return undoString; } public boolean isSuppressNewline() { return suppressNewline; } } }