Example #1
0
 /**
  * Uses "ep" prefix to denote a checkbox with an engine pick up, and "es" for an engine set out.
  *
  * @param rl The routeLocation to show loco pick ups or set outs.
  */
 protected void updateLocoPanes(RouteLocation rl) {
   if (Setup.isPrintHeadersEnabled()) {
     JLabel header = new JLabel(Tab + trainCommon.getPickupEngineHeader());
     setLabelFont(header);
     pPickupLocos.add(header);
     JLabel headerDrop = new JLabel(Tab + trainCommon.getDropEngineHeader());
     setLabelFont(headerDrop);
     pSetoutLocos.add(headerDrop);
   }
   // check for locos
   List<Engine> engList = engManager.getByTrainBlockingList(_train);
   for (Engine engine : engList) {
     if (engine.getRouteLocation() == rl && engine.getTrack() != null) {
       locoPane.setVisible(true);
       pPickupLocos.setVisible(true);
       rollingStock.add(engine);
       engine.addPropertyChangeListener(this);
       JCheckBox checkBox;
       if (checkBoxes.containsKey("ep" + engine.getId())) {
         checkBox = checkBoxes.get("ep" + engine.getId());
       } else {
         checkBox = new JCheckBox(trainCommon.pickupEngine(engine));
         setCheckBoxFont(checkBox);
         addCheckBoxAction(checkBox);
         checkBoxes.put("ep" + engine.getId(), checkBox);
       }
       if (isSetMode && !checkBox.isSelected()) {
         pPickupLocos.add(addSet(engine));
       } else {
         pPickupLocos.add(checkBox);
       }
     }
     if (engine.getRouteDestination() == rl) {
       locoPane.setVisible(true);
       pSetoutLocos.setVisible(true);
       rollingStock.add(engine);
       engine.addPropertyChangeListener(this);
       JCheckBox checkBox;
       if (checkBoxes.containsKey("es" + engine.getId())) {
         checkBox = checkBoxes.get("es" + engine.getId());
       } else {
         checkBox = new JCheckBox(trainCommon.dropEngine(engine));
         setCheckBoxFont(checkBox);
         addCheckBoxAction(checkBox);
         checkBoxes.put("es" + engine.getId(), checkBox);
       }
       if (isSetMode && !checkBox.isSelected()) {
         pSetoutLocos.add(addSet(engine));
       } else {
         pSetoutLocos.add(checkBox);
       }
     }
   }
   // pad the panels in case the horizontal scroll bar appears
   pPickupLocos.add(new JLabel(Space));
   pSetoutLocos.add(new JLabel(Space));
 }
Example #2
0
 // replace the car or engine checkbox and text with only the road and number and a Set button
 protected JPanel addSet(RollingStock rs) {
   JPanel pSet = new JPanel();
   pSet.setLayout(new GridBagLayout());
   JButton setButton = new JButton(Bundle.getMessage("Set"));
   setButton.setName(rs.getId());
   setButton.addActionListener(
       (ActionEvent e) -> {
         if (Car.class.isInstance(rs)) {
           carSetButtonActionPerfomed(e);
         } else {
           engineSetButtonActionPerfomed(e);
         }
       });
   JLabel label =
       new JLabel(
           TrainCommon.padString(
               rs.toString(),
               Control.max_len_string_attibute + Control.max_len_string_road_number));
   setLabelFont(label);
   addItem(pSet, label, 0, 0);
   addItemLeft(pSet, setButton, 1, 0);
   pSet.setAlignmentX(LEFT_ALIGNMENT);
   return pSet;
 }
Example #3
0
 /**
  * Block cars by track (optional), then pick up and set out for each location in a train's route.
  * This shows each car with a check box or with a set button. The set button is displayed when the
  * checkbox isn't selected and the display is in "set" mode. If the car is a utility. Show the
  * number of cars that have the same attributes, and not the car's road and number. Each car is
  * displayed only once in one of three panes. The three panes are pick up, set out, or local move.
  * To keep track of each car and which pane to use, they are placed in the list "rollingStock"
  * with the prefix "p", "s" or "m" and the car's unique id.
  */
 protected void blockCars(RouteLocation rl, boolean isManifest) {
   if (Setup.isPrintHeadersEnabled()) {
     JLabel header =
         new JLabel(
             Tab + trainCommon.getPickupCarHeader(isManifest, !TrainCommon.IS_TWO_COLUMN_TRACK));
     setLabelFont(header);
     pPickups.add(header);
     header =
         new JLabel(
             Tab + trainCommon.getDropCarHeader(isManifest, !TrainCommon.IS_TWO_COLUMN_TRACK));
     setLabelFont(header);
     pSetouts.add(header);
     header = new JLabel(Tab + trainCommon.getLocalMoveHeader(isManifest));
     setLabelFont(header);
     pMoves.add(header);
   }
   List<Track> tracks = rl.getLocation().getTrackByNameList(null);
   List<RouteLocation> routeList = _train.getRoute().getLocationsBySequenceList();
   List<Car> carList = carManager.getByTrainDestinationList(_train);
   for (Track track : tracks) {
     for (RouteLocation rld : routeList) {
       for (Car car : carList) {
         // determine if car is a pick up from the right track
         // caboose or FRED is placed at end of the train
         // passenger trains are already blocked in the car list
         if (car.getTrack() != null
             && car.getRouteLocation() == rl
             && car.getRouteDestination() != rl
             && (!Setup.isSortByTrackEnabled() || car.getTrackName().equals(track.getName()))
             && ((car.getRouteDestination() == rld && !car.isCaboose() && !car.hasFred())
                 || (rld == routeList.get(routeList.size() - 1)
                     && (car.isCaboose() || car.hasFred()))
                 || car.isPassenger())) {
           // yes we have a pick up
           pWorkPanes.setVisible(true);
           pickupPane.setVisible(true);
           if (!rollingStock.contains(car)) {
             rollingStock.add(car);
             car.addPropertyChangeListener(this);
           }
           // did we already process this car?
           if (checkBoxes.containsKey("p" + car.getId())) {
             if (isSetMode && !checkBoxes.get("p" + car.getId()).isSelected()) {
               // change to set button so user can remove car from train
               pPickups.add(addSet(car));
             } else {
               pPickups.add(checkBoxes.get("p" + car.getId()));
             }
             // figure out the checkbox text, either single car or utility
           } else {
             String text;
             if (car.isUtility()) {
               text =
                   trainCommon.pickupUtilityCars(
                       carList, car, isManifest, !TrainCommon.IS_TWO_COLUMN_TRACK);
               if (text == null) {
                 continue; // this car type has already been processed
               }
             } else {
               text = trainCommon.pickupCar(car, isManifest, !TrainCommon.IS_TWO_COLUMN_TRACK);
             }
             JCheckBox checkBox = new JCheckBox(text);
             setCheckBoxFont(checkBox);
             addCheckBoxAction(checkBox);
             pPickups.add(checkBox);
             checkBoxes.put("p" + car.getId(), checkBox);
           }
         }
       }
     }
     // set outs and local moves
     for (Car car : carList) {
       if (car.getRouteDestination() != rl || car.getDestinationTrack() == null) {
         continue;
       }
       // car in train if track null, second check is for yard master window
       if (car.getTrack() == null || car.getTrack() != null && (car.getRouteLocation() != rl)) {
         if (Setup.isSortByTrackEnabled()
             && !car.getDestinationTrack().getName().equals(track.getName())) {
           continue;
         }
         // we have set outs
         pWorkPanes.setVisible(true);
         setoutPane.setVisible(true);
         if (!rollingStock.contains(car)) {
           rollingStock.add(car);
           car.addPropertyChangeListener(this);
         }
         if (checkBoxes.containsKey("s" + car.getId())) {
           if (isSetMode && !checkBoxes.get("s" + car.getId()).isSelected()) {
             // change to set button so user can remove car from train
             pSetouts.add(addSet(car));
           } else {
             pSetouts.add(checkBoxes.get("s" + car.getId()));
           }
         } else {
           String text;
           if (car.isUtility()) {
             text = trainCommon.setoutUtilityCars(carList, car, !TrainCommon.LOCAL, isManifest);
             if (text == null) {
               continue; // this car type has already been processed
             }
           } else {
             text = trainCommon.dropCar(car, isManifest, !TrainCommon.IS_TWO_COLUMN_TRACK);
           }
           JCheckBox checkBox = new JCheckBox(text);
           setCheckBoxFont(checkBox);
           addCheckBoxAction(checkBox);
           pSetouts.add(checkBox);
           checkBoxes.put("s" + car.getId(), checkBox);
         }
         // local move?
       } else if (car.getTrack() != null
           && car.getRouteLocation() == rl
           && (!Setup.isSortByTrackEnabled()
               || car.getTrack().getName().equals(track.getName()))) {
         movePane.setVisible(true);
         if (!rollingStock.contains(car)) {
           rollingStock.add(car);
           car.addPropertyChangeListener(this);
         }
         if (checkBoxes.containsKey("m" + car.getId())) {
           if (isSetMode && !checkBoxes.get("m" + car.getId()).isSelected()) {
             // change to set button so user can remove car from train
             pMoves.add(addSet(car));
           } else {
             pMoves.add(checkBoxes.get("m" + car.getId()));
           }
         } else {
           String text;
           if (car.isUtility()) {
             text = trainCommon.setoutUtilityCars(carList, car, TrainCommon.LOCAL, isManifest);
             if (text == null) {
               continue; // this car type has already been processed
             }
           } else {
             text = trainCommon.localMoveCar(car, isManifest);
           }
           JCheckBox checkBox = new JCheckBox(text);
           setCheckBoxFont(checkBox);
           addCheckBoxAction(checkBox);
           pMoves.add(checkBox);
           checkBoxes.put("m" + car.getId(), checkBox);
         }
       }
     }
     // if not sorting by track, we're done
     if (!Setup.isSortByTrackEnabled()) {
       break;
     }
   }
   // pad the panels in case the horizontal scroll bar appears
   pPickups.add(new JLabel(Space));
   pSetouts.add(new JLabel(Space));
   pMoves.add(new JLabel(Space));
 }