diff --git a/pom.xml b/pom.xml
index df49a3f..a3bcd53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.1.7
+ 1.1.8
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index 76e0ca9..c433ee6 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -93,6 +93,7 @@ Left port\: : Port für links
Length : Länge
length\: : Länge:
length\: {} : Länge: {}
+Length unit : Längeneinheit
Locomotive manager : Lok-Verwaltung
Locomotives\: : Lokomotiven:
Manage cars : Waggons verwalten
@@ -160,6 +161,7 @@ Signals : Signale
Simulating movement of {}... : Simuliere Fahrt von {}...
Slower (10 {}) : 10 {} langsamer
SOUTH : Süden
+Speed unit : Geschwindigkeits-Einheit
Start actions : Start-Aktionen
Stock ID : Inventarnummer
Started {} : {} gestartet
diff --git a/src/main/java/de/srsoftware/web4rail/BaseClass.java b/src/main/java/de/srsoftware/web4rail/BaseClass.java
index 445c8af..91ddf05 100644
--- a/src/main/java/de/srsoftware/web4rail/BaseClass.java
+++ b/src/main/java/de/srsoftware/web4rail/BaseClass.java
@@ -15,6 +15,7 @@ public abstract class BaseClass implements Constants{
protected static Plan plan; // the track layout in use
public static final Random random = new Random();
public static String speedUnit = DEFAULT_SPEED_UNIT;
+ public static String lengthUnit = DEFAULT_LENGTH_UNIT;
private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
public static Button contextButton(String context,String text) {
String[] parts = context.split(":");
diff --git a/src/main/java/de/srsoftware/web4rail/Constants.java b/src/main/java/de/srsoftware/web4rail/Constants.java
index b8a27b5..7205a50 100644
--- a/src/main/java/de/srsoftware/web4rail/Constants.java
+++ b/src/main/java/de/srsoftware/web4rail/Constants.java
@@ -52,6 +52,7 @@ public interface Constants {
public static final String CONTACT = "contact";
public static final String CONTEXT = "context";
public static final String DEFAULT_SPEED_UNIT = "km/h";
+ public static final String DEFAULT_LENGTH_UNIT = "mm";
public static final String DISABLED = "disabled";
public static final String GITHUB_URL = "https://github.com/srsoftware-de/Web4Rail";
public static final String ID = "id";
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index 5681802..d22c9a2 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -131,6 +131,7 @@ public class Plan extends BaseClass{
private static final HashMap clients = new HashMap();
private static final String FULLSCREEN = "fullscreen";
private static final String SPEED_UNIT = "speed_unit";
+ private static final String LENGTH_UNIT = "length_unit";
public HashMap tiles = new HashMap(); // The list of tiles of this plan, i.e. the Track layout
private HashSet blocks = new HashSet(); // the list of tiles, that are blocks
@@ -419,9 +420,9 @@ public class Plan extends BaseClass{
String content = new String(Files.readAllBytes(new File(filename+".plan").toPath()),UTF8);
JSONObject json = new JSONObject(content);
- JSONArray jTiles = json.getJSONArray(TILE);
- jTiles.forEach(object -> Tile.load(object, plan));
- speedUnit = json.getString(SPEED_UNIT);
+ if (json.has(TILE)) json.getJSONArray(TILE).forEach(object -> Tile.load(object, plan));
+ if (json.has(LENGTH_UNIT)) lengthUnit = json.getString(LENGTH_UNIT);
+ if (json.has(SPEED_UNIT)) speedUnit = json.getString(SPEED_UNIT);
try {
Train.loadAll(filename+".trains",plan);
@@ -603,6 +604,7 @@ public class Plan extends BaseClass{
Form form = new Form("plan-properties-form");
new Input(REALM,REALM_PLAN).hideIn(form);
new Input(ACTION,ACTION_UPDATE).hideIn(form);
+ new Input(LENGTH_UNIT, lengthUnit).addTo(new Label(t("Length unit")+":"+NBSP)).addTo(form);
new Input(SPEED_UNIT, speedUnit).addTo(new Label(t("Speed unit")+":"+NBSP)).addTo(form);
new Button(t("Save"), form).addTo(form);
form.addTo(win);
@@ -708,7 +710,8 @@ public class Plan extends BaseClass{
return new JSONObject()
.put(TILE, jTiles)
- .put(SPEED_UNIT, speedUnit);
+ .put(SPEED_UNIT, speedUnit)
+ .put(LENGTH_UNIT, lengthUnit);
}
/**
@@ -894,6 +897,7 @@ public class Plan extends BaseClass{
Tile tile = get(params.get(ID),true);
if (isSet(tile)) return tile.update(params);
+ if (params.containsKey(LENGTH_UNIT)) lengthUnit = params.get(LENGTH_UNIT);
if (params.containsKey(SPEED_UNIT)) speedUnit = params.get(SPEED_UNIT);
return t("Plan updated.");
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java
index 5771a84..4283a5e 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Car.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java
@@ -180,7 +180,7 @@ public class Car extends BaseClass implements Comparable{
car.stockId,
car.link(),
car.maxSpeed == 0 ? "–":(car.maxSpeed+NBSP+speedUnit),
- car.length,
+ car.length+NBSP+lengthUnit,
String.join(", ", car.tags()),
car.cloneButton()
));
@@ -221,7 +221,7 @@ public class Car extends BaseClass implements Comparable{
Fieldset fieldset = new Fieldset("Basic properties");
new Input(NAME,name).addTo(new Label(t("Name")+NBSP)).addTo(fieldset);
new Input(STOCK_ID,stockId).addTo(new Label(t("Stock ID")+NBSP)).addTo(fieldset);
- new Input(LENGTH,length).attr("type", "number").addTo(new Label(t("Length")+NBSP)).addTo(fieldset);
+ new Input(LENGTH,length).attr("type", "number").addTo(new Label(t("Length")+NBSP)).content(NBSP+lengthUnit).addTo(fieldset);
new Input(TAGS,String.join(", ", tags)).addTo(new Label(t("Tags")+NBSP)).addTo(fieldset);
new Input(MAX_SPEED, maxSpeed).numeric().addTo(new Label(t("Maximum speed")+":"+NBSP)).content(NBSP+speedUnit).addTo(fieldset);
fieldset.addTo(form);
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
index 60ad891..060d05e 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
@@ -239,7 +239,7 @@ public class Locomotive extends Car implements Constants,Device{
.map(car -> (Locomotive)car)
.sorted(Comparator.comparing(loco -> loco.address))
.sorted(Comparator.comparing(loco -> loco.stockId))
- .forEach(loco -> table.addRow(loco.stockId,loco.link(),loco.maxSpeed == 0 ? "–":loco.maxSpeed+NBSP+speedUnit,loco.proto,loco.address,loco.length,String.join(", ", loco.tags())));
+ .forEach(loco -> table.addRow(loco.stockId,loco.link(),loco.maxSpeed == 0 ? "–":loco.maxSpeed+NBSP+speedUnit,loco.proto,loco.address,loco.length+NBSP+lengthUnit,String.join(", ", loco.tags())));
table.addTo(win);
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index 5286272..28c22ff 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -458,7 +458,7 @@ public class Train extends BaseClass implements Comparable {
int ms = train.maxSpeed();
table.addRow(
train.link(),
- train.length(),
+ train.length()+NBSP+lengthUnit,
ms == Integer.MAX_VALUE ? "–" : ms+NBSP+speedUnit,
String.join(", ", train.tags()),
train.route,
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
index 99b0c29..b953ad7 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
@@ -241,7 +241,7 @@ public abstract class Tile extends BaseClass{
Form form = propForm("tile-properties-"+id());
if (isTrack) {
new Tag("h4").content(t("Length")).addTo(form);
- new Input(LENGTH,length).numeric().addTo(new Label(t("Length")+":"+NBSP)).addTo(form);
+ new Input(LENGTH,length).numeric().addTo(new Label(t("Length")+":"+NBSP)).content(NBSP+lengthUnit).addTo(form);
new Tag("h4").content(t("Availability")).addTo(form);
Checkbox cb = new Checkbox(DISABLED, t("disabled"), disabled);
if (disabled) cb.clazz("disabled");