new feature on clicking tiles: actions of tile now skipped, when shift is pressed during click
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>de.srsoftware</groupId>
|
<groupId>de.srsoftware</groupId>
|
||||||
<artifactId>web4rail</artifactId>
|
<artifactId>web4rail</artifactId>
|
||||||
<version>1.3.36</version>
|
<version>1.3.37</version>
|
||||||
<name>Web4Rail</name>
|
<name>Web4Rail</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>Java Model Railway Control</description>
|
<description>Java Model Railway Control</description>
|
||||||
|
|||||||
@@ -67,7 +67,8 @@ function clickLegend(ev){
|
|||||||
$('#'+lastTab).show();
|
$('#'+lastTab).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
function clickTile(x,y){
|
function clickTile(x,y,shift){
|
||||||
|
console.log("clickTile("+x+","+y+")");
|
||||||
var id = x+"-"+y;
|
var id = x+"-"+y;
|
||||||
var tiles = $('#'+id);
|
var tiles = $('#'+id);
|
||||||
if (tiles.length > 0) {
|
if (tiles.length > 0) {
|
||||||
@@ -82,7 +83,9 @@ function clickTile(x,y){
|
|||||||
$(PLAN).css('cursor','');
|
$(PLAN).css('cursor','');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
request({realm:'plan',action:'click',id:id});
|
var json = {realm:'plan',action:'click',id:id};
|
||||||
|
if (shift) json.shift=1;
|
||||||
|
request(json);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -191,7 +194,7 @@ function place(data){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function planClick(ev){
|
function planClick(ev){
|
||||||
//console.log('planClick:',ev);
|
console.log('planClick:',ev);
|
||||||
var plan=$('#scroll').get(0);
|
var plan=$('#scroll').get(0);
|
||||||
var x = Math.floor((plan.scrollLeft+ev.clientX)/SQUARE);
|
var x = Math.floor((plan.scrollLeft+ev.clientX)/SQUARE);
|
||||||
var y = Math.floor((plan.scrollTop+ev.clientY)/SQUARE);
|
var y = Math.floor((plan.scrollTop+ev.clientY)/SQUARE);
|
||||||
@@ -199,7 +202,7 @@ function planClick(ev){
|
|||||||
switch (mode){
|
switch (mode){
|
||||||
case undefined:
|
case undefined:
|
||||||
case null:
|
case null:
|
||||||
return clickTile(x,y);
|
return clickTile(x,y,ev.shiftKey);
|
||||||
case ADD:
|
case ADD:
|
||||||
return addTile(x,y);
|
return addTile(x,y);
|
||||||
case MOVE:
|
case MOVE:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
<level>INFO</level>
|
<level>DEBUG</level>
|
||||||
</filter>
|
</filter>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ Click here to select display! : Hier klicken, um Anzeige auszuwählen!
|
|||||||
Click here to select train! : Hier klicken, um Zug auszuwählen!
|
Click here to select train! : Hier klicken, um Zug auszuwählen!
|
||||||
Click here to setup contact : Hier klicken, um Kontakt auszuwählen
|
Click here to setup contact : Hier klicken, um Kontakt auszuwählen
|
||||||
Click here to setup decoupler : Hier klicken, um Entkuppler einzurichten
|
Click here to setup decoupler : Hier klicken, um Entkuppler einzurichten
|
||||||
click here to setup relay : Hier klicken, um Relais einzurichten
|
click here to setup relay or switch : Hier klicken, um Relais oder Schalter einzurichten
|
||||||
click here to setup signal : Hier klicken, um Signal einzurichten
|
click here to setup signal : Hier klicken, um Signal einzurichten
|
||||||
Click here to setup tag : Hier klicken, um Markierung anzugeben
|
Click here to setup tag : Hier klicken, um Markierung anzugeben
|
||||||
click here to setup turnout : Hier klicken, um Weiche einzurichten
|
click here to setup turnout : Hier klicken, um Weiche einzurichten
|
||||||
@@ -291,7 +291,7 @@ Set {} as context : {} als Kontext setzen
|
|||||||
SetContextTrain : Zug für Folgeaktionen festlegen
|
SetContextTrain : Zug für Folgeaktionen festlegen
|
||||||
Set direction of train to {} : Setze Richtung des Zugs auf {}
|
Set direction of train to {} : Setze Richtung des Zugs auf {}
|
||||||
SetDisplayText : Anzeige-Text setzen
|
SetDisplayText : Anzeige-Text setzen
|
||||||
SetRelay : Relais schalten
|
SetRelayOrSwitch : Relais oder Schalter schalten
|
||||||
SetSignal : Signal stellen
|
SetSignal : Signal stellen
|
||||||
SetSignalsToStop : Signale auf Halt stellen
|
SetSignalsToStop : Signale auf Halt stellen
|
||||||
SetSpeed : Geschwindigkeit ändern
|
SetSpeed : Geschwindigkeit ändern
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ public class Plan extends BaseClass{
|
|||||||
case ACTION_AUTO:
|
case ACTION_AUTO:
|
||||||
return simplifyRouteName(params);
|
return simplifyRouteName(params);
|
||||||
case ACTION_CLICK:
|
case ACTION_CLICK:
|
||||||
return click(get(Id.from(params),true));
|
return click(get(Id.from(params),true),params.get("shift"));
|
||||||
case ACTION_CONNECT:
|
case ACTION_CONNECT:
|
||||||
Tile tile = get(Id.from(params), false);
|
Tile tile = get(Id.from(params), false);
|
||||||
if (tile instanceof Bridge) return ((Bridge)tile).requestConnect();
|
if (tile instanceof Bridge) return ((Bridge)tile).requestConnect();
|
||||||
@@ -321,9 +321,9 @@ public class Plan extends BaseClass{
|
|||||||
* @return
|
* @return
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
private Object click(Tile tile) throws IOException {
|
private Object click(Tile tile,String shift) throws IOException {
|
||||||
if (tile == null) return null;
|
if (tile == null) return null;
|
||||||
return tile.click();
|
return tile.click("1".equals(shift));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public abstract class Action extends BaseClass {
|
|||||||
SetContextTrain.class,
|
SetContextTrain.class,
|
||||||
SetDisplayText.class,
|
SetDisplayText.class,
|
||||||
SetPower.class,
|
SetPower.class,
|
||||||
SetRelay.class,
|
SetRelayOrSwitch.class,
|
||||||
SetSignal.class,
|
SetSignal.class,
|
||||||
SetSpeed.class,
|
SetSpeed.class,
|
||||||
SetTurnout.class,
|
SetTurnout.class,
|
||||||
|
|||||||
@@ -1,93 +0,0 @@
|
|||||||
package de.srsoftware.web4rail.actions;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import de.srsoftware.web4rail.Application;
|
|
||||||
import de.srsoftware.web4rail.BaseClass;
|
|
||||||
import de.srsoftware.web4rail.tags.Fieldset;
|
|
||||||
import de.srsoftware.web4rail.tags.Select;
|
|
||||||
import de.srsoftware.web4rail.tags.Window;
|
|
||||||
import de.srsoftware.web4rail.tiles.Relay;
|
|
||||||
|
|
||||||
public class SetRelay extends Action {
|
|
||||||
|
|
||||||
public SetRelay(BaseClass parent) {
|
|
||||||
super(parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Relay relay = null;
|
|
||||||
private boolean state = false;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean fire(Context context) {
|
|
||||||
if (isNull(relay)) return false;
|
|
||||||
relay.state(state);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JSONObject json() {
|
|
||||||
JSONObject json = super.json();
|
|
||||||
if (isSet(relay)) {
|
|
||||||
json.put(RELAY, relay.id());
|
|
||||||
json.put(Relay.STATE, state);
|
|
||||||
}
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Action load(JSONObject json) {
|
|
||||||
super.load(json);
|
|
||||||
if (json.has(RELAY)) {
|
|
||||||
String relayId = json.getString(RELAY);
|
|
||||||
relay = BaseClass.get(new Id(relayId));
|
|
||||||
if (isNull(relay)) Application.threadPool.execute(new Thread() { // if relay not loaded, yet: wait one sec and try again
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
sleep(1000);
|
|
||||||
} catch (InterruptedException e) {}
|
|
||||||
relay = BaseClass.get(new Id(relayId));
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (json.has(Relay.STATE)) state = json.getBoolean(Relay.STATE);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
|
|
||||||
|
|
||||||
formInputs.add(t("Select relay"),Relay.selector(relay,null));
|
|
||||||
|
|
||||||
Select state = new Select(Relay.STATE);
|
|
||||||
state.addOption(true,isNull(relay)?Relay.DEFAULT_LABEL_A:relay.stateLabelA);
|
|
||||||
state.addOption(false,isNull(relay)?Relay.DEFAULT_LABEL_B:relay.stateLabelB);
|
|
||||||
formInputs.add(t("Select state"),state);
|
|
||||||
|
|
||||||
return super.properties(preForm, formInputs, postForm);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void removeChild(BaseClass child) {
|
|
||||||
if (child == relay) relay = null;
|
|
||||||
super.removeChild(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
if (isNull(relay)) return "["+t("click here to setup relay")+"]";
|
|
||||||
return t("Set {} to {}",relay,state?relay.stateLabelA:relay.stateLabelB);
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Object update(HashMap<String, String> params) {
|
|
||||||
LOG.debug("update: {}",params);
|
|
||||||
Id relayId = new Id(params.get(Relay.class.getSimpleName()));
|
|
||||||
relay = BaseClass.get(relayId);
|
|
||||||
String st = params.get(Relay.STATE);
|
|
||||||
if (isSet(st)) state = st.equals("true");
|
|
||||||
return context().properties();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package de.srsoftware.web4rail.actions;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import de.srsoftware.tools.Tag;
|
||||||
|
import de.srsoftware.web4rail.Application;
|
||||||
|
import de.srsoftware.web4rail.BaseClass;
|
||||||
|
import de.srsoftware.web4rail.tags.Fieldset;
|
||||||
|
import de.srsoftware.web4rail.tags.Select;
|
||||||
|
import de.srsoftware.web4rail.tags.Window;
|
||||||
|
import de.srsoftware.web4rail.tiles.Relay;
|
||||||
|
import de.srsoftware.web4rail.tiles.Switch;
|
||||||
|
import de.srsoftware.web4rail.tiles.Tile;
|
||||||
|
|
||||||
|
public class SetRelayOrSwitch extends Action {
|
||||||
|
|
||||||
|
private static final String SWITCH = "switch";
|
||||||
|
|
||||||
|
public SetRelayOrSwitch(BaseClass parent) {
|
||||||
|
super(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Tile relayOrSwitch = null;
|
||||||
|
private boolean state = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean fire(Context context) {
|
||||||
|
if (isNull(relayOrSwitch)) return false;
|
||||||
|
if (relayOrSwitch instanceof Relay) ((Relay)relayOrSwitch).state(state);
|
||||||
|
if (relayOrSwitch instanceof Switch) ((Switch)relayOrSwitch).state(state);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONObject json() {
|
||||||
|
JSONObject json = super.json();
|
||||||
|
if (relayOrSwitch instanceof Relay) {
|
||||||
|
json.put(RELAY, relayOrSwitch.id());
|
||||||
|
json.put(STATE, state);
|
||||||
|
}
|
||||||
|
if (relayOrSwitch instanceof Switch) {
|
||||||
|
json.put(SWITCH, relayOrSwitch.id());
|
||||||
|
json.put(STATE, state);
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Action load(JSONObject json) {
|
||||||
|
super.load(json);
|
||||||
|
if (json.has(RELAY)) {
|
||||||
|
String relayId = json.getString(RELAY);
|
||||||
|
relayOrSwitch = BaseClass.get(new Id(relayId));
|
||||||
|
if (isNull(relayOrSwitch)) Application.threadPool.execute(new Thread() { // if relay not loaded, yet: wait one sec and try again
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
sleep(1000);
|
||||||
|
} catch (InterruptedException e) {}
|
||||||
|
relayOrSwitch = BaseClass.get(new Id(relayId));
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (json.has(SWITCH)) {
|
||||||
|
String relayId = json.getString(SWITCH);
|
||||||
|
relayOrSwitch = BaseClass.get(new Id(relayId));
|
||||||
|
if (isNull(relayOrSwitch)) Application.threadPool.execute(new Thread() { // if relay not loaded, yet: wait one sec and try again
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
sleep(1000);
|
||||||
|
} catch (InterruptedException e) {}
|
||||||
|
relayOrSwitch = BaseClass.get(new Id(relayId));
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (json.has(STATE)) state = json.getBoolean(STATE);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
|
||||||
|
Tag span = new Tag("span");
|
||||||
|
if (isSet(relayOrSwitch)) span.content(relayOrSwitch+NBSP);
|
||||||
|
button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,Relay.class.getSimpleName())).addTo(span);
|
||||||
|
formInputs.add(t("Select relay"),span);
|
||||||
|
Select state = new Select(Relay.STATE);
|
||||||
|
if (relayOrSwitch instanceof Relay) {
|
||||||
|
Relay relay = (Relay) relayOrSwitch;
|
||||||
|
state.addOption(true,relay.stateLabelA);
|
||||||
|
state.addOption(false,relay.stateLabelB);
|
||||||
|
}
|
||||||
|
if (relayOrSwitch instanceof Switch) {
|
||||||
|
state.addOption(true,t("On"));
|
||||||
|
state.addOption(false,t("Off"));
|
||||||
|
}
|
||||||
|
formInputs.add(t("Select state"),state);
|
||||||
|
|
||||||
|
return super.properties(preForm, formInputs, postForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void removeChild(BaseClass child) {
|
||||||
|
if (child == relayOrSwitch) relayOrSwitch = null;
|
||||||
|
super.removeChild(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
if (isNull(relayOrSwitch)) return "["+t("click here to setup relay or switch")+"]";
|
||||||
|
if (relayOrSwitch instanceof Relay) {
|
||||||
|
Relay relay = (Relay) relayOrSwitch;
|
||||||
|
return t("Set {} to {}",relayOrSwitch,state?relay.stateLabelA:relay.stateLabelB);
|
||||||
|
}
|
||||||
|
return t("Set {} to {}",relayOrSwitch,state?t("On"):t("Off"));
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Object update(HashMap<String, String> params) {
|
||||||
|
LOG.debug("update: {}",params);
|
||||||
|
String tileId = params.get(Relay.class.getSimpleName());
|
||||||
|
Tile tile = isSet(tileId) ? BaseClass.get(new Id(tileId)) : relayOrSwitch;
|
||||||
|
if (tile instanceof Relay || tile instanceof Switch) {
|
||||||
|
relayOrSwitch = tile;
|
||||||
|
}
|
||||||
|
String st = params.get(Relay.STATE);
|
||||||
|
if (isSet(st)) state = st.equals("true");
|
||||||
|
return context().properties();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import de.srsoftware.web4rail.Application;
|
||||||
import de.srsoftware.web4rail.BaseClass;
|
import de.srsoftware.web4rail.BaseClass;
|
||||||
import de.srsoftware.web4rail.tags.Fieldset;
|
import de.srsoftware.web4rail.tags.Fieldset;
|
||||||
import de.srsoftware.web4rail.tags.Window;
|
import de.srsoftware.web4rail.tags.Window;
|
||||||
@@ -32,7 +33,22 @@ public class SwitchIsOn extends Condition {
|
|||||||
|
|
||||||
public Condition load(JSONObject json) {
|
public Condition load(JSONObject json) {
|
||||||
super.load(json);
|
super.load(json);
|
||||||
if (json.has(SWITCH)) swtch = BaseClass.get(new Id(json.getString(SWITCH)));
|
if (json.has(SWITCH)) {
|
||||||
|
swtch = BaseClass.get(new Id(json.getString(SWITCH)));
|
||||||
|
if (isNull(swtch)) {
|
||||||
|
Application.threadPool.execute(new Thread() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
sleep(1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
swtch = BaseClass.get(new Id(json.getString(SWITCH)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -152,9 +152,9 @@ public abstract class Block extends StretchableTile{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
if (isSet(train) && train.currentBlock() == this) return train.properties();
|
if (isSet(train) && !shift) return train.properties();
|
||||||
return super.click();
|
return super.click(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int compareTo(Block other) {
|
public int compareTo(Block other) {
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ public abstract class Bridge extends Tile {
|
|||||||
protected Bridge counterpart = null;
|
protected Bridge counterpart = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
if (pendingConnection != null) return connect();
|
if (pendingConnection != null) return connect();
|
||||||
return super.click();
|
return super.click(shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object connect() {
|
private Object connect() {
|
||||||
|
|||||||
@@ -116,9 +116,9 @@ public class Contact extends Tile{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
trigger(200);
|
if (!shift) trigger(200);
|
||||||
return super.click();
|
return super.click(shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Contact get(int addr) {
|
public static Contact get(int addr) {
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ public abstract class Decoupler extends Tile implements Device{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
Object o = super.click();
|
Object o = super.click(shift);
|
||||||
engage();
|
if (!shift) engage();
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
package de.srsoftware.web4rail.tiles;
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Vector;
|
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import de.srsoftware.tools.Tag;
|
import de.srsoftware.tools.Tag;
|
||||||
import de.srsoftware.web4rail.BaseClass;
|
|
||||||
import de.srsoftware.web4rail.Command;
|
import de.srsoftware.web4rail.Command;
|
||||||
import de.srsoftware.web4rail.Command.Reply;
|
import de.srsoftware.web4rail.Command.Reply;
|
||||||
import de.srsoftware.web4rail.Device;
|
import de.srsoftware.web4rail.Device;
|
||||||
@@ -19,11 +16,9 @@ import de.srsoftware.web4rail.Protocol;
|
|||||||
import de.srsoftware.web4rail.tags.Fieldset;
|
import de.srsoftware.web4rail.tags.Fieldset;
|
||||||
import de.srsoftware.web4rail.tags.Input;
|
import de.srsoftware.web4rail.tags.Input;
|
||||||
import de.srsoftware.web4rail.tags.Radio;
|
import de.srsoftware.web4rail.tags.Radio;
|
||||||
import de.srsoftware.web4rail.tags.Select;
|
|
||||||
import de.srsoftware.web4rail.tags.Window;
|
import de.srsoftware.web4rail.tags.Window;
|
||||||
|
|
||||||
public class Relay extends Tile implements Device{
|
public class Relay extends Tile implements Device{
|
||||||
public static final String STATE = "state";
|
|
||||||
private static final String PORT_A = "port_a";
|
private static final String PORT_A = "port_a";
|
||||||
private static final String PORT_B = "port_b";
|
private static final String PORT_B = "port_b";
|
||||||
protected static final String STRAIGHT = "straight";
|
protected static final String STRAIGHT = "straight";
|
||||||
@@ -51,9 +46,9 @@ public class Relay extends Tile implements Device{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
Object o = super.click();
|
Object o = super.click(shift);
|
||||||
state(!state);
|
if (!shift) state(!state);
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,18 +155,6 @@ public class Relay extends Tile implements Device{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Select selector(Relay preselected, Collection<Relay> exclude) {
|
|
||||||
if (isNull(exclude)) exclude = new Vector<Relay>();
|
|
||||||
Select select = new Select(Relay.class.getSimpleName());
|
|
||||||
new Tag("option").attr("value","0").content(t("unset")).addTo(select);
|
|
||||||
for (Relay relay : BaseClass.listElements(Relay.class)) {
|
|
||||||
if (exclude.contains(relay)) continue;
|
|
||||||
Tag opt = select.addOption(relay.id(), relay);
|
|
||||||
if (relay == preselected) opt.attr("selected", "selected");
|
|
||||||
}
|
|
||||||
return select;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Relay setLabel(boolean state, String tx) {
|
public Relay setLabel(boolean state, String tx) {
|
||||||
if (state) {
|
if (state) {
|
||||||
stateLabelA = tx;
|
stateLabelA = tx;
|
||||||
|
|||||||
@@ -40,20 +40,9 @@ public class Switch extends Tile{
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
state = !state;
|
if (!shift) state(!state);
|
||||||
Application.threadPool.execute(new Runnable() {
|
return super.click(shift);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Context context = new Context(Switch.this);
|
|
||||||
if (state) {
|
|
||||||
actionsOn.fire(context);
|
|
||||||
} else actionsOff.fire(context);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
stream();
|
|
||||||
return super.click();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -172,6 +161,21 @@ public class Switch extends Tile{
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void state(boolean newState) {
|
||||||
|
state = newState;
|
||||||
|
Application.threadPool.execute(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Context context = new Context(Switch.this);
|
||||||
|
if (state) {
|
||||||
|
actionsOn.fire(context);
|
||||||
|
} else actionsOff.fire(context);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
stream();
|
||||||
|
}
|
||||||
|
|
||||||
public void stream() {
|
public void stream() {
|
||||||
try {
|
try {
|
||||||
Tag tag = tag(null);
|
Tag tag = tag(null);
|
||||||
|
|||||||
@@ -76,8 +76,9 @@ public abstract class Tile extends BaseClass implements Comparable<Tile>{
|
|||||||
return classes;
|
return classes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
LOG.debug("{}.click()",getClass().getSimpleName());
|
LOG.debug("{}.click()",getClass().getSimpleName());
|
||||||
|
if (isSet(train) && shift) return train.properties();
|
||||||
return properties();
|
return properties();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,10 +49,10 @@ public abstract class Turnout extends Tile implements Device{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
LOG.debug(getClass().getSimpleName()+".click()");
|
LOG.debug(getClass().getSimpleName()+".click()");
|
||||||
init();
|
if (!shift) init();
|
||||||
return super.click();
|
return super.click(shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract String commandFor(State newState);
|
protected abstract String commandFor(State newState);
|
||||||
|
|||||||
@@ -13,11 +13,13 @@ public abstract class TurnoutL extends Turnout {
|
|||||||
private static final String LEFT = "left";
|
private static final String LEFT = "left";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
Object o = super.click();
|
Object o = super.click(shift);
|
||||||
if (route != null) {
|
if (!shift) {
|
||||||
plan.stream(t("{} is locked by {}!",this,route));
|
if (route != null) {
|
||||||
} else state(state == State.STRAIGHT ? State.LEFT : State.STRAIGHT);
|
plan.stream(t("{} is locked by {}!",this,route));
|
||||||
|
} else state(state == State.STRAIGHT ? State.LEFT : State.STRAIGHT);
|
||||||
|
}
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,13 @@ public abstract class TurnoutR extends Turnout {
|
|||||||
private static final String RIGHT = "right";
|
private static final String RIGHT = "right";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object click() throws IOException {
|
public Object click(boolean shift) throws IOException {
|
||||||
Object o = super.click();
|
Object o = super.click(shift);
|
||||||
if (route != null) {
|
if (!shift) {
|
||||||
plan.stream(t("{} is locked by {}!",this,route));
|
if (route != null) {
|
||||||
} else state(state == State.STRAIGHT ? State.RIGHT : State.STRAIGHT);
|
plan.stream(t("{} is locked by {}!",this,route));
|
||||||
|
} else state(state == State.STRAIGHT ? State.RIGHT : State.STRAIGHT);
|
||||||
|
}
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user