From 68f08f012fc97a7a216920968c8d173af6f283a7 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Thu, 10 Dec 2020 02:23:10 +0100 Subject: [PATCH] implemented new function, that switches decoder functions --- pom.xml | 2 +- .../translations/Application.de.translation | 7 ++ .../srsoftware/web4rail/actions/Action.java | 1 + .../web4rail/actions/SwitchFunction.java | 111 ++++++++++++++++++ .../de/srsoftware/web4rail/moving/Train.java | 73 +++++++----- 5 files changed, 161 insertions(+), 33 deletions(-) create mode 100644 src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java diff --git a/pom.xml b/pom.xml index ef59396..74c2d3e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.2.36 + 1.2.37 Web4Rail jar Java Model Railway Control diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index d6b3046..0090a61 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -79,6 +79,7 @@ Determine, which train is in {} : Bestimmen, welcher Zug sich in {} befindet Direction : Richtung Direction\: heading {} : Richtung: nach {} disabled : deaktiviert +disable {} : {} deaktivieren Display "{}" on {}. : „{}“ auf {} anzeigen. Drop : Verwerfen Dropped destination of {}. : Ziel von {} verworfen. @@ -86,7 +87,10 @@ Dropped destination of {}. : Ziel von {} verworfen. EAST : Osten Editable properties : veränderliche Eigenschaften editable train properties : veränderliche Zug-Eigenschaften +Edit json : JSON bearbeiten +Effect : Effekt Emergency : Notfall +enable {} : {} aktivieren export : exportieren Faster (10 {}) : 10 {} schneller Firing {} : starte {} @@ -95,6 +99,7 @@ forward : vorwärts Found {} routes. : {} Routen gefunden. FreeStartBlock : Start-Block freigeben Fullscreen : Vollbild +Function : Funktion Hardware settings : Hardware-Einstellungen Height : Höhe Help : Hilfe @@ -210,6 +215,7 @@ Stop autopilot : Autopilot abschalten Stopsettings : Halte-Einstellungen Straight port\: : Port für gerade STRAIGHT : gerade +SwitchFunction : Funktion schalten Switch power off : Strom ausschalten Switch power on : Strom anschalten SYSTEM : Betriebssystem @@ -219,6 +225,7 @@ Text to show on display\: : Text, welcher in der Anzeige dargestellt werden soll Tile(s) : Kachel(n) Tile(s) moved. : Kachel(n) verschoben. Toggle : umschalten +toggle {} : {} umschalten Toggle power : Stom umschalten Train : Zug Train\: : Zug: diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java index ecf19fa..4707da9 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/Action.java +++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java @@ -62,6 +62,7 @@ public abstract class Action extends BaseClass { ShowText.class, StopAllTrains.class, StartStopAuto.class, + SwitchFunction.class, TriggerContact.class, TurnTrain.class ); diff --git a/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java b/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java new file mode 100644 index 0000000..b5d103f --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java @@ -0,0 +1,111 @@ +package de.srsoftware.web4rail.actions; + +import java.util.HashMap; +import java.util.List; + +import org.json.JSONObject; + +import de.srsoftware.tools.Tag; +import de.srsoftware.web4rail.BaseClass; +import de.srsoftware.web4rail.Window; +import de.srsoftware.web4rail.tags.Fieldset; +import de.srsoftware.web4rail.tags.Radio; +import de.srsoftware.web4rail.tags.Select; + +public class SwitchFunction extends Action { + + private static final String FUNCTION = "function"; + private static final String EFFECT = "effect"; + private static final int TOGGLE = -1; + private static final int ON = 1; + private static final int OFF = 0; + + private int function = 1,effect=-1; + + public SwitchFunction(BaseClass parent) { + super(parent); + } + + @Override + public boolean fire(Context context) { + if (isNull(context) || isNull(context.train())) return false; + switch (effect) { + case TOGGLE: + context.train().toggleFunction(function); + return true; + case ON: + context.train().setFunction(function, true); + return true; + case OFF: + context.train().setFunction(function, false); + return true; + } + + return false; + } + + @Override + public JSONObject json() { + JSONObject json = super.json(); + json.put(EFFECT, effect); + json.put(FUNCTION, function); + return json; + } + + @Override + public Action load(JSONObject json) { + super.load(json); + if (json.has(EFFECT)) effect = json.getInt(EFFECT); + if (json.has(FUNCTION)) function = json.getInt(FUNCTION); + return this; + } + + @Override + protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + + Select selector = new Select(FUNCTION); + for (int i=1; i<5;i++) { + Tag option = selector.addOption(i,t("F"+i)); + if (function == i) option.attr("selected", "selected"); + } + formInputs.add(t("Function"), selector); + + Tag radioGroup = new Tag("span"); + new Radio(EFFECT, TOGGLE, t("Toggle"), effect == TOGGLE).addTo(radioGroup); + new Radio(EFFECT, ON, t("On"), effect == ON).addTo(radioGroup); + new Radio(EFFECT, OFF, t("Off"), effect == OFF).addTo(radioGroup); + formInputs.add(t("Effect"),radioGroup); + + return super.properties(preForm, formInputs, postForm); + } + + @Override + public String toString() { + switch (effect) { + case TOGGLE: + return t("toggle {}","F"+function); + case ON: + return t("enable {}","F"+function); + case OFF: + return t("disable {}","F"+function); + } + return null; + } + + @Override + protected Object update(HashMap params) { + String fn = params.get(FUNCTION); + if (isSet(fn)) { + function = Integer.parseInt(fn); + if (function < 1 || function > 4) function = 1; + } + String effect = params.get(EFFECT); + if (isSet(effect)) switch (effect) { + case "1": + case "0": + case "-1": + this.effect = Integer.parseInt(effect); + } + return super.update(params); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 3ebfa12..e2b703b 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -172,37 +172,6 @@ public class Train extends BaseClass implements Comparable { return t("Unknown action: {}",params.get(ACTION)); } - 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); - } - for (Car car : cars) { - if (car instanceof Locomotive) { - Locomotive loco = (Locomotive) car; - loco.setFunction(f,active); - } - } - return properties(); - } - public void addToTrace(Vector newTiles) { boolean active = trace.isEmpty(); for (Tile tile : newTiles) { @@ -675,6 +644,32 @@ public class Train extends BaseClass implements Comparable { return t("{} is not a block!",tile); } + public Object setFunction(int num, boolean active) { + switch (num) { + case 1: + f1 = active; + break; + case 2: + f2 = active; + break; + case 3: + f3 = active; + break; + case 4: + f4 = active; + break; + default: + return t("Unknown function: {}",num); + } + for (Car car : cars) { + if (car instanceof Locomotive) { + Locomotive loco = (Locomotive) car; + loco.setFunction(num,active); + } + } + return properties(); + } + public void setSpeed(int newSpeed) { speed = Math.min(newSpeed,maxSpeed()); if (speed < 0) speed = 0; @@ -802,11 +797,25 @@ public class Train extends BaseClass implements Comparable { public SortedSet tags() { TreeSet list = new TreeSet(tags); - //for (Locomotive loco : locos) list.addAll(loco.tags()); for (Car car:cars) list.addAll(car.tags()); return list; } + + public Object toggleFunction(int f) { + switch (f) { + case 1: + return setFunction(1, !f1); + case 2: + return setFunction(2, !f2); + case 3: + return setFunction(3, !f3); + case 4: + return setFunction(4, !f4); + } + return t("Unknown function: {}",f); + } + @Override public String toString() { return name();