diff --git a/pom.xml b/pom.xml
index c4baaa8..8e66684 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.4.0
+ 0.4.1
Web4Rail
Java Model Railway Control
https://github.com/StephanRichter/Web4Rail
diff --git a/resources/css/style.css b/resources/css/style.css
index 4b833ef..236acb7 100644
--- a/resources/css/style.css
+++ b/resources/css/style.css
@@ -30,6 +30,10 @@ body{
height: 60px !important;
}
+label{
+ display: flex;
+}
+
svg circle,
svg line,
svg polygon,
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index e24ab06..86df724 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -111,6 +111,7 @@ public class Plan {
private static final String ACTION_CAR = "car";
public static final String ACTION_ADD_LOCO = "addLoco";
public static final String ACTION_ADD_TRAIN = "addTrain";
+ public static final String ACTION_UPDATE_CAR = "updateCar";
public HashMap tiles = new HashMap();
private HashSet blocks = new HashSet();
@@ -172,10 +173,19 @@ public class Plan {
return blocks;
}
- private Object carAction(HashMap params) {
+ private Object carAction(HashMap params) throws IOException {
+
Car car = Car.get(params.get(Car.ID));
if (car == null) return t("No car with id {} found!",params.get(Car.ID));
- return car.properties();
+
+ switch (params.get(ACTION)) {
+ case ACTION_CAR:
+ return car.properties();
+ case ACTION_UPDATE_CAR:
+ car.update(params);
+ break;
+ }
+ return html();
}
private Object click(Tile tile) throws IOException {
@@ -375,6 +385,7 @@ public class Plan {
case ACTION_TRAIN:
return trainAction(params);
case ACTION_CAR:
+ case ACTION_UPDATE_CAR:
return carAction(params);
case ACTION_CLICK:
return click(get(params.get(Tile.ID),true));
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java
index f8b3e13..e2875b1 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Car.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java
@@ -10,21 +10,34 @@ import java.util.HashMap;
import java.util.Map.Entry;
import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import de.keawe.tools.translations.Translation;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Application;
+import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Window;
+import de.srsoftware.web4rail.tags.Button;
+import de.srsoftware.web4rail.tags.Fieldset;
+import de.srsoftware.web4rail.tags.Form;
+import de.srsoftware.web4rail.tags.Input;
+import de.srsoftware.web4rail.tags.Label;
public class Car {
+ protected static final Logger LOG = LoggerFactory.getLogger(Car.class);
+ static HashMap cars = new HashMap();
+
public static final String ID = "id";
public static final String NAME = "name";
private static final String LENGTH = "length";
private static final String SHOW = "show";
- static HashMap cars = new HashMap();
- public int length;
- private String name;
+ private static final String STOCK_ID = "stock-id";
+
private String id;
+ private String name;
+ public int length;
+ private String stockId = "";
private Train train;
public Car(String name) {
@@ -63,6 +76,7 @@ public class Car {
json.put(ID,id);
json.put(NAME, name);
json.put(LENGTH, length);
+ json.put(STOCK_ID, stockId);
return json;
}
@@ -89,14 +103,36 @@ public class Car {
protected void load(JSONObject json) {
if (json.has(ID)) id = json.getString(ID);
if (json.has(LENGTH)) length = json.getInt(LENGTH);
+ if (json.has(STOCK_ID)) stockId = json.getString(STOCK_ID);
}
String name(){
return name;
}
+ public Tag propertyForm() {
+ Form form = new Form();
+ new Input("action", Plan.ACTION_UPDATE_CAR).hideIn(form);
+ new Input(ID,id()).hideIn(form);
+ Fieldset fieldset = new Fieldset("Basic properties");
+ new Input(NAME,name).addTo(new Label(t("Name"))).addTo(fieldset);
+ new Input(STOCK_ID,stockId).addTo(new Label(t("Stock ID"))).addTo(fieldset);
+ new Input(LENGTH,length).attr("type", "number").addTo(new Label(t("Length"))).addTo(fieldset);
+ fieldset.addTo(form);
+ return form;
+ }
+
public Object properties() {
Window win = new Window("car-props", t("Properties of {}",this));
+
+ Tag form = propertyForm();
+ if (form!=null && form.children().size()>2) {
+ new Button(t("save")).addTo(form);
+ form.addTo(win);
+ } else {
+ win.content(t("This tile ({}) has no editable properties",getClass().getSimpleName()));
+ }
+
Tag list = new Tag("ul");
if (train != null) {
train.link("span").addTo(new Tag("li").content(t("Train:")+" ")).addTo(list);
@@ -126,4 +162,11 @@ public class Car {
public void train(Train train) {
this.train = train;
}
+
+ public Object update(HashMap params) {
+ if (params.containsKey(NAME)) name = params.get(NAME);
+ if (params.containsKey(STOCK_ID)) stockId = params.get(STOCK_ID);
+ if (params.containsKey(LENGTH)) length = Integer.parseInt(params.get(LENGTH));
+ return null;
+ }
}
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
index 925476b..b894625 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
@@ -1,5 +1,6 @@
package de.srsoftware.web4rail.moving;
+import java.util.HashMap;
import java.util.Vector;
import org.json.JSONObject;
@@ -12,12 +13,21 @@ import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
+import de.srsoftware.web4rail.tags.Radio;
public class Locomotive extends Car {
+ public enum Protocol{
+ DCC14,DCC27,DCC28,DCC128,MOTO;
+ }
+
private static final String REVERSE = "reverse";
public static final String LOCOMOTIVE = "locomotive";
+ private static final String PROTOCOL = "protocol";
+ private static final String ADDRESS = "address";
private boolean reverse = false;
+ private Protocol proto = Protocol.DCC128;
+ private int address = 3;
public Locomotive(String name) {
super(name);
@@ -32,6 +42,9 @@ public class Locomotive extends Car {
JSONObject json = super.json();
JSONObject loco = new JSONObject();
loco.put(REVERSE, reverse);
+ loco.put(PROTOCOL, proto);
+ loco.put(ADDRESS, address);
+
json.put(LOCOMOTIVE, loco);
return json;
}
@@ -47,13 +60,13 @@ public class Locomotive extends Car {
@Override
protected void load(JSONObject json) {
super.load(json);
- if (json.has(REVERSE)) reverse = json.getBoolean(REVERSE);
- }
-
- public void setSpeed(int v) {
- // TODO Auto-generated method stub
-
- }
+ if (json.has(LOCOMOTIVE)) {
+ JSONObject loco = json.getJSONObject(LOCOMOTIVE);
+ if (loco.has(REVERSE)) reverse = loco.getBoolean(REVERSE);
+ if (loco.has(PROTOCOL)) proto = Protocol.valueOf(loco.getString(PROTOCOL));
+ if (loco.has(ADDRESS)) address = loco.getInt(ADDRESS);
+ }
+ }
public static Object manager() {
Window win = new Window("loco-manager", t("Locomotive manager"));
@@ -75,5 +88,31 @@ public class Locomotive extends Car {
fieldset.addTo(form).addTo(win);
return win;
}
+
+ @Override
+ public Tag propertyForm() {
+ Tag form = super.propertyForm();
+ Fieldset fieldset = new Fieldset("Decoder settings");
+ Label protocol = new Label(t("Protocol:"));
+ for (Protocol proto : Protocol.values()) {
+ new Radio(PROTOCOL, proto.toString(), t(proto.toString()), proto == this.proto).addTo(protocol);
+ }
+ protocol.addTo(fieldset);
+ new Input(ADDRESS, address).attr("type", "number").addTo(new Label(t("Address:"))).addTo(fieldset);
+ fieldset.addTo(form);
+ return form;
+ }
+ public void setSpeed(int v) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Object update(HashMap params) {
+ super.update(params);
+ if (params.containsKey(PROTOCOL)) proto = Protocol.valueOf(params.get(PROTOCOL));
+ if (params.containsKey(ADDRESS)) address = Integer.parseInt(params.get(ADDRESS));
+ return t("Updated locomotive.");
+ }
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
index 819ed3a..a8e4f43 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
@@ -200,7 +200,7 @@ public abstract class Tile {
new Button(t("save")).addTo(form);
form.addTo(window);
} else {
- window.content(t("This tile ({}) has no properties",getClass().getSimpleName()));
+ window.content(t("This tile ({}) has no editable properties",getClass().getSimpleName()));
}
if (route != null) {