001package jmri.jmrit.ctc.editor.gui;
002
003import jmri.jmrit.ctc.editor.code.AwtWindowProperties;
004import jmri.jmrit.ctc.editor.code.CheckJMRIObject;
005import jmri.jmrit.ctc.editor.code.CodeButtonHandlerDataRoutines;
006import jmri.jmrit.ctc.editor.code.CommonSubs;
007import jmri.jmrit.ctc.editor.code.ProgramProperties;
008import java.util.ArrayList;
009import jmri.jmrit.ctc.NBHTurnout;
010import jmri.jmrit.ctc.ctcserialdata.CodeButtonHandlerData;
011import jmri.jmrit.ctc.ctcserialdata.ProjectsCommonSubs;
012
013/**
014 *
015 * @author Gregory J. Bedlek Copyright (C) 2018, 2019
016 */
017public class FrmSWDI extends javax.swing.JFrame {
018
019    private static final String FORM_PROPERTIES = "DlgSWDI";    // NOI18N
020    private static final String PREFIX = "_mSWDI_";             // NOI18N
021    private final AwtWindowProperties _mAwtWindowProperties;
022    private boolean _mClosedNormally = false;
023    public boolean closedNormally() { return _mClosedNormally; }
024    private final CodeButtonHandlerData _mCodeButtonHandlerData;
025    private final ProgramProperties _mProgramProperties;
026    private final CheckJMRIObject _mCheckJMRIObject;
027
028    private String _mSWDI_ExternalTurnoutOrig;
029    private int _mSWDI_CodingTimeInMillisecondsOrig;
030    private boolean _mSWDI_FeedbackDifferentOrig;
031    private CodeButtonHandlerData.TURNOUT_TYPE _mSWDI_GUITurnoutTypeOrig;
032    private boolean _mSWDI_GUITurnoutLeftHandOrig;
033    private boolean _mSWDI_GUICrossoverLeftHandOrig;
034
035    private void initOrig() {
036        _mSWDI_ExternalTurnoutOrig = _mCodeButtonHandlerData._mSWDI_ExternalTurnout.getHandleName();
037        _mSWDI_CodingTimeInMillisecondsOrig = _mCodeButtonHandlerData._mSWDI_CodingTimeInMilliseconds;
038        _mSWDI_FeedbackDifferentOrig = _mCodeButtonHandlerData._mSWDI_FeedbackDifferent;
039        _mSWDI_GUITurnoutTypeOrig = _mCodeButtonHandlerData._mSWDI_GUITurnoutType;
040        _mSWDI_GUITurnoutLeftHandOrig = _mCodeButtonHandlerData._mSWDI_GUITurnoutLeftHand;
041        _mSWDI_GUICrossoverLeftHandOrig = _mCodeButtonHandlerData._mSWDI_GUICrossoverLeftHand;
042    }
043    private boolean dataChanged() {
044        if (!_mSWDI_ExternalTurnoutOrig.equals(_mSWDI_ExternalTurnout.getSelectedItem())) return true;
045        if (CommonSubs.getIntFromJTextFieldNoThrow(_mSWDI_CodingTimeInMilliseconds) != _mSWDI_CodingTimeInMillisecondsOrig) return true;
046        if (_mSWDI_FeedbackDifferentOrig != _mSWDI_FeedbackDifferent.isSelected()) return true;
047        if (_mSWDI_GUITurnoutTypeOrig != CodeButtonHandlerData.TURNOUT_TYPE.getTurnoutType(_mSWDI_GUITurnoutType)) return true;
048        if (_mSWDI_GUITurnoutLeftHandOrig != _mSWDI_GUITurnoutLeftHand.isSelected()) return true;
049        if (_mSWDI_GUICrossoverLeftHandOrig != _mSWDI_GUICrossoverLeftHand.isSelected()) return true;
050        return false;
051    }
052
053    public FrmSWDI( AwtWindowProperties awtWindowProperties, CodeButtonHandlerData codeButtonHandlerData,
054                    ProgramProperties programProperties, CheckJMRIObject checkJMRIObject) {
055        super();
056        initComponents();
057        CommonSubs.addHelpMenu(this, "package.jmri.jmrit.ctc.CTC_frmSWDI", true);  // NOI18N
058        _mAwtWindowProperties = awtWindowProperties;
059        _mCodeButtonHandlerData = codeButtonHandlerData;
060        _mProgramProperties = programProperties;
061        _mCheckJMRIObject = checkJMRIObject;
062        CommonSubs.numberButtonGroup(_mSWDI_GUITurnoutType);
063        CommonSubs.setButtonSelected(_mSWDI_GUITurnoutType, _mCodeButtonHandlerData._mSWDI_GUITurnoutType.getInt());
064        CommonSubs.setMillisecondsEdit(_mSWDI_CodingTimeInMilliseconds);
065        CommonSubs.populateJComboBoxWithBeans(_mSWDI_NormalInternalSensor, "Sensor", _mCodeButtonHandlerData._mSWDI_NormalInternalSensor.getHandleName(), false);   // NOI18N
066        CommonSubs.populateJComboBoxWithBeans(_mSWDI_ReversedInternalSensor, "Sensor", _mCodeButtonHandlerData._mSWDI_ReversedInternalSensor.getHandleName(), false);   // NOI18N
067        CommonSubs.populateJComboBoxWithBeans(_mSWDI_ExternalTurnout, "Turnout", _mCodeButtonHandlerData._mSWDI_ExternalTurnout.getHandleName(), true);
068        _mSWDI_CodingTimeInMilliseconds.setText(Integer.toString(_mCodeButtonHandlerData._mSWDI_CodingTimeInMilliseconds));
069        _mSWDI_FeedbackDifferent.setSelected(_mCodeButtonHandlerData._mSWDI_FeedbackDifferent);
070        _mSWDI_GUITurnoutLeftHand.setSelected(_mCodeButtonHandlerData._mSWDI_GUITurnoutLeftHand);
071        _mSWDI_GUICrossoverLeftHand.setSelected(_mCodeButtonHandlerData._mSWDI_GUICrossoverLeftHand);
072        initOrig();
073        _mAwtWindowProperties.setWindowState(this, FORM_PROPERTIES);
074        this.getRootPane().setDefaultButton(_mSaveAndClose);
075    }
076
077    public static boolean dialogCodeButtonHandlerDataValid(CheckJMRIObject checkJMRIObject, CodeButtonHandlerData codeButtonHandlerData) {
078        if (!codeButtonHandlerData._mSWDI_Enabled) return true; // Not enabled, can be no error!
079//  Checks:
080        if (ProjectsCommonSubs.isNullOrEmptyString(codeButtonHandlerData._mSWDI_NormalInternalSensor.getHandleName())) return false;
081        if (ProjectsCommonSubs.isNullOrEmptyString(codeButtonHandlerData._mSWDI_ReversedInternalSensor.getHandleName())) return false;
082        if (ProjectsCommonSubs.isNullOrEmptyString(codeButtonHandlerData._mSWDI_ExternalTurnout.getHandleName())) return false;
083        return checkJMRIObject.validClassWithPrefix(PREFIX, codeButtonHandlerData);
084    }
085
086//  Validate all internal fields as much as possible:
087    private ArrayList<String> formFieldsValid() {
088        ArrayList<String> errors = new ArrayList<>();
089//  Checks:
090        CommonSubs.checkJComboBoxNotEmpty(_mSWDI_ExternalTurnout, _mSWDI_ActualTurnoutPrompt, errors);
091        _mCheckJMRIObject.analyzeForm(PREFIX, this, errors);
092        return errors;
093    }
094
095    /**
096     * This method is called from within the constructor to initialize the form.
097     * WARNING: Do NOT modify this code. The content of this method is always
098     * regenerated by the Form Editor.
099     */
100    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
101    private void initComponents() {
102
103        _mSWDI_GUITurnoutType = new javax.swing.ButtonGroup();
104        _mSaveAndClose = new javax.swing.JButton();
105        _mSWDI_NormalInternalSensorPrompt = new javax.swing.JLabel();
106        _mSWDI_NormalInternalSensor = new javax.swing.JComboBox<>();
107        _mSWDI_ReversedInternalSensorPrompt = new javax.swing.JLabel();
108        _mSWDI_ReversedInternalSensor = new javax.swing.JComboBox<>();
109        _mSWDI_ActualTurnoutPrompt = new javax.swing.JLabel();
110        _mSWDI_ExternalTurnout = new javax.swing.JComboBox<>();
111        jLabel19 = new javax.swing.JLabel();
112        _mSWDI_CodingTimeInMilliseconds = new javax.swing.JFormattedTextField();
113        _mSWDI_FeedbackDifferent = new javax.swing.JCheckBox();
114        jLabel2 = new javax.swing.JLabel();
115        jButton2 = new javax.swing.JButton();
116        jLabel3 = new javax.swing.JLabel();
117        _mSWDI_GUITurnoutLeftHand = new javax.swing.JCheckBox();
118        _mSWDI_GUICrossoverLeftHand = new javax.swing.JCheckBox();
119        _mTurnout = new javax.swing.JRadioButton();
120        _mCrossover = new javax.swing.JRadioButton();
121        _mDoubleCrossover = new javax.swing.JRadioButton();
122
123        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
124        setTitle(Bundle.getMessage("TitleSWDI"));
125        addWindowListener(new java.awt.event.WindowAdapter() {
126            @Override
127            public void windowClosing(java.awt.event.WindowEvent evt) {
128                formWindowClosing(evt);
129            }
130        });
131
132        _mSaveAndClose.setText(Bundle.getMessage("ButtonSaveClose"));
133        _mSaveAndClose.addActionListener(new java.awt.event.ActionListener() {
134            @Override
135            public void actionPerformed(java.awt.event.ActionEvent evt) {
136                _mSaveAndCloseActionPerformed(evt);
137            }
138        });
139
140        _mSWDI_NormalInternalSensorPrompt.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
141        _mSWDI_NormalInternalSensorPrompt.setText(Bundle.getMessage("LabelSWDINormal"));
142
143        _mSWDI_NormalInternalSensor.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
144
145        _mSWDI_ReversedInternalSensorPrompt.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
146        _mSWDI_ReversedInternalSensorPrompt.setText(Bundle.getMessage("LabelSWDIReverse"));
147
148        _mSWDI_ReversedInternalSensor.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
149
150        _mSWDI_ActualTurnoutPrompt.setText(Bundle.getMessage("LabelSWDIToName"));
151
152        _mSWDI_ExternalTurnout.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
153
154        jLabel19.setText(Bundle.getMessage("LabelSWDITime"));
155
156        _mSWDI_CodingTimeInMilliseconds.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));
157
158        _mSWDI_FeedbackDifferent.setText(" ");
159
160        jLabel2.setText(Bundle.getMessage("LabelSWDIFeedback"));
161
162        jButton2.setText(Bundle.getMessage("ButtonReapply"));
163        jButton2.addActionListener(new java.awt.event.ActionListener() {
164            @Override
165            public void actionPerformed(java.awt.event.ActionEvent evt) {
166                jButton2ActionPerformed(evt);
167            }
168        });
169
170        jLabel3.setText(Bundle.getMessage("InfoSWDIGUI"));
171
172        _mSWDI_GUITurnoutLeftHand.setText(Bundle.getMessage("LabelSWDILeft"));
173
174        _mSWDI_GUICrossoverLeftHand.setText(Bundle.getMessage("LabelSWDIAlso"));
175
176        _mSWDI_GUITurnoutType.add(_mTurnout);
177        _mTurnout.setText(Bundle.getMessage("LabelSWDITurnout"));
178        _mTurnout.addActionListener(new java.awt.event.ActionListener() {
179            @Override
180            public void actionPerformed(java.awt.event.ActionEvent evt) {
181                _mTurnoutActionPerformed(evt);
182            }
183        });
184
185        _mSWDI_GUITurnoutType.add(_mCrossover);
186        _mCrossover.setText(Bundle.getMessage("LabelSWDIXOver"));
187        _mCrossover.addActionListener(new java.awt.event.ActionListener() {
188            @Override
189            public void actionPerformed(java.awt.event.ActionEvent evt) {
190                _mCrossoverActionPerformed(evt);
191            }
192        });
193
194        _mSWDI_GUITurnoutType.add(_mDoubleCrossover);
195        _mDoubleCrossover.setText(Bundle.getMessage("LabelSWDIDouble"));
196        _mDoubleCrossover.addActionListener(new java.awt.event.ActionListener() {
197            @Override
198            public void actionPerformed(java.awt.event.ActionEvent evt) {
199                _mDoubleCrossoverActionPerformed(evt);
200            }
201        });
202
203        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
204        getContentPane().setLayout(layout);
205        layout.setHorizontalGroup(
206            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
207            .addGroup(layout.createSequentialGroup()
208                .addContainerGap()
209                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
210                    .addGroup(layout.createSequentialGroup()
211                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
212                            .addComponent(_mSWDI_ActualTurnoutPrompt)
213                            .addComponent(jLabel19)
214                            .addComponent(_mSWDI_ReversedInternalSensorPrompt, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
215                            .addComponent(_mSWDI_NormalInternalSensorPrompt, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
216                            .addComponent(jLabel2))
217                        .addGap(12, 12, 12)
218                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
219                            .addComponent(_mSWDI_ReversedInternalSensor, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
220                            .addComponent(_mSWDI_NormalInternalSensor, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
221                            .addComponent(_mSWDI_CodingTimeInMilliseconds, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
222                            .addComponent(_mSWDI_FeedbackDifferent)
223                            .addComponent(_mSWDI_ExternalTurnout, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
224                    .addGroup(layout.createSequentialGroup()
225                        .addComponent(jLabel3)
226                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
227                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
228                            .addComponent(jButton2)
229                            .addGroup(layout.createSequentialGroup()
230                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
231                                    .addComponent(_mCrossover)
232                                    .addComponent(_mTurnout))
233                                .addGap(41, 41, 41)
234                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
235                                    .addComponent(_mSWDI_GUITurnoutLeftHand)
236                                    .addComponent(_mSWDI_GUICrossoverLeftHand)))
237                            .addComponent(_mDoubleCrossover)
238                            .addGroup(layout.createSequentialGroup()
239                                .addGap(43, 43, 43)
240                                .addComponent(_mSaveAndClose)))))
241                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
242        );
243        layout.setVerticalGroup(
244            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
245            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
246                .addContainerGap()
247                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
248                    .addComponent(_mSWDI_NormalInternalSensorPrompt, javax.swing.GroupLayout.PREFERRED_SIZE, 12, javax.swing.GroupLayout.PREFERRED_SIZE)
249                    .addComponent(_mSWDI_NormalInternalSensor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
250                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
251                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
252                    .addComponent(_mSWDI_ReversedInternalSensorPrompt)
253                    .addComponent(_mSWDI_ReversedInternalSensor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
254                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
255                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
256                    .addComponent(_mSWDI_ActualTurnoutPrompt)
257                    .addComponent(_mSWDI_ExternalTurnout, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
258                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
259                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
260                    .addComponent(_mSWDI_CodingTimeInMilliseconds, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
261                    .addComponent(jLabel19))
262                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
263                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
264                    .addComponent(jLabel2)
265                    .addComponent(_mSWDI_FeedbackDifferent))
266                .addGap(22, 22, 22)
267                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
268                    .addComponent(jLabel3)
269                    .addComponent(_mSWDI_GUITurnoutLeftHand)
270                    .addComponent(_mTurnout))
271                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
272                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
273                    .addComponent(_mCrossover)
274                    .addComponent(_mSWDI_GUICrossoverLeftHand))
275                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
276                .addComponent(_mDoubleCrossover)
277                .addGap(18, 18, 18)
278                .addComponent(_mSaveAndClose)
279                .addGap(38, 38, 38)
280                .addComponent(jButton2)
281                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
282        );
283
284        pack();
285    }// </editor-fold>//GEN-END:initComponents
286
287    private void _mSaveAndCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__mSaveAndCloseActionPerformed
288        if (CommonSubs.missingFieldsErrorDialogDisplayed(this, formFieldsValid(), false)) {
289            return; // Do not allow exit or transfer of data.
290        }
291
292        _mCodeButtonHandlerData._mSWDI_NormalInternalSensor = CommonSubs.getNBHSensor((String) _mSWDI_NormalInternalSensor.getSelectedItem(), false);
293        _mCodeButtonHandlerData._mSWDI_ReversedInternalSensor = CommonSubs.getNBHSensor((String) _mSWDI_ReversedInternalSensor.getSelectedItem(), false);
294
295        NBHTurnout newTurnout = CommonSubs.getNBHTurnout((String) _mSWDI_ExternalTurnout.getSelectedItem(), _mSWDI_FeedbackDifferent.isSelected());
296        _mCodeButtonHandlerData._mSWDI_ExternalTurnout = newTurnout;
297
298        _mCodeButtonHandlerData._mSWDI_CodingTimeInMilliseconds = CommonSubs.getIntFromJTextFieldNoThrow(_mSWDI_CodingTimeInMilliseconds);
299        _mCodeButtonHandlerData._mSWDI_FeedbackDifferent = _mSWDI_FeedbackDifferent.isSelected();
300        _mCodeButtonHandlerData._mSWDI_GUITurnoutType = CodeButtonHandlerData.TURNOUT_TYPE.getTurnoutType(_mSWDI_GUITurnoutType);
301        _mCodeButtonHandlerData._mSWDI_GUITurnoutLeftHand = _mSWDI_GUITurnoutLeftHand.isSelected();
302        _mCodeButtonHandlerData._mSWDI_GUICrossoverLeftHand = _mSWDI_GUICrossoverLeftHand.isSelected();
303        _mClosedNormally = true;
304        _mAwtWindowProperties.saveWindowState(this, FORM_PROPERTIES);
305        dispose();
306    }//GEN-LAST:event__mSaveAndCloseActionPerformed
307
308    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
309        _mAwtWindowProperties.saveWindowState(this, FORM_PROPERTIES);
310        if (CommonSubs.allowClose(this, dataChanged())) dispose();
311    }//GEN-LAST:event_formWindowClosing
312
313    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
314        CodeButtonHandlerData temp = _mCodeButtonHandlerData;
315        temp = CodeButtonHandlerDataRoutines.uECBHDWSD_SWDI(_mProgramProperties, temp);
316        CommonSubs.populateJComboBoxWithBeans(_mSWDI_NormalInternalSensor, "Sensor", temp._mSWDI_NormalInternalSensor.getHandleName(), false);   // NOI18N
317        CommonSubs.populateJComboBoxWithBeans(_mSWDI_ReversedInternalSensor, "Sensor", temp._mSWDI_ReversedInternalSensor.getHandleName(), false);   // NOI18N
318    }//GEN-LAST:event_jButton2ActionPerformed
319
320    private void _mTurnoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__mTurnoutActionPerformed
321        _mSWDI_GUITurnoutLeftHand.setEnabled(true);
322        _mSWDI_GUICrossoverLeftHand.setEnabled(false);
323    }//GEN-LAST:event__mTurnoutActionPerformed
324
325    private void _mCrossoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__mCrossoverActionPerformed
326        _mSWDI_GUITurnoutLeftHand.setEnabled(true);
327        _mSWDI_GUICrossoverLeftHand.setEnabled(true);
328    }//GEN-LAST:event__mCrossoverActionPerformed
329
330    private void _mDoubleCrossoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__mDoubleCrossoverActionPerformed
331        _mSWDI_GUITurnoutLeftHand.setEnabled(false);
332        _mSWDI_GUICrossoverLeftHand.setEnabled(false);
333    }//GEN-LAST:event__mDoubleCrossoverActionPerformed
334
335    // Variables declaration - do not modify//GEN-BEGIN:variables
336    private javax.swing.JRadioButton _mCrossover;
337    private javax.swing.JRadioButton _mDoubleCrossover;
338    private javax.swing.JLabel _mSWDI_ActualTurnoutPrompt;
339    private javax.swing.JFormattedTextField _mSWDI_CodingTimeInMilliseconds;
340    private javax.swing.JComboBox<String> _mSWDI_ExternalTurnout;
341    private javax.swing.JCheckBox _mSWDI_FeedbackDifferent;
342    private javax.swing.JCheckBox _mSWDI_GUICrossoverLeftHand;
343    private javax.swing.JCheckBox _mSWDI_GUITurnoutLeftHand;
344    private javax.swing.ButtonGroup _mSWDI_GUITurnoutType;
345    private javax.swing.JComboBox<String> _mSWDI_NormalInternalSensor;
346    private javax.swing.JLabel _mSWDI_NormalInternalSensorPrompt;
347    private javax.swing.JComboBox<String> _mSWDI_ReversedInternalSensor;
348    private javax.swing.JLabel _mSWDI_ReversedInternalSensorPrompt;
349    private javax.swing.JButton _mSaveAndClose;
350    private javax.swing.JRadioButton _mTurnout;
351    private javax.swing.JButton jButton2;
352    private javax.swing.JLabel jLabel19;
353    private javax.swing.JLabel jLabel2;
354    private javax.swing.JLabel jLabel3;
355    // End of variables declaration//GEN-END:variables
356}