diff --git a/pom.xml b/pom.xml index 696a3ed..fc2ca75 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 0.10.4 + 0.10.5 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index fadac08..e9e22f2 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -148,11 +148,13 @@ public class Route extends BaseClass{ } private void addBasicPropertiesTo(Window win) { + if (isSet(train)) link("span",Map.of(REALM,REALM_TRAIN,ID,train.id,ACTION,ACTION_PROPS),t("Train: {}",train)).addTo(win); new Tag("h4").content(t("Origin and destination")).addTo(win); Tag list = new Tag("ul"); Plan.addLink(startBlock, t("Origin: {} to {}",startBlock.name,startDirection), list); Plan.addLink(endBlock, t("Destination: {} from {}",endBlock.name,endDirection), list); list.addTo(win); + if (!signals.isEmpty()) { new Tag("h4").content(t("Signals")).addTo(win); @@ -341,6 +343,7 @@ public class Route extends BaseClass{ train.set(endBlock); train.heading(endDirection.inverse()); if (train.route == this) train.route = null; + train = null; } diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java index 7b04685..ee89a55 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java @@ -88,7 +88,7 @@ public class ActionList extends Vector implements Constants{ boolean first = true; for (Action action : this) { props.put(ID, id+"/"+action.id()); - Tag act = BaseClass.link("span", Map.of(REALM,REALM_ACTIONS,ID,id+"/"+action.id(),ACTION,ACTION_PROPS,CONTEXT,context), this+NBSP).addTo(new Tag("li"));; + Tag act = BaseClass.link("span", Map.of(REALM,REALM_ACTIONS,ID,id+"/"+action.id(),ACTION,ACTION_PROPS,CONTEXT,context), action+NBSP).addTo(new Tag("li"));; if (!first) { props.put(ACTION, ACTION_MOVE); new Button("↑",props).addTo(act); diff --git a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java index 670e365..7e26c55 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java @@ -2,7 +2,6 @@ package de.srsoftware.web4rail.conditions; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; @@ -14,7 +13,6 @@ import de.keawe.tools.translations.Translation; import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Application; import de.srsoftware.web4rail.BaseClass; -import de.srsoftware.web4rail.Constants; import de.srsoftware.web4rail.Plan; import de.srsoftware.web4rail.Window; import de.srsoftware.web4rail.actions.Action.Context; diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 213462b..1c57e91 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -195,14 +195,6 @@ public class Train extends BaseClass implements Comparable { return result; } - private Object dropCar(HashMap params) { - String carId = params.get(CAR_ID); - if (isSet(carId)) cars.remove(Car.get(carId)); - String locoId = params.get(LOCO_ID); - if (isSet(locoId)) locos.remove(Car.get(locoId)); - return props(); - } - private Object addCar(HashMap params) { LOG.debug("addCar({})",params); if (!params.containsKey(CAR_ID)) return t("No car id passed to Train.addCar!"); @@ -266,6 +258,18 @@ public class Train extends BaseClass implements Comparable { return train; } + public Direction direction() { + return direction; + } + + private Object dropCar(HashMap params) { + String carId = params.get(CAR_ID); + if (isSet(carId)) cars.remove(Car.get(carId)); + String locoId = params.get(LOCO_ID); + if (isSet(locoId)) locos.remove(Car.get(locoId)); + return props(); + } + public static Train get(int id) { return trains.get(id); } @@ -429,7 +433,9 @@ public class Train extends BaseClass implements Comparable { new Input(TAGS,String.join(", ", tags)).addTo(new Label(t("Tags")+NBSP)).addTo(form); new Button(t("Apply")).addTo(form).addTo(fieldset); - new Button(t("Turn"), "train("+id+",'"+ACTION_TURN+"')").addTo(fieldset).addTo(window); + HashMap props = new HashMap(Map.of(REALM,REALM_TRAIN,ID,id)); + props.put(ACTION, ACTION_TURN); + new Button(t("Turn"), props).addTo(fieldset).addTo(window); fieldset = new Fieldset(t("other train properties")); @@ -439,20 +445,30 @@ public class Train extends BaseClass implements Comparable { carList().addTo(propList); new Tag("li").content(t("length: {}",length())).addTo(propList); + if (!trace.isEmpty()) { + Tag li = new Tag("li").content(t("Occupied area:")); + Tag ul = new Tag("ul"); + for (Tile tile : trace) new Tag("li").content(tile.toString()).addTo(ul); + ul.addTo(li).addTo(propList); + } + if (isSet(block)) { - new Tag("li").content(t("Current location: {}",block)).addTo(propList); + link("li",Map.of(REALM,REALM_PLAN,ID,block.id(),ACTION,ACTION_CLICK),t("Current location: {}",block)).addTo(propList); Tag actions = new Tag("li").clazz().content(t("Actions:")+NBSP); - new Button(t("start"),"train("+id+",'"+ACTION_START+"')").addTo(actions); + props.put(ACTION, ACTION_START); + new Button(t("start"),props).addTo(actions); if (isNull(autopilot)) { - new Button(t("auto"),"train("+id+",'"+ACTION_AUTO+"')").addTo(actions); + props.put(ACTION, ACTION_AUTO); + new Button(t("auto"),props).addTo(actions); } else { - new Button(t("quit autopilot"),"train("+id+",'"+ACTION_QUIT+"')").addTo(actions); + props.put(ACTION, ACTION_QUIT); + new Button(t("quit autopilot"),props).addTo(actions); } actions.addTo(propList); - } + if (isSet(route)) { - new Tag("li").content(t("Current route: {}",route)).addTo(propList); + link("li", Map.of(REALM,REALM_ROUTE,ID,route.id(),ACTION,ACTION_PROPS), route).addTo(propList); } if (isSet(direction)) new Tag("li").content(t("Direction: heading {}",direction)).addTo(propList); @@ -587,12 +603,9 @@ public class Train extends BaseClass implements Comparable { for (Tile tile : newTiles) { if (active) { trace.addFirst(tile); - System.err.println(trace); } else { Tile dummy = trace.getFirst(); - if (dummy == tile) { - active = true; - }; + if (dummy == tile) active = true; } } showTrace(); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index a097402..8453632 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -99,6 +99,9 @@ public abstract class Block extends StretchableTile{ Train newTrain = Train.get(trainId); if (isSet(newTrain) && newTrain != train) { newTrain.dropTrace(); + if (connections(newTrain.direction()).isEmpty()) { + newTrain.heading(null); + } newTrain.set(this); } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index f8d79dd..cda2c0b 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -216,12 +216,17 @@ public abstract class Tile extends BaseClass{ Window window = new Window("tile-properties",t("Properties of {} @ ({},{})",title(),x,y)); if (isSet(train)) { - window.children().insertElementAt(new Button(t("stop"),"train("+train.id+",'"+ACTION_STOP+"')"), 1); - window.children().insertElementAt(new Button(t("start"),"train("+train.id+",'"+ACTION_START+"')"), 1); + HashMap props = new HashMap(Map.of(REALM,REALM_TRAIN,ID,train.id)); + props.put(ACTION, ACTION_STOP); + window.children().insertElementAt(new Button(t("stop"),props), 1); + props.put(ACTION, ACTION_START); + window.children().insertElementAt(new Button(t("start"),props), 1); window.children().insertElementAt(train.link("span"), 1); window.children().insertElementAt(new Tag("h4").content(t("Train:")), 1); } + if (isSet(route)) link("p",Map.of(REALM,REALM_ROUTE,ID,route.id(),ACTION,ACTION_PROPS),t("Locked by {}",route)).addTo(window); + Form form = propForm("tile-properties-"+id()); new Tag("h4").content(t("Length")).addTo(form); new Input(LENGTH,length).numeric().addTo(new Label(t("Length")+":"+NBSP)).addTo(form); @@ -230,9 +235,6 @@ public abstract class Tile extends BaseClass{ new Button(t("Apply"),form).addTo(form); form.addTo(window); - if (isSet(route)) { - new Tag("p").content(t("Locked by {}",route)).addTo(window); - } if (!routes.isEmpty()) { new Tag("h4").content(t("Routes using this tile:")).addTo(window);