package uraxis.programnodes; import com.ur.urcap.api.contribution.ProgramNodeContribution; import com.ur.urcap.api.contribution.program.ProgramAPIProvider; import com.ur.urcap.api.domain.ProgramAPI; import com.ur.urcap.api.domain.data.DataModel; import com.ur.urcap.api.domain.script.ScriptWriter; import com.ur.urcap.api.domain.undoredo.UndoRedoManager; import com.ur.urcap.api.domain.userinteraction.keyboard.KeyboardInputCallback; import com.ur.urcap.api.domain.userinteraction.keyboard.KeyboardInputFactory; import com.ur.urcap.api.domain.userinteraction.keyboard.KeyboardNumberInput; import uraxis.MyDaemonInstallationNodeContribution; import java.awt.*; import java.util.Timer; import java.util.TimerTask; public class FestoNodeContribution implements ProgramNodeContribution { private final String POSITION="POSITION"; private final String SPEED="SPEED"; private final ProgramAPI programAPI; private final UndoRedoManager undoRedoManager; private final KeyboardInputFactory keyboardFactory; private final FestoNodeView view; private final DataModel model; private final NodeType nodeType; public FestoNodeContribution(ProgramAPIProvider apiProvider, FestoNodeView view, DataModel model, NodeType nt) { this.programAPI = apiProvider.getProgramAPI(); this.undoRedoManager = apiProvider.getProgramAPI().getUndoRedoManager(); this.keyboardFactory = apiProvider.getUserInterfaceAPI().getUserInteraction().getKeyboardInputFactory(); this.view = view; this.model = model; this.nodeType=nt; } @Override public void openView() { view.setPosition(model.get(POSITION, 0)); view.setSpeed(model.get(SPEED, 20)); } @Override public void closeView() { model.set(POSITION, view.getPosition()); model.set(SPEED, view.getSpeed()); } @Override public String getTitle() { return "Festo "+ nodeType.name(); } public int getPosition() { return model.get(POSITION,0); } public int getSpeed() { return model.get(SPEED,20); } @Override public void generateScript(ScriptWriter writer) { if(nodeType==NodeType.ABS) { writer.appendLine(getInstallation().getXMLRPCVariable() + ".abs(\"" + getPosition() + "\", \""+ getSpeed() +"\")"); writer.appendLine("write_output_integer_register(3,"+ getPosition()+")"); } else { writer.appendLine(getInstallation().getXMLRPCVariable() + ".rel(\"" + getPosition() + "\", \""+ getSpeed() +"\")"); writer.appendLine("write_output_integer_register(3," + getPosition() + ")"); } writer.writeChildren(); } public KeyboardNumberInput getKeyboardForPositionField() { KeyboardNumberInput keyboardInput = keyboardFactory.createIntegerKeypadInput(); keyboardInput.setInitialValue(model.get(POSITION, 0)); return keyboardInput; } public KeyboardInputCallback getCallbackForPositionField() { return new KeyboardInputCallback() { @Override public void onOk(Integer value) { model.set(POSITION, value); view.setPosition(value); } }; } public KeyboardNumberInput getKeyboardForSpeedField() { KeyboardNumberInput keyboardInput = keyboardFactory.createIntegerKeypadInput(); keyboardInput.setInitialValue(model.get(SPEED, 0)); return keyboardInput; } public KeyboardInputCallback getCallbackForSpeedField() { return new KeyboardInputCallback() { @Override public void onOk(Integer value) { model.set(SPEED, value); view.setSpeed(value); } }; } private MyDaemonInstallationNodeContribution getInstallation() { return programAPI.getInstallationNode(MyDaemonInstallationNodeContribution.class); } @Override public boolean isDefined() { return true; } }