DasherJava / src / dasherJava / core / alphabets / actions / Action.java
Action.java
Raw
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;
		}
	}
}