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
postForm) { formInputs.add(stretchType(),new Input(STRETCH_LENGTH, stretch).numeric().addTo(new Tag("span")).content(NBSP+t("Tile(s)"))); @@ -81,13 +67,6 @@ public abstract class StretchableTile extends Tile { removeShadows(); return super.remove(); } - - private void removeShadows() { - while (!shadows.isEmpty()) { - Tile tile = BaseClass.get(shadows.remove(0)); - if (tile instanceof Shadow) tile.remove(); - } - } public int stretch() { return stretch; diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index ac2b527..5de5f4d 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -109,7 +109,7 @@ public abstract class Tile extends BaseClass implements Comparable{ clazz = Tile.class.getName().replace(".Tile", "."+clazz); Tile tile = (Tile) Tile.class.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance(); tile.load(json).register(); - if (tile instanceof StretchableTile) ((StretchableTile)tile).placeShadows(); + if (tile instanceof TileWithShadow) ((TileWithShadow)tile).placeShadows(); plan.place(tile); } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/TileWithShadow.java b/src/main/java/de/srsoftware/web4rail/tiles/TileWithShadow.java new file mode 100644 index 0000000..514fd93 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/tiles/TileWithShadow.java @@ -0,0 +1,33 @@ +package de.srsoftware.web4rail.tiles; + +import java.util.Vector; + +import de.srsoftware.web4rail.BaseClass; + +public class TileWithShadow extends Tile { + private Vector shadows = new Vector(); + + public void add(Shadow shadow) { + shadows.add(shadow.id()); + } + + @Override + public boolean move(int dx, int dy) { + boolean moved = super.move(dx, dy); + if (moved) placeShadows(); + return moved; + } + + public void placeShadows() { + removeShadows(); + for (int dx=1; dx