implemented new function, that switches decoder functions

This commit is contained in:
Stephan Richter
2020-12-10 02:23:10 +01:00
parent d32f9562a8
commit 68f08f012f
5 changed files with 161 additions and 33 deletions

View File

@@ -62,6 +62,7 @@ public abstract class Action extends BaseClass {
ShowText.class,
StopAllTrains.class,
StartStopAuto.class,
SwitchFunction.class,
TriggerContact.class,
TurnTrain.class
);

View File

@@ -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<Fieldset> preForm, FormInput formInputs, List<Fieldset> 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<String, String> 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);
}
}

View File

@@ -172,37 +172,6 @@ public class Train extends BaseClass implements Comparable<Train> {
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<Tile> newTiles) {
boolean active = trace.isEmpty();
for (Tile tile : newTiles) {
@@ -675,6 +644,32 @@ public class Train extends BaseClass implements Comparable<Train> {
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<Train> {
public SortedSet<String> tags() {
TreeSet<String> list = new TreeSet<String>(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();