001package jmri.jmrit.operations.setup.gui; 002 003import java.awt.GridBagLayout; 004import java.util.ResourceBundle; 005 006import javax.swing.*; 007 008import jmri.InstanceManager; 009import jmri.jmrit.operations.setup.OperationsSetupXml; 010import jmri.jmrit.operations.setup.Setup; 011import jmri.jmrit.operations.trains.TrainSwitchListText; 012 013/** 014 * Frame for user edit of switch list text strings 015 * 016 * @author Dan Boudreau Copyright (C) 2013 017 * 018 */ 019public class EditSwitchListTextPanel extends OperationsPreferencesPanel { 020 021// private static final Logger log = LoggerFactory.getLogger(EditSwitchListTextPanel.class); 022 023 protected static final ResourceBundle rb = ResourceBundle 024 .getBundle("jmri.jmrit.operations.trains.JmritOperationsTrainsBundle"); 025 026 // major buttons 027 JButton saveButton = new JButton(Bundle.getMessage("ButtonSave")); 028 JButton resetButton = new JButton(rb.getString("Reset")); 029 030 // text fields 031 JTextField switchListForTextField = new JTextField(60); 032 JTextField scheduledWorkTextField = new JTextField(60); 033 JTextField trainVisitsTextField = new JTextField(60); 034 035 JTextField departsAtTextField = new JTextField(60); 036 JTextField departsAtExpectedArrivalTextField = new JTextField(60); 037 JTextField departedExpectedTextField = new JTextField(60); 038 039 JTextField visitNumberTextField = new JTextField(60); 040 JTextField visitNumberDepartedTextField = new JTextField(60); 041 JTextField visitNumberTerminatesTextField = new JTextField(60); 042 JTextField visitNumberTerminatesDepartedTextField = new JTextField(60); 043 JTextField visitNumberDoneTextField = new JTextField(60); 044 045 JTextField trainDirectionChangeTextField = new JTextField(60); 046 JTextField noCarPickUpsTextField = new JTextField(60); 047 JTextField noCarDropsTextField = new JTextField(60); 048 JTextField trainDoneTextField = new JTextField(60); 049 JTextField trainDepartsCarsTextField = new JTextField(60); 050 JTextField trainDepartsLoadsTextField = new JTextField(60); 051 052 JTextField switchListByTrackTextField = new JTextField(60); 053 JTextField holdCarTextField = new JTextField(60); 054 055 public EditSwitchListTextPanel() { 056 057 // the following code sets the frame's initial state 058 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 059 060 // text fields 061 JPanel pSwitchList = new JPanel(); 062 JScrollPane pSwitchListPane = new JScrollPane(pSwitchList); 063 pSwitchListPane.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutSwitchList"))); 064 pSwitchList.setLayout(new BoxLayout(pSwitchList, BoxLayout.Y_AXIS)); 065 066 JPanel pSwitchListForTextField = new JPanel(); 067 pSwitchListForTextField.setBorder(BorderFactory.createTitledBorder(rb 068 .getString("SwitchListFor"))); 069 pSwitchListForTextField.add(switchListForTextField); 070 switchListForTextField.setText(TrainSwitchListText.getStringSwitchListFor()); 071 switchListForTextField.setToolTipText(rb.getString("ToolTipSwitchListFor")); 072 pSwitchList.add(pSwitchListForTextField); 073 074 JPanel pScheduledWorkTextField = new JPanel(); 075 pScheduledWorkTextField.setBorder(BorderFactory.createTitledBorder(rb.getString("ScheduledWork"))); 076 pScheduledWorkTextField.add(scheduledWorkTextField); 077 scheduledWorkTextField.setText(TrainSwitchListText.getStringScheduledWork()); 078 scheduledWorkTextField.setToolTipText(rb.getString("ToolTipManifestForTrain")); 079 pSwitchList.add(pScheduledWorkTextField); 080 081 JPanel pTrainVisitsField = new JPanel(); 082 pTrainVisitsField.setBorder(BorderFactory.createTitledBorder(rb.getString("TrainVisits"))); 083 pTrainVisitsField.add(trainVisitsTextField); 084 trainVisitsTextField.setText(TrainSwitchListText.getStringTrainVisits()); 085 trainVisitsTextField.setToolTipText(rb.getString("ToolTipManifestForTrain")); 086 pSwitchList.add(pTrainVisitsField); 087 088 JPanel pDepartsAtTextField = new JPanel(); 089 pDepartsAtTextField.setBorder(BorderFactory.createTitledBorder(rb 090 .getString("DepartsAt"))); 091 pDepartsAtTextField.add(departsAtTextField); 092 departsAtTextField.setText(TrainSwitchListText.getStringDepartsAt()); 093 departsAtTextField.setToolTipText(rb.getString("ToolTipDepartsAt")); 094 pSwitchList.add(pDepartsAtTextField); 095 096 JPanel pDepartsAtExpectedArrivalTextField = new JPanel(); 097 pDepartsAtExpectedArrivalTextField 098 .setBorder(BorderFactory.createTitledBorder(rb.getString("DepartsAtExpectedArrival"))); 099 pDepartsAtExpectedArrivalTextField.add(departsAtExpectedArrivalTextField); 100 departsAtExpectedArrivalTextField.setText(TrainSwitchListText.getStringDepartsAtExpectedArrival()); 101 departsAtExpectedArrivalTextField.setToolTipText(rb.getString("ToolTipArrives")); 102 pSwitchList.add(pDepartsAtExpectedArrivalTextField); 103 104 JPanel pDepartedExpectedTextField = new JPanel(); 105 pDepartedExpectedTextField.setBorder(BorderFactory.createTitledBorder(rb 106 .getString("DepartedExpected"))); 107 pDepartedExpectedTextField.add(departedExpectedTextField); 108 departedExpectedTextField.setText(TrainSwitchListText.getStringDepartedExpected()); 109 departedExpectedTextField.setToolTipText(rb.getString("ToolTipDeparted")); 110 pSwitchList.add(pDepartedExpectedTextField); 111 112 JPanel pVisitNumber = new JPanel(); 113 pVisitNumber.setBorder(BorderFactory.createTitledBorder(rb.getString("VisitNumber"))); 114 pVisitNumber.add(visitNumberTextField); 115 visitNumberTextField.setText(TrainSwitchListText.getStringVisitNumber()); 116 visitNumberTextField.setToolTipText(rb.getString("ToolTipVisitNumber")); 117 pSwitchList.add(pVisitNumber); 118 119 JPanel pVisitNumberDeparted = new JPanel(); 120 pVisitNumberDeparted.setBorder(BorderFactory.createTitledBorder(rb.getString("VisitNumberDeparted"))); 121 pVisitNumberDeparted.add(visitNumberDepartedTextField); 122 visitNumberDepartedTextField.setText(TrainSwitchListText.getStringVisitNumberDeparted()); 123 visitNumberDepartedTextField.setToolTipText(rb.getString("ToolTipVisitNumber")); 124 pSwitchList.add(pVisitNumberDeparted); 125 126 JPanel pVisitNumberTerminates = new JPanel(); 127 pVisitNumberTerminates.setBorder(BorderFactory.createTitledBorder(rb.getString("VisitNumberTerminates"))); 128 pVisitNumberTerminates.add(visitNumberTerminatesTextField); 129 visitNumberTerminatesTextField.setText(TrainSwitchListText.getStringVisitNumberTerminates()); 130 visitNumberTerminatesTextField.setToolTipText(rb.getString("ToolTipVisitNumberTerminates")); 131 pSwitchList.add(pVisitNumberTerminates); 132 133 JPanel pVisitNumberTerminatesDepartedTextField = new JPanel(); 134 pVisitNumberTerminatesDepartedTextField.setBorder(BorderFactory.createTitledBorder(rb 135 .getString("VisitNumberTerminatesDeparted"))); 136 pVisitNumberTerminatesDepartedTextField.add(visitNumberTerminatesDepartedTextField); 137 visitNumberTerminatesDepartedTextField.setText(TrainSwitchListText.getStringVisitNumberTerminatesDeparted()); 138 visitNumberTerminatesDepartedTextField.setToolTipText(rb.getString("ToolTipVisitNumberTerminates")); 139 pSwitchList.add(pVisitNumberTerminatesDepartedTextField); 140 141 JPanel pVisitNumberDone = new JPanel(); 142 pVisitNumberDone.setBorder(BorderFactory.createTitledBorder(rb.getString("VisitNumberDone"))); 143 pVisitNumberDone.add(visitNumberDoneTextField); 144 visitNumberDoneTextField.setText(TrainSwitchListText.getStringVisitNumberDone()); 145 visitNumberDoneTextField.setToolTipText(rb.getString("ToolTipVisitNumberDone")); 146 pSwitchList.add(pVisitNumberDone); 147 148 JPanel pTrainDirectionChange = new JPanel(); 149 pTrainDirectionChange.setBorder(BorderFactory.createTitledBorder(rb.getString("TrainDirectionChange"))); 150 pTrainDirectionChange.add(trainDirectionChangeTextField); 151 trainDirectionChangeTextField.setText(TrainSwitchListText.getStringTrainDirectionChange()); 152 trainDirectionChangeTextField.setToolTipText(rb.getString("ToolTipDirectionChange")); 153 pSwitchList.add(pTrainDirectionChange); 154 155 JPanel pNoCarPickUps = new JPanel(); 156 pNoCarPickUps.setBorder(BorderFactory.createTitledBorder(rb.getString("NoCarPickUps"))); 157 pNoCarPickUps.add(noCarPickUpsTextField); 158 noCarPickUpsTextField.setText(TrainSwitchListText.getStringNoCarPickUps()); 159 noCarPickUpsTextField.setToolTipText(rb.getString("ToolTipTrainDone")); 160 pSwitchList.add(pNoCarPickUps); 161 162 JPanel pNoCarDrops = new JPanel(); 163 pNoCarDrops.setBorder(BorderFactory.createTitledBorder(rb.getString("NoCarDrops"))); 164 pNoCarDrops.add(noCarDropsTextField); 165 noCarDropsTextField.setText(TrainSwitchListText.getStringNoCarDrops()); 166 noCarDropsTextField.setToolTipText(rb.getString("ToolTipTrainDone")); 167 pSwitchList.add(pNoCarDrops); 168 169 JPanel pTrainDone = new JPanel(); 170 pTrainDone.setBorder(BorderFactory.createTitledBorder(rb.getString("TrainDone"))); 171 pTrainDone.add(trainDoneTextField); 172 trainDoneTextField.setText(TrainSwitchListText.getStringTrainDone()); 173 trainDoneTextField.setToolTipText(rb.getString("ToolTipTrainDone")); 174 pSwitchList.add(pTrainDone); 175 176 JPanel pTrainDepartsCars = new JPanel(); 177 pTrainDepartsCars.setBorder(BorderFactory.createTitledBorder(rb.getString("TrainDepartsCars"))); 178 pTrainDepartsCars.add(trainDepartsCarsTextField); 179 trainDepartsCarsTextField.setText(TrainSwitchListText.getStringTrainDepartsCars()); 180 trainDepartsCarsTextField.setToolTipText(rb.getString("ToolTipTrainDepartsCars")); 181 pSwitchList.add(pTrainDepartsCars); 182 183 JPanel pTrainDepartsLoadsTextField = new JPanel(); 184 pTrainDepartsLoadsTextField.setBorder(BorderFactory.createTitledBorder(rb.getString("TrainDepartsLoads"))); 185 pTrainDepartsLoadsTextField.add(trainDepartsLoadsTextField); 186 trainDepartsLoadsTextField.setText(TrainSwitchListText.getStringTrainDepartsLoads()); 187 trainDepartsLoadsTextField.setToolTipText(rb.getString("ToolTipTrainDepartsLoads")); 188 pSwitchList.add(pTrainDepartsLoadsTextField); 189 190 JPanel pSwitchListByTrackTextField = new JPanel(); 191 pSwitchListByTrackTextField.setBorder(BorderFactory.createTitledBorder(rb.getString("SwitchListByTrack"))); 192 pSwitchListByTrackTextField.add(switchListByTrackTextField); 193 switchListByTrackTextField.setText(TrainSwitchListText.getStringSwitchListByTrack()); 194 switchListByTrackTextField.setToolTipText(rb.getString("ToolTipSwitchListFor")); 195 pSwitchList.add(pSwitchListByTrackTextField); 196 197 JPanel pHoldCarTextField = new JPanel(); 198 pHoldCarTextField.setBorder(BorderFactory.createTitledBorder(rb.getString("HoldCar"))); 199 pHoldCarTextField.add(holdCarTextField); 200 holdCarTextField.setText(TrainSwitchListText.getStringHoldCar()); 201 holdCarTextField.setToolTipText(rb.getString("ToolTipHoldCar")); 202 pSwitchList.add(pHoldCarTextField); 203 204 // add tool tips 205 saveButton.setToolTipText(Bundle.getMessage("SaveToolTip")); 206 207 // row 11 208 JPanel pControl = new JPanel(); 209 pControl.setBorder(BorderFactory.createTitledBorder("")); 210 pControl.setLayout(new GridBagLayout()); 211 addItem(pControl, resetButton, 0, 0); 212 addItem(pControl, saveButton, 1, 0); 213 214 add(pSwitchListPane); 215 add(pControl); 216 217 // setup buttons 218 addButtonAction(resetButton); 219 addButtonAction(saveButton); 220 } 221 222 // Save buttons 223 @Override 224 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 225 if (ae.getSource() == resetButton) { 226 switchListForTextField.setText(rb.getString("SwitchListFor")); 227 scheduledWorkTextField.setText(rb.getString("ScheduledWork")); 228 trainVisitsTextField.setText(rb.getString("TrainVisits")); 229 230 departsAtTextField.setText(rb.getString("DepartsAt")); 231 departsAtExpectedArrivalTextField.setText(rb.getString("DepartsAtExpectedArrival")); 232 departedExpectedTextField.setText(rb.getString("DepartedExpected")); 233 234 visitNumberTextField.setText(rb.getString("VisitNumber")); 235 visitNumberDepartedTextField.setText(rb.getString("VisitNumberDeparted")); 236 visitNumberTerminatesTextField.setText(rb.getString("VisitNumberTerminates")); 237 visitNumberTerminatesDepartedTextField.setText(rb.getString("VisitNumberTerminatesDeparted")); 238 visitNumberDoneTextField.setText(rb.getString("VisitNumberDone")); 239 240 trainDirectionChangeTextField.setText(rb.getString("TrainDirectionChange")); 241 noCarPickUpsTextField.setText(rb.getString("NoCarPickUps")); 242 noCarDropsTextField.setText(rb.getString("NoCarDrops")); 243 trainDoneTextField.setText(rb.getString("TrainDone")); 244 trainDepartsCarsTextField.setText(rb.getString("TrainDepartsCars")); 245 trainDepartsLoadsTextField.setText(rb.getString("TrainDepartsLoads")); 246 247 switchListByTrackTextField.setText(rb.getString("SwitchListByTrack")); 248 holdCarTextField.setText(rb.getString("HoldCar")); 249 } 250 if (ae.getSource() == saveButton) { 251 this.savePreferences(); 252 var topLevelAncestor = getTopLevelAncestor(); 253 if (Setup.isCloseWindowOnSaveEnabled() && topLevelAncestor instanceof EditSwitchListTextFrame) { 254 ((EditSwitchListTextFrame) topLevelAncestor).dispose(); 255 } 256 } 257 } 258 259 @Override 260 public String getTabbedPreferencesTitle() { 261 return Bundle.getMessage("TitleSwitchListText"); 262 } 263 264 @Override 265 public String getPreferencesTooltip() { 266 return null; 267 } 268 269 @Override 270 public void savePreferences() { 271 TrainSwitchListText.setStringSwitchListFor(switchListForTextField.getText()); 272 TrainSwitchListText.setStringScheduledWork(scheduledWorkTextField.getText()); 273 TrainSwitchListText.setStringTrainVisits(trainVisitsTextField.getText()); 274 275 TrainSwitchListText.setStringDepartsAt(departsAtTextField.getText()); 276 TrainSwitchListText.setStringDepartsAtExpectedArrival(departsAtExpectedArrivalTextField.getText()); 277 TrainSwitchListText.setStringDepartedExpected(departedExpectedTextField.getText()); 278 279 TrainSwitchListText.setStringVisitNumber(visitNumberTextField.getText()); 280 TrainSwitchListText.setStringVisitNumberDeparted(visitNumberDepartedTextField.getText()); 281 TrainSwitchListText.setStringVisitNumberTerminates(visitNumberTerminatesTextField.getText()); 282 TrainSwitchListText.setStringVisitNumberTerminatesDeparted(visitNumberTerminatesDepartedTextField.getText()); 283 TrainSwitchListText.setStringVisitNumberDone(visitNumberDoneTextField.getText()); 284 285 TrainSwitchListText.setStringTrainDirectionChange(trainDirectionChangeTextField.getText()); 286 TrainSwitchListText.setStringNoCarPickUps(noCarPickUpsTextField.getText()); 287 TrainSwitchListText.setStringNoCarDrops(noCarDropsTextField.getText()); 288 TrainSwitchListText.setStringTrainDone(trainDoneTextField.getText()); 289 TrainSwitchListText.setStringTrainDepartsCars(trainDepartsCarsTextField.getText()); 290 TrainSwitchListText.setStringTrainDepartsLoads(trainDepartsLoadsTextField.getText()); 291 292 TrainSwitchListText.setStringSwitchListByTrack(switchListByTrackTextField.getText()); 293 TrainSwitchListText.setStringHoldCar(holdCarTextField.getText()); 294 295 InstanceManager.getDefault(OperationsSetupXml.class).writeOperationsFile(); 296 } 297 298 @Override 299 public boolean isDirty() { 300 return !(TrainSwitchListText.getStringSwitchListFor().equals(switchListForTextField.getText()) 301 && TrainSwitchListText.getStringScheduledWork().equals(scheduledWorkTextField.getText()) 302 && TrainSwitchListText.getStringTrainVisits().equals(trainVisitsTextField.getText()) 303 && TrainSwitchListText.getStringDepartsAt().equals(departsAtTextField.getText()) 304 && TrainSwitchListText.getStringDepartsAtExpectedArrival().equals(departsAtExpectedArrivalTextField.getText()) 305 && TrainSwitchListText.getStringDepartedExpected().equals(departedExpectedTextField.getText()) 306 && TrainSwitchListText.getStringVisitNumber().equals(visitNumberTextField.getText()) 307 && TrainSwitchListText.getStringVisitNumberDeparted().equals(visitNumberDepartedTextField.getText()) 308 && TrainSwitchListText.getStringVisitNumberTerminates().equals(visitNumberTerminatesTextField.getText()) 309 && TrainSwitchListText.getStringVisitNumberTerminatesDeparted().equals(visitNumberTerminatesDepartedTextField.getText()) 310 && TrainSwitchListText.getStringVisitNumberDone().equals(visitNumberDoneTextField.getText()) 311 && TrainSwitchListText.getStringTrainDirectionChange().equals(trainDirectionChangeTextField.getText()) 312 && TrainSwitchListText.getStringNoCarPickUps().equals(noCarPickUpsTextField.getText()) 313 && TrainSwitchListText.getStringNoCarDrops().equals(noCarDropsTextField.getText()) 314 && TrainSwitchListText.getStringTrainDone().equals(trainDoneTextField.getText())) 315 && TrainSwitchListText.getStringTrainDepartsCars().equals(trainDepartsCarsTextField.getText()) 316 && TrainSwitchListText.getStringTrainDepartsLoads().equals(trainDepartsLoadsTextField.getText()) 317 && TrainSwitchListText.getStringSwitchListByTrack().equals(switchListByTrackTextField.getText()) 318 && TrainSwitchListText.getStringHoldCar().equals(holdCarTextField.getText()) 319 ; 320 } 321}