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}