001package jmri.jmrit.operations.setup.gui;
002
003import java.awt.GridBagLayout;
004
005import javax.swing.*;
006
007import jmri.InstanceManager;
008import jmri.jmrit.operations.setup.OperationsSetupXml;
009import jmri.jmrit.operations.setup.Setup;
010import jmri.jmrit.operations.trains.TrainManager;
011import jmri.jmrit.operations.trains.TrainManifestHeaderText;
012
013/**
014 * Frame for user edit of manifest header text strings
015 *
016 * @author Dan Boudreau Copyright (C) 2014
017 */
018public class EditManifestHeaderTextPanel extends OperationsPreferencesPanel {
019
020    // major buttons
021    JButton saveButton = new JButton(Bundle.getMessage("ButtonSave"));
022    JButton resetButton = new JButton(Bundle.getMessage("Reset"));
023
024    // car and engine attributes
025    JTextField road_TextField = new JTextField(25);
026    JTextField number_TextField = new JTextField(25);
027    JTextField engineNumber_TextField = new JTextField(25);
028    JTextField type_TextField = new JTextField(25);
029    JTextField length_TextField = new JTextField(25);
030    JTextField weight_TextField = new JTextField(25);
031    JTextField owner_TextField = new JTextField(25);
032    JTextField division_TextField = new JTextField(25);
033    JTextField track_TextField = new JTextField(25);
034    JTextField location_TextField = new JTextField(25);
035    JTextField destination_TextField = new JTextField(25);
036    JTextField dest_track_TextField = new JTextField(25);
037    JTextField comment_TextField = new JTextField(25);
038    JTextField last_train_TextField = new JTextField(25);
039    // car attributes
040    JTextField load_TextField = new JTextField(25);
041    JTextField load_type_TextField = new JTextField(25);
042    JTextField hazardous_TextField = new JTextField(25);
043    JTextField color_TextField = new JTextField(25);
044    JTextField kernel_TextField = new JTextField(25);
045    JTextField final_dest_TextField = new JTextField(25);
046    JTextField final_dest_track_TextField = new JTextField(25);
047    JTextField drop_comment_TextField = new JTextField(25);
048    JTextField pickup_comment_TextField = new JTextField(25);
049    JTextField rwe_TextField = new JTextField(25);
050    // engine attributes
051    JTextField model_TextField = new JTextField(25);
052    JTextField hp_TextField = new JTextField(25);
053    JTextField consist_TextField = new JTextField(25);
054    JTextField dcc_address_TextField = new JTextField(25);
055
056    JCheckBox printHeaderLine1 = new JCheckBox(Bundle.getMessage("PrintHeaderLine1"));
057    JCheckBox printHeaderLine2 = new JCheckBox(Bundle.getMessage("PrintHeaderLine2"));
058    JCheckBox printHeaderLine3 = new JCheckBox(Bundle.getMessage("PrintHeaderLine3"));
059
060    public EditManifestHeaderTextPanel() {
061
062        // the following code sets the frame's initial state
063        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
064
065        // manifest text fields
066        JPanel pManifest = new JPanel();
067        JScrollPane pManifestPane = new JScrollPane(pManifest);
068        pManifestPane.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutManifestHeader")));
069        pManifest.setLayout(new BoxLayout(pManifest, BoxLayout.Y_AXIS));
070
071        JPanel pHeaderLineOptions = new JPanel();
072        pHeaderLineOptions.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutHeaderLines")));
073        pHeaderLineOptions.setLayout(new GridBagLayout());
074
075        addItemLeft(pHeaderLineOptions, printHeaderLine1, 0, 0);
076        addItemLeft(pHeaderLineOptions, printHeaderLine2, 0, 1);
077        addItemLeft(pHeaderLineOptions, printHeaderLine3, 0, 2);
078
079        printHeaderLine1.setSelected(Setup.isPrintHeaderLine1Enabled());
080        printHeaderLine2.setSelected(Setup.isPrintHeaderLine2Enabled());
081        printHeaderLine3.setSelected(Setup.isPrintHeaderLine3Enabled());
082
083        pManifest.add(pHeaderLineOptions);
084
085        JPanel pRoad_TextField = new JPanel();
086        pRoad_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Road")));
087        pRoad_TextField.add(road_TextField);
088        road_TextField.setText(TrainManifestHeaderText.getStringHeader_Road());
089        pManifest.add(pRoad_TextField);
090
091        JPanel pNumber_TextField = new JPanel();
092        pNumber_TextField.setBorder(
093                BorderFactory.createTitledBorder(Bundle.getMessage("Number") + " (" + Bundle.getMessage("Car") + ")"));
094        pNumber_TextField.add(number_TextField);
095        number_TextField.setText(TrainManifestHeaderText.getStringHeader_Number());
096        pManifest.add(pNumber_TextField);
097
098        JPanel pEngineNumber_TextField = new JPanel();
099        pEngineNumber_TextField.setBorder(
100                BorderFactory.createTitledBorder(Bundle.getMessage("Number") + " (" + Bundle.getMessage("Loco") + ")"));
101        pEngineNumber_TextField.add(engineNumber_TextField);
102        engineNumber_TextField.setText(TrainManifestHeaderText.getStringHeader_EngineNumber());
103        pManifest.add(pEngineNumber_TextField);
104
105        JPanel pType_TextField = new JPanel();
106        pType_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Type")));
107        pType_TextField.add(type_TextField);
108        type_TextField.setText(TrainManifestHeaderText.getStringHeader_Type());
109        pManifest.add(pType_TextField);
110
111        JPanel pLength_TextField = new JPanel();
112        pLength_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Length")));
113        pLength_TextField.add(length_TextField);
114        length_TextField.setText(TrainManifestHeaderText.getStringHeader_Length());
115        pManifest.add(pLength_TextField);
116
117        JPanel pWeight_TextField = new JPanel();
118        pWeight_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Weight")));
119        pWeight_TextField.add(weight_TextField);
120        weight_TextField.setText(TrainManifestHeaderText.getStringHeader_Weight());
121        pManifest.add(pWeight_TextField);
122
123        JPanel pOwner_TextField = new JPanel();
124        pOwner_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Owner")));
125        pOwner_TextField.add(owner_TextField);
126        owner_TextField.setText(TrainManifestHeaderText.getStringHeader_Owner());
127        pManifest.add(pOwner_TextField);
128
129        JPanel pTrack_TextField = new JPanel();
130        pTrack_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Track")));
131        pTrack_TextField.add(track_TextField);
132        track_TextField.setText(TrainManifestHeaderText.getStringHeader_Track());
133        pManifest.add(pTrack_TextField);
134
135        JPanel pLocation_TextField = new JPanel();
136        pLocation_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Location")));
137        pLocation_TextField.add(location_TextField);
138        location_TextField.setText(TrainManifestHeaderText.getStringHeader_Location());
139        pManifest.add(pLocation_TextField);
140
141        JPanel pDestination_TextField = new JPanel();
142        pDestination_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Destination")));
143        pDestination_TextField.add(destination_TextField);
144        destination_TextField.setText(TrainManifestHeaderText.getStringHeader_Destination());
145        pManifest.add(pDestination_TextField);
146
147        JPanel pDest_Track_TextField = new JPanel();
148        pDest_Track_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Dest&Track")));
149        pDest_Track_TextField.add(dest_track_TextField);
150        dest_track_TextField.setText(TrainManifestHeaderText.getStringHeader_Dest_Track());
151        pManifest.add(pDest_Track_TextField);
152
153        JPanel pComment_TextField = new JPanel();
154        pComment_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Comment")));
155        pComment_TextField.add(comment_TextField);
156        comment_TextField.setText(TrainManifestHeaderText.getStringHeader_Comment());
157        pManifest.add(pComment_TextField);
158
159        JPanel pLast_Train_TextField = new JPanel();
160        pLast_Train_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("LastTrain")));
161        pLast_Train_TextField.add(last_train_TextField);
162        last_train_TextField.setText(TrainManifestHeaderText.getStringHeader_Last_Train());
163        pManifest.add(pLast_Train_TextField);
164
165        // car attributes
166        JPanel pLoad_TextField = new JPanel();
167        pLoad_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Load")));
168        pLoad_TextField.add(load_TextField);
169        load_TextField.setText(TrainManifestHeaderText.getStringHeader_Load());
170        pManifest.add(pLoad_TextField);
171
172        JPanel pLoad_Type_TextField = new JPanel();
173        pLoad_Type_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Load_Type")));
174        pLoad_Type_TextField.add(load_type_TextField);
175        load_type_TextField.setText(TrainManifestHeaderText.getStringHeader_Load_Type());
176        pManifest.add(pLoad_Type_TextField);
177
178        JPanel pHazardous_TextField = new JPanel();
179        pHazardous_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Hazardous")));
180        pHazardous_TextField.add(hazardous_TextField);
181        hazardous_TextField.setText(TrainManifestHeaderText.getStringHeader_Hazardous());
182        pManifest.add(pHazardous_TextField);
183
184        JPanel pColor_TextField = new JPanel();
185        pColor_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Color")));
186        pColor_TextField.add(color_TextField);
187        color_TextField.setText(TrainManifestHeaderText.getStringHeader_Color());
188        pManifest.add(pColor_TextField);
189
190        JPanel pKernel_TextField = new JPanel();
191        pKernel_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Kernel")));
192        pKernel_TextField.add(kernel_TextField);
193        kernel_TextField.setText(TrainManifestHeaderText.getStringHeader_Kernel());
194        pManifest.add(pKernel_TextField);
195
196        JPanel pFinal_Dest_TextField = new JPanel();
197        pFinal_Dest_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Final_Dest")));
198        pFinal_Dest_TextField.add(final_dest_TextField);
199        final_dest_TextField.setText(TrainManifestHeaderText.getStringHeader_Final_Dest());
200        pManifest.add(pFinal_Dest_TextField);
201
202        JPanel pFinal_Dest_Track_TextField = new JPanel();
203        pFinal_Dest_Track_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("FD&Track")));
204        pFinal_Dest_Track_TextField.add(final_dest_track_TextField);
205        final_dest_track_TextField.setText(TrainManifestHeaderText.getStringHeader_Final_Dest_Track());
206        pManifest.add(pFinal_Dest_Track_TextField);
207
208        JPanel pDrop_Comment_TextField = new JPanel();
209        pDrop_Comment_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("SetOut_Msg")));
210        pDrop_Comment_TextField.add(drop_comment_TextField);
211        drop_comment_TextField.setText(TrainManifestHeaderText.getStringHeader_Drop_Comment());
212        pManifest.add(pDrop_Comment_TextField);
213
214        JPanel pPickup_Comment_TextField = new JPanel();
215        pPickup_Comment_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("PickUp_Msg")));
216        pPickup_Comment_TextField.add(pickup_comment_TextField);
217        pickup_comment_TextField.setText(TrainManifestHeaderText.getStringHeader_Pickup_Comment());
218        pManifest.add(pPickup_Comment_TextField);
219
220        JPanel pRWE_TextField = new JPanel();
221        pRWE_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("RWELabel")));
222        pRWE_TextField.add(rwe_TextField);
223        rwe_TextField.setText(TrainManifestHeaderText.getStringHeader_RWE());
224        pManifest.add(pRWE_TextField);
225
226        JPanel pDivision_TextField = new JPanel();
227        pDivision_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Division")));
228        pDivision_TextField.add(division_TextField);
229        division_TextField.setText(TrainManifestHeaderText.getStringHeader_Division());
230        pManifest.add(pDivision_TextField);
231
232        // engine attributes
233        JPanel pModel_TextField = new JPanel();
234        pModel_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Model")));
235        pModel_TextField.add(model_TextField);
236        model_TextField.setText(TrainManifestHeaderText.getStringHeader_Model());
237        pManifest.add(pModel_TextField);
238
239        JPanel pHp_TextField = new JPanel();
240        pHp_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("HP")));
241        pHp_TextField.add(hp_TextField);
242        hp_TextField.setText(TrainManifestHeaderText.getStringHeader_Hp());
243        pManifest.add(pHp_TextField);
244
245        JPanel pConsist_TextField = new JPanel();
246        pConsist_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Consist")));
247        pConsist_TextField.add(consist_TextField);
248        consist_TextField.setText(TrainManifestHeaderText.getStringHeader_Consist());
249        pManifest.add(pConsist_TextField);
250
251        JPanel pDccAddress_TextField = new JPanel();
252        pDccAddress_TextField.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("DCC_Address")));
253        pDccAddress_TextField.add(dcc_address_TextField);
254        dcc_address_TextField.setText(TrainManifestHeaderText.getStringHeader_DCC_Address());
255        pManifest.add(pDccAddress_TextField);
256
257        // add tool tips
258        saveButton.setToolTipText(Bundle.getMessage("SaveToolTip"));
259
260        // row 11
261        JPanel pControl = new JPanel();
262        pControl.setBorder(BorderFactory.createTitledBorder(""));
263        pControl.setLayout(new GridBagLayout());
264        addItem(pControl, resetButton, 0, 0);
265        addItem(pControl, saveButton, 1, 0);
266
267        add(pManifestPane);
268        add(pControl);
269
270        // set up buttons
271        addButtonAction(resetButton);
272        addButtonAction(saveButton);
273    }
274
275    // Save buttons
276    @Override
277    public void buttonActionPerformed(java.awt.event.ActionEvent ae) {
278        if (ae.getSource() == resetButton) {
279            printHeaderLine1.setSelected(true);
280            printHeaderLine2.setSelected(true);
281            printHeaderLine3.setSelected(true);
282            road_TextField.setText(Bundle.getMessage("Road"));
283            number_TextField.setText(Bundle.getMessage("Number"));
284            engineNumber_TextField.setText(Bundle.getMessage("Number"));
285            type_TextField.setText(Bundle.getMessage("Type"));
286            length_TextField.setText(Bundle.getMessage("Length"));
287            weight_TextField.setText(Bundle.getMessage("Weight"));
288            owner_TextField.setText(Bundle.getMessage("Owner"));
289            division_TextField.setText(Bundle.getMessage("Division"));
290            track_TextField.setText(Bundle.getMessage("Track"));
291            location_TextField.setText(Bundle.getMessage("Location"));
292            destination_TextField.setText(Bundle.getMessage("Destination"));
293            dest_track_TextField.setText(Bundle.getMessage("Dest&Track"));
294            comment_TextField.setText(Bundle.getMessage("Comment"));
295            last_train_TextField.setText(Bundle.getMessage("LastTrain"));
296            // car attributes
297            load_TextField.setText(Bundle.getMessage("Load"));
298            load_type_TextField.setText(Bundle.getMessage("Load_Type"));
299            hazardous_TextField.setText(Bundle.getMessage("Hazardous"));
300            color_TextField.setText(Bundle.getMessage("Color"));
301            final_dest_TextField.setText(Bundle.getMessage("Final_Dest"));
302            final_dest_track_TextField.setText(Bundle.getMessage("FD&Track"));
303            drop_comment_TextField.setText(Bundle.getMessage("SetOut_Msg"));
304            pickup_comment_TextField.setText(Bundle.getMessage("PickUp_Msg"));
305            kernel_TextField.setText(Bundle.getMessage("Kernel"));
306            rwe_TextField.setText(Bundle.getMessage("RWELabel"));
307            // engine attributes
308            model_TextField.setText(Bundle.getMessage("Model"));
309            hp_TextField.setText(Bundle.getMessage("HP"));
310            consist_TextField.setText(Bundle.getMessage("Consist"));
311            dcc_address_TextField.setText(Bundle.getMessage("DCC_Address"));
312        }
313        if (ae.getSource() == saveButton) {
314            this.savePreferences();
315            var topLevelAncestor = getTopLevelAncestor();
316            if (Setup.isCloseWindowOnSaveEnabled() && topLevelAncestor instanceof EditManifestHeaderTextFrame) {
317                ((EditManifestHeaderTextFrame) topLevelAncestor).dispose();
318            }
319        }
320    }
321
322    @Override
323    public String getTabbedPreferencesTitle() {
324        return Bundle.getMessage("TitleManifestHeaderText");
325    }
326
327    @Override
328    public String getPreferencesTooltip() {
329        return null;
330    }
331
332    @Override
333    public void savePreferences() {
334        // header print lines
335        Setup.setPrintHeaderLine1Enabled(printHeaderLine1.isSelected());
336        Setup.setPrintHeaderLine2Enabled(printHeaderLine2.isSelected());
337        Setup.setPrintHeaderLine3Enabled(printHeaderLine3.isSelected());
338        // car and engine attributes
339        TrainManifestHeaderText.setStringHeader_Road(road_TextField.getText());
340        TrainManifestHeaderText.setStringHeader_Number(number_TextField.getText());
341        TrainManifestHeaderText.setStringHeader_EngineNumber(engineNumber_TextField.getText());
342        TrainManifestHeaderText.setStringHeader_Type(type_TextField.getText());
343        TrainManifestHeaderText.setStringHeader_Length(length_TextField.getText());
344        TrainManifestHeaderText.setStringHeader_Weight(weight_TextField.getText());
345        TrainManifestHeaderText.setStringHeader_Owner(owner_TextField.getText());
346        TrainManifestHeaderText.setStringHeader_Track(track_TextField.getText());
347        TrainManifestHeaderText.setStringHeader_Location(location_TextField.getText());
348        TrainManifestHeaderText.setStringHeader_Destination(destination_TextField.getText());
349        TrainManifestHeaderText.setStringHeader_Dest_Track(dest_track_TextField.getText());
350        TrainManifestHeaderText.setStringHeader_Comment(comment_TextField.getText());
351        TrainManifestHeaderText.setStringHeader_Last_Train(last_train_TextField.getText());
352        // car attributes
353        TrainManifestHeaderText.setStringHeader_Load(load_TextField.getText());
354        TrainManifestHeaderText.setStringHeader_Load_Type(load_type_TextField.getText());
355        TrainManifestHeaderText.setStringHeader_Hazardous(hazardous_TextField.getText());
356        TrainManifestHeaderText.setStringHeader_Color(color_TextField.getText());
357        TrainManifestHeaderText.setStringHeader_Final_Dest(final_dest_TextField.getText());
358        TrainManifestHeaderText.setStringHeader_Final_Dest_Track(final_dest_track_TextField.getText());
359        TrainManifestHeaderText.setStringHeader_Drop_Comment(drop_comment_TextField.getText());
360        TrainManifestHeaderText.setStringHeader_Pickup_Comment(pickup_comment_TextField.getText());
361        TrainManifestHeaderText.setStringHeader_Kernel(kernel_TextField.getText());
362        TrainManifestHeaderText.setStringHeader_RWE(rwe_TextField.getText());
363        TrainManifestHeaderText.setStringHeader_Division(division_TextField.getText());
364        // engine attributes
365        TrainManifestHeaderText.setStringHeader_Model(model_TextField.getText());
366        TrainManifestHeaderText.setStringHeader_Hp(hp_TextField.getText());
367        TrainManifestHeaderText.setStringHeader_Consist(consist_TextField.getText());
368        TrainManifestHeaderText.setStringHeader_DCC_Address(dcc_address_TextField.getText());
369
370        InstanceManager.getDefault(OperationsSetupXml.class).writeOperationsFile();
371
372        // recreate all train manifests
373        InstanceManager.getDefault(TrainManager.class).setTrainsModified();
374    }
375
376    @Override
377    public boolean isDirty() {
378        return !(Setup.isPrintHeaderLine1Enabled() == printHeaderLine1.isSelected() &&
379                Setup.isPrintHeaderLine2Enabled() == printHeaderLine2.isSelected() &&
380                Setup.isPrintHeaderLine3Enabled() == printHeaderLine3.isSelected() &&
381                TrainManifestHeaderText.getStringHeader_Road().equals(road_TextField.getText()) &&
382                TrainManifestHeaderText.getStringHeader_Number().equals(number_TextField.getText()) &&
383                TrainManifestHeaderText.getStringHeader_EngineNumber().equals(engineNumber_TextField.getText()) &&
384                TrainManifestHeaderText.getStringHeader_Type().equals(type_TextField.getText()) &&
385                TrainManifestHeaderText.getStringHeader_Length().equals(length_TextField.getText()) &&
386                TrainManifestHeaderText.getStringHeader_Weight().equals(weight_TextField.getText()) &&
387                TrainManifestHeaderText.getStringHeader_Owner().equals(owner_TextField.getText()) &&
388                TrainManifestHeaderText.getStringHeader_Division().equals(division_TextField.getText()) &&
389                TrainManifestHeaderText.getStringHeader_Track().equals(track_TextField.getText()) &&
390                TrainManifestHeaderText.getStringHeader_Location().equals(location_TextField.getText()) &&
391                TrainManifestHeaderText.getStringHeader_Destination().equals(destination_TextField.getText()) &&
392                TrainManifestHeaderText.getStringHeader_Dest_Track().equals(dest_track_TextField.getText()) &&
393                TrainManifestHeaderText.getStringHeader_Comment().equals(comment_TextField.getText()) &&
394                TrainManifestHeaderText.getStringHeader_Last_Train().equals(last_train_TextField.getText()) &&
395                TrainManifestHeaderText.getStringHeader_Load().equals(load_TextField.getText()) &&
396                TrainManifestHeaderText.getStringHeader_Load_Type().equals(load_type_TextField.getText()) &&
397                TrainManifestHeaderText.getStringHeader_Hazardous().equals(hazardous_TextField.getText()) &&
398                TrainManifestHeaderText.getStringHeader_Color().equals(color_TextField.getText()) &&
399                TrainManifestHeaderText.getStringHeader_Final_Dest().equals(final_dest_TextField.getText()) &&
400                TrainManifestHeaderText.getStringHeader_Final_Dest_Track()
401                        .equals(final_dest_track_TextField.getText()) &&
402                TrainManifestHeaderText.getStringHeader_Drop_Comment().equals(drop_comment_TextField.getText()) &&
403                TrainManifestHeaderText.getStringHeader_Pickup_Comment().equals(pickup_comment_TextField.getText()) &&
404                TrainManifestHeaderText.getStringHeader_Kernel().equals(kernel_TextField.getText()) &&
405                TrainManifestHeaderText.getStringHeader_RWE().equals(rwe_TextField.getText()) &&
406                TrainManifestHeaderText.getStringHeader_Model().equals(model_TextField.getText()) &&
407                TrainManifestHeaderText.getStringHeader_Hp().equals(hp_TextField.getText()) &&
408                TrainManifestHeaderText.getStringHeader_Consist().equals(consist_TextField.getText()) &&
409                TrainManifestHeaderText.getStringHeader_DCC_Address().equals(dcc_address_TextField.getText()));
410    }
411}