diff --git a/pom.xml b/pom.xml
index 08390a2..0603c2f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.11.2
+ 0.11.3
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/js/plan.js b/resources/js/plan.js
index dfc4e39..5d0d952 100644
--- a/resources/js/plan.js
+++ b/resources/js/plan.js
@@ -13,6 +13,7 @@ var selected = null;
var mode = null;
var messageTimer = null;
var messageOpacity = 0;
+var trainAwaitingDestination = null;
function addClass(data){
parts = data.split(" ");
@@ -32,7 +33,16 @@ function addTile(x,y){
function clickTile(x,y){
var id = x+"-"+y;
- if ($('#'+id).length > 0) request({realm:'plan',action:'click',id:id});
+ var tiles = $('#'+id);
+ if (tiles.length > 0) {
+ if (trainAwaitingDestination != null && tiles.hasClass("Block")) {
+ request({realm:'train',id:trainAwaitingDestination,action:MOVE,destination:id});
+ trainAwaitingDestination = null;
+ $(PLAN).css('cursor','');
+ return false;
+ }
+ request({realm:'plan',action:'click',id:id});
+ }
return false;
}
@@ -179,6 +189,13 @@ function runAction(ev){
} else return request({action:ev.target.id,realm:realm}); // TODO: ask for name
}
+function selectDest(trainId){
+ trainAwaitingDestination = trainId;
+ closeWindows();
+ $(PLAN).css('cursor','help');
+ return false;
+}
+
function stream(ev){
var data = ev.data;
console.log("received: ",data);
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index 0069d28..ce37280 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -71,10 +71,12 @@ public class Train extends BaseClass implements Comparable {
private Vector locos = new Vector();
private static final String TAGS = "tags";
+
+ private static final String DESTINATION = "destination";
private HashSet tags = new HashSet();
- private Block block = null;
+ private Block block,destination = null;
LinkedList trace = new LinkedList();
private class Autopilot extends Thread{
@@ -139,6 +141,8 @@ public class Train extends BaseClass implements Comparable {
return train.automatic();
case ACTION_DROP:
return train.dropCar(params);
+ case ACTION_MOVE:
+ return train.setDestination(params);
case ACTION_PROPS:
return train.props();
case ACTION_QUIT:
@@ -154,7 +158,7 @@ public class Train extends BaseClass implements Comparable {
}
return t("Unknown action: {}",params.get(ACTION));
}
-
+
public void addToTrace(Vector newTiles) {
boolean active = trace.isEmpty();
for (Tile tile : newTiles) {
@@ -239,7 +243,7 @@ public class Train extends BaseClass implements Comparable {
private Tag carList() {
Tag locoProp = new Tag("li").content(t("Cars:"));
- Tag locoList = new Tag("ul").clazz("carlist");
+ Tag locoList = new Tag("ul").clazz("carlist").content("");
for (Car car : this.cars) {
Tag li = new Tag("li");
@@ -482,6 +486,14 @@ public class Train extends BaseClass implements Comparable {
ul.addTo(li).addTo(propList);
}
+ Tag dest = new Tag("li").content(t("Destination: "));
+ if (isNull(destination)) {
+ new Button(t("Select from plan"),"return selectDest("+id+");").addTo(dest);
+ } else {
+ link("span",Map.of(REALM,REALM_PLAN,ID,destination.id(),ACTION,ACTION_CLICK),destination.toString()).addTo(dest);
+ }
+ dest.addTo(propList);
+
if (isSet(block)) {
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);
@@ -548,6 +560,18 @@ public class Train extends BaseClass implements Comparable {
if (isSet(block)) block.set(this);
}
+ private String setDestination(HashMap params) {
+ String dest = params.get(DESTINATION);
+ if (isNull(dest)) return t("No destination supplied!");
+ Tile tile = plan.get(dest, true);
+ if (isNull(tile)) return t("Tile {} not known!",dest);
+ if (tile instanceof Block) {
+ destination = (Block) tile;
+ return t("{} now heading for {}",this,destination);
+ }
+ return t("{} is not a block!",tile);
+ }
+
public void setSpeed(int v) {
for (Locomotive loco : locos) loco.setSpeed(v);
this.speed = v;
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
index 5a31b59..c7ed3ee 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
@@ -282,7 +282,7 @@ public abstract class Block extends StretchableTile{
replacements.put("%text%",name);
if (isSet(train)) replacements.put("%text%",train.directedName());
Tag tag = super.tag(replacements);
- if (isSet(train)) tag.clazz(tag.get("class")+" occupied");
+ tag.clazz(tag.get("class")+" Block");
return tag;
}
@@ -355,4 +355,4 @@ public abstract class Block extends StretchableTile{
return this;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
index 6bcc2f2..3034e62 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
@@ -1,7 +1,9 @@
package de.srsoftware.web4rail.tiles;
+import java.io.IOException;
import java.util.Map;
+import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -25,4 +27,11 @@ public class Shadow extends Tile{
public Tile overlay() {
return overlay;
}
+
+ @Override
+ public Tag tag(Map replacements) throws IOException {
+ Tag tag = super.tag(replacements);
+ if (overlay instanceof Block) tag.attr("class", tag.get("class")+" Block");
+ return tag;
+ }
}