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.Track; 011import jmri.jmrit.operations.setup.Control; 012import jmri.jmrit.operations.setup.Setup; 013 014/** 015 * @author Daniel Boudreau Copyright (C) 2025 016 */ 017class TrackPriorityFrame extends OperationsFrame implements java.beans.PropertyChangeListener { 018 019 JRadioButton priorityHigh = new JRadioButton(Bundle.getMessage("High")); 020 JRadioButton priorityMedium = new JRadioButton(Bundle.getMessage("Medium")); 021 JRadioButton priorityNormal = new JRadioButton(Bundle.getMessage("Normal")); 022 JRadioButton priorityLow = new JRadioButton(Bundle.getMessage("Low")); 023 024 // major buttons 025 JButton saveButton = new JButton(Bundle.getMessage("ButtonSave")); 026 027 protected Track _track; 028 029 public TrackPriorityFrame(Track track) { 030 super(Bundle.getMessage("MenuItemTrackPriority")); 031 _track = track; 032 initComponents(); 033 } 034 035 @Override 036 public void initComponents() { 037 if (_track == null) { 038 return; 039 } 040 // the following code sets the frame's initial state 041 getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 042 043 _track.addPropertyChangeListener(this); 044 045 // load the panel 046 JPanel p1 = new JPanel(); 047 p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS)); 048 JScrollPane p1Pane = new JScrollPane(p1); 049 p1Pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 050 p1Pane.setBorder(BorderFactory.createTitledBorder("")); 051 052 // row 1 053 JPanel pt = new JPanel(); 054 pt.setLayout(new BoxLayout(pt, BoxLayout.X_AXIS)); 055 pt.setMaximumSize(new Dimension(2000, 250)); 056 057 // row 1a 058 JPanel pTrackName = new JPanel(); 059 pTrackName.setLayout(new GridBagLayout()); 060 pTrackName.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Track"))); 061 addItem(pTrackName, new JLabel(_track.getName()), 0, 0); 062 063 // row 1b 064 JPanel pLocationName = new JPanel(); 065 pLocationName.setLayout(new GridBagLayout()); 066 pLocationName.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Location"))); 067 addItem(pLocationName, new JLabel(_track.getLocation().getName()), 0, 0); 068 069 pt.add(pTrackName); 070 pt.add(pLocationName); 071 072 // radio buttons 073 JPanel pRadioButtons = new JPanel(); 074 pRadioButtons.setLayout(new GridBagLayout()); 075 pRadioButtons.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("MenuItemTrackPriority"))); 076 addItem(pRadioButtons, priorityHigh, 0, 0); 077 addItem(pRadioButtons, priorityMedium, 1, 0); 078 addItem(pRadioButtons, priorityNormal, 2, 0); 079 addItem(pRadioButtons, priorityLow, 3, 0); 080 081 ButtonGroup group = new ButtonGroup(); 082 group.add(priorityHigh); 083 group.add(priorityMedium); 084 group.add(priorityNormal); 085 group.add(priorityLow); 086 087 updateRadioButtons(); 088 089 JPanel savePriority = new JPanel(); 090 savePriority.setLayout(new GridBagLayout()); 091 savePriority.setBorder(BorderFactory.createTitledBorder("")); 092 addItem(savePriority, saveButton, 0, 0); 093 addButtonAction(saveButton); 094 095 p1.add(pt); 096 p1.add(pRadioButtons); 097 p1.add(savePriority); 098 099 getContentPane().add(p1Pane); 100 101 // add help menu to window 102 addHelpMenu("package.jmri.jmrit.operations.Operations_TrackPriority", true); // NOI18N 103 104 initMinimumSize(new Dimension(Control.panelWidth600, Control.panelHeight200)); 105 } 106 107 @Override 108 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 109 if (ae.getSource() == saveButton) { 110 save(); 111 // save location file 112 OperationsXml.save(); 113 if (Setup.isCloseWindowOnSaveEnabled()) { 114 dispose(); 115 } 116 } 117 } 118 119 private void save() { 120 if (priorityHigh.isSelected()) { 121 _track.setTrackPriority(Track.PRIORITY_HIGH); 122 } else if (priorityMedium.isSelected()) { 123 _track.setTrackPriority(Track.PRIORITY_MEDIUM); 124 } else if (priorityLow.isSelected()) { 125 _track.setTrackPriority(Track.PRIORITY_LOW); 126 } else { 127 _track.setTrackPriority(Track.PRIORITY_NORMAL); 128 } 129 } 130 131 private void updateRadioButtons() { 132 priorityHigh.setSelected(_track.getTrackPriority().equals(Track.PRIORITY_HIGH)); 133 priorityMedium.setSelected(_track.getTrackPriority().equals(Track.PRIORITY_MEDIUM)); 134 priorityNormal.setSelected(_track.getTrackPriority().equals(Track.PRIORITY_NORMAL)); 135 priorityLow.setSelected(_track.getTrackPriority().equals(Track.PRIORITY_LOW)); 136 } 137 138 @Override 139 public void dispose() { 140 if (_track != null) { 141 _track.removePropertyChangeListener(this); 142 } 143 super.dispose(); 144 } 145 146 @Override 147 public void propertyChange(java.beans.PropertyChangeEvent e) { 148 if (Control.SHOW_PROPERTY) { 149 log.debug("Property change: ({}) old: ({}) new: ({})", e.getPropertyName(), e.getOldValue(), e 150 .getNewValue()); 151 } 152 if (e.getPropertyName().equals(Track.PRIORITY_CHANGED_PROPERTY)) { 153 updateRadioButtons(); 154 } 155 } 156 157 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(TrackPriorityFrame.class); 158}