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