diff --git a/pom.xml b/pom.xml
index 646abde..531daa9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.45
+ 1.2.46
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index fbdf1b2..840d496 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -100,6 +100,7 @@ export : exportieren
Faster (10 {}) : 10 {} schneller
Firing {} : starte {}
FinishRoute : Route abschließen
+For each {} do: Für jede(n) {}:
forward : vorwärts
Found {} routes. : {} Routen gefunden.
FreeStartBlock : Start-Block freigeben
@@ -111,6 +112,7 @@ Help : Hilfe
(id\: {}, length\: {}) : (Id: {}, Länge: {})
if ({})\: : falls ({}):
inverted : invertiert
+Inverts the direction {} is heading to. : Kehrt die Richtung, in welche {} fährt, um.
{} is oriented {} : {} ist {} gerichtet
known cars : bekannte Waggons
known locomotives : bekannte Lokomotiven
@@ -171,7 +173,7 @@ quit autopilot : Autopilot beenden
Relays and Turnouts : Relais und Weichen
Relay/Turnout : Relais/Weiche
Report Issue : Problem melden
-reverse : rückwärts
+reverse : wenden
Reversed {}. : {} umgedreht.
RIGHT : rechts
Right port\: : Port für rechts
@@ -272,6 +274,7 @@ TurnoutRW : WeicheRW
Turnouts : Weichen
TurnTrain : Fahrtrichtung umkehren
turn within train : innerhalb des Zugs drehen
+Turns the train, as if it went through a loop. : Dreht den ZUg, als wenn er eine Wendeschleife passiert hätte.
Unknown action\: {} : Unbekannte Aktion: {}
unset : ungesetzt
Wait {} ms, then\: : {} ms warten, dann:
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index 2bf859e..def87c1 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -265,7 +265,7 @@ public class Route extends BaseClass {
private Fieldset basicProperties() {
Fieldset fieldset = new Fieldset(t("Route properties"));
- if (isSet(train)) train.link("span",t("Train: {}",train)).addTo(fieldset);
+ if (isSet(train)) train.link("span",t("Train")+": "+train).addTo(fieldset);
Tag list = new Tag("ul");
Plan.addLink(startBlock, t("Origin: {} to {}",startBlock.name,startDirection), list);
Plan.addLink(endBlock, t("Destination: {} from {}",endBlock.name,endDirection.inverse()), list);
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java
index d32db45..a266065 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Car.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java
@@ -232,7 +232,7 @@ public class Car extends BaseClass implements Comparable{
formInputs.add(t("Tags"), new Input(TAGS,String.join(", ", tags)));
Tag div = new Tag("div");
new Input(MAX_SPEED, maxSpeedForward).numeric().addTo(new Tag("p")).content(NBSP+speedUnit+NBSP+t("forward")).addTo(div);
- new Input(MAX_SPEED_REVERSE, maxSpeedReverse).numeric().addTo(new Tag("p")).content(NBSP+speedUnit+NBSP+t("reverse")).addTo(div);
+ new Input(MAX_SPEED_REVERSE, maxSpeedReverse).numeric().addTo(new Tag("p")).content(NBSP+speedUnit+NBSP+t("backward")).addTo(div);
formInputs.add(t("Maximum Speed"),div);
Fieldset fieldset = new Fieldset(t("Train"));
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
index c21b79b..d7ec927 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
@@ -122,7 +122,7 @@ public class Locomotive extends Car implements Constants,Device{
}
params.put(ACTION, ACTION_TURN);
- new Button(t("Turn"),params).clazz(ACTION_TURN).addTo(direction);
+ new Button(t("Turn"),params).title(t("Inverts the direction {} is heading to.",locoOrTrain)).clazz(ACTION_TURN).addTo(direction);
if (isSet(train)) {
Block currentBlock = train.currentBlock();
@@ -147,8 +147,7 @@ public class Locomotive extends Car implements Constants,Device{
params.put(ACTION, e.getValue());
new Button(t(e.getKey()),params).addTo(functions);
});
- functions.addTo(fieldset);
-
+ functions.addTo(fieldset);
return fieldset;
}
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index 57482e0..43d6f58 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -71,6 +71,8 @@ public class Train extends BaseClass implements Comparable {
private static final String TAGS = "tags";
private static final String DESTINATION = "destination";
+
+ private static final String ACTION_REVERSE = "reverse";
private HashSet tags = new HashSet();
private boolean f1,f2,f3,f4;
@@ -134,7 +136,7 @@ public class Train extends BaseClass implements Comparable {
Id id = Id.from(params);
Train train = trains.get(id);
if (isNull(train)) return(t("No train with id {}!",id));
- switch (action) {
+ switch (action) {
case ACTION_ADD:
return train.addCar(params);
case ACTION_AUTO:
@@ -157,6 +159,8 @@ public class Train extends BaseClass implements Comparable {
return train.properties();
case ACTION_QUIT:
return train.quitAutopilot();
+ case ACTION_REVERSE:
+ return train.reverse();
case ACTION_SLOWER10:
return train.slower(10);
case ACTION_START:
@@ -501,7 +505,10 @@ public class Train extends BaseClass implements Comparable {
carList().addTo(propList);
if (isSet(currentBlock)) currentBlock.button(currentBlock.toString()).addTo(new Tag("li").content(t("Current location:")+NBSP)).addTo(propList);
- if (isSet(direction)) new Tag("li").content(t("Direction: heading {}",direction)).addTo(propList);
+ Tag directionLi = null;
+ if (isSet(direction)) directionLi = new Tag("li").content(t("Direction: heading {}",direction)+NBSP);
+ if (isNull(directionLi)) directionLi = new Tag("li");
+ button(t("reverse"), Map.of(ACTION,ACTION_REVERSE)).title(t("Turns the train, as if it went through a loop.")).addTo(directionLi).addTo(propList);
Tag dest = new Tag("li").content(t("Destination:")+NBSP);
if (isNull(destination)) {
@@ -584,6 +591,22 @@ public class Train extends BaseClass implements Comparable {
}
}
+ /**
+ * This turns the train as if it went through a loop. Example:
+ * before: CabCar→ MiddleCar→ Loco→
+ * after: ←Loco ←MiddleCar ←CabCar
+ */
+ private Tag reverse() {
+ LOG.debug("train.reverse();");
+
+ if (isSet(direction)) {
+ direction = direction.inverse();
+ reverseTrace();
+ }
+ if (isSet(currentBlock)) plan.place(currentBlock);
+ return properties();
+ }
+
private void reverseTrace() {
LinkedList reversed = new LinkedList();
LOG.debug("Trace: {}",trace);
@@ -808,17 +831,17 @@ public class Train extends BaseClass implements Comparable {
return name();
}
+ /**
+ * this inverts the direction the train is heading to. Example:
+ * before: CabCar→ MiddleCar→ Loco→
+ * after: ←CabCar ←MiddleCar ←Loco
+ * @return
+ */
public Tag turn() {
LOG.debug("train.turn()");
-
for (Car car : cars) car.turn();
Collections.reverse(cars);
- if (isSet(direction)) {
- direction = direction.inverse();
- reverseTrace();
- }
- if (isSet(currentBlock)) plan.place(currentBlock);
- return properties();
+ return reverse();
}
protected Train update(HashMap params) {