You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.4 KiB
122 lines
3.4 KiB
package de.srsoftware.web4rail.tiles; |
|
|
|
import java.io.IOException; |
|
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.Connector; |
|
import de.srsoftware.web4rail.moving.Train; |
|
import de.srsoftware.web4rail.tags.Button; |
|
import de.srsoftware.web4rail.tags.Checkbox; |
|
import de.srsoftware.web4rail.tags.Input; |
|
import de.srsoftware.web4rail.tags.Label; |
|
import de.srsoftware.web4rail.tags.Select; |
|
|
|
/** |
|
* Base class for all kinds of Blocks |
|
* @author Stephan Richter, SRSoftware |
|
* |
|
*/ |
|
public abstract class Block extends StretchableTile{ |
|
private static final String ALLOW_TURN = "allowTurn"; |
|
private static final String NAME = "name"; |
|
public String name = "Block"; |
|
public boolean turnAllowed = false; |
|
|
|
@Override |
|
public JSONObject config() { |
|
JSONObject config = super.config(); |
|
config.put(NAME, name); |
|
return config; |
|
} |
|
|
|
@Override |
|
public JSONObject json() { |
|
JSONObject json = super.json(); |
|
json.put(NAME, name); |
|
json.put(ALLOW_TURN, turnAllowed); |
|
return json; |
|
} |
|
|
|
@Override |
|
protected Tile load(JSONObject json) throws IOException { |
|
super.load(json); |
|
name = json.has(NAME) ? json.getString(NAME) : "Block"; |
|
turnAllowed = json.has(ALLOW_TURN) && json.getBoolean(ALLOW_TURN); |
|
return this; |
|
} |
|
|
|
@Override |
|
public Tag propForm(String id) { |
|
Tag form = super.propForm(id); |
|
new Tag("h4").content(t("Block properties")).addTo(form); |
|
|
|
new Input(NAME, name).addTo(new Label(t("name:")+NBSP)).addTo(new Tag("p")).addTo(form); |
|
|
|
new Checkbox(ALLOW_TURN,t("Turn allowed"),turnAllowed).addTo(new Tag("p")).addTo(form); |
|
|
|
Select select = Train.selector(train, null); |
|
select.addTo(new Label(t("Train:")+NBSP)).addTo(new Tag("p")).addTo(form); |
|
|
|
return form; |
|
} |
|
|
|
@Override |
|
public Tag propMenu() { |
|
Tag window = super.propMenu(); |
|
|
|
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); |
|
window.children().insertElementAt(train.link("span"), 1); |
|
window.children().insertElementAt(new Tag("h4").content(t("Train:")), 1); |
|
} |
|
return window; |
|
} |
|
|
|
public abstract List<Connector> startPoints(); |
|
|
|
@Override |
|
public Tag tag(Map<String, Object> replacements) throws IOException { |
|
if (isNull(replacements)) replacements = new HashMap<String, Object>(); |
|
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"); |
|
return tag; |
|
} |
|
|
|
@Override |
|
public String title() { |
|
return name; |
|
} |
|
|
|
@Override |
|
public String toString() { |
|
return getClass().getSimpleName()+"("+name+") @ ("+x+","+y+")"; |
|
} |
|
|
|
@Override |
|
public Tile update(HashMap<String, String> params) throws IOException { |
|
if (params.containsKey(NAME)) name=params.get(NAME); |
|
if (params.containsKey(Train.HEAD)) { |
|
int trainId = Integer.parseInt(params.get(Train.HEAD)); |
|
if (trainId == 0) { |
|
if (isSet(train)) train.dropTrace(); |
|
train = null; |
|
} else { |
|
Train newTrain = Train.get(trainId); |
|
if (isSet(newTrain) && newTrain != train) { |
|
newTrain.set(this); |
|
newTrain.dropTrace(); |
|
} |
|
} |
|
} |
|
turnAllowed = params.containsKey(ALLOW_TURN) && params.get(ALLOW_TURN).equals("on"); |
|
return super.update(params); |
|
} |
|
}
|
|
|