use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightComboBoxHelper method installListeners.
private void installListeners(TrainDiagram diagram, WrapperListModel<Node> nodesModel) {
diagram.getNet().addListener(event -> {
if (event.getObject() instanceof Node) {
Node node = (Node) event.getObject();
switch(event.getType()) {
case ADDED:
addNode(nodesModel, node);
break;
case REMOVED:
removeNode(nodesModel, node);
break;
default:
}
}
});
diagram.getNet().addAllEventListener(e -> {
if (e.getSource() instanceof Node && e.getType() == Type.ATTRIBUTE && e.getAttributeChange().checkName(Node.ATTR_TYPE)) {
Node node = (Node) e.getSource();
if (node.getType().isFreight()) {
addNode(nodesModel, node);
} else {
removeNode(nodesModel, node);
}
}
});
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightComboBoxHelper method updateView.
public void updateView(Node from, Node to) {
// update selection
if (fromNode.getSelectedObject() != from) {
fromNode.setSelectedObject(from);
}
if (toNode.getSelectedObject() != to) {
toNode.setSelectedObject(to);
}
tableModel.clear();
stateIconLabel.setIcon(null);
if (from != null && to != null && from != to) {
DataModel model = new DataModel();
RxActionHandler.getInstance().newExecution("freight_conn", GuiComponentUtils.getTopLevelComponent(this), diagram).addConsumer((c, diagram) -> {
c.setWaitMessage(ResourceLoader.getString("wait.message.processing"));
c.setWaitDialogVisible(true);
}).onBackground().addConsumer((c, diagram) -> {
FreightConnectionAnalyser connectionAnalyser = new FreightConnectionAnalyser(diagram.getFreightNet().getConnectionStrategy());
NodeFreightConnection ncf = connectionAnalyser.analyse(from, to).stream().min(Comparator.comparingInt(NodeFreightConnection::getLength)).get();
stateIconLabel.setIcon(ncf.isComplete() ? okIcon : errorIcon);
ncf.getSteps().forEach(s -> {
List<String> list = convertStep(s);
String node = convertNode(s.getFrom());
for (String item : list) {
model.addLine(node, item);
node = null;
}
});
if (ncf.isComplete()) {
model.addLine(convertNode(to), "");
} else {
List<DirectNodeConnection> steps = ncf.getSteps();
if (steps != null && !steps.isEmpty()) {
model.addLine(convertNode(steps.get(steps.size() - 1).getTo()), "");
}
}
}).onEdt().addConsumer((c, diagram) -> {
tableModel.addLines(model);
adjustColumnWidth.run();
}).execute();
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightDestinationPanel method updateView.
public void updateView(Node node) {
// update selection
if (nodesModel.getSelectedObject() != node) {
nodesModel.setSelectedObject(node);
}
tableModel.clear();
if (node != null) {
DataModel model = new DataModel();
RxActionHandler.createInstance().newExecution("freight_dest", GuiComponentUtils.getTopLevelComponent(this), diagram).addConsumer((c, diagram) -> {
c.setWaitMessage(ResourceLoader.getString("wait.message.processing"));
c.setWaitDialogVisible(true);
}).onBackground().addConsumer((c, diagram) -> {
FreightAnalyser analyser = new FreightAnalyser(diagram.getFreightNet().getConnectionStrategy());
NodeFreight freight = analyser.getNodeFreightFrom(node);
addFreightToNodes(model, freight);
addFreightToRegions(model, freight);
addFreightToColors(model, freight);
addFreightTrainsFromNode(model, node, analyser);
addFreightTrainUnitsFromNode(model, node, analyser);
}).addConsumer((c, diagram) -> {
tableModel.addLines(model);
adjustColumnWidth.run();
}).execute();
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class EditFNConnetionDialog method updateSelectionPanel.
private void updateSelectionPanel(TrainDiagram diagram, FilterType filterType) {
ElementSelectionPanel<Node> selectionPanel = selectionPanels.get(filterType);
selectionPanel.setListForSelection(Wrapper.getWrapperList(diagram.getNet().getNodes()));
List<Node> lastNodes = connection.getAsList(filterType.getAttributeName(), Node.class);
if (lastNodes != null) {
for (Node node : lastNodes) {
selectionPanel.addSelected(Wrapper.getWrapper(node));
}
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class LSLine method createLine.
public Line createLine(TrainDiagram diagram) throws LSException {
Net net = diagram.getNet();
Node fromNode = net.getNodeById(getFrom());
Node toNode = net.getNodeById(getTo());
if (speed != null && speed <= 0) {
speed = null;
}
Line line = diagram.getPartFactory().createLine(id, length, fromNode, toNode, speed);
line.getAttributes().add(attributes.createAttributes(diagram::getObjectById));
// tracks
if (this.tracks != null)
for (LSLineTrack lsLineTrack : this.tracks) {
LineTrack lineTrack = lsLineTrack.createLineTrack(diagram::getObjectById);
NodeTrack fromStraight = fromNode.getTrackById(lsLineTrack.getFromStraightTrack());
NodeTrack toStraight = toNode.getTrackById(lsLineTrack.getToStraightTrack());
lineTrack.setFromStraightTrack(fromStraight);
lineTrack.setToStraightTrack(toStraight);
line.addTrack(lineTrack);
}
return line;
}
Aggregations