use of net.parostroj.timetable.mediator.GTEventsReceiverColleague in project grafikon by jub77.
the class TrainView method setModel.
public void setModel(final ApplicationModel model) {
this.model = model;
this.updateView(model.getSelectedTrain());
this.model.addListener(this);
((TrainTableModel) trainTable.getModel()).setModel(model);
model.getMediator().addColleague(message -> {
IntervalSelectionMessage ism = (IntervalSelectionMessage) message;
if (ism.getInterval() != null) {
TimeInterval interval = ism.getInterval();
Train trainForInterval = interval.getTrain();
if (trainForInterval.getTimeIntervalBefore() == interval) {
interval = trainForInterval.getFirstInterval();
} else if (trainForInterval.getTimeIntervalAfter() == interval) {
interval = trainForInterval.getLastInterval();
}
if (trainForInterval != TrainView.this.train) {
updateView(trainForInterval);
}
int row = interval.getTrain().getTimeIntervalList().indexOf(interval);
int column = TrainTableColumn.getIndex(trainTable.getColumnModel(), interval.isNodeOwner() ? TrainTableColumn.STOP : TrainTableColumn.SPEED_LIMIT);
trainTable.setRowSelectionInterval(row, row);
if (column != -1) {
trainTable.setColumnSelectionInterval(column, column);
}
Rectangle rect = trainTable.getCellRect(row, 0, true);
trainTable.scrollRectToVisible(rect);
Component topLevelComponent = GuiComponentUtils.getTopLevelComponent(TrainView.this);
if (topLevelComponent.hasFocus()) {
trainTable.requestFocus();
}
}
}, IntervalSelectionMessage.class);
model.getMediator().addColleague(new GTEventsReceiverColleague() {
@Override
public void processTrainEvent(Event event) {
Train selectedTrain = model.getSelectedTrain();
if (event.getSource() == selectedTrain) {
updateView(selectedTrain);
}
}
}, Event.class);
}
use of net.parostroj.timetable.mediator.GTEventsReceiverColleague in project grafikon by jub77.
the class FloatingWindowsFactory method createTimeIntervalsTrainsChanged.
private static FloatingWindow createTimeIntervalsTrainsChanged(final Frame frame, final Mediator mediator, final ApplicationModel model) {
final ChangedTrainsPanel panel = new ChangedTrainsPanel();
panel.addTrainSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
JList<?> list = (JList<?>) e.getSource();
Wrapper<?> wrapper = (Wrapper<?>) list.getSelectedValue();
if (wrapper != null) {
if (wrapper.getElement() != model.getSelectedTrain()) {
model.setSelectedTrain((Train) wrapper.getElement());
}
}
}
}
});
final FloatingWindow dialog = new FloatingDialog(frame, panel, "dialog.trainchanged.title", "changed.trains");
mediator.addColleague(new GTEventsReceiverColleague() {
@Override
public void processTrainEvent(Event event) {
if (!dialog.isVisible())
return;
if (event.getType() == Event.Type.SPECIAL && event.getData() instanceof SpecialTrainTimeIntervalList) {
panel.addTrainToList((Train) event.getSource());
}
}
}, Event.class);
mediator.addColleague(new ApplicationGTEventColleague() {
@Override
public void processApplicationEvent(ApplicationModelEvent event) {
if (event.getType() == ApplicationModelEventType.SET_DIAGRAM_CHANGED) {
panel.clearTrainList();
}
}
}, ApplicationModelEvent.class);
return dialog;
}
use of net.parostroj.timetable.mediator.GTEventsReceiverColleague in project grafikon by jub77.
the class CirculationPane method setModel.
public void setModel(ApplicationModel model) {
this.delegate = new TCDelegate(model) {
private TCDetailsViewDialog editDialog;
@Override
public void showEditDialog(JComponent component) {
if (editDialog == null) {
editDialog = new TCDetailsViewDialog(GuiComponentUtils.getWindow(component), true);
}
editDialog.setLocationRelativeTo(component);
editDialog.updateValues(this, diagram);
editDialog.setVisible(true);
}
@Override
public TrainsCycleType getType() {
return type;
}
@Override
public void handleEvent(Action action, TrainsCycle cycle, Train train) {
if (action == Action.DIAGRAM_CHANGE) {
diagram = delegate.getTrainDiagram();
updateTypes();
this.fireEvent(Action.REFRESH, null);
}
}
};
trainsCyclesPane.setModel(this.delegate, new TrainColorChooser() {
@Override
public Color getIntervalColor(TimeInterval interval) {
if (!interval.getTrain().isCovered(type, interval)) {
return Color.black;
} else {
return Color.gray;
}
}
});
model.getMediator().addColleague(new GTEventsReceiverColleague() {
@Override
public void processTrainDiagramEvent(Event event) {
if (event.getType() == Event.Type.ADDED && event.getObject() instanceof TrainsCycleType) {
Wrapper<TrainsCycleType> wrapper = new Wrapper<>((TrainsCycleType) event.getObject());
typesComboBox.addItem(wrapper);
typesComboBox.setSelectedItem(wrapper);
} else if (event.getType() == Event.Type.REMOVED && event.getObject() instanceof TrainsCycleType) {
typesComboBox.removeItem(new Wrapper<>((TrainsCycleType) event.getObject()));
}
}
});
}
Aggregations