diff --git a/pom.xml b/pom.xml
index c6655c1..94c5a7b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.3.51
+ 1.4.1
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/css/style.css b/resources/css/style.css
index 62fc459..2d980de 100644
--- a/resources/css/style.css
+++ b/resources/css/style.css
@@ -77,14 +77,31 @@ svg.Relay rect{
fill: white;
}
+svg.reserved polygon,
+svg.reserved rect{
+ fill: yellow;
+}
+
svg.locked polygon,
-svg.locked rect:not(.sig_a):not(.sig_b){
- fill:lime;
+svg.locked rect{
+ fill: lime;
}
svg.occupied polygon,
-svg.occupied rect:not(.sig_a):not(.sig_b){
- fill:yellow;
+svg.occupied rect{
+ fill: orange;
+}
+
+svg.preview circle,
+svg.preview line,
+svg.preview polygon,
+svg.preview rect{
+ fill:cyan;
+}
+
+svg rect.sig_a,
+svg rect.sig_b{
+ fill: inherit;
}
svg text{
@@ -232,10 +249,6 @@ svg.straight .right{
fill: #ddd !important;
}
-.occupied .block{
- fill: yellow;
-}
-
.active circle{
fill: #f57900;
}
@@ -254,7 +267,14 @@ fieldset{
border-radius: 5px;
}
.error{
- background: red;
+ background: orange;
+ margin: 30px 10px 5px;
+ padding: 0;
+ border-radius: 10px;
+}
+
+.error p{
+ padding: 5px;
}
h4,ul{
@@ -356,18 +376,6 @@ textarea.json {
margin-left: 5%;
}
-svg.preview circle,
-svg.preview line,
-svg.preview polygon,
-svg.preview rect{
- fill:cyan;
-}
-
-svg.preview rect.sig_a,
-svg.preview rect.sig_b{
- fill: inherit;
-}
-
svg.Block text{
fill: black;
}
@@ -422,4 +430,4 @@ svg.Block text{
}
.Switch.on rect.enabled{
fill: forestgreen;
-}
\ No newline at end of file
+}
diff --git a/resources/js/plan.js b/resources/js/plan.js
index dfb4ef6..b4a2737 100644
--- a/resources/js/plan.js
+++ b/resources/js/plan.js
@@ -37,7 +37,7 @@ function arrangeTabs(){
var tabs = $('
',{'class':'tabs'});
var winId = $('.window').attr('id')+"-";
- tabs.insertAfter($('.swapbtn'));
+ tabs.insertAfter($('.error'));
var target = null;
var index = null;
$('.window > fieldset > legend').each(function(){
@@ -48,7 +48,6 @@ function arrangeTabs(){
index = i;
target = this;
}
- //if (fs.id == lastTab) target = this;
$(this).appendTo(tabs).click(fs.id,clickLegend);
if (id > 0) {
$(fs).hide();
@@ -71,6 +70,7 @@ function clickLegend(ev){
$(ev.target).addClass('front');
$('.window > fieldset').hide();
$('#'+lastTab).show();
+ $('#'+lastTab+" input:not([type=hidden])").first().focus().select();
if (!('no-update' in ev)) remember(lastTab);
}
diff --git a/resources/logback.xml b/resources/logback.xml
index 3013d46..54dfeb3 100644
--- a/resources/logback.xml
+++ b/resources/logback.xml
@@ -4,7 +4,7 @@
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5}: %msg%n
@@ -35,7 +35,9 @@
-
-
+
+
+
+
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index b140948..15e63fc 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -1,4 +1,5 @@
abort : abbrechen
+Aborting route allocation... : Routen-Reservierung wird abgebrochen...
Accessory : Zubehör
Action : Aktion
Actions : Aktionen
diff --git a/src/main/java/de/srsoftware/web4rail/BaseClass.java b/src/main/java/de/srsoftware/web4rail/BaseClass.java
index 56ab24b..887e4aa 100644
--- a/src/main/java/de/srsoftware/web4rail/BaseClass.java
+++ b/src/main/java/de/srsoftware/web4rail/BaseClass.java
@@ -4,9 +4,11 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.AbstractMap;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
@@ -39,7 +41,7 @@ import de.srsoftware.web4rail.tiles.Tile;
* @author Stephan Richter, SRSoftware 2020…2021
*/
public abstract class BaseClass implements Constants{
- protected static Plan plan; // the track layout in use
+ public static Plan plan; // the track layout in use
public static final Random random = new Random();
public static String speedUnit = DEFAULT_SPEED_UNIT;
public static String lengthUnit = DEFAULT_LENGTH_UNIT;
@@ -67,6 +69,8 @@ public abstract class BaseClass implements Constants{
private Car car;
private Contact contact;
private Direction direction;
+ private Integer waitTime;
+ List invalidationListeners = new LinkedList<>();
public Context(BaseClass object) {
setMain(object);
@@ -101,6 +105,7 @@ public abstract class BaseClass implements Constants{
route = null;
tile = null;
train = null;
+ waitTime = null;
}
public Context clone() {
@@ -114,6 +119,7 @@ public abstract class BaseClass implements Constants{
clone.route = route;
clone.tile = tile;
clone.train = train;
+ clone.waitTime = waitTime;
return clone;
}
@@ -141,10 +147,20 @@ public abstract class BaseClass implements Constants{
return this;
}
+ public void invalidate() {
+ setMain(null);
+ invalidationListeners.forEach(EventListener::fire);
+ }
+
public boolean invalidated() {
return isNull(main);
}
+ public void onInvalidate(EventListener listener) {
+ invalidationListeners.add(listener);
+ }
+
+
public Context setMain(BaseClass object) {
main = object;
LOG.debug("{}.setMain({})",this,object);
@@ -182,6 +198,7 @@ public abstract class BaseClass implements Constants{
if (isSet(block)) sb.append(", "+t("Block: {}",block));
if (isSet(route)) sb.append(", "+t("Route: {}",route));
if (isSet(contact)) sb.append(", "+t("Contact: {}",contact));
+ if (isSet(waitTime)) sb.append(", "+t("Wait time: {} ms",waitTime));
sb.append(")");
return sb.toString();
}
@@ -195,6 +212,14 @@ public abstract class BaseClass implements Constants{
train = newTrain;
return this;
}
+
+ public Integer waitTime() {
+ return waitTime;
+ }
+
+ public void waitTime(int ms) {
+ waitTime = ms;
+ }
}
public class FormInput extends ArrayList>{
@@ -423,13 +448,21 @@ public abstract class BaseClass implements Constants{
return (T) this;
}
- public Window properties() {
- return properties(new ArrayList<>(), new FormInput(), new ArrayList<>());
+ public Window properties(String...error) {
+ return properties(new ArrayList<>(), new FormInput(), new ArrayList<>(),error);
}
- protected Window properties(List