diff --git a/pom.xml b/pom.xml
index 34ee0af..91159e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.23
+ 1.2.24
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index d35ca68..87e9311 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -20,6 +20,9 @@ Analyze : analysieren
and : und
Apply : Übernehmen
Auto pilot : Autopilot
+AutopilotActive : Autopilot aktiv
+autopilot active for train : Autopilot für Zug aktiviert
+autopilot inactive for train : Autopilot nicht aktiv für Zug
Availability : Verfügbarkeit
Back : zurück
Basic properties : Grundlegende Eigenschaften
@@ -80,6 +83,7 @@ EAST : Osten
Editable properties : veränderliche Eigenschaften
editable train properties : veränderliche Zug-Eigenschaften
Emergency : Notfall
+export : exportieren
Faster (10 {}) : 10 {} schneller
Firing {} : starte {}
FinishRoute : Route abschließen
@@ -183,10 +187,12 @@ Speed unit : Geschwindigkeits-Einheit
Start actions : Start-Aktionen
Stock ID : Inventarnummer
Stop settings : Halte-Einstellungen
+Start autopilot : Autopilot starten
Started {} : {} gestartet
State : Status
StopAllTrains : Alle Züge stoppen
-StopAuto : Automatikmodus abschalten
+StartStopAuto : Automatikmodus an/abschalten
+Stop autopilot : Autopilot abschalten
{} stopping at next block. : {} hält im nächsten Block.
Stopsettings : Halte-Einstellungen
Straight port\: : Port für gerade
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index f4b080d..2973aa7 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -81,7 +81,7 @@ public abstract class Action extends BaseClass {
SetTurnout.class,
ShowText.class,
StopAllTrains.class,
- StopAuto.class,
+ StartStopAuto.class,
TriggerContact.class,
TurnTrain.class
);
@@ -97,7 +97,7 @@ public abstract class Action extends BaseClass {
ActionList actionList = (ActionList) parent;
return actionList.moveUp(this);
}
- LOG.error("Action.drop() called on Action ({}) whose parent ({}) is not an ActionList!",this,parent);
+ LOG.error("Action.moveUp() called on Action ({}) whose parent ({}) is not an ActionList!",this,parent);
return false;
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
index b67d735..e37b02d 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
@@ -116,16 +116,13 @@ public class ActionList extends Action implements Iterable{
public Tag list() {
Tag span = new Tag("span");
button(t("add action"), Map.of(ACTION, ACTION_ADD)).addTo(span);
-
+ button(t("export"), Map.of(ACTION, ACTION_SAVE)).addTo(span);
if (!isEmpty()) {
Tag list = new Tag("ol");
- boolean first = true;
for (Action action : actions) {
Tag item = action.link("span",action).addTo(new Tag("li")).content(NBSP);
action.button("-", Map.of(ACTION,ACTION_DROP)).addTo(item);
- if (first) {
- first = false;
- } else action.button("↑", Map.of(ACTION,ACTION_MOVE)).addTo(item);
+ action.button("↑", Map.of(ACTION,ACTION_MOVE)).addTo(item);
if (action instanceof ActionList) ((ActionList) action).list().addTo(item);
item.addTo(list);
}
@@ -151,10 +148,25 @@ public class ActionList extends Action implements Iterable{
}
public boolean moveUp(Action action) {
+ if (isNull(action)) return false;
+ if (actions.firstElement() == action && parent() instanceof ActionList) {
+ ActionList parentList = (ActionList) parent();
+ for (int i=0; i{
action.remove();
return context.properties();
case ACTION_MOVE:
- return action.moveUp() ? action.context().properties() : t("No action with id {} found!",actionId);
+ if (isNull(action)) return t("No action with id {} found!",actionId);
+ if (action.moveUp()) return action.context().properties();
+ Window result = action.context().properties();
+ return new Tag("fieldset").content(t("Was not able to move \"{}\" up!",action)).addTo(result);
case ACTION_PROPS:
return action.properties();
+ case ACTION_SAVE:
+ Window win = new Window("action-export", t("Export of {}",action));
+ new Tag("textarea").content(action.json().toString()).addTo(win);
+ return win;
case ACTION_UPDATE:
return action.update(params);
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java b/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java
new file mode 100644
index 0000000..dee6a97
--- /dev/null
+++ b/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java
@@ -0,0 +1,55 @@
+package de.srsoftware.web4rail.actions;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.json.JSONObject;
+
+import de.srsoftware.web4rail.BaseClass;
+import de.srsoftware.web4rail.Window;
+import de.srsoftware.web4rail.tags.Checkbox;
+import de.srsoftware.web4rail.tags.Fieldset;
+
+public class StartStopAuto extends Action {
+
+ private static final String INVERTED = "inverted";
+ public boolean inverted = false;
+
+ public StartStopAuto(BaseClass parent) {
+ super(parent);
+ }
+
+ @Override
+ public boolean fire(Context context) {
+ if (isNull(context.train())) return false;
+ context.train().quitAutopilot();
+ return true;
+ }
+
+ public JSONObject json() {
+ JSONObject json = new JSONObject().put(TYPE, getClass().getSimpleName());
+ if (inverted) json.put(INVERTED, true);
+ return json;
+ }
+
+ public StartStopAuto load(JSONObject json) {
+ inverted = json.has(INVERTED) && json.getBoolean(INVERTED);
+ return this;
+ }
+
+ @Override
+ protected Window properties(List