Search in sources :

Example 1 with RollingStock

use of jmri.jmrit.operations.rollingstock.RollingStock in project JMRI by JMRI.

the class YardmasterByTrackPanel method runUpdate.

@SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "CarManager only provides Car Objects")
private void runUpdate() {
    log.debug("run update");
    removePropertyChangeListerners();
    // reset the utility car counts
    trainCommon.clearUtilityCarTypes();
    checkBoxes.clear();
    pTrack.removeAll();
    boolean pickup = false;
    boolean setout = false;
    if (_track != null) {
        pTrackPane.setBorder(BorderFactory.createTitledBorder(_track.getName()));
        textTrackCommentPane.setText(_track.getComment());
        textTrackCommentPane.setVisible(!_track.getComment().equals(Track.NONE));
        textTrackCommentWorkPane.setText("");
        for (Train train : trainManager.getTrainsArrivingThisLocationList(_track.getLocation())) {
            JPanel pTrain = new JPanel();
            pTrain.setLayout(new BoxLayout(pTrain, BoxLayout.Y_AXIS));
            pTrain.setBorder(BorderFactory.createTitledBorder(MessageFormat.format(TrainSwitchListText.getStringScheduledWork(), new Object[] { train.getName(), train.getDescription() })));
            // List locos first
            List<Engine> engList = engManager.getByTrainBlockingList(train);
            if (Setup.isPrintHeadersEnabled()) {
                for (Engine engine : engList) {
                    if (engine.getTrack() == _track) {
                        JLabel header = new JLabel(Tab + trainCommon.getPickupEngineHeader());
                        setLabelFont(header);
                        pTrain.add(header);
                        break;
                    }
                }
            }
            for (Engine engine : engList) {
                if (engine.getTrack() == _track) {
                    engine.addPropertyChangeListener(this);
                    rollingStock.add(engine);
                    JCheckBox checkBox = new JCheckBox(trainCommon.pickupEngine(engine));
                    setCheckBoxFont(checkBox);
                    pTrain.add(checkBox);
                    checkBoxes.put(engine.getId(), checkBox);
                    pTrack.add(pTrain);
                }
            }
            // now do locomotive set outs
            if (Setup.isPrintHeadersEnabled()) {
                for (Engine engine : engList) {
                    if (engine.getDestinationTrack() == _track) {
                        JLabel header = new JLabel(Tab + trainCommon.getDropEngineHeader());
                        setLabelFont(header);
                        pTrain.add(header);
                        break;
                    }
                }
            }
            for (Engine engine : engList) {
                if (engine.getDestinationTrack() == _track) {
                    engine.addPropertyChangeListener(this);
                    rollingStock.add(engine);
                    JCheckBox checkBox = new JCheckBox(trainCommon.dropEngine(engine));
                    setCheckBoxFont(checkBox);
                    pTrain.add(checkBox);
                    checkBoxes.put(engine.getId(), checkBox);
                    pTrack.add(pTrain);
                }
            }
            // now cars
            List<Car> carList = carManager.getByTrainDestinationList(train);
            if (Setup.isPrintHeadersEnabled()) {
                for (Car car : carList) {
                    if (car.getTrack() == _track && car.getRouteDestination() != car.getRouteLocation()) {
                        JLabel header = new JLabel(Tab + trainCommon.getPickupCarHeader(!IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK));
                        setLabelFont(header);
                        pTrain.add(header);
                        break;
                    }
                }
            }
            // sort car pick ups by their destination
            List<RouteLocation> routeList = train.getRoute().getLocationsBySequenceList();
            for (RouteLocation rl : routeList) {
                for (Car car : carList) {
                    if (car.getTrack() == _track && car.getRouteDestination() != car.getRouteLocation() && car.getRouteDestination() == rl) {
                        car.addPropertyChangeListener(this);
                        rollingStock.add(car);
                        String text;
                        if (car.isUtility()) {
                            text = trainCommon.pickupUtilityCars(carList, car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
                            if (text == null) {
                                // this car type has already been processed
                                continue;
                            }
                        } else {
                            text = trainCommon.pickupCar(car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
                        }
                        pickup = true;
                        JCheckBox checkBox = new JCheckBox(text);
                        setCheckBoxFont(checkBox);
                        pTrain.add(checkBox);
                        checkBoxes.put(car.getId(), checkBox);
                        pTrack.add(pTrain);
                    }
                }
            }
            // now do car set outs
            if (Setup.isPrintHeadersEnabled()) {
                for (Car car : carList) {
                    if (car.getDestinationTrack() == _track && car.getRouteDestination() != car.getRouteLocation()) {
                        JLabel header = new JLabel(Tab + trainCommon.getDropCarHeader(!IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK));
                        setLabelFont(header);
                        pTrain.add(header);
                        break;
                    }
                }
            }
            for (Car car : carList) {
                if (car.getDestinationTrack() == _track && car.getRouteLocation() != car.getRouteDestination()) {
                    car.addPropertyChangeListener(this);
                    rollingStock.add(car);
                    String text;
                    if (car.isUtility()) {
                        text = trainCommon.setoutUtilityCars(carList, car, !TrainCommon.LOCAL, !IS_MANIFEST);
                        if (text == null) {
                            // this car type has already been processed
                            continue;
                        }
                    } else {
                        text = trainCommon.dropCar(car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
                    }
                    setout = true;
                    JCheckBox checkBox = new JCheckBox(text);
                    setCheckBoxFont(checkBox);
                    pTrain.add(checkBox);
                    checkBoxes.put(car.getId(), checkBox);
                    pTrack.add(pTrain);
                }
            }
            // now do local car moves
            if (Setup.isPrintHeadersEnabled()) {
                for (Car car : carList) {
                    if ((car.getTrack() == _track || car.getDestinationTrack() == _track) && car.getRouteDestination() == car.getRouteLocation()) {
                        JLabel header = new JLabel(Tab + trainCommon.getLocalMoveHeader(!IS_MANIFEST));
                        setLabelFont(header);
                        pTrain.add(header);
                        break;
                    }
                }
            }
            for (Car car : carList) {
                if ((car.getTrack() == _track || car.getDestinationTrack() == _track) && car.getRouteLocation() != null && car.getRouteLocation() == car.getRouteDestination()) {
                    car.addPropertyChangeListener(this);
                    rollingStock.add(car);
                    String text;
                    if (car.isUtility()) {
                        text = trainCommon.setoutUtilityCars(carList, car, TrainCommon.LOCAL, !IS_MANIFEST);
                        if (text == null) {
                            // this car type has already been processed
                            continue;
                        }
                    } else {
                        text = trainCommon.localMoveCar(car, !IS_MANIFEST);
                    }
                    setout = true;
                    JCheckBox checkBox = new JCheckBox(text);
                    setCheckBoxFont(checkBox);
                    pTrain.add(checkBox);
                    checkBoxes.put(car.getId(), checkBox);
                    pTrack.add(pTrain);
                }
            }
            pTrackPane.validate();
            pTrain.setMaximumSize(new Dimension(2000, pTrain.getHeight()));
            pTrain.revalidate();
        }
        // now do car holds
        // we only need the cars on this track
        List<RollingStock> rsList = carManager.getByTrainList();
        List<Car> carList = new ArrayList<Car>();
        for (RollingStock rs : rsList) {
            if (rs.getTrack() != _track || rs.getRouteLocation() != null)
                continue;
            carList.add((Car) rs);
        }
        JPanel pHoldCars = new JPanel();
        pHoldCars.setLayout(new BoxLayout(pHoldCars, BoxLayout.Y_AXIS));
        pHoldCars.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("HoldCars")));
        for (Car car : carList) {
            String text;
            if (car.isUtility()) {
                String s = trainCommon.pickupUtilityCars(carList, car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
                if (s == null)
                    continue;
                text = TrainSwitchListText.getStringHoldCar().split("\\{")[0] + s.trim();
            } else {
                text = MessageFormat.format(TrainSwitchListText.getStringHoldCar(), new Object[] { TrainCommon.padAndTruncateString(car.getRoadName(), CarRoads.instance().getMaxNameLength()), TrainCommon.padAndTruncateString(TrainCommon.splitString(car.getNumber()), Control.max_len_string_print_road_number), TrainCommon.padAndTruncateString(car.getTypeName().split("-")[0], CarTypes.instance().getMaxNameLength()), TrainCommon.padAndTruncateString(car.getLength() + TrainCommon.LENGTHABV, Control.max_len_string_length_name), TrainCommon.padAndTruncateString(car.getLoadName(), CarLoads.instance().getMaxNameLength()), TrainCommon.padAndTruncateString(_track.getName(), LocationManager.instance().getMaxTrackNameLength()), TrainCommon.padAndTruncateString(car.getColor(), CarColors.instance().getMaxNameLength()) });
            }
            JCheckBox checkBox = new JCheckBox(text);
            setCheckBoxFont(checkBox);
            pHoldCars.add(checkBox);
            checkBoxes.put(car.getId(), checkBox);
            pTrack.add(pHoldCars);
        }
        pTrackPane.validate();
        pHoldCars.setMaximumSize(new Dimension(2000, pHoldCars.getHeight()));
        pHoldCars.revalidate();
        if (pickup && !setout) {
            textTrackCommentWorkPane.setText(_track.getCommentPickup());
        } else if (!pickup && setout) {
            textTrackCommentWorkPane.setText(_track.getCommentSetout());
        } else if (pickup && setout) {
            textTrackCommentWorkPane.setText(_track.getCommentBoth());
        }
        textTrackCommentWorkPane.setVisible(!textTrackCommentWorkPane.getText().equals(""));
    } else {
        pTrackPane.setBorder(BorderFactory.createTitledBorder(""));
        textTrackCommentPane.setVisible(false);
        textTrackCommentWorkPane.setVisible(false);
    }
}
Also used : JPanel(javax.swing.JPanel) BoxLayout(javax.swing.BoxLayout) ArrayList(java.util.ArrayList) JLabel(javax.swing.JLabel) RouteLocation(jmri.jmrit.operations.routes.RouteLocation) Dimension(java.awt.Dimension) RollingStock(jmri.jmrit.operations.rollingstock.RollingStock) JCheckBox(javax.swing.JCheckBox) Car(jmri.jmrit.operations.rollingstock.cars.Car) Train(jmri.jmrit.operations.trains.Train) Engine(jmri.jmrit.operations.rollingstock.engines.Engine) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 2 with RollingStock

use of jmri.jmrit.operations.rollingstock.RollingStock in project JMRI by JMRI.

the class NceConsistEngines method syncEngines.

@SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "EngineManager only provides Engine Objects")
private void syncEngines(int offset, int step) {
    for (int consistNum = 1; consistNum < 128; consistNum++) {
        int engNum = getEngineNumberFromArray(consistNum, offset, step);
        if (engNum != 0) {
            log.debug("NCE consist " + consistNum + " has engine " + engNum);
            boolean engMatch = false;
            for (RollingStock rs : engineList) {
                Engine engine = (Engine) rs;
                if (engine.getNumber().equals(Integer.toString(engNum))) {
                    log.debug("found engine match {}", engine.getNumber());
                    engMatch = true;
                    Consist engConsist = engineManager.getConsistByName(NCE + consistNum);
                    if (engConsist != null) {
                        engine.setConsist(engConsist);
                        if (offset == CS_CON_MEM_REAR) {
                            // place rear loco at end of consist
                            engine.setBlocking(Engine.NCE_REAR_BLOCK_NUMBER);
                        } else {
                            // mid block numbers 2 through 5
                            engine.setBlocking(engConsist.getSize());
                        }
                        break;
                    }
                    log.warn("Engine ({}) needs lead engine {} for consist {}", engNum, getEngineNumberFromArray(consistNum, 0, 2), consistNum);
                    JOptionPane.showMessageDialog(null, MessageFormat.format(Bundle.getMessage("NceConsistNeedsLeadEngine"), new Object[] { engNum, getEngineNumberFromArray(consistNum, 0, 2), consistNum }), Bundle.getMessage("NceConsist"), JOptionPane.ERROR_MESSAGE);
                    syncOK = false;
                }
            }
            if (!engMatch) {
                log.warn("Engine " + engNum + " not found in operations for NCE consist " + consistNum);
                if (consists.contains(Integer.toString(consistNum))) {
                    JOptionPane.showMessageDialog(null, MessageFormat.format(Bundle.getMessage("NceConsistMissingEngineNumber"), new Object[] { engNum, consistNum }), Bundle.getMessage("NceConsist"), JOptionPane.ERROR_MESSAGE);
                    syncOK = false;
                }
            }
        }
    }
}
Also used : RollingStock(jmri.jmrit.operations.rollingstock.RollingStock) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 3 with RollingStock

use of jmri.jmrit.operations.rollingstock.RollingStock in project JMRI by JMRI.

the class NceConsistEngines method run.

@Override
@SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "EngineManager only provides Engine Objects")
public // we use a thread so the status frame will work!
void run() {
    if (tc == null) {
        JOptionPane.showMessageDialog(null, Bundle.getMessage("NceSynchronizationFailed"), Bundle.getMessage("NceConsist"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    if (JOptionPane.showConfirmDialog(null, Bundle.getMessage("SynchronizeWithNce"), Bundle.getMessage("NceConsist"), JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
        return;
    }
    // reset
    index = 0;
    waiting = 0;
    syncOK = true;
    // create a status frame
    JPanel ps = new JPanel();
    jmri.util.JmriJFrame fstatus = new jmri.util.JmriJFrame(Bundle.getMessage("ReadingNceConsistMemory"));
    fstatus.setLocationRelativeTo(null);
    fstatus.setSize(300, 100);
    ps.add(textConsist);
    ps.add(indexNumber);
    fstatus.getContentPane().add(ps);
    textConsist.setText(Bundle.getMessage("ReadNumber"));
    textConsist.setVisible(true);
    indexNumber.setVisible(true);
    fstatus.setVisible(true);
    // now copy NCE memory into array
    for (int readIndex = 0; readIndex < NUM_CONSIST_READS; readIndex++) {
        indexNumber.setText(Integer.toString(readIndex));
        fstatus.setVisible(true);
        getNceConsist(readIndex);
        if (!syncOK) {
            break;
        }
    }
    // kill status panel
    fstatus.dispose();
    if (syncOK) {
        // now check each engine in the operations to see if there are any matches
        engineList = engineManager.getByNumberList();
        consists = new ArrayList<String>();
        // look for lead engines
        for (int consistNum = 1; consistNum < 128; consistNum++) {
            engineManager.deleteConsist(NCE + consistNum);
            int engNum = getEngineNumberFromArray(consistNum, 0, 2);
            if (engNum != 0) {
                log.debug("NCE consist {} has lead engine {}", consistNum, engNum);
                boolean engMatch = false;
                for (RollingStock rs : engineList) {
                    Engine engine = (Engine) rs;
                    if (engine.getNumber().equals(Integer.toString(engNum))) {
                        log.debug("found lead engine match {}", engine.getNumber());
                        Consist engConsist = engineManager.newConsist(NCE + consistNum);
                        // load the consist number
                        engConsist.setConsistNumber(consistNum);
                        engine.setConsist(engConsist);
                        engine.setBlocking(Engine.DEFAULT_BLOCKING_ORDER);
                        engMatch = true;
                        consists.add(Integer.toString(consistNum));
                        break;
                    }
                }
                if (!engMatch) {
                    // NOI18N
                    log.info("Lead engine " + engNum + " not found in operations for NCE consist " + consistNum);
                }
            }
        }
        // look for rear engines
        syncEngines(CS_CON_MEM_REAR, 2);
        // look for mid engines
        syncEngines(CS_CON_MEM_MID, 8);
        syncEngines(CS_CON_MEM_MID + 2, 8);
        syncEngines(CS_CON_MEM_MID + 4, 8);
        syncEngines(CS_CON_MEM_MID + 6, 8);
    }
    if (syncOK) {
        JOptionPane.showMessageDialog(null, Bundle.getMessage("SuccessfulSynchronization"), Bundle.getMessage("NceConsist"), JOptionPane.INFORMATION_MESSAGE);
    } else {
        JOptionPane.showMessageDialog(null, Bundle.getMessage("SynchronizationFailed"), Bundle.getMessage("NceConsist"), JOptionPane.ERROR_MESSAGE);
    }
}
Also used : JPanel(javax.swing.JPanel) RollingStock(jmri.jmrit.operations.rollingstock.RollingStock) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 4 with RollingStock

use of jmri.jmrit.operations.rollingstock.RollingStock in project JMRI by JMRI.

the class ExportEngines method writeFile.

@SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "EngineManager only provides Engine Objects")
public void writeFile(String name) {
    log.debug("writeFile {}", name);
    // This is taken in large part from "Java and XML" page 368
    File file = findFile(name);
    if (file == null) {
        file = new File(name);
    }
    PrintWriter fileOut = null;
    try {
        fileOut = new // NOI18N
        PrintWriter(// NOI18N
        new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")), true);
    } catch (IOException e) {
        log.error("Can not open export engines CSV file: " + file.getName());
        return;
    }
    EngineManager manager = EngineManager.instance();
    List<RollingStock> engineList = manager.getByNumberList();
    String line = "";
    // check for delimiter in the following Engine fields
    String engineModel;
    String engineLocationName;
    String engineTrackName;
    // assume delimiter in the value field
    String value;
    String comment;
    // create header
    String header = Bundle.getMessage("Number") + del + Bundle.getMessage("Road") + del + Bundle.getMessage("Model") + del + Bundle.getMessage("Length") + del + Bundle.getMessage("Owner") + del + Bundle.getMessage("Built") + del + Bundle.getMessage("Location") + del + "-" + del + Bundle.getMessage("Track") + del + Bundle.getMessage("Moves") + del + Setup.getValueLabel() + del + Bundle.getMessage("Comment") + del + Bundle.getMessage("Miscellaneous");
    fileOut.println(header);
    // store engine number, road, model, length, owner, built date, location and track
    for (RollingStock rs : engineList) {
        Engine engine = (Engine) rs;
        engineModel = engine.getModel();
        if (engineModel.contains(del)) {
            engineModel = ESC + engine.getModel() + ESC;
        }
        engineLocationName = engine.getLocationName();
        if (engineLocationName.contains(del)) {
            engineLocationName = ESC + engine.getLocationName() + ESC;
        }
        engineTrackName = engine.getTrackName();
        if (engineTrackName.contains(del)) {
            engineTrackName = ESC + engine.getTrackName() + ESC;
        }
        value = engine.getValue();
        if (value.contains(del)) {
            value = ESC + engine.getValue() + ESC;
        }
        comment = engine.getComment();
        if (comment.contains(del)) {
            comment = ESC + engine.getComment() + ESC;
        }
        line = engine.getNumber() + del + engine.getRoadName() + del + engineModel + del + engine.getLength() + del + engine.getOwner() + del + engine.getBuilt() + del + engineLocationName + ",-," + // NOI18N
        engineTrackName + del + engine.getMoves() + del + value + del + comment + del + (engine.isOutOfService() ? Bundle.getMessage("OutOfService") : "");
        fileOut.println(line);
    }
    fileOut.flush();
    fileOut.close();
    log.info("Exported " + engineList.size() + " engines to file " + defaultOperationsFilename());
    JOptionPane.showMessageDialog(null, MessageFormat.format(Bundle.getMessage("ExportedEnginesToFile"), new Object[] { engineList.size(), defaultOperationsFilename() }), Bundle.getMessage("ExportComplete"), JOptionPane.INFORMATION_MESSAGE);
}
Also used : IOException(java.io.IOException) RollingStock(jmri.jmrit.operations.rollingstock.RollingStock) BufferedWriter(java.io.BufferedWriter) FileOutputStream(java.io.FileOutputStream) OutputStreamWriter(java.io.OutputStreamWriter) File(java.io.File) XmlFile(jmri.jmrit.XmlFile) PrintWriter(java.io.PrintWriter) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 5 with RollingStock

use of jmri.jmrit.operations.rollingstock.RollingStock in project JMRI by JMRI.

the class TrainBuilder method addLocos.

private void addLocos(int hpAvailable, int extraHpNeeded, RouteLocation rlNeedHp, RouteLocation rl, RouteLocation rld) throws BuildFailedException {
    if (rlNeedHp == null) {
        return;
    }
    int numberLocos = 0;
    // determine how many locos have already been assigned to the train
    List<RollingStock> engines = EngineManager.instance().getList(_train);
    for (RollingStock rs : engines) {
        if (rs.getRouteLocation() == rl) {
            numberLocos++;
        }
    }
    addLine(_buildReport, ONE, BLANK_LINE);
    addLine(_buildReport, ONE, MessageFormat.format(Bundle.getMessage("buildTrainReqExtraHp"), new Object[] { extraHpNeeded, rlNeedHp.getName(), rld.getName(), numberLocos }));
    // determine engine model and road
    String model = _train.getEngineModel();
    String road = _train.getEngineRoad();
    if ((_train.getSecondLegOptions() & Train.CHANGE_ENGINES) == Train.CHANGE_ENGINES && rl == _train.getSecondLegStartLocation()) {
        model = _train.getSecondLegEngineModel();
        road = _train.getSecondLegEngineRoad();
    } else if ((_train.getThirdLegOptions() & Train.CHANGE_ENGINES) == Train.CHANGE_ENGINES && rl == _train.getThirdLegStartLocation()) {
        model = _train.getThirdLegEngineModel();
        road = _train.getThirdLegEngineRoad();
    }
    while (numberLocos < Setup.getMaxNumberEngines()) {
        // if no engines assigned, can't use B unit as first engine
        if (!getEngines(1, model, road, rl, rld, numberLocos > 0)) {
            throw new BuildFailedException(MessageFormat.format(Bundle.getMessage("buildErrorEngines"), new Object[] { Bundle.getMessage("additional"), rl.getName(), rld.getName() }));
        }
        numberLocos++;
        int currentHp = _train.getTrainHorsePower(rlNeedHp);
        if (currentHp > hpAvailable + extraHpNeeded) {
            // done
            break;
        }
        if (numberLocos < Setup.getMaxNumberEngines()) {
            addLine(_buildReport, FIVE, BLANK_LINE);
            addLine(_buildReport, THREE, MessageFormat.format(Bundle.getMessage("buildContinueAddLocos"), new Object[] { (hpAvailable + extraHpNeeded - currentHp), rlNeedHp.getName(), rld.getName(), numberLocos }));
        } else {
            addLine(_buildReport, FIVE, MessageFormat.format(Bundle.getMessage("buildMaxNumberLocoAssigned"), new Object[] { Setup.getMaxNumberEngines() }));
        }
    }
}
Also used : RollingStock(jmri.jmrit.operations.rollingstock.RollingStock)

Aggregations

RollingStock (jmri.jmrit.operations.rollingstock.RollingStock)43 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)13 Car (jmri.jmrit.operations.rollingstock.cars.Car)13 Route (jmri.jmrit.operations.routes.Route)11 RouteLocation (jmri.jmrit.operations.routes.RouteLocation)11 Track (jmri.jmrit.operations.locations.Track)7 IOException (java.io.IOException)6 ArrayList (java.util.ArrayList)5 Location (jmri.jmrit.operations.locations.Location)5 Engine (jmri.jmrit.operations.rollingstock.engines.Engine)5 Train (jmri.jmrit.operations.trains.Train)5 BufferedWriter (java.io.BufferedWriter)4 File (java.io.File)4 FileOutputStream (java.io.FileOutputStream)4 OutputStreamWriter (java.io.OutputStreamWriter)4 PrintWriter (java.io.PrintWriter)4 Dimension (java.awt.Dimension)2 JPanel (javax.swing.JPanel)2 XmlFile (jmri.jmrit.XmlFile)2 HardcopyWriter (jmri.util.davidflanagan.HardcopyWriter)2