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}