diff --git a/pom.xml b/pom.xml
index f4b0696..c5e815e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.33
+ 1.2.34
Web4Rail
jar
Java Model Railway Control
diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java
index 5d5f2ad..96b746a 100644
--- a/src/main/java/de/srsoftware/web4rail/Application.java
+++ b/src/main/java/de/srsoftware/web4rail/Application.java
@@ -13,6 +13,7 @@ import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URLDecoder;
import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
import java.util.HashMap;
import org.slf4j.Logger;
@@ -66,7 +67,7 @@ public class Application extends BaseClass{
server.start();
try {
Plan.load(Plan.DEFAULT_NAME);
- } catch (FileNotFoundException e) {
+ } catch (FileNotFoundException|NoSuchFileException e) {
plan = new Plan();
}
for (String arg : args) {
diff --git a/src/main/java/de/srsoftware/web4rail/ControlUnit.java b/src/main/java/de/srsoftware/web4rail/ControlUnit.java
index 3e4f9bd..32e894c 100644
--- a/src/main/java/de/srsoftware/web4rail/ControlUnit.java
+++ b/src/main/java/de/srsoftware/web4rail/ControlUnit.java
@@ -176,14 +176,14 @@ public class ControlUnit extends Thread implements Constants{
*/
public Object properties() {
Window win = new Window("cu-props", t("Properties of the control unit"));
- Form form = new Form();
+ Form form = new Form("cu-prop-form");
new Input(ACTION,ACTION_UPDATE).hideIn(form);
new Input(REALM,REALM_CU).hideIn(form);
Fieldset fieldset = new Fieldset(t("Server connection"));
new Input(HOST,host).addTo(new Label(t("Hostname"))).addTo(fieldset);
new Input(PORT,port).numeric().addTo(new Label(t("Port"))).addTo(fieldset);
new Input(BUS,bus).numeric().addTo(new Label(t("Bus"))).addTo(fieldset);
- new Button(t("Apply")).addTo(fieldset).addTo(form).addTo(win);
+ new Button(t("Apply"),form).addTo(fieldset).addTo(form).addTo(win);
fieldset = new Fieldset("Actions");
new Button(t("Connect"),"connectCu();").addTo(fieldset).addTo(win);
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index b359ce8..5c2c407 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -62,9 +62,9 @@ import de.srsoftware.web4rail.tiles.SignalS;
import de.srsoftware.web4rail.tiles.SignalW;
import de.srsoftware.web4rail.tiles.StraightH;
import de.srsoftware.web4rail.tiles.StraightV;
-import de.srsoftware.web4rail.tiles.StretchableTile;
import de.srsoftware.web4rail.tiles.TextDisplay;
import de.srsoftware.web4rail.tiles.Tile;
+import de.srsoftware.web4rail.tiles.TileWithShadow;
import de.srsoftware.web4rail.tiles.Turnout.State;
import de.srsoftware.web4rail.tiles.Turnout3E;
import de.srsoftware.web4rail.tiles.TurnoutLE;
@@ -238,8 +238,9 @@ public class Plan extends BaseClass{
}
return null;
}
- if (tile instanceof StretchableTile) ((StretchableTile)tile).placeShadows();
- place(tile.position(x, y));
+ tile.position(x, y);
+ if (tile instanceof TileWithShadow) ((TileWithShadow)tile).placeShadows();
+ place(tile);
return t("Added {}",tile.getClass().getSimpleName());
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Cross.java b/src/main/java/de/srsoftware/web4rail/tiles/Cross.java
index b679cca..a97041f 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Cross.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Cross.java
@@ -5,6 +5,6 @@ import java.util.Map;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
-public abstract class Cross extends Tile {
+public abstract class Cross extends TileWithShadow {
public abstract Map offsetConnections(Direction from);
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/CrossH.java b/src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
index f70f7d3..5431976 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
@@ -33,16 +33,15 @@ public class CrossH extends Cross{
public Map offsetConnections(Direction from) {
if (isNull(from)) return new HashMap<>();
switch (from) {
- case NORTH:
- return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
- case SOUTH:
- return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
- default:
- return new HashMap<>();
+ case NORTH:
+ return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
+ case SOUTH:
+ return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
+ default:
+ return new HashMap<>();
+ }
}
-}
-
@Override
public Tag tag(Map replacements) throws IOException {
return super.tag(replacements).size(200,100).attr("viewbox", "0 0 200 100");
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/CrossV.java b/src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
index 5c1d808..2c3eb89 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
@@ -1,6 +1,7 @@
package de.srsoftware.web4rail.tiles;
import java.io.IOException;
+import java.util.HashMap;
import java.util.Map;
import de.srsoftware.tools.Tag;
@@ -10,14 +11,35 @@ import de.srsoftware.web4rail.tiles.Turnout.State;
public class CrossV extends Cross{
+ @Override
+ public Map connections(Direction from) {
+ if (isNull(from)) return new HashMap<>();
+ switch (from) {
+ case WEST:
+ return Map.of(new Connector(x+1,y+1,Direction.WEST),State.UNDEF);
+ case EAST:
+ return Map.of(new Connector(x-1,y+1,Direction.EAST),State.UNDEF);
+ default:
+ return new HashMap<>();
+ }
+ }
+
@Override
public int height() {
return 2;
}
@Override
- public Map offsetConnections(Direction from) {
- return null;
+ public Map offsetConnections(Direction from) {
+ if (isNull(from)) return new HashMap<>();
+ switch (from) {
+ case WEST:
+ return Map.of(new Connector(x+1,y,Direction.WEST),State.UNDEF);
+ case EAST:
+ return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF);
+ default:
+ return new HashMap<>();
+ }
}
@Override
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
index 9f15da9..e6d8378 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
@@ -20,7 +20,7 @@ public class Shadow extends Tile{
return super.connections(from);
}
- public Shadow(StretchableTile overlay, int x, int y) {
+ public Shadow(TileWithShadow overlay, int x, int y) {
this.overlay = overlay;
this.x = x;
this.y = y;
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java b/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java
index 9a776b2..1da7fd8 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java
@@ -3,7 +3,6 @@ package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
-import java.util.Vector;
import org.json.JSONObject;
@@ -13,14 +12,9 @@ import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
-public abstract class StretchableTile extends Tile {
+public abstract class StretchableTile extends TileWithShadow {
private static final String STRETCH_LENGTH = "stretch";
private int stretch = 1;
- private Vector shadows = new Vector();
-
- public void add(Shadow shadow) {
- shadows.add(shadow.id());
- }
@Override
public JSONObject config() {
@@ -58,17 +52,9 @@ public abstract class StretchableTile extends Tile {
if (!tileAtDest.move(dx, dy)) return false;
}
- boolean moved = super.move(dx, dy);
- if (moved) placeShadows();
- return moved;
- }
-
- public void placeShadows() {
- removeShadows();
- for (int dx=1; dx preForm, FormInput formInputs, List