001package jmri.jmrit.operations.locations; 002 003import java.awt.GridBagLayout; 004 005import javax.swing.*; 006 007import jmri.jmrit.operations.locations.schedules.tools.SchedulesAndStagingAction; 008import jmri.jmrit.operations.locations.tools.TrackDestinationEditAction; 009import jmri.jmrit.operations.routes.Route; 010import jmri.jmrit.operations.trains.Train; 011 012/** 013 * Frame for user edit of a staging track 014 * 015 * @author Dan Boudreau Copyright (C) 2008, 2011 016 */ 017public class StagingEditFrame extends TrackEditFrame { 018 019 // check boxes 020 JCheckBox swapLoadsCheckBox = new JCheckBox(Bundle.getMessage("SwapCarLoads")); 021 JCheckBox emptyCheckBox = new JCheckBox(Bundle.getMessage("EmptyDefaultCarLoads")); 022 JCheckBox emptyCustomCheckBox = new JCheckBox(Bundle.getMessage("EmptyCarLoads")); 023 JCheckBox loadCheckBox = new JCheckBox(Bundle.getMessage("LoadCarLoads")); 024 JCheckBox loadAnyCheckBox = new JCheckBox(Bundle.getMessage("LoadAnyCarLoads")); 025 JCheckBox loadAnyStagingCheckBox = new JCheckBox(Bundle.getMessage("LoadsStaging")); 026 JCheckBox blockCarsCheckBox = new JCheckBox(Bundle.getMessage("BlockCars")); 027 028 JPanel panelLoad = panelOpt4; 029 030 public StagingEditFrame() { 031 super(Bundle.getMessage("AddStaging")); 032 } 033 034 @Override 035 public void initComponents(Track track) { 036 setTitle(Bundle.getMessage("EditStaging", track.getLocation().getName())); 037 initComponents(track.getLocation(), track); 038 } 039 040 @Override 041 public void initComponents(Location location, Track track) { 042 _type = Track.STAGING; 043 044 // setup the optional panel with staging stuff 045 panelLoad.setLayout(new BoxLayout(panelLoad, BoxLayout.X_AXIS)); 046 047 JPanel p1 = new JPanel(); 048 p1.setLayout(new GridBagLayout()); 049 p1.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("OptionalLoads"))); 050 addItemLeft(p1, swapLoadsCheckBox, 0, 0); 051 addItemLeft(p1, emptyCheckBox, 0, 1); 052 053 JPanel p2 = new JPanel(); 054 p2.setLayout(new GridBagLayout()); 055 p2.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("OptionalCustomLoads"))); 056 addItemLeft(p2, emptyCustomCheckBox, 0, 0); 057 addItemLeft(p2, loadCheckBox, 0, 1); 058 addItemLeft(p2, loadAnyCheckBox, 0, 2); 059 addItemLeft(p2, loadAnyStagingCheckBox, 0, 3); 060 061 JPanel p3 = new JPanel(); 062 p3.setLayout(new GridBagLayout()); 063 p3.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("OptionalBlocking"))); 064 addItemLeft(p3, blockCarsCheckBox, 0, 0); 065 066 // load tool tips 067 blockCarsCheckBox.setToolTipText(Bundle.getMessage("TipBlockByPickUp")); 068 069 panelLoad.add(p1); 070 panelLoad.add(p2); 071 panelLoad.add(p3); 072 073 super.initComponents(location, track); 074 075 _toolMenu.insert(new TrackDestinationEditAction(this), 0); 076 // place at end of menu 077 _toolMenu.add(new SchedulesAndStagingAction()); 078 addHelpMenu("package.jmri.jmrit.operations.Operations_Staging", true); // NOI18N 079 080 // override text strings for tracks 081 panelTrainDir.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("TrainStaging"))); 082 paneCheckBoxes 083 .setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("TypesStaging"))); 084 dropPanel 085 .setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("SelectTrainArrival"))); 086 pickupPanel.setBorder(BorderFactory.createTitledBorder(Bundle 087 .getMessage("SelectTrainDeparture"))); 088 deleteTrackButton.setText(Bundle.getMessage("DeleteStaging")); 089 addTrackButton.setText(Bundle.getMessage("AddStaging")); 090 saveTrackButton.setText(Bundle.getMessage("SaveStaging")); 091 092 // setup the check boxes 093 if (_track != null) { 094 swapLoadsCheckBox.setSelected(_track.isLoadSwapEnabled()); 095 emptyCheckBox.setSelected(_track.isLoadEmptyEnabled()); 096 emptyCustomCheckBox.setSelected(_track.isRemoveCustomLoadsEnabled()); 097 loadCheckBox.setSelected(_track.isAddCustomLoadsEnabled()); 098 loadAnyCheckBox.setSelected(_track.isAddCustomLoadsAnySpurEnabled()); 099 loadAnyStagingCheckBox.setSelected(_track.isAddCustomLoadsAnyStagingTrackEnabled()); 100 blockCarsCheckBox.setSelected(_track.isBlockCarsEnabled()); 101 if (loadCheckBox.isSelected() || loadAnyCheckBox.isSelected() 102 || loadAnyStagingCheckBox.isSelected()) { 103 blockCarsCheckBox.setSelected(false); 104 } 105 } 106 107 addCheckBoxAction(swapLoadsCheckBox); 108 addCheckBoxAction(emptyCheckBox); 109 addCheckBoxAction(loadCheckBox); 110 addCheckBoxAction(loadAnyCheckBox); 111 addCheckBoxAction(loadAnyStagingCheckBox); 112 113 // finish 114 panelOrder.setVisible(false); // Car order out of staging isn't necessary 115 pack(); 116 setVisible(true); 117 } 118 119 @Override 120 protected void saveTrack(Track track) { 121 track.setLoadSwapEnabled(swapLoadsCheckBox.isSelected()); 122 track.setLoadEmptyEnabled(emptyCheckBox.isSelected()); 123 track.setRemoveCustomLoadsEnabled(emptyCustomCheckBox.isSelected()); 124 track.setAddCustomLoadsEnabled(loadCheckBox.isSelected()); 125 track.setAddCustomLoadsAnySpurEnabled(loadAnyCheckBox.isSelected()); 126 track.setAddCustomLoadsAnyStagingTrackEnabled(loadAnyStagingCheckBox.isSelected()); 127 track.setBlockCarsEnabled(blockCarsCheckBox.isSelected()); 128 super.saveTrack(track); 129 } 130 131 @Override 132 protected void enableButtons(boolean enabled) { 133 swapLoadsCheckBox.setEnabled(enabled); 134 emptyCheckBox.setEnabled(enabled); 135 emptyCustomCheckBox.setEnabled(enabled); 136 loadCheckBox.setEnabled(enabled); 137 loadAnyCheckBox.setEnabled(enabled); 138 loadAnyStagingCheckBox.setEnabled(enabled); 139 blockCarsCheckBox.setEnabled(_track != null && !_track.isAddCustomLoadsEnabled() && !_track.isAddCustomLoadsAnySpurEnabled() 140 && !_track.isAddCustomLoadsAnyStagingTrackEnabled() && enabled); 141 // show ship loads 142 pShipLoadOption.setVisible(_track == null || _track.isAddCustomLoadsEnabled() 143 || _track.isAddCustomLoadsAnySpurEnabled() || _track.isAddCustomLoadsAnyStagingTrackEnabled() 144 || !_track.getShipLoadOption().equals(Track.ALL_LOADS)); 145 super.enableButtons(enabled); 146 } 147 148 @Override 149 protected void updateTrainComboBox() { 150 super.updateTrainComboBox(); 151 // only show trains that depart from this staging location 152 if (autoPickupCheckBox.isSelected()) { 153 for (int i = 1; i < comboBoxPickupTrains.getItemCount(); i++) { 154 Train train = comboBoxPickupTrains.getItemAt(i); 155 if (!train.getTrainDepartsName().equals(_location.getName())) { 156 comboBoxPickupTrains.removeItemAt(i--); 157 } 158 } 159 } 160 // only show trains that terminate into this staging location 161 if (autoDropCheckBox.isSelected()) { 162 for (int i = 1; i < comboBoxDropTrains.getItemCount(); i++) { 163 Train train = comboBoxDropTrains.getItemAt(i); 164 if (!train.getTrainTerminatesName().equals(_location.getName())) { 165 comboBoxDropTrains.removeItemAt(i--); 166 } 167 } 168 } 169 } 170 171 @Override 172 protected void updateRouteComboBox() { 173 super.updateRouteComboBox(); 174 // only show routes that depart from this staging location 175 if (autoPickupCheckBox.isSelected()) { 176 for (int i = 1; i < comboBoxPickupRoutes.getItemCount(); i++) { 177 Route route = comboBoxPickupRoutes.getItemAt(i); 178 if (route.getLocationsBySequenceList().get(0).getLocation() != _location) { 179 comboBoxPickupRoutes.removeItemAt(i--); 180 } 181 } 182 } 183 // only show routes that terminate into this staging location 184 if (autoDropCheckBox.isSelected()) { 185 for (int i = 1; i < comboBoxDropRoutes.getItemCount(); i++) { 186 Route route = comboBoxDropRoutes.getItemAt(i); 187 if (route.getLocationsBySequenceList().get(route.getLocationsBySequenceList().size()-1).getLocation() != _location) { 188 comboBoxDropRoutes.removeItemAt(i--); 189 } 190 } 191 } 192 } 193 194 @Override 195 public void checkBoxActionPerformed(java.awt.event.ActionEvent ae) { 196 if (ae.getSource() == swapLoadsCheckBox) { 197 if (swapLoadsCheckBox.isSelected()) { 198 emptyCheckBox.setSelected(false); 199 } 200 } else if (ae.getSource() == emptyCheckBox) { 201 if (emptyCheckBox.isSelected()) { 202 swapLoadsCheckBox.setSelected(false); 203 } 204 } else if (ae.getSource() == loadCheckBox) { 205 if (loadCheckBox.isSelected()) { 206 loadAnyCheckBox.setSelected(false); 207 blockCarsCheckBox.setSelected(false); 208 blockCarsCheckBox.setEnabled(false); 209 } else if (!loadAnyCheckBox.isSelected() && !loadAnyStagingCheckBox.isSelected()) { 210 blockCarsCheckBox.setEnabled(true); 211 } 212 } else if (ae.getSource() == loadAnyCheckBox) { 213 if (loadAnyCheckBox.isSelected()) { 214 loadCheckBox.setSelected(false); 215 blockCarsCheckBox.setSelected(false); 216 blockCarsCheckBox.setEnabled(false); 217 } else if (!loadCheckBox.isSelected() && !loadAnyStagingCheckBox.isSelected()) { 218 blockCarsCheckBox.setEnabled(true); 219 } 220 } else if (ae.getSource() == loadAnyStagingCheckBox) { 221 if (loadAnyStagingCheckBox.isSelected()) { 222 blockCarsCheckBox.setSelected(false); 223 blockCarsCheckBox.setEnabled(false); 224 } else if (!loadCheckBox.isSelected() && !loadAnyCheckBox.isSelected()) { 225 blockCarsCheckBox.setEnabled(true); 226 } 227 } else { 228 super.checkBoxActionPerformed(ae); 229 } 230 } 231 232// private final static Logger log = LoggerFactory.getLogger(StagingEditFrame.class); 233}