diff --git a/resources/css/style.css b/resources/css/style.css index 4d6226e..4fb2089 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -105,7 +105,7 @@ svg circle{ background: yellow; } -#tile-properties{ +.window{ position: fixed; top: 10px; bottom: 10px; diff --git a/resources/js/plan.js b/resources/js/plan.js index ff102dd..9bf4723 100644 --- a/resources/js/plan.js +++ b/resources/js/plan.js @@ -71,6 +71,10 @@ function closeMenu(ev){ return false; } +function closeWindows(){ + $('.window').remove(); +} + function enableAdding(ev){ // console.log('enableAdding:',ev); if (selected != null) $(selected).css('border',''); @@ -125,6 +129,21 @@ function moveTile(x,y){ }); } +function openRoute(id){ + closeWindows(); + $.ajax({ + url : PLAN, + method : POST, + data : {action:'openRoute',id:id}, + success: function(resp){ + if (resp.startsWith('<')){ + $('body').append($(resp)); + } else { + addMessage(resp); + } + } + }); +} function runAction(ev){ console.log("runAction: ",ev.target.id); $.ajax({ diff --git a/src/main/java/de/srsoftware/web4rail/Connector.java b/src/main/java/de/srsoftware/web4rail/Connector.java index d040ce9..4c96d9a 100644 --- a/src/main/java/de/srsoftware/web4rail/Connector.java +++ b/src/main/java/de/srsoftware/web4rail/Connector.java @@ -2,9 +2,9 @@ package de.srsoftware.web4rail; public class Connector { - private Plan.Direction from; - private int y; - private int x; + public Plan.Direction from; + public int y; + public int x; public Connector(int x, int y, Plan.Direction from) { this.x = x; @@ -12,18 +12,6 @@ public class Connector { this.from = from; } - public Plan.Direction from() { - return from; - } - - public int x() { - return x; - } - - public int y() { - return y; - } - @Override public String toString() { return getClass().getSimpleName()+"("+x+", "+y+", from "+from+")"; diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index 2fa01bc..41ba46c 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -38,6 +38,7 @@ import de.srsoftware.web4rail.tiles.EndS; import de.srsoftware.web4rail.tiles.EndW; import de.srsoftware.web4rail.tiles.Eraser; import de.srsoftware.web4rail.tiles.Shadow; +import de.srsoftware.web4rail.tiles.Signal; import de.srsoftware.web4rail.tiles.SignalE; import de.srsoftware.web4rail.tiles.SignalN; import de.srsoftware.web4rail.tiles.SignalS; @@ -71,9 +72,12 @@ public class Plan { private static final String Y = "y"; private static final String FILE = "file"; private static final String DIRECTION = "direction"; + private static final String ACTION_ROUTE = "openRoute"; + private static final String ID = "id"; private HashMap> tiles = new HashMap>(); private HashSet blocks = new HashSet(); + private HashMap routes = new HashMap(); private Tag actionMenu() throws IOException { Tag tileMenu = new Tag("div").clazz("actions").content(t("Actions")); @@ -100,20 +104,25 @@ public class Plan { for (Block block : blocks) { for (Connector con : block.startPoints()) routes.addAll(follow(new Route().start(block),con)); } + this.routes.clear(); for (Route route : routes) { - route.start().add(route); - LOG.debug("found route: {}",route); + route.start().add(route); + this.routes.put(route.id(), route); } return t("Found {} routes.",routes.size()); } private Collection follow(Route route, Connector con) { - Tile tile = get(con.x(),con.y()); + Tile tile = get(con.x,con.y); Vector results = new Vector<>(); if (tile == null) return results; Tile added = route.add(tile instanceof Shadow ? ((Shadow)tile).overlay() : tile); + if (added instanceof Signal) { + Signal signal = (Signal) added; + if (signal.isAffectedFrom(con.from)) route.addSignal(signal); + } if (added instanceof Block) return List.of(route); - List connectors = tile.connections(con.from()); + List connectors = tile.connections(con.from); Listroutes = route.multiply(connectors.size()); for (int i=0; i params) throws IOException { return update(Integer.parseInt(params.get("x")),Integer.parseInt(params.get("y")),params); } diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index a642f41..ced191f 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -3,7 +3,10 @@ package de.srsoftware.web4rail; import java.util.List; import java.util.Vector; +import de.keawe.tools.translations.Translation; +import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.tiles.Block; +import de.srsoftware.web4rail.tiles.Contact; import de.srsoftware.web4rail.tiles.Signal; import de.srsoftware.web4rail.tiles.Tile; @@ -11,16 +14,25 @@ public class Route { private Vector path; private Vector signals; + private Vector contacts; private String id; private String name; public Tile add(Tile tile) { path.add(tile); + if (tile instanceof Contact) contacts.add((Contact) tile); return tile; + } + + public Route addSignal(Signal signal) { + signals.add(signal); + return this; } protected Route clone() { Route clone = new Route(); + clone.contacts = new Vector(contacts); + clone.signals = new Vector(signals); clone.path = new Vector<>(path); return clone; } @@ -53,8 +65,23 @@ public class Route { if (name == null) name = id(); return name; } + + public Window properties() { + Window win = new Window("route-properties",t("Properties of {})",this)); + new Tag("h4").content(t("Signals")).addTo(win); + Tag list = new Tag("ul"); + for (Signal s : signals) new Tag("li").content(s.toString()).addTo(list); + list.addTo(win); + new Tag("h4").content(t("Contacts")).addTo(win); + list = new Tag("ul"); + for (Contact c : contacts) new Tag("li").content(c.toString()).addTo(list); + list.addTo(win); + return win; + } public Route start(Block block) { + contacts = new Vector(); + signals = new Vector(); path = new Vector(); path.add(block); return this; @@ -62,10 +89,14 @@ public class Route { @Override public String toString() { - return getClass().getSimpleName()+"("+id()+")"; + return getClass().getSimpleName()+"("+name()+")"; } public Block start() { return (Block) path.get(0); } + + protected static String t(String txt, Object...fills) { + return Translation.get(Application.class, txt, fills); + } } diff --git a/src/main/java/de/srsoftware/web4rail/Window.java b/src/main/java/de/srsoftware/web4rail/Window.java index 37cb099..36491ef 100644 --- a/src/main/java/de/srsoftware/web4rail/Window.java +++ b/src/main/java/de/srsoftware/web4rail/Window.java @@ -8,7 +8,7 @@ public class Window extends Tag{ public Window(String id, String title) { super("div"); - id(id); + id(id).clazz("window"); new Tag("h2") .clazz("title") .content(title).addTo(this); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index fc0ae2a..7188d67 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -52,7 +52,7 @@ public abstract class Block extends StretchableTile{ new Tag("h4").content(t("Routes from here:")).addTo(form); Tag routeList = new Tag("ul"); for (Route route : routes) { - new Tag("li").content(route.id()).addTo(routeList); + new Tag("li").content(route.id()).attr("onclick","openRoute('"+route.id()+"')").addTo(routeList); } routeList.addTo(form); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java index a9abab6..177cef6 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java @@ -9,5 +9,5 @@ public abstract class Signal extends Tile{ classes.add("signal"); } - abstract boolean isAffectedFrom(Direction dir); + public abstract boolean isAffectedFrom(Direction dir); } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java index d96567a..01d3bc4 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalE.java @@ -20,7 +20,7 @@ public class SignalE extends Signal{ } @Override - boolean isAffectedFrom(Direction dir) { + public boolean isAffectedFrom(Direction dir) { return dir == Direction.EAST; } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java index ef3d4ce..15bab97 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalN.java @@ -21,7 +21,7 @@ public class SignalN extends Signal { } @Override - boolean isAffectedFrom(Direction dir) { + public boolean isAffectedFrom(Direction dir) { return dir == Direction.NORTH; } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java index ed64f0d..9bd65f9 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalS.java @@ -21,7 +21,7 @@ public class SignalS extends Signal{ } @Override - boolean isAffectedFrom(Direction dir) { + public boolean isAffectedFrom(Direction dir) { return dir == Direction.SOUTH; } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java b/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java index 813f6c9..3199df7 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/SignalW.java @@ -20,7 +20,7 @@ public class SignalW extends Signal{ } @Override - boolean isAffectedFrom(Direction dir) { + public boolean isAffectedFrom(Direction dir) { return dir == Direction.WEST; } }