From 6acbb9769b2c4950bbd12e49b988ef5b0b6b9e5e Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Mon, 19 Oct 2020 18:07:08 +0200 Subject: [PATCH] implemented locomotive functions --- resources/js/plan.js | 2 +- .../de/srsoftware/web4rail/Application.java | 2 +- .../de/srsoftware/web4rail/Constants.java | 7 +- .../de/srsoftware/web4rail/ControlUnit.java | 2 + .../de/srsoftware/web4rail/moving/Car.java | 4 +- .../web4rail/moving/Locomotive.java | 71 +++++++++++++++++-- .../de/srsoftware/web4rail/tags/Input.java | 4 +- 7 files changed, 78 insertions(+), 14 deletions(-) diff --git a/resources/js/plan.js b/resources/js/plan.js index 3ad40e9..9bc77ba 100644 --- a/resources/js/plan.js +++ b/resources/js/plan.js @@ -156,7 +156,7 @@ function request(data){ method : POST, data : data, success: function(resp){ - if (data.realm != 'car') closeWindows(); + if (data.realm != 'car' && data.realm != 'loco') closeWindows(); if (resp.startsWith(' params) throws IOException { + public static Object action(HashMap params, Plan plan) throws IOException { String id = params.get(ID); Locomotive loco = id == null ? null : Locomotive.get(id); switch (params.get(ACTION)) { case ACTION_ADD: - return new Locomotive(params.get(Locomotive.NAME)); + return new Locomotive(params.get(Locomotive.NAME)).plan(plan); case ACTION_FASTER10: return loco.faster(10); case ACTION_PROPS: @@ -50,6 +53,14 @@ public class Locomotive extends Car implements Constants,Device{ return loco.faster(-10); case ACTION_STOP: return loco.stop(); + case ACTION_TOGGLE_F1: + return loco.toggleFunction(1); + case ACTION_TOGGLE_F2: + return loco.toggleFunction(2); + case ACTION_TOGGLE_F3: + return loco.toggleFunction(3); + case ACTION_TOGGLE_F4: + return loco.toggleFunction(4); case ACTION_TURN: return loco.turn(); } @@ -57,16 +68,53 @@ public class Locomotive extends Car implements Constants,Device{ return t("Unknown action: {}",params.get(ACTION)); } - protected Tag cockpit(String realm) { + private Object toggleFunction(int f) { + boolean active; + switch (f) { + case 1: + f1 =! f1; + active = f1; + break; + case 2: + f2 =! f2; + active = f2; + break; + case 3: + f3 =! f3; + active = f3; + break; + case 4: + f4 =! f4; + active = f4; + break; + default: + return t("Unknown function: {}",f); + } + queue(); + return t("{} F{}",t(active?"Activated":"Deavtivated"),f); + } + + protected Tag cockpit() { Fieldset fieldset = new Fieldset(t("Control")); - String request = "return request({realm:'"+realm+"',id:"+id()+",action:'{}'})"; - new Button(t("Turn"), request.replace("{}", ACTION_TURN)) .addTo(fieldset); + String request = "return request({realm:'"+REALM_LOCO+"',id:"+id()+",action:'{}'})"; + new Button(t("Turn"), request.replace("{}", ACTION_TURN)).addTo(fieldset); new Button(t("Faster (10 steps)"), request.replace("{}", ACTION_FASTER10)).addTo(fieldset); new Button(t("Slower (10 steps)"), request.replace("{}", ACTION_SLOWER10)).addTo(fieldset); new Button(t("Stop"), request.replace("{}", ACTION_STOP)).addTo(fieldset); + Tag span = new Tag("p"); + new Button(t("F1"),request.replace("{}", ACTION_TOGGLE_F1)).addTo(span); + new Button(t("F2"),request.replace("{}", ACTION_TOGGLE_F2)).addTo(span); + new Button(t("F3"),request.replace("{}", ACTION_TOGGLE_F3)).addTo(span); + new Button(t("F4"),request.replace("{}", ACTION_TOGGLE_F4)).addTo(span); + span.addTo(fieldset); return fieldset; } + private String detail() { + return getClass().getSimpleName()+"("+name()+", "+proto+", "+address+")"; + } + + public Object faster(int steps) { return setSpeed(speed + steps); } @@ -160,6 +208,12 @@ public class Locomotive extends Car implements Constants,Device{ @Override public Tag propertyForm() { Tag form = super.propertyForm(); + for (Tag tag : form.children()) { + if (REALM.equals(tag.get(Input.NAME)) && REALM_CAR.equals(tag.get(Input.VALUE))) { + tag.attr(REALM, REALM_LOCO); + break; + } + } Fieldset fieldset = new Fieldset("Decoder settings"); Label protocol = new Label(t("Protocol:")); for (Protocol proto : Protocol.values()) { @@ -170,14 +224,19 @@ public class Locomotive extends Car implements Constants,Device{ fieldset.addTo(form); return form; } + + private void queue() { + plan.queue("SET {} GL "+address+" "+(reverse?1:0)+" "+speed+" "+VMAX+" "+(f1?1:0)+" "+(f2?1:0)+" "+(f3?1:0)+" "+(f4?1:0)); + } public String setSpeed(int newSpeed) { + LOG.debug(this.detail()+".setSpeed({})",newSpeed); init(); speed = newSpeed; if (speed > 128) speed = 128; if (speed < 0) speed = 0; - plan.queue("SET {} GL "+address+" "+(reverse?1:0)+" "+speed+" 128 0 0 0 0 0"); + queue(); return t("Speed of {} set to {}.",this,speed); } diff --git a/src/main/java/de/srsoftware/web4rail/tags/Input.java b/src/main/java/de/srsoftware/web4rail/tags/Input.java index 1d6331a..99303db 100644 --- a/src/main/java/de/srsoftware/web4rail/tags/Input.java +++ b/src/main/java/de/srsoftware/web4rail/tags/Input.java @@ -5,6 +5,8 @@ import de.srsoftware.tools.Tag; public class Input extends Tag{ private static final long serialVersionUID = -330127933233033028L; + public static final String NAME = "name"; + public static final String VALUE = "value"; public Input(String name) { super("input"); @@ -13,7 +15,7 @@ public class Input extends Tag{ public Input(String name, Object value) { super("input"); - attr("type","text").attr("name", name).attr("value", value.toString()); + attr("type","text").attr(NAME, name).attr(VALUE, value.toString()); } public Tag hideIn(Tag form) {