001package jmri.jmrit.operations.locations.tools; 002 003import java.awt.Dimension; 004import java.awt.GridBagLayout; 005 006import javax.swing.*; 007 008import jmri.jmrit.operations.OperationsFrame; 009import jmri.jmrit.operations.OperationsXml; 010import jmri.jmrit.operations.locations.Location; 011import jmri.jmrit.operations.locations.Track; 012import jmri.jmrit.operations.locations.gui.TrackEditFrame; 013import jmri.jmrit.operations.setup.Control; 014import jmri.jmrit.operations.setup.Setup; 015import jmri.util.swing.JmriJOptionPane; 016 017/** 018 * Frame that allows user to select alternate track and options. 019 * 020 * @author Daniel Boudreau Copyright (C) 2011, 2015 021 */ 022class AlternateTrackFrame extends OperationsFrame implements java.beans.PropertyChangeListener { 023 024 // combo boxes 025 JComboBox<Track> trackBox = new JComboBox<>(); 026 027 // radio buttons 028 // major buttons 029 JButton saveButton = new JButton(Bundle.getMessage("ButtonSave")); 030 031 Track _track; 032 033 public AlternateTrackFrame(TrackEditFrame tef) { 034 super(Bundle.getMessage("AlternateTrack")); 035 036 // the following code sets the frame's initial state 037 getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 038 039 _track = tef._track; 040 041 // load the panel 042 // row 2 043 JPanel pAlternate = new JPanel(); 044 pAlternate.setLayout(new GridBagLayout()); 045 pAlternate.setBorder(BorderFactory.createTitledBorder("")); 046 addItem(pAlternate, trackBox, 0, 0); 047 048 if (_track != null) { 049 updateTrackCombobox(); 050 _track.addPropertyChangeListener(this); 051 _track.getLocation().addPropertyChangeListener(this); 052 } 053 054 JPanel pControls = new JPanel(); 055 pControls.add(saveButton); 056 saveButton.setEnabled(_track != null); 057 058 // button action 059 addButtonAction(saveButton); 060 061 getContentPane().add(pAlternate); 062 getContentPane().add(pControls); 063 064 addHelpMenu("package.jmri.jmrit.operations.Operations_AlternateTrack", true); // NOI18N 065 066 initMinimumSize(new Dimension(Control.panelWidth400, Control.panelHeight200)); 067 } 068 069 private void updateTrackCombobox() { 070 _track.getLocation().updateComboBox(trackBox); 071 trackBox.removeItem(_track); // remove this track from consideration 072 trackBox.setSelectedItem(_track.getAlternateTrack()); 073 } 074 075 @Override 076 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 077 if (ae.getSource() == saveButton) { 078 // warn user that planned pickups and alternate track don't work 079 // together 080 if (trackBox.getSelectedItem() != null && _track.getIgnoreUsedLengthPercentage() > Track.IGNORE_0) { 081 JmriJOptionPane.showMessageDialog(null, Bundle.getMessage("PPWarningAlternate"), 082 Bundle.getMessage("PPWarningConfiguration"), 083 JmriJOptionPane.ERROR_MESSAGE); 084 } 085 _track.setAlternateTrack((Track) trackBox.getSelectedItem()); 086 OperationsXml.save(); 087 if (Setup.isCloseWindowOnSaveEnabled()) { 088 dispose(); 089 } 090 } 091 } 092 093 @Override 094 public void dispose() { 095 if (_track != null) { 096 _track.removePropertyChangeListener(this); 097 _track.getLocation().removePropertyChangeListener(this); 098 } 099 super.dispose(); 100 } 101 102 @Override 103 public void propertyChange(java.beans.PropertyChangeEvent e) { 104 if (Control.SHOW_PROPERTY) { 105 log.debug("Property change: ({}) old: ({}) new: ({})", e.getPropertyName(), e.getOldValue(), e 106 .getNewValue()); 107 } 108 if (e.getPropertyName().equals(Track.ALTERNATE_TRACK_CHANGED_PROPERTY) || 109 e.getPropertyName().equals(Location.TRACK_LISTLENGTH_CHANGED_PROPERTY)) { 110 updateTrackCombobox(); 111 } 112 } 113 114 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AlternateTrackFrame.class); 115}