001package jmri.jmrit.operations.locations.schedules.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.schedules.ScheduleEditFrame; 013import jmri.jmrit.operations.setup.Control; 014import jmri.jmrit.operations.setup.Setup; 015import jmri.util.swing.JmriJOptionPane; 016 017/** 018 * Frame used to edit alternate track selection and percentage of loads from 019 * staging. 020 * 021 * @author Daniel Boudreau Copyright (C) 2010, 2011, 2015 022 */ 023class ScheduleOptionsFrame extends OperationsFrame implements java.beans.PropertyChangeListener { 024 025 // text field 026 JTextField factorTextField = new JTextField(5); 027 028 // combo boxes 029 JComboBox<Track> trackBox = new JComboBox<>(); 030 031 // radio buttons 032 // major buttons 033 JButton saveButton = new JButton(Bundle.getMessage("ButtonSave")); 034 035 Track _track; 036 037 public ScheduleOptionsFrame(ScheduleEditFrame sef) { 038 super(Bundle.getMessage("MenuItemScheduleOptions")); 039 040 // the following code sets the frame's initial state 041 getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 042 043 _track = sef._track; 044 045 // load the panel 046 // row 1 047 JPanel pFactor = new JPanel(); 048 pFactor.setLayout(new GridBagLayout()); 049 pFactor.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("ScheduleFactor"))); 050 addItem(pFactor, factorTextField, 0, 0); 051 052 factorTextField.setToolTipText(Bundle.getMessage("TipScheduleFactor")); 053 factorTextField.setText(Integer.toString(_track.getReservationFactor())); 054 055 // row 2 056 JPanel pAlternate = new JPanel(); 057 pAlternate.setLayout(new GridBagLayout()); 058 pAlternate.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("AlternateTrack"))); 059 addItem(pAlternate, trackBox, 0, 0); 060 061 updateTrackCombobox(); 062 063 JPanel pControls = new JPanel(); 064 pControls.add(saveButton); 065 066 // button action 067 addButtonAction(saveButton); 068 069 getContentPane().add(pFactor); 070 getContentPane().add(pAlternate); 071 getContentPane().add(pControls); 072 073 _track.addPropertyChangeListener(this); 074 _track.getLocation().addPropertyChangeListener(this); 075 076 addHelpMenu("package.jmri.jmrit.operations.Operations_ControllingCarsToSpur", true); // NOI18N 077 078 initMinimumSize(new Dimension(Control.panelWidth400, Control.panelHeight200)); 079 080 } 081 082 @Override 083 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 084 if (ae.getSource() == saveButton) { 085 // confirm that factor is between 0 and 1000 086 try { 087 int factor = Integer.parseInt(factorTextField.getText()); 088 if (factor < 0 || factor > 1000) { 089 JmriJOptionPane.showMessageDialog(this, Bundle.getMessage("FactorMustBeNumber"), 090 Bundle.getMessage("ErrorFactor"), JmriJOptionPane.ERROR_MESSAGE); 091 return; 092 } 093 } catch (NumberFormatException e) { 094 JmriJOptionPane.showMessageDialog(this, Bundle.getMessage("FactorMustBeNumber"), 095 Bundle.getMessage("ErrorFactor"), JmriJOptionPane.ERROR_MESSAGE); 096 return; 097 } 098 _track.setReservationFactor(Integer.parseInt(factorTextField.getText())); 099 if (trackBox.getSelectedItem() != null && !trackBox.getSelectedItem().equals(Location.NONE)) { 100 _track.setAlternateTrack((Track) trackBox.getSelectedItem()); 101 } else { 102 _track.setAlternateTrack(null); 103 } 104 OperationsXml.save(); 105 if (Setup.isCloseWindowOnSaveEnabled()) { 106 dispose(); 107 } 108 } 109 } 110 111 private void updateTrackCombobox() { 112 _track.getLocation().updateComboBox(trackBox); 113 trackBox.removeItem(_track); // remove this track from consideration 114 trackBox.setSelectedItem(_track.getAlternateTrack()); 115 } 116 117 @Override 118 public void dispose() { 119 _track.removePropertyChangeListener(this); 120 _track.getLocation().removePropertyChangeListener(this); 121 super.dispose(); 122 } 123 124 @Override 125 public void propertyChange(java.beans.PropertyChangeEvent e) { 126 if (Control.SHOW_PROPERTY) { 127 log.debug("Property change: ({}) old: ({}) new: ({})", e.getPropertyName(), e.getOldValue(), e 128 .getNewValue()); 129 } 130 if (e.getPropertyName().equals(Track.ALTERNATE_TRACK_CHANGED_PROPERTY) || 131 e.getPropertyName().equals(Location.TRACK_LISTLENGTH_CHANGED_PROPERTY)) { 132 updateTrackCombobox(); 133 } 134 if (e.getPropertyName().equals(Track.TRACK_FACTOR_CHANGED_PROPERTY)) { 135 factorTextField.setText(Integer.toString(_track.getReservationFactor())); 136 } 137 } 138 139 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ScheduleOptionsFrame.class); 140 141}